パリティチェックサム方式とリードソロモン消去訂正を使用して、サウンドの一部のバイトをエンコードおよびデコードするタスクがあります。最初の方法 (パリティ チェックサム) のエンコードは完了しましたが、リードソロモン消去訂正による検出である 2 番目の方法を完了するには助けが必要です。
t
これまでのところ、RS コードはデータのシンボルにシンボルを追加することを知っていk
ます。t/2
そのため、シンボルまで、またはエラーの場所がわかっている場合は、いわゆる消去を見つけて修正できます。まで補正できますt
。このタスクでは、ガロア体 GF(2 8 ) を使用して、各シンボルをバイトとして表す必要があります。演算の加算と減算は XOR に基づいています。t=3
そのため、全体として、消去まで修正できるリードソロモン コードを使用する必要があります。単一のリード ソロモン コードの計算は次のようになります。
C 0 | C 1 |.......| C k-1 | C k | C k+1 | C k+2
したがって、コードバイトはベクトルとして表示でき、次のように k バイトのデータから
単一のコードが計算されるため、エンコードおよびデコードプロセスには次のヴァンデルモンド行列 F が必要です。c=[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 クラスをエンコードおよびデコードするために、このコードを完成させるコードが必要です。できるだけ早くこのタスクを完了するために、任意のヘルプをいただければ幸いです。
前もって感謝します