循環碼字如其名,所有碼字都可以通過一個碼字的循環移位構成。介於其循環位移的特性,因此引入一種循環碼特有的表示方法
多項式表示法
對於碼字c(cn−1,cn−2⋯c2,c1,c0)可以記爲
c(x)=cn−1xn−1+cn−2xn−1⋯c1x1+c0
循環移位的特性體現在 左移一位等同於 xc(x)mod(xn+1)
xc(x)=cn−1xn+cn−2xn−1⋯c1x2+c0x1=cn−1xn+cn−2xn−1⋯c1x2+c0x1+cn−1+cn−1=cn−1(xn+1)+cn−2xn−1⋯c1x2+c0x1+cn−1
所以左移操作在多項式中可以記爲
c(i)(x)=[xic(x)]mod(xn+1)
碼字的循環位移是一種線性變換,左移變換矩陣如下
⎣⎢⎢⎢⎢⎢⎡00⋮0110⋮0001⋮00⋯⋯⋱⋯⋯00⋮0000⋮10⎦⎥⎥⎥⎥⎥⎤
循環碼作爲線性分組碼的一種,仍不失其同性,就是
生成矩陣/生成多項式
循環碼也遵循線性分組碼的計算方式
c=u⋅G
其中c爲碼字,u爲信息位,G爲生成矩陣。
得益於循環碼的多項式表示方式,在這裏生成矩陣又有新的表現形式。
由於循環碼的碼字可以從一個碼字循環移位構成,因此我們不妨去在碼字集合中,除0外次數最低的碼字循環移位構成生成矩陣,如下所示
G=⎣⎡100110111011101010001⎦⎤
這個最低次數的碼字對應的多項式記爲生成多項式g(x),因而我們就可以把生成矩陣簡化爲生成多項式,同樣生成矩陣在生成多項式下表示爲
G=⎣⎡x2⋅g(x)x1⋅g(x)x0⋅g(x)⎦⎤
性質
以下是生成多項式的幾點性質 雖然不知道有什麼用,但是考試考過了還是寫上吧,證明就算了
- g(x)的0次項爲0
- g(x)具有唯一性
- g(x)是(xn+1)的一個因子
- g(x)的次數是(n-k)次
系統循環碼
直白一點就是怎麼把非系統的循環碼生成矩陣化成系統的,當然最簡單的辦法就是做初等變換化成階梯矩陣,但是這個太費勁,下面介紹個快的,借用課本上的說明:
如果要構成系統碼,那麼碼字最左k位一定k位信息位,然後再是r位檢校位,所以碼字構成應爲
c(x)=uk−1xn−1+uk−2xn−2⋯k0xn−k+r(x)=(uk−1xk−1+uk−2xk−2+⋯k0)xn−k+r(x)
根據循環碼的特性我們又知道,每一個碼字都是g(x)循環位移的產物,因此有
c(x)=0modg(x)u(x)xn−kmodg(x)+r(x)=0
r(x)次數小於g(x)次數,所以求餘後不變,所以碼字的監督位就是
r(x)=u(x)xn−kmodg(x)
考慮到生成多項式形式下的生成矩陣,不難得出循環碼的系統碼生成矩陣
G=⎣⎢⎢⎢⎡xn−1+xn−1modg(x)xn−2+xn−2modg(x)⋮xn−k+xn−kmodg(x)⎦⎥⎥⎥⎤
譯碼
在上文中,既然已經得到了系統碼的生成矩陣,就可以用檢校矩陣去檢驗碼字
此外,根據生成多項式g(x)的性質3,我們知道存在非零多項式h(x)有
g(x)h(x)=xn−1
該非零多項式就記爲循環碼的檢驗多項式。
從上面的等式中我們可以很明顯的看到
c(x)h(x)=u(x)g(x)h(x)=0(modxn−1)
所以利用這一關係可以在接受端檢驗是否有錯誤發生。因爲如果在傳輸過程中有錯誤e產生,那麼r(x)=c(x)+e(x),故
r(x)h(x)=u(x)g(x)h(x)+e(x)h(x)=e(x)h(x)(modxn−1)
就會產生一個非零伴隨式。假設此時e爲單錯誤圖樣,寫爲多項式表示e(x)=xpos,所以伴隨式的多項式表示
S(x)=xpos⋅h(x)
根據上文所述,伴隨式就是h(x)的循環移位,移位次數就是發生錯誤的位置
循環碼設計
循環碼設計見:
BCH碼設計
RS碼設計
有生之年,什麼時候想起來再更