第五章 利用碼字元(Code Wode)間的相關性解碼
6.2 各個方法的硬體設計考量
在前面一節裡,我們已經看到了各個不同方法的解碼效能,從模擬 結果中可以明顯的看出 MAP 演算法擁有最好的解碼能力,Chase 演算法 延伸的解碼方法同樣有不錯的解碼效果,而最後提出的碼字元相關解碼 的能力是較差的。而在這一節中,我們將對各個方法在實現時所需要的 硬體做考量,以了解各個演算法實現上的難度,也藉此能更加了解各種 演算法所適合的領域。
6.2.1 以格子圖為觀念的解碼運算需求
在第三章裡介紹的 MAP 演算法、Log-MAP 演算法和 MAX-Log-MAP 演 算法都是以格子圖為觀念的解碼方法,此方法受到格子圖的影響,必須 要對格子圖中的各個狀態(state)做運算。因此,隨著編碼的不同,其 狀態數量也不相同,而在區塊 eBCH(n,k,d)碼中,其狀態數就有 種,因此最少的狀態數也有 個,而若是採用高碼率(Code rate)的 編碼方法,則其狀態數也會跟者增加,以 IEEE802.16a 為例,其狀態度 最多可以達到 個,跟一般傳統的迴旋碼(Convolutional Code)狀 態數目相差許多。此外,區塊 eBCH 碼的解碼是以一個區塊一個區塊來 做解碼,故其一個編碼只會有 n 的長度不會像傳統迴旋碼一樣有相當長 的連續長度,所以利用此種方式來做區塊 eBCH 解碼是較為沒有效率而 且複雜度很高。
2n−k−1
8 23 =
64 26 =
由於Log-MAP演算法和MAP演算法的效能是相同的,而Log-MAP演算 法明顯降低了許多複雜度,因此本論文只對Log-MAP和MAX- Log_MAP演 算法所需的運算要求做考量。首先以Log-MAP演算法來做考量,在對一 個 eBCH(n1,k1,d1) × eBCH(n2,k2,d2) 的 乘 積 碼做 解 碼時, 需 要對各 別 的 eBCH(n,k)碼計算α、β和γ 三個值,在計算γ 值時,需要用到
次的常數乘法, 次的變數乘法以及
n n 4 2 2× = n
n 2
2× = 2×n=2n次的加法。而計算 α 、β值時,分別需要2×n×2n−k−1次比較,6×n×2n−k−1次的加法。最後在
計算α、β和γ 所給予的額外資訊值時,還需要再做 次比較,
次的加法。故在解一個eBCH(n,k,d)編碼時,以Log-MAP
演算法解碼需要 次的比較, 次的加法, 次
的常數乘法以及 次的變數乘法。而若是以MAX-Log-MAP演算法來解 碼,則在計算
的常數乘法以及 次的變數乘法。若將演算法改為MAX-Log-MAP演算 法時,再減去查表動作的影響後,做兩個不同方向的資訊運算總共所需 MAX-Log-MAP 演算法都是相同的數量。在將其數量總合除於我們總共得 到的資訊位元量 ,則最後可整理出在一次的縱橫遞迴運算中每個位
演算法 比較運算 加法運算 表(6.2-1) Log-MAP 演算法和 MAX-Log-MAP 演算法
實現所需的單位元運算量比較表
6.2.2 卻斯演算法延伸軟式輸出的解碼運算需求
在第四章介紹了另一個解碼的方法,其是以最大相似度以及卻斯演 算法相互應用之下來求得解碼所需要的資訊,其演算過程中會應用到硬 式解碼器(hard-decoder)來幫助解碼。就如 4.1 節所提到的一樣,我們 可採用不同的硬式解碼器來幫助解碼,其解碼效能並不會受到影響,主 要不同的地方再於其可攜性。但以 IEEE802.16a 為例,其所用到的最大 編碼為 eBCH(64,57,4),其碼長度還不會太長;而且實際應用到的編碼 如表(2.2-1)所示,只有 3 種不同的 eBCH 編碼。因此建議採用症狀解碼 的方法,只要利用隨機存取記憶體(RAM)建立一個可更改內容的編碼 表,再以此表格來做查表解碼即可省去許多硬體複雜度,而其中也不會 有太多運算的產生。以一個 eBCH(n,k,d)的症狀硬式解碼器為例,其中 所需要的運算為n×
(
n−k)
個互斥運算,以及 個比較運算。 n而在卻斯演算法所延伸的解碼過程中,在運算 eBCH(n,k,d)的歐基 理德距離時,需要用到 個加法以及 個變數乘法。在卻斯演算法裡,
在得到各個樣本的歐基理德距離後,還需要計算軟式輸出值,在進
6.2.3 碼字元間相關性的解碼運算需求
第五章所介紹的碼字元間相關性解碼方法所需要的硬體需求是最 少的,其只利用了簡單的比較和互斥運算即可求得解碼所需要的額外資 訊,而藉此交互傳遞訊息來加以解碼。
在此解碼方法中,同樣會用到一個隨機存取記憶體(RAM)做為不同 編碼的解碼表,此記憶體將視解碼需要而輸入不同 eBCH 編碼的同步位 元矩陣值,藉此來判斷是否進行互斥運算。如之前所說的,在第二章所 提到的 IEEE802.16a 規格下,其所使用的編碼方法不會太多,同時也不 會有高長度的編碼,故此方法所需要的記憶體不會太大。
在運算過程中,如第五章裡所提到的,此方法可以分為兩個部分,
一個是先行計算位於同位檢查矩陣中同一列中裡所有 1 值對應的位元做 運算的結果,另一部分則是在針對每一個位元做額外資訊的運算。在解 eBCH(n,k,d)碼時,第一個部分需花費2×n×
(
n−k)
次的比較以及次的互斥運算;第二個部分則需要花費
(
n k)
n× −
(
n k)
n× −
×
3 次的比較, 次的互 斥運算以及 次的變號運算,而變號運算我們在此為了方便比較,將其 當做加法運算來計量。故在解一個方同裡n
n n
2個eBCH(n1,k1,d1)碼的動作 裡,總共會需要5×n1n2×
(
n1−k1)
次的比較,n1n2×(
n1−k1)
+n1n2的互斥運算 和 次的加法運算。若是我們採用本身的遞迴處理來加快每個遞迴所 得到的效果時,則運算量將乘上自身遞迴的次數。而在解乘積碼時,其 資料的傳遞是較為直接的,而不需要做另外的處理,因此利用此演算法 所需要的每位元運算量將可列出如表(6.2-3)所示:2 1n n
自身遞迴
處理次數 互斥運算 比較運算 加法 運算
常數 乘法運算
變數 乘法運算 無遞迴處理
( (
n1−k1) (
+ n2 −k2) )
+2 5( (
n1−k1) (
+ n2−k2) )
2 0 0 遞迴處理 3 次 3( (
n1−k1) (
+ n2−k2) )
+6 15( (
n1−k1) (
+ n2−k2) )
6 0 0表(6.2-3) 以碼字元間相關解碼演算法在不同自身 遞迴處理次數下的每位元運算需求表
6.2.4 三種方法的分析與比較
在了解了各別演算法所需要的每位元運算量,我們可以看出格子圖 (Trellis)觀念延伸出的演算法由於受到狀態數量的影響而需要龐大的 運算量。而在卻斯演算法中,也會因為測試樣本數量的多寡而使得運算 數量增加不少,只有第五章所提出的方法能以最少的運算量來進行解 碼,當相對的其需要附出效能較差的代價。表(6.2-4)針對我們所模擬 的兩種乘積碼 eBCH(32,26)×eBCH(32,26)以及 eBCH(32,26)×eBCH(16,11) 計算出得到每個位元所需要的資訊所需要的運算量。
編碼 演算法 互斥
運算 比較
運算 加法
運算 常數乘
法運算 變數乘 法運算 MAX-Log-MAP 0 480 1064.28 8 4
Log-MAP 0 480 584.28 8 4 Chase(p=2) 44.75 18.38 20 4 8 Chase(p=4) 182 67.5 68 4 32 碼
( 字元相關解碼
無自身遞迴) 13 55 2 0 0 乘 積 碼
eBCH(32,26)
×
eBCH(16,11)
碼字元相關解碼
(自身遞迴 3 次) 39 165 6 0 0 MAX-Log-MAP 0 640 1416.56 8 4 Log-MAP 0 640 776.56 8 4 Chase(p=2) 48.62 18.31 20 4 8 Chase(p=4) 196.92 67.23 68 4 32 碼字元相關解碼
無自身遞迴)
( 14 60 2 0 0
乘 積 碼 eBCH(32,26)
×
eBCH(32,26)
碼字元相關解碼
(自身遞迴 3 次) 42 180 6 0 0 表(6.2-4) 不同解碼演算法對乘積碼 eBCH(32,26)×eBCH(16,11)及乘積
碼 eBCH(32,26)×eBCH(32,26)的每位元運算需求表
從表(6.2-4)中可看出,當不同的編碼進行解碼動作時,由於格子 圖觀念解碼會受到編碼狀態數的影響,故其值會隨組成碼的編碼長度而 大幅增加。卻斯演算法延伸的軟式解碼則是以測試樣本數為影響運算量 的主要原因,因此在不同編碼下的運算量不會相差太多,而且其值和 MAP 演算法相比下降許多,只要採用的 p 值不要太大,其所需的運算量就不 會太大。而第五章所介紹的利用碼字元相關性解碼方法則確實只需要相 當少的運算量即可達到解碼的目的,其主要的運算量在於比較運算,而 加法運算相當的少,至於乘法則是完全不需要,因此此方法相當的適合 用在低硬體需求的應用。