c语言实现有限域模多项式_有限域计算简述
本文為理解FEC(Reed-Solomon)編碼的補充,簡述用到的有限域計算的知識
有限域定義
這里的域(Field)的定義是有如下特性的集合:
- 定義了加法和乘法
- 集合內的元素經過加法和乘法計算,結果仍然在集合內
- 計算符合交換率、結合率、分配率
- 加法和乘法有單位元素(所有的集合內的值都有對應的負數,所有集合內非零值都有倒數)
舉個例子,我們常見的實數集是域,但整數值不是域(因為除了1,其它數的倒數都不是整數)。
具有有限個元素的域就是有限域(下文以GF表示,GF是Galois Field的縮寫,這個名字紀念發明者Evariste Galois)。
這可能有點反常識,既然可以一直加、一直乘,怎么會只有有限個元素呢?一個關鍵的操作就是‘取模’。也就是在域的定義基礎上,作如下修改:
- 定義模p加法和模p乘法(加或乘的結果超過p時,模p取余數。p為素數)
- 集合內的元素經過加法和乘法計算,結果仍然在集合內
- 計算符合交換率、結合率、分配率
- 加法和乘法有單位元素(所有的集合內的值都有對應的負數,所有集合內非零值都有倒數)
舉例子,GF(3)是定義了模3加法和乘法的有限域,有三個元素:0、1、2。兩個計算示例:
(另外注意以上兩個計算分別說明了1、2互為‘負數’,2是2的倒數)
下面是GF(3)的加法和乘法的所有組合。
那么,如果p不是素數會怎樣呢?以下面‘GF(4)’的例子來說明:
GF(4)并不是有限域的存在,因為它并不能滿足所有有限域的定義要求,因為元素2沒有倒數。
不過,如果我們修改一下元素,將'GF(4)'改為
,4個元素的集合也可以成為有限域:('GF(4)'的
的區別是 在計算時每個位都是模2運算,即'異或')在通信編碼中使用的就是
這種形式的有限域,因為二進制、加法/異或這些十分適合通信硬件實現。多項式
下面引入多項式的概念以更好的理解
中的乘法。二進制數可以表示成多項式的方式:
這個多項式表示中內含了高有效位(MSB)低有限位(LSB)的概念,代表的是不同位的位置權重的區別。(上面多項式中代入
就可以得到11000001代表的數值193)有限域中加法和乘法的多項式表示可以用如下例子來說明:
再回頭看一下前面的
的例子,例子中的00、01、10、11等值用多項式表示就是:使用取模多項式為
以上圖中紅色框的數值計算為例,計算過程是:
詳細看一下多項式取模的運算:
從硬件角度來看就是兩個3位二進制數按位異或操作,消掉最高位。
指數表示方式
令
為有限域的基本元素,則有限域中所有的其它元素都可以用 的方式來獲得,見下面的例子 : 與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的c语言实现有限域模多项式_有限域计算简述的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中报表导出带表头_来看看Java是 如何
- 下一篇: 一维卷积filter_面试题:CNN的卷