實驗單元 14 LDPC
1.實驗目的
學習如何使用邏輯分析儀。
瞭解 Low Density Parity Check Codes 的設計原理及應用。
熟悉 FPGA 設計程序。
學習如何將 LDPC Decoder 硬體實現在 FPGA 板上。
學習如何在 FPGA 板上測量及測試實驗結果。
2.實驗器材
邏輯分析儀,Xilinx 板,電源供應器,電路線等。
3.實驗原理
LDPC code(Low Density Parity Check code)是由 Gallagher 在 1962 年於其 博士論文所發表,只不過當時由於 VLSI 技術尚未成熟,所以逐漸被人們所遺忘,
但在 90 年代後由於 VLSI 技術的快速發展 LDPC code 又逐漸的被人們所廣為討 論。事實上 LDPC 是就是 block code,只不過它的 parity-check matrix 中的’1’非 常的少,這一點大概也可以由它的名稱中猜想的到。LDPC code 與 turbo code 一 樣均可以使其 Data rate 在 BER≈10−5這個條件下接近 Shannon bound,而且 LDPC 還有另一個優點就是它的解碼器複雜度要比 turbo code 少的多。
(1) Message Passing Concept:
接下來我們以一個簡單的例子來說明 message passing 這個非常有用的觀 念。假設有一群士兵排成一列,現在我們想要知道所有士兵的數目?我們利用以 下的規則:當你從某一側鄰兵處得知一個數目時,將這個數目加1並且將這個新 的數目告知另一側的鄰兵,以此類推。
從這個規則可以知道當某一個士兵接收到一個數字(假設為 n)時,這個數 字告訴他一個訊息說現在有 n 個士兵在他的左側或右側。
我們以圖解來說明整個演算法的觀念:一開始每個士兵都知道至少有一個士 兵(就是他自己),這個訊息我們稱為 intrinsic information。
1 1 1 1 1 1
< 圖一 > 圓圈代表士兵及一個 local rule(執行加 1 的動作)
接下來最左邊或最右邊的的士兵將這個 1 的訊息告知鄰兵,而該鄰兵接收到 這個的訊息時將其再加 1 後在告知下一個鄰兵。此時如<圖二>我們會看到(以 左二士兵為例)其左邊會進入一個訊息為 1,右邊會進入一個訊息為 4。這代表 他接受到一個訊息為:在你的左邊有 1 個士兵,另一個訊息為在你的右邊有 4 個士兵。這兩個訊息我們稱之為 extrinsic information。
1 1 1 1 1
1 5
2 4
3 3
4 2
5 1
< 圖二 > extrinsic information flow
接下來每個士兵就會知道到底有多少個士兵在這一整排中。以左二士兵為 例,[所有的士兵是數目]就等於[左邊鄰兵告訴他的數目加上右邊鄰兵告訴他的數 目]在加上[自己]。這句話可以簡寫為
overall information = extrinsic information + intrinsic information。
1 1
1 1 1
1
5 4 3 2 1
6 6 6 6 6 6
< 圖三 > overall information flow
從以上的例子知道,我們可以把一個比較複雜的問題拆解成一些較小的問題
(i.e. local rule),而每個小問題所需要的計算複雜度也相對的小許多,接下來在 經過彼此之間消息的傳遞就能使整個問題解決。LDPC code 的解碼器就是利用這 種 local rule 彼此之間消息互相傳遞的機制來達到解碼且大幅降低系統硬體計算 複雜度。
(2) Tanner Graph:
為了要利用 message passing 的觀念來幫助解碼,我們首先就要將解碼器拆解 成一些 local rule 和訊息傳遞的路徑,這個可以利用 Tanner graph 來達成。我們以 一個簡單的例子來說明 Tanner graph:
Generator matrix
=
1 0 1 0 0
1 1 0 1 0
0 1 0 0 1 G
Parity-Check matrix
=
1 0 1 1 0
0 1 0 1
H 1 Local rule A
Local rule B 1 2 3 4 5
由給定的 parity-check matrix 我們可知道該解碼器可以拆解成兩個 local rules 和五個 variables,如圖四。
variable 5
A B
1 2 3 4
< 圖四 > Tanner graph
其中 local rule A 及 B 稱為 agent node,variables 稱為 variable node,而其間的 連接線就稱為 branch。
(3) Sum Product Algorithm:
當我們成功的將解碼器表示成 Tanner graph(一些 local rules 和 variables 的結 合)後,接下來就要利用 sum product algorithm 來計算我們所需要的 extrinsic information(或 extrinsic probability)及 overall information(或 overall probability)。
Agent node:
假設 transmitter 端為 BPSK modulation 且通道為 AWGN,則當 receiver 端收 到一個訊息 y 時,則我們很容易可以計算出這個 y 為+1或−1的機率。我們以
為例來說明,如圖五:
3 0
2
1⊕m ⊕m =
m
我們可以知道在這個 Local rule 下合法的字碼只有四個。
m1 m2 m3
11 10
P
P
21 20
P
P
31 30
P P
< 圖五 >
m 1 m 2 m 3 Probability
0 0 0 P10P20P30 =PⅠ
1 0 1 P11P20P31= PⅢ
Group withm2 =0 0 1 1 P10P21P31=PⅡ
1 1 0 P11P21P30 =PⅣ
Group withm2 =1
< 表一 > 合法字碼與機率
此時定義(overall probability with m2 =0)=P10P20P30+P11P20P31 (extrinsic probability with m2 =0)=P10P30 +P11P31
由上列數學式可知(overall probability with )為 sum 具有 的 合法字碼之機率值,而個別合法字碼的機率值為 product 該合法字碼內所有 symbol 的機率,因此稱為 Sum-Product Algorithm。
2 =0
m m2 =0
若以 Likelihood ratio 來表示 overall probability 及 extrinsic probability,則為下列 數學式:
Overall LR
Ⅲ
Ⅰ
Ⅳ
Ⅱ
P P
P P m
m
+
= +
=
= 0 1
2 2
Extrinsic LR
1 3
1 3 31 11 30 10
30 11 31 10 2
2
1 0
1
Λ Λ +
Λ +
= Λ +
= +
=
=
P P P P
P P P P m
m ,其中
10 11 1 30 31
3 ,
P P P
P Λ =
= Λ
其他(with m1或m3)依此類推。
Variable node:
我們以 m1 =m2 =m3為例子說明。
m1 m2 m3
11 10
P
P
21 20
P
P
31 30
P P
< 圖六 >
m1 m2 m3
Probability 0 0 0
P10P20P30one group 1 1 1
P11P21P31another group
< 表二 >
因為在同一個 variable node 中,該 symbol 不是 0 就是 1,所以進入 variable node 的三個 path 的合法組合為 000 或 111。
定義(extrinsic probability with m2 =0)=P10P30 若以 Likelihood ratio 來表示:
Extrinsic LR 1 3
30 10
31 11 2
2
0
1 =ΛΛ
⋅
= ⋅
=
=
P P
P P m
m
(4) Iterative Decoding:
接下來我們以之前的 parity-check matrix 來解釋 iterative decoding 的工作原 理。(注意:當然這並不是一個 LDPC code,只是為了方便解釋)。
假設現在 receiver 端收到一組字碼 且其相對應的 likelihood ratio 分別為
,
1 2 3 4 5
c c c c c
1 =2
Λ 4
1
2 =
Λ ,Λ3 =2,Λ4 =2,
4 1
5 =
Λ 。若我們直接就對收到的 likelihood ratio 作判斷,則我們會以為收到的字碼為 10110,但是這是一個不合法的字碼。
A B
1=2
Λ 4
1
2 =
Λ Λ3=2 Λ4 =2
4 1
5 = Λ 4
1 4 1
4 2 1
2
2
< 圖七 > First round:Up 如圖七所示將 likelihood ratio 上傳。
A B
1 =2
Λ 4
1
2 =
Λ Λ3 =2 Λ4 =2
4 1
5 = Λ
a a a
b a
c
< 圖八 > First round:Down
接下來利用 agent node 計算 extrinsic probability 的方法將其計算出。所以
2 3 14 2 1
14
2 =
⋅ +
= +
a ,
5 4 2 2 1
2
2 =
⋅ +
= +
b ,
17 8 14 14 1
14 14
⋅ = +
= +
c 。最後我們可以知道 first
round 的 overall LR 分別為 overall LR(m1) 2 3 1
2
3⋅ = ⇒
=
overall LR(m2) 0 10
3 4 1 2 3 5
4⋅ ⋅ = ⇒
=
overall LR(m3) 0 17 2 16 17
8 ⋅ = ⇒
=
overall LR(m4) 2 3 1 2
3⋅ = ⇒
=
overall LR(m5) 0 8 3 4 1 2
3⋅ = ⇒
=
現就字碼就變成了 10010 為一個合法的字碼。
A
2
B
1=2
Λ 4
1
2 =
Λ Λ3=2 Λ4 =2
4 1
5 = Λ 4 2 1
2
d e
< 圖九 > Second round:Up
但是因為 iterative decoding 不一定在 first round 就會收斂,所以我們進行 second round 以確認是否收斂,如圖九。
8 3 4 1 2 3⋅ =
=
d ,
5 1 4 1 5 4⋅ =
=
e 。
A B
1 =2
Λ 4
1
2 =
Λ Λ3 =2 Λ4 =2
4 1
5 = Λ a
f b f h
g
< 圖十 > Second round:Down
接下來還是利用 agent node 計算 extrinsic probability 的方法將其計算出。所
以 14
19 38 2 1
38
2 =
⋅ +
= +
f ,
7 3 14 15 1
14 15
⋅ = +
= +
g ,
15 2 11
1 7
1 2
5 +
h= =
+ ⋅ 。所以 second round 的 overall LR 分別為
overall LR(m1) 1 7 2 19 14
19⋅ = ⇒
overall LR(m2) 0 10
3 4 1 2 3 5
4⋅ ⋅ = ⇒
=
overall LR(m3) 0 7 2 6 7
3⋅ = ⇒
=
overall LR(m4) 1 7 2 19 14
19⋅ = ⇒
=
overall LR(m5) 0 28 11 4 1 7
11⋅ = ⇒
=
與 first round 相同,所以收斂。
4.實驗步驟
【步驟一】
乘法器與除法器:
仔細檢視實驗原理中利用 sum-product algorithm 來進行 iterative decoding 的 過程中並沒有牽扯到負數運算(對乘法器或除法器而言)及 divide by zero(對除 法器而言),因此所需要的乘法器與除法器就相當簡單。
在此定義我們的數字表示方式為 xxxx_ffffff,其中 x 表示整數部份 f 表示小 數部分,例如 0001_100000 就表示 (1×2 )0 + ×(1 2 )−1 =1.5。
根據此數字表示方式實作乘法器與除法器電路,需注意的一點是乘法器與除 法器的輸入輸出均需滿足該數字表示法。
multiplier 10
10 10
Output C
Input A Input B
divider 10
10 10
quotient
dividend divisor 乘法器與除法器電路簡圖
0 0 iteration
1 => quotient=0
temp_divisor 000.0000
011.0000
0 => quotient=1
010.0000
00 dividend => quotient=1 001.0000
001.0000 000.0000
000 => quotient=0
000.0000 000.0000
01.10
2
3 4
11.0000 10.0000
100.0000 > dividend 10.0000 < dividend
1.0000 <
.1000 > dividend
Shift and Subtract operation of divider
乘法器的電路實作較簡單,我們僅列出實作除法器的 Shift and Subtract 運算 流程圖來幫助設計。以上舉 3/2=1.5 來當範例說明(在此例中整數與小數分別有 有 I 及 F 各位元):將 dividend 之前補 I-1 個 0,之後補 F 個 0,而 divisor 之後補 I+F-1 個 0。如上所示將 divisor 逐次往後 shift 一個位元與 dividend 作比較,如果 divisor 大於 dividend,則輸出 0;反之則輸出 1,並將 dividend 減去 divisor 以作 為下一次比較之用。
必須確定所實作出的乘法器與除法器在其可表示的數字精確度內完全正 確,才能進行步驟二。因此在 LDPC 實驗的第一個星期所需要做的工作就是驗證
所設計出的乘法器及除法器是否有正確動作?任選幾組輸入值完成下表。
乘法器
Input A Input B Output C
除法器
Dividend Divisor Quotient
附註:利用電源供應器產生出 3.3 伏特的電壓作為 logic one,ground 為 logic zero,
乘法器與除法器得輸入值即可由此提供。另外輸出接到邏輯分析儀中讀取用以完 成上表。
【步驟二】Iterative Decoder
Reg Reg Reg Reg Reg Reg
multiplier multiplier
multiplier multiplier multiplier multiplier multiplier
Local rule A Local rule B
decision decision decision decision decision
preprocess Digital error
Data source Iterative decoder circuit
步驟二中直接實現實驗原理中所提供的 Generator matrix 與 Parity check matrix 之 iterative decoder 架構,其架構圖如上。其中 preprocess 電路包含了 encoder,digital noise channel,及 received codeword to LR 等電路。其中 received codeword to LR 電路簡而言之就是指以下的對應方式。
0 1 0000.010000 4
1 2 0010.000000
⇒ =
⇒ =
將 message 與 digital noise 分別設定為 100 及 00100,此即對應Λ1 =2,
4 1
2 =
Λ ,Λ3 =2,Λ4 =2,
4 1
5 =
Λ 。接著由邏輯分析儀上觀察是否如實驗原理
般可以成功將錯誤解回,並將邏輯分析儀上所得之圖附於報告中。
附註:將實驗一所給予的 rst_gen.v 檔應用到 LDPC 的電路中,用來通知邏輯分 析儀何時該抓取資料。
【邏輯分析儀圖表】
5.問題與討論
(1) 所實作出的除法器與乘法器電路其 gate count 有幾個?是否有其他方式可以 把電路簡化?(Hint:例如將 LR 變成 LLR,那電路架構會便如何?)
6.參考資料
1. 清華大學通訊工程研究所 COM5125 數位通訊課程 Lecture 20:LDPC Coding and Graphs,網址:http://ws.ee.nthu.edu.tw/~jtchen/。
2. Constrained Coding and Soft Iterative Decoding,John L. Fan,Stanford University and Iospan Wireless。
3. Communication System 4th ed,Haykin。
4. Factor Graphs and the Sum-Product Algorithm,IEEE Transactions on Information theory,VOL. 47,NO.2,February,2001。