[英]Forward error correction using Reed-Solomon Erasure Correction
我的任務是使用奇偶校驗和方法和Reed-Solomon Erasure Correction對聲音的某些字節進行編碼和解碼。 我已經完成了第一種方法(奇偶校驗和)的編碼,但是需要幫助完成第二種方法,即通過Reed-Solomon糾刪檢測。
到目前為止,我知道,RS代碼將t
符號添加到k
個數據符號中。 因此,它能夠定位和校正最多t/2
符號,或者如果已知錯誤位置(即所謂的擦除),則可以定位和糾正。 它最多可以校正t
。 為此,我必須使用Galois字段GF(2 8 )將每個符號表示為一個字節。 運算加法和減法基於異或。 因此,總的來說,我必須采用能夠校正直至t=3
擦除的Reed-Solomon碼。 現在,單個Reed Solomon代碼的計算如下
C0 | C1 |........| Ck-1 | Ck | Ck+1 | Ck+2
所以代碼字節可被視為矢量c=[c 0 ,c 1 ,...,c k+2 ]
和單碼C
從數據如下的k個字節來計算d=[d 0 ,d 1 ,...,d k-1 ]
,所以我的編碼和解碼過程需要以下范德蒙德矩陣F
1 1 12 13 ... 1k-1 1 2 22 23 ... 2k-1 ... 1 k+2 (k+2)2 (k+2)3 ... (k+2)k-1 1 k+3 (k+3)2 (k+3)3 ... (k+3)k-1
因此,使用F
& D
進行簡單的矩陣矢量乘法,我們得到C=FD
。
到目前為止,我所做的編碼如下:
#else
void fox_encode(Buffer* bufin, Buffer* bufout, FoxEncData* algorithm_data){
// Your encoder for Task 2.C.3 goes in here !!!
while (bufin->size >= 1){
guint8 databyte = bufin->data[0]; //Pick up a byte from input buffer
buffer_push_byte (bufout, databyte); //Send it 3 times
buffer_push_byte (bufout, databyte);
buffer_push_byte (bufout, databyte);
buffer_pop (bufin, 1); //Remove it from the input buffer
}
}
#endif
我需要代碼來完成此代碼,以便使用Reed-Solomon Erasure Correction對我的fox_encode和fox_decode類進行編碼和解碼。 感謝您提供任何幫助以盡快完成此任務。
提前致謝
現在,在Wikiversity上有一個很好的教程,其中詳細介紹了如何處理擦除和錯誤。
這是刪除解碼過程需要實現的概述:
message - erasure_magnitude_polynomial
以恢復原始消息(如果在Singleton范圍內)。 除了可能涉及到一點點的Forney算法外,所有其他部分都非常簡單明了。 確實,最困難的部分(例如Berlekamp-Massey算法和Chien搜索)僅在您要解碼錯誤時才需要,而福尼綜合症的計算僅在您要同時糾正擦除和錯誤(即勘誤)時才需要-盡管我我已經讀過一些論文,這些論文描述了可以繞開福尼綜合症的計算,但是我從未見過這樣的代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.