2021年6月27日 星期日

[編碼理論] LDPC decode (C++)

 編碼理論的期末作業其中一題是

Continued from the very end of our handout’s Page CT.087.1, perform one more iteration of BP (including one upward (i.e. variable-to-check) BP and one downward (i.e. check-to-variable) BP). Then compute the soft decision (i.e. Prob(bit=1)) for all of the eight variable bits.

原本打算拿起計算機開始算,但算完第一個機率後,決定還是寫個程式來把答案直接印出來,所以底下的程式真的是亂寫+不知道有沒有符合理論,也沒特別抓蟲了


我們先來看LDPC的解碼流程: 


Check Node Update :
求出藍色箭頭的值(v->c),第一次是使用bit本身的機率,最後會在介紹有其他機率之後怎麼求
Bit Node Update :
由剛剛藍色箭頭(這邊變紅色了) 來求出紫色箭頭的值(每個CheckNode -> Variable Node 的機率,底下是 C1-->V2的示意圖)
其中 




Termination:

剛剛上張圖中的P2 計算後會得到0.3188, 當然依序就可以求出其他值(所有的紫色箭頭),結果會如下圖所示,其中v2最後我們要計算的soft decode value是 0.3188 * 0.4057 * 0.6308 (這邊*是指p * q / ((p * q) + ((1 - p) * (1 - q)))

syndrome 的值是將decode 的值做+運算,當syndrome 都是0的時候就不需要再iteration
那這邊的syndrome 是0101,就必須繼續做iteration


要做第二次的iteration就可以來update check node,做法如下


將所有藍色箭頭更新完就能得到下圖,就是我們的check node update



那如果透過執行程式 我們能很快知道 iteration2的結果,這份作業是要我們完成iteration 3,原本算完一個值我就亂了,只好寫個簡單的程式碼 😂

>>>>>>>>>>>>>>iteration 2
[Check node update]
v2 -> c1: 0.5385
v4 -> c1: 0.7592
v5 -> c1: 0.8241
v8 -> c1: 0.109
v1 -> c2: 0.4301
v2 -> c2: 0.4443
v3 -> c2: 0.6683
v6 -> c2: 0.9173
v3 -> c3: 0.7918
v6 -> c3: 0.9447
v7 -> c3: 0.6835
v8 -> c3: 0.07988
v1 -> c4: 0.4044
v4 -> c4: 0.7409
v5 -> c4: 0.8118
v7 -> c4: 0.4902
[Bit Node update]
c1 -> v2: 0.3686
c1 -> v4: 0.4805
c1 -> v5: 0.4844
c1 -> v8: 0.5129
c2 -> v1: 0.4843
c2 -> v2: 0.4804
c2 -> v3: 0.5065
c2 -> v6: 0.5026
c3 -> v3: 0.3628
c3 -> v6: 0.41
c3 -> v7: 0.2819
c3 -> v8: 0.5953
c4 -> v1: 0.4971
c4 -> v4: 0.5012
c4 -> v5: 0.5009
c4 -> v7: 0.4713
[Termination]
v1: 0.3183
v2: 0.4797
v3: 0.7221
v4: 0.7856
v5: 0.8423
v6: 0.9305
v7: 0.4993
v8: 0.0975


[Code]

其中帶入參數有







沒有留言:

張貼留言

注意:只有此網誌的成員可以留言。