2012-02-18 18 views
1

我有使用奇偶校驗和方法編碼和解碼一些字節的聲音的任務,並且Reed-Solomon Erasure Correction。 我已經完成了第一種方法(奇偶校驗和)的編碼,但需要幫助完成第二種方法,即通過Reed-Solomon擦除校正進行檢測。使用Reed-Solomon擦除校正的前向糾錯

到目前爲止我知道,RS代碼將t符號添加到k符號的數據。所以它能夠找到並糾正最多t/2符號,或者如果錯誤位置已知所謂的刪除。它可以糾正高達t。對於這個任務,我必須使用伽羅瓦域GF(2 )來將每個符號表示爲一個字節。操作加法和減法基於XOR。因此,在所有我必須採用裏德所羅門代碼,能夠糾正高達t=3刪除。的單個Reed Solomon碼在現在作爲遵循

C0 | C1 |........| Ck-1 | Ck | Ck+1 | Ck+2

計算所以代碼字節可被視爲矢量c=[c0,c1,...,ck+2] 和單個碼C從數據中的k字節計算爲遵循 d=[d0,d1,...,dk-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=F.D

迄今爲止我所做的編碼如下:

#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 

我需要編寫代碼來完成這個代碼利用裏德 - 所羅門糾刪編碼和我fox_encode解碼和fox_decode類。任何幫助將不勝感激儘快完成這項任務。

在此先感謝

+0

請更正格式 – CAFxX 2012-02-18 16:03:39

+0

具體問題是什麼? – 2012-02-18 16:08:51

+0

需要一個代碼來完成使用Reed-SOlomon擦除校正分離錯誤檢測的上述代碼,還需要使用相同方法進行解碼的代碼。 – Fox 2012-02-18 16:30:31

回答

0

你可以看看我的RS(255,255-K)C-實現它可從my homepage

它處理錯誤和擦除和校正由所約束的任何字節錯誤/擦除模式:

(2 * ERRORCOUNT + erasureCount)< = K。

0

現在有一個關於Wikiversity的好教程,它詳細介紹瞭如何處理擦除和錯誤。

這裏是您需要實現的擦除解碼過程的哪個大綱:

  1. 計算的綜合症。然後檢查它是否都是0係數,消息不需要更正,否則繼續。
  2. 調用Forney算法,以綜合徵和擦除位置作爲輸入來計算擦除量值多項式(即從消息多項式中減去以獲得原始消息的值)。
  3. 減去message - erasure_magnitude_polynomial以恢復您的原始郵件(如果在Singleton綁定內)。

除了可能涉及的Forney算法之外,所有其他部分都非常簡單直接。事實上,當您想要解碼錯誤時,只需要Berlekamp-Massey算法和Chien搜索等最困難的部分,並且只有在您想糾正擦除和錯誤時(例如勘誤),Forney綜合徵計算纔是必要的 - 雖然我已經閱讀了一些描述Forney綜合徵計算可以被忽略的論文,但是我從未見過這樣的代碼。