我的任务是使用奇偶校验和方法和Reed-Solomon Erasure Correction对一些声音字节进行编码和解码。我已经完成了第一种方法(奇偶校验和)的编码,但需要帮助完成第二种方法,即 Reed-Solomon Erasure Correction 检测。
到目前为止,我知道,RS 代码将t
符号添加到k
数据符号中。因此,它能够定位和纠正最多t/2
符号,或者如果错误位置已知,则称为擦除。它最多可以纠正t
。对于这个任务,我必须使用伽罗瓦域 GF(2 8 ) 将每个符号表示为一个字节。加法和减法运算是基于 XOR 的。因此,总的来说,我必须使用能够纠正直至t=3
擦除的 Reed-Solomon 代码。现在单个 Reed Solomon 码的计算如下
0 | _ C 1 |........| C k-1 | CK | _ C k+1 | C k+2
所以代码字节可以被视为向量
,单个代码是从 k 字节的数据中计算出来的,如下
所示,所以我的编码和解码过程需要以下 Vandermonde 矩阵 Fc=[c0,c1,...,ck+2]
C
d=[d0,d1,...,dk-1]
1 1 1 2 1 3 ... 1 k-1 1 2 2 2 2 3 ... 2 k-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 类进行编码和解码。任何帮助将不胜感激,以尽快完成此任务。
提前致谢