FEC 前向差錯恢復編碼
FEC 是一種前向差錯恢復編碼技術,是通過對原生信息序列進行編碼生成監督碼,這些監督碼作爲冗餘信息序列與原生信息序列一起被傳輸,當原生信息序列發生錯誤或丟失,可通過冗餘信息序列以一定能力恢復原生信息序列。
對於生成的冗餘數據,我們希望生成數據大小範圍與原生數據一致,以免使用更多冗餘來表示,比如在計算機中,以一個字節單位的數據來生成的編碼數據我們不希望是個兩個字節或更大數據。因此,編碼通常利用了有限域的數學方法,在有限域中進行四則運算,使得編碼後的數據還是在一樣的大小範圍內。
伽羅瓦域(galois field)
域是一個可以在其上進行加法、減法、乘法和除法運算而結果不會超出域的集合。如果域F只包含有限個元素,則稱其爲有限域。有限域亦稱伽羅瓦域(galois field),它是伽羅瓦(Galois,E.)於18世紀30年代研究代數方程根式求解問題時引出的。
伽羅瓦域的階(元素個數)必爲素數的冪,即有限域的階可表示爲
通過本原多項式生成元素
例
元素 | 多項式 | 對應數值 |
---|---|---|
0 | 0000 (0) | |
1 | 0001 (1) | |
0010 (2) | ||
0100 (4) | ||
1000 (8) | ||
0011 (3) | ||
0110 (6) | ||
1100 (12) | ||
1011 (11) | ||
0101 (5) | ||
1010 (10) | ||
0111 (7) | ||
1110 (14) | ||
0010 (15) | ||
1101 (13) | ||
1001 (9) |
上面例子建立GF中元素與數值一一對應關係。
上述可以看出,GF 的元素其實就是二進制多項式構成的循環碼,由循環碼的特性,定義GF中元素的四則運算,保證了運算後的結果還是域的中元素。例如,加法
設數值
加減法:數值異或
乘法:
除法:
常用本原多項式:
n | 本原多項式 |
---|---|
4 | |
8 | |
16 | |
32 | |
64 |
爲了乘除法計算方便,一般將數值與元素對應關係列表。計算時,將數值根據錶轉爲對應各自的元素乘法,得到結果元素,再根據錶轉爲對應的數值。
RS編碼丟包恢復
通過使用多項式對應的GF來實現對非二進制數據運算並進行變換其實就是RS編碼技術。RS(Reed-Solomon)碼是一類糾錯能力很強的特殊的非二進制BCH碼。
對於簡單普通抗丟技術,增加冗餘是對原生數據一份複製,也就是增加數據的一倍冗餘來恢復對應的一個數據。這種恢復性能非常低。而RS編碼變換則能實現高效抗丟。
例如,有四個數據 a b c d被傳輸 , 則通過變換得到
RS編碼
例如,選取子範德蒙矩陣對 a b c d ,變換爲 e f g h :
RS恢復
如果在n個原生數據
例如,a b d 丟失, 我們任取冗餘數據中的 e g h 和爲丟失的c來恢復 :
上面先將f 對應的矩陣
整理爲:
則逆變換可得 a b d:
RS編碼通常將每n個原生數據爲一組,通過n*n 的範德蒙矩陣換成一組n個冗餘數據,如果丟失m個,那麼任意的m個冗餘便可用來逆變換恢復原生數據,最多可恢復連續n個丟失包,其中任意的冗餘數據就能來用恢復這一點是普通的增加冗餘的本質區別,因爲冗餘數據也會丟失,如果任意就能恢復那麼恢復能力也就更強; RS變化中涉及的運算是在定義在GF中的,這使的不因爲數據表示的大小而增加冗餘開銷 。
信道丟包恢復技術
在網絡通信傳輸場景,數據通常以包形式被連續傳輸,爲了抗丟包,可以採用FEC技術生成冗餘數據包,來恢復丟包, 將上述例子中數據用數據換成數據包,是一樣邏輯。通常將原生數據包分組,生成一組檢驗包(冗餘包),將檢驗包作爲下一組的冗餘, 例如:
上述中,每4個包 a b c d 爲一組,生成的檢驗包e f g h分別做爲下一組包傳輸,這樣就可以前一組的丟包情況(丟少個),當收到下一組的就可以通過冗餘包恢復。對於實時傳輸情況,這樣爲了等待冗餘包,勢必造成延遲, 分組大小對應着延遲大小,犧牲時效性保證可靠性。
參考文獻
[1] James S. Plank. Erasure Codes For Storage Application.
https://web.eecs.utk.edu/~plank/plank/papers/FAST-2005.pdf
[2] James S. Plank. A Tutorial on Reed-Solomon Coding for Fault-Tolerance in RAID-like Systems
https://web.eecs.utk.edu/~plank/plank/papers/CS-96-332.pdf
[3] Reed-Solomon Codes.
https://www.cs.duke.edu/courses/spring10/cps296.3/rs_scribe.pdf