線性分組碼之認識循環碼

循環碼字如其名,所有碼字都可以通過一個碼字的循環移位構成。介於其循環位移的特性,因此引入一種循環碼特有的表示方法

多項式表示法

對於碼字c(cn1,cn2c2,c1,c0)c(c_{n-1},c_{n-2}\cdots c_2,c_1,c_0)可以記爲
c(x)=cn1xn1+cn2xn1c1x1+c0 c(x)=c_{n-1}x^{n-1}+c_{n-2}x^{n-1}\cdots c_1 x^1+c_0

循環移位的特性體現在 左移一位等同於 xc(x)mod(xn+1)xc(x)\quad mod (x^n+1) 1
xc(x)=cn1xn+cn2xn1c1x2+c0x1=cn1xn+cn2xn1c1x2+c0x1+cn1+cn1=cn1(xn+1)+cn2xn1c1x2+c0x1+cn1 \begin{aligned} xc(x) &=c_{n-1}x^n+c_{n-2}x^{n-1}\cdots c_1x^2+c_0x^1 \\ &=c_{n-1}x^n+c_{n-2}x^{n-1}\cdots c_1x^2+c_0x^1+c_{n-1}+c_{n-1} \\ &=c_{n-1}(x^{n}+1)+c_{n-2}x^{n-1}\cdots c_1x^2+c_0x^1+c_{n-1} \end{aligned}

所以左移操作在多項式中可以記爲
c(i)(x)=[xic(x)]mod(xn+1) c^{(i)}(x)=[x^i c(x)]_{mod(x^n+1)}

碼字的循環位移是一種線性變換,左移變換矩陣如下
[01000001000000110000] \begin{bmatrix} 0&1&0&\cdots & 0 &0 \\ 0&0&1&\cdots &0&0 \\ \vdots & \vdots & \vdots &\ddots &\vdots &\vdots \\ 0&0&0&\cdots &0&1 \\ 1&0&0&\cdots &0&0 \\ \end{bmatrix}

循環碼作爲線性分組碼的一種,仍不失其同性,就是

生成矩陣/生成多項式

循環碼也遵循線性分組碼的計算方式
c=uG c=u \cdot G

其中c爲碼字,u爲信息位,G爲生成矩陣。
得益於循環碼的多項式表示方式,在這裏生成矩陣又有新的表現形式。
由於循環碼的碼字可以從一個碼字循環移位構成,因此我們不妨去在碼字集合中,除0外次數最低的碼字循環移位構成生成矩陣,如下所示
G=[111010001110100011101] G= \begin{bmatrix} 1&1&1&0&1&0&0 \\ 0&1&1&1&0&1&0 \\ 0&0&1&1&1&0&1 \\ \end{bmatrix}

這個最低次數的碼字對應的多項式記爲生成多項式2g(x),因而我們就可以把生成矩陣簡化爲生成多項式,同樣生成矩陣在生成多項式下表示爲
G=[x2g(x)x1g(x)x0g(x)] G= \begin{bmatrix} x^2 \cdot g(x) \\ x^1 \cdot g(x) \\ x^0 \cdot g(x) \\ \end{bmatrix}

性質

以下是生成多項式的幾點性質 雖然不知道有什麼用,但是考試考過了還是寫上吧,證明就算了

  1. g(x)的0次項爲0
  2. g(x)具有唯一性
  3. g(x)是(xn+1)的一個因子
  4. g(x)的次數是(n-k)次

系統循環碼

直白一點就是怎麼把非系統的循環碼生成矩陣化成系統的,當然最簡單的辦法就是做初等變換化成階梯矩陣,但是這個太費勁,下面介紹個快的,借用課本上的說明:
如果要構成系統碼,那麼碼字最左k位一定k位信息位,然後再是r位檢校位,所以碼字構成應爲
c(x)=uk1xn1+uk2xn2k0xnk+r(x)=(uk1xk1+uk2xk2+k0)xnk+r(x) \begin{aligned} c(x)&=u_{k-1}x^{n-1}+u_{k-2}x^{n-2}\cdots k_0x^{n-k} + r(x) \\ &=(u_{k-1}x^{k-1}+u_{k-2}x^{k-2}+\cdots k_0)x^{n-k}+r(x) \end{aligned}

根據循環碼的特性我們又知道,每一個碼字都是g(x)循環位移的產物,因此有
c(x)=0modg(x)u(x)xnkmodg(x)+r(x)=0 c(x) =0 \quad mod g(x) \\ {u(x)x^{n-k}}_{mod g(x)} +r(x) =0

r(x)次數小於g(x)次數,所以求餘後不變,所以碼字的監督位就是
r(x)=u(x)xnkmodg(x) r(x)= {u(x)x^{n-k}}_{mod g(x)}

考慮到生成多項式形式下的生成矩陣,不難得出循環碼的系統碼生成矩陣
G=[xn1+xn1modg(x)xn2+xn2modg(x)xnk+xnkmodg(x)] G= \begin{bmatrix} x^{n-1}+{x^{n-1}}_{mod g(x)} \\ x^{n-2}+{x^{n-2}}_{mod g(x)} \\ \vdots \\ x^{n-k} +{x^{n-k}}_{mod g(x)} \\ \end{bmatrix}

譯碼

在上文中,既然已經得到了系統碼的生成矩陣,就可以用檢校矩陣去檢驗碼字

此外,根據生成多項式g(x)的性質3,我們知道存在非零多項式h(x)有
g(x)h(x)=xn1 g(x)h(x) = x^n-1

該非零多項式就記爲循環碼的檢驗多項式。
從上面的等式中我們可以很明顯的看到
c(x)h(x)=u(x)g(x)h(x)=0(modxn1) c(x)h(x) = u(x)g(x)h(x) = 0 \quad (mod\quad x^n-1)

所以利用這一關係可以在接受端檢驗是否有錯誤發生。因爲如果在傳輸過程中有錯誤e產生,那麼r(x)=c(x)+e(x)r(x)=c(x)+e(x),故
r(x)h(x)=u(x)g(x)h(x)+e(x)h(x)=e(x)h(x)(modxn1) r(x)h(x)=u(x)g(x)h(x)+e(x)h(x) = e(x)h(x) \quad (mod\quad x^n-1)

就會產生一個非零伴隨式。假設此時e爲單錯誤圖樣,寫爲多項式表示e(x)=xpose(x)= x^{pos},所以伴隨式的多項式表示
S(x)=xposh(x) S(x)=x^{pos} \cdot h(x)

根據上文所述,伴隨式就是h(x)的循環移位,移位次數就是發生錯誤的位置

循環碼設計

循環碼設計見:
BCH碼設計
RS碼設計

有生之年,什麼時候想起來再更


  1. 此處求餘運算爲多項式除法,就和數值除法差不多,暫不做介紹 ↩︎

  2. 這裏只是籠統的介紹生成多項式的作用,根據這個定義是沒法設計循環碼的,有關循環碼的設計將在其他文章中提及 ↩︎

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章