基于DSP處理器的UMTS Turbo MAP 解碼器
2 LLR的實現(xiàn)
對于UMTS Turbo解碼器,MAP算法的LLR可由式(1),式(2)和式(3)計算得到。式(2)和式(3)分別說明了通過α、γ和β來計算位“1”和位“0”的APP值的關(guān)系。這些MAP LLR的關(guān)系如圖5(a)和圖5(b)所示。
圖5(a) 位“1”的 MAP關(guān)系,(b)位“0”的MAP關(guān)系
對于兩個相同的輸入和輸出,位“1”和位“0”的MAP關(guān)系并不相似(極少情況下狀態(tài)被交換),而這類不對稱流程使我們無法利用Blackfin中計算單元和加載/存儲單元的最大帶寬。例如,圖5(a)和圖5(b)中標示的部分,我們考慮與式(2)和式(3)的前兩項相對應(yīng)的頂端蝶形運算。
圖6 在Blackfin ALU上的LLR計算
由于Blackfin只需要三個周期就能完成四個16位加法和兩個16位求最大值操作,要平衡加載/存儲(DAG)單元的帶寬和計算單元,只能用三個周期來加載數(shù)據(jù)。假設(shè)三個寄存器在三個周期中分別加載了α0|α0, α1|α1和 β4|β0,如圖6所示。那么通過16位加法操作,我們可以在兩個周期中計算出α0+β4|α0+β0和α1+β4|α1+β0。但是,MAX 操作要求仿照式(3)從反方向由α1+β0|α1+β4求得輸出的第二項。Blackfin的16位加法指令所支持的交叉選項(CO)選項可用來換回加法的中間輸出,如圖6所示。如果沒有交叉選項(CO),我們將耗費四個周期來計算四次加法,而不是兩個。采用(CO)選項換回之后,執(zhí)行最大向量操作(一個周期)即可得到兩個Log-Max 輸出。這一部分程序代碼如圖7所示。有了(CO)選項,就可以在18個Blackfin指令周期內(nèi)計算某一級上的LLR值。
總結(jié)
本文介紹了在ADI BF5xx處理器上Turbo MAP解碼器的高效實現(xiàn),詳細說明了基于窗口的存儲空間降低方法,并利用16位加/減和16位求最大值向量指令以及交叉選項(CO),高效地在Blackfin嵌入式處理器上實現(xiàn)了Turbo MAP解碼。該方法耗費大約36個BF5xx周期,即可計算得到一個LLR輸出。同時,利用約50kB的BF5xx存儲空間,完成了UMTS Turbo MAP解碼算法的數(shù)據(jù)和程序存儲。
評論