在編碼理論中,多項式碼(英語:polynomial code)是有效碼字集合是由多項式(通常是固定長度的多項式)可以被特定多項式(長度較短,稱為生成多項式)整除的一種線性碼。
定義
對於有限域
,其元素我們稱作碼元。為了建立多項式碼,我們要確定一個
個碼元的序列
其多項式為
![{\displaystyle a_{n-1}x^{n-1}+\cdots +a_{1}x+a_{0}.\,}](https://wikimedia.org/api/rest_v1/media/math/render/svg/45aecfdd7d64eeaf43b5314685383cafe40b43ee)
對於整數
,令
為
階多項式,稱為生成多項式。由
生成的多項式碼其碼字都是階數低於
,並且可以被
整除(沒有餘式)的多項式。
例子
考慮
上,
、
、生成多項式為
的多項式碼。此碼由下列碼字組成:
![{\displaystyle 0\cdot g(x),\quad 1\cdot g(x),\quad x\cdot g(x),\quad (x+1)\cdot g(x),}](https://wikimedia.org/api/rest_v1/media/math/render/svg/6b49310d3ec9d03cf4d5cfd1767f02972531bf9e)
![{\displaystyle x^{2}\cdot g(x),\quad (x^{2}+1)\cdot g(x),\quad (x^{2}+x)\cdot g(x),\quad (x^{2}+x+1)\cdot g(x).}](https://wikimedia.org/api/rest_v1/media/math/render/svg/49b71362b93d7edc9f2e869247c80908ada2c713)
或直接寫成:
![{\displaystyle 0,\quad x^{2}+x+1,\quad x^{3}+x^{2}+x,\quad x^{3}+2x^{2}+2x+1,}](https://wikimedia.org/api/rest_v1/media/math/render/svg/d3261fdfa82532de9a537368096fba5e22fb33be)
![{\displaystyle x^{4}+x^{3}+x^{2},\quad x^{4}+x^{3}+2x^{2}+x+1,\quad x^{4}+2x^{3}+2x^{2}+x,\quad x^{4}+2x^{3}+3x^{2}+2x+1.}](https://wikimedia.org/api/rest_v1/media/math/render/svg/b55ef35cb35f6a51d70335d66f312af139a79083)
由於多項式碼定義在二元伽羅華域
中,多項式元素用模q求和表示,於是最終多項式為:
![{\displaystyle 0,\quad x^{2}+x+1,\quad x^{3}+x^{2}+x,\quad x^{3}+1,}](https://wikimedia.org/api/rest_v1/media/math/render/svg/e71037f4ad134f8665ae38b8c86a2309b2f10afa)
![{\displaystyle x^{4}+x^{3}+x^{2},\quad x^{4}+x^{3}+x+1,\quad x^{4}+x,\quad x^{4}+x^{2}+1.}](https://wikimedia.org/api/rest_v1/media/math/render/svg/381b9d833c6b33001508eba0616cba53099b05ad)
等價地,用二進制位的序列表示,這些碼字就是:
![{\displaystyle 00000,\quad 00111,\quad 01110,\quad 01001,}](https://wikimedia.org/api/rest_v1/media/math/render/svg/2e1d7ad5ac6066efd963a391e5ea189d560d7e60)
![{\displaystyle 11100,\quad 11011,\quad 10010,\quad 10101.}](https://wikimedia.org/api/rest_v1/media/math/render/svg/9de6982aa719d0ca17b03c31f0a8bb781f786082)
注意到如所有多項式碼一樣,這個碼確實是一個線性碼,即碼字的線性組合還是碼字。在域為 GF(2) 的情形,可以通過對二進制形式的兩個碼字取XOR(如00111 XOR 10010 = 10101)得到其線性組合。
編碼
在
上長度為
、生成多項式為
階多項式
的多項式碼中,會有
個碼字。事實上,根據定義,若且唯若一個碼字形式為
(其中
的階小於
)時,
才是一個碼元。因為會有
個商,所以也會有相同數量的碼字。
未編碼的數據字長度應為
。
一些作者,如(Lidl & Pilz, 1999),僅討論了從數據字到碼字賦值的映射
。但在數據字不是碼字的一部分時會存在缺陷。
相反,常用下面的方法來建立系統碼:給定長度為
的數據字
,先把
乘以
,這樣的效果就是將
向左移
位。
一般不能被
整除,也就不是一個有效的碼字。不過,調整
的最右面
個符號可以得到唯一的碼字。
要求它,需要計算
除以
的餘式:
![{\displaystyle x^{m}d(x)=g(x)\cdot q(x)+r(x),\,}](https://wikimedia.org/api/rest_v1/media/math/render/svg/da3fc9334ddfdf188c5b90748bc81318dac87b9f)
其中
的階數小於
。於是對應於數據字
的碼字定義為
![{\displaystyle p(x):=x^{m}d(x)-r(x),\,}](https://wikimedia.org/api/rest_v1/media/math/render/svg/0f9971b68dad5fe44c1665c60b8e0090193078fe)
注意以下性質:
可以被
整除。特別地,
是一個有效碼字。
- 由於
的階數小於
,
最左面的
個符號與
中對應符號相同。換句話說,碼字的前
個符號與原數據字相同。剩下的
個符號稱為校驗位。
例子
對於
、
、生成多項式為
的上述碼,我們的帶下列從數據字到碼字的賦值:
- 000 ↦ 00000
- 001 ↦ 00111
- 010 ↦ 01001
- 011 ↦ 01110
- 100 ↦ 10010
- 101 ↦ 10101
- 110 ↦ 11011
- 111 ↦ 11100
解碼
錯誤消息可以直接通過多項式除以生成多項式得到非零餘式而檢測出來。
假設碼字沒有差錯,系統碼可以通過剝離
個檢驗位解碼。
如果存在差錯,則應在解碼前糾錯。有些多項式碼(如BCH碼)會有高效的解碼算法。
多項式碼的性質
對於所有數字碼來說,多項式碼的誤差檢測與校正能力取決於該碼的最小漢明距離。由於多項式碼是線性碼,最小漢明距離等於任何非零碼字的最小重量。在上面的例子中,最小漢明距離是2,因為01001是一個碼字,並且沒有非零碼字只有一位是1的。
多項式碼更具體的性質往往取決於它的生成多項式的特定的代數性質。這裡有此類性質的一些例子:
- 一個多項式碼若且唯若生成多項式能夠整除
時為循環碼。
- 如果生成多項式是本原多項式,若
,則得到的碼的漢明距離最小為3。
- 在BCH碼中,生成多項式在擴展域中有能夠得到很大漢明距離的特定的根。
巧妙選取生成多項式的多項式碼的代數性質可以用來尋找有效的誤差校正算法。BCH碼就屬於這種情況。
特定多項式碼
參考文獻
- W.J. Gilbert and W.K. Nicholson: Modern Algebra with Applications, 2nd edition, Wiley, 2004.
- R. Lidl and G. Pilz. Applied Abstract Algebra, 2nd edition. Wiley, 1999.