我的任务是使用奇偶校验和方法Reed-Solomon Erasure Correction对声音的某些字节进行编码和解码。 我已完成第一种方法(奇偶校验和)的编码,但需要帮助完成第二种方法,即Reed-Solomon Erasure Correction检测。
到目前为止,我知道,RS代码会将t
个符号添加到k
个数据符号中。因此,它能够找到并纠正最多t/2
个符号,或者错误位置是否已知所谓的擦除。它最多可以纠正t
。为此,我必须使用伽罗瓦域GF(2 8 )将每个符号表示为一个字节。操作加法和减法基于XOR。因此,我必须使用能够纠正t=3
次删除的Reed-Solomon码。现在计算单个Reed Solomon代码如下
C0 | C1 |........| Ck-1 | Ck | Ck+1 | Ck+2
所以代码字节可以被视为向量c=[c0,c1,...,ck+2]
并且从k个字节的数据计算单个代码C
,如下所示
d=[d0,d1,...,dk-1]
,所以我的编码和解码过程需要以下Vandermonde矩阵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
我需要代码来完成此代码,以使用Reed-Solomon Erasure Correction对我的fox_encode和fox_decode类进行编码和解码。任何帮助将不胜感激,以尽快完成此任务。
提前致谢
答案 0 :(得分:0)
您可以查看我的RS(255,255-k)C实现,该实现可从my homepage获得。
它处理错误和擦除,并纠正由以下内容限制的任何字节错误/擦除模式:
(2 * errorCount + erasureCount)< = k。
答案 1 :(得分:0)
现在有一个关于Wikiversity的好教程,详细介绍了如何处理删除和错误。
以下是您需要为删除解码过程实现的内容概述:
message - erasure_magnitude_polynomial
以恢复原始邮件(如果在Singleton范围内)。除了可能有点涉及的Forney算法之外,所有其他部分都非常简单明了。事实上,Berlekamp-Massey算法和Chien搜索等最困难的部分只在您想要解码错误时才有必要,Forney综合症计算只有在您想要纠正错误和错误(即勘误表)时才有必要 - 尽管我已经阅读了一些描述可以绕过Forney综合症计算的论文,但我从未见过这样的代码。