BCH码(能纠正多个随机错误的循环码)
PS:課上講的也是編解碼流程,也沒有原理,網上也沒找到每一步的原理,想要了解設計思路還是需要去找一下原版的論文。
參考blog:
【1】【舉例子詳細分析】BCH碼(BCH code)
目錄
- 1. 伽羅華域和多項式
- 2. 提出背景和思路
- 3. 案例:為什么需要本原多項式
- 4. BCH碼編碼過程
- 5. BCH碼譯碼過程
1. 伽羅華域和多項式
??見之前的blog伽羅華域GF
2. 提出背景和思路
??奇偶校驗碼只能檢查出錯誤而不知道具體是哪里出錯。
??hamming碼只能糾正 1 bit 錯誤。
??在GF(2q)(2^q)(2q)中,用多項式表示對應的有限域中的數值,多項式又可表示成二進制bit流的形式,等于二進制bit流與符號之間的一一映射,同時二進制多項式加法和二進制的按位異或等同(二進制流所受的干擾可用加法表示),多項式乘法及其逆運算能夠實現多項式的恢復,本原多項式能保證逆運算結果具有唯一性。
??現假設待傳輸的消息用二進制流對應的m(x)m(x)m(x)表示,乘上一個編碼多項式p(x)p(x)p(x),傳輸過程收到干擾可表示為e(x)e(x)e(x),則接受到:c(x)=m(x)p(x)+e(x)c(x)=m(x) p(x)+e(x) c(x)=m(x)p(x)+e(x)如果接受端也知道p(x),那么就能得到m(x)m(x)m(x)和e(x)e(x)e(x)。
本原元→本原多項式:
3. 案例:為什么需要本原多項式
對于GF(24)(2^4)(24),有本原多項式p(x)=x2+x+1p(x)=x^{2}+x+1p(x)=x2+x+1
??m(x)m(x)m(x)是100110011001,而編碼多項式p(x)p(x)p(x)是110111011101,則m(x)?p(x)=1100101m(x)*p(x)=1100101m(x)?p(x)=1100101。若收到了干擾e(x)=0000010e(x)=0000010e(x)=0000010,則接受到110011111001111100111,
| 1000000 | 1000000 |
| 0100000 | 0100000 |
| 0010000 | 0010000 |
| 0001000 | 1100000 |
| 0000100 | 0110000 |
| 0000010 | 1110000 |
| 0000001 | 1010000 |
??從表中可看出,e(x)e(x)e(x)和所得余項一一對應,通過余項結果可找到對應的e(x)e(x)e(x)。如果采用p(x)=10001=101?101p(x)=10001=101*101p(x)=10001=101?101,1000000和0000100除以10001后余項均為1000000。
4. BCH碼編碼過程
??思想:一個本原多項式糾正一個錯誤,通過修正編碼多項式c(x)=m(x)Q(x)+e(x)c(x)=m(x) Q(x)+e(x) c(x)=m(x)Q(x)+e(x)令其中Q(x)=p(x)p3(x)p5(x)?p2t?1(x)Q(x)=p(x) p_{3}(x) p_{5}(x) \cdots p_{2 t-1}(x)Q(x)=p(x)p3?(x)p5?(x)?p2t?1?(x),p(x)是本原多項式,實現糾正多個錯誤。
??p2t?1(x)p_{2 t-1}(x)p2t?1?(x)的性質(a mod b=c,表明a除以b余數為c):
??以n=24?1=15n=2^{4}-1=15n=24?1=15, 糾錯數量t=3t=3t=3 的本原BCH碼為例,設α\alphaα為GF(24)(2^4)(24)的本原元,本原多項式為p(x)=x4+x+1p(x)=x^{4}+x+1p(x)=x4+x+1,那么Q(x)=p(x)p3(x)p5(x)Q(x)=p(x) p_{3}(x) p_{5}(x)Q(x)=p(x)p3?(x)p5?(x),現有p(x)=x4+x+1=(x?α)(x?α2)(x?α4)(x?α8)p(x)=x^{4}+x+1=(x-\alpha)(x-\alpha^2)(x-\alpha^4)(x-\alpha^8)p(x)=x4+x+1=(x?α)(x?α2)(x?α4)(x?α8),畫表得到其共軛根為α3,α6,α12,α9\alpha^{3}, \alpha^{6}, \alpha^{12}, \alpha^{9}α3,α6,α12,α9,故p3(x)=(x?α3)(x?α6)(x?α2)(x?α9)=x4+x3+x2+x+1p_{3}(x)=(x-\alpha^{3})\left(x-\alpha^{6}\right)\left(x-\alpha^{2}\right)\left(x-\alpha^{9}\right)=x^{4}+x^{3}+x^{2}+x+1p3?(x)=(x?α3)(x?α6)(x?α2)(x?α9)=x4+x3+x2+x+1,剩余兩根構成p5(x)=(x?α5)(x?α10)=x2+x+1p_{5}(x)=\left(x-\alpha^{5}\right)\left(x-\alpha^{10}\right)=x^{2}+x+1p5?(x)=(x?α5)(x?α10)=x2+x+1。此時g(x)=p(x)p3(x)p5(x)=x10+x8+x5+x4+x2+x+1g(x)=p(x) p_{3}(x) p_{5}(x)=x^{10}+x^{8}+x^{5}+x^{4}+x^{2}+x+1g(x)=p(x)p3?(x)p5?(x)=x10+x8+x5+x4+x2+x+1。
此時n=15,t=3,deg(g(x))= 10, k=n-deg=5,t=3,設計的碼距d=2t+1,實際碼距和設計碼距相等
PS:(以上推導過程為法一,適合做題不適合編程)
法二:上圖中極小多項式是x2q?1x^{2^q-1}x2q?1的因式分解結果,一個BCH碼的生成多項式也可由LCM[f1(x),f2(x),…,f2t(x)]LCM[f_1(x),f_2(x),…,f_{2t}(x)]LCM[f1?(x),f2?(x),…,f2t?(x)]給出,詳細可見參考文獻【1】
5. BCH碼譯碼過程
由于m(x)Q(x)m(x) Q(x)m(x)Q(x)以α1,α2,…,α2t\alpha^{1}, \alpha^{2}, \ldots, \alpha^{2 t}α1,α2,…,α2t為根。想要知道錯誤圖樣,需要知道在位置i是否發生錯誤。
定義e(x)=∑i=0n?1eixi=∑l=1γYlxile(x)={\sum_{i=0}^{n-1} e_{i} x^{i}}=\sum_{l=1}^{\gamma} Y_{l} x^{i_{l}}e(x)=∑i=0n?1?ei?xi=∑l=1γ?Yl?xil?,ili_{l}il?表示錯誤位置。
譯碼五步:
5.1 伴隨多項式的計算
法一:接收端知道Q(x)Q(x)Q(x),能得到對應的h(x)=xn+1Q(x)h(x)=\frac{x^n+1}{Q(x)}h(x)=Q(x)xn+1?,從而寫出H,即可計算s(x)
法二:
推導過程:
5.2 錯誤位置多項式系數的求解:
5.3 錯誤位置的確定
5.4 計算對應錯誤位置上的錯誤數值
5.5 得到e(x),輸出結果
總結
以上是生活随笔為你收集整理的BCH码(能纠正多个随机错误的循环码)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: openCV 中值滤波算法解析
- 下一篇: 使用Volley+OkHttp+Gson