こちらで実装した、Reed Solomon符号化を用いて、
文字列をReed Solomon(リード ソロモン)符号で符号化します。
下図のフォームをデザインします。
ボタンのClickイベントに下記のコードを記述します。
コードの内容は"penguin"という文字列をReed-Solomon符号で符号化し、符号化したデータの9~14バイトにかけてエラーを付け加えます。エラーを含んだデータを複合し、複合された結果をテキストボックスに表示します。
ボタン1 (エンコード結果にエラーを追加してデコードする)
procedure TForm1.Button2Click(Sender: TObject);
var
i:integer;
data:array [0..2550] of byte;
enc:array [0..2550] of byte;
dec:array [0..2550] of byte;
pri:array [0..2550] of byte;
p:PChar;
begin
Zeromemory(@data,2550);
Zeromemory(@enc,2550);
Zeromemory(@dec,2550);
//初期化してデータを入れる
for i:=0 to 255 do data[i]:=0;
data[0]:=Ord('p');
data[1]:=Ord('e');
data[2]:=Ord('n');
data[3]:=Ord('g');
data[4]:=Ord('u');
data[5]:=Ord('i');
data[6]:=Ord('n');
//エンコードする
iPentecReedSolomon1.EncodeRS(data,enc);
p:=pChar(@enc[0]);
Edit6.Text:=p;
//エラーを作る
// enc[15]:=ord('a');
// enc[16]:=ord('a');
// enc[17]:=ord('a');
// enc[17]:=ord('a');
enc[9]:=ord('a');
enc[10]:=ord('j');
enc[11]:=ord('r');
// enc[12]:=ord('a');
// enc[13]:=ord('j');
// enc[14]:=ord('r');
// enc[12]:=ord('r');
// enc[10]:=28;
// enc[11]:=28;
p:=pChar(@enc[0]);
Edit2.Text:=p;
//デコードする
iPentecReedSolomon1.DecodeRS(enc,dec);
p:=pChar(@dec[0]);
Edit3.Text:=p;
end;
ボタン2 (パリティとデータを分けて、元データにエラーを追加して訂正する)
procedure TForm1.Button3Click(Sender: TObject);
var
i:integer;
data:array [0..2550] of byte;
enc:array [0..2550] of byte;
dec:array [0..2550] of byte;
par:array [0..2550] of byte;
p:PChar;
begin
Zeromemory(@data,2550);
Zeromemory(@enc,2550);
Zeromemory(@dec,2550);
for i:=0 to 2550 do begin
data[i]:=0;//random(255);
end;
data[0]:=Ord('p');
data[1]:=Ord('e');
data[2]:=Ord('n');
data[3]:=Ord('g');
data[4]:=Ord('u');
data[5]:=Ord('i');
data[6]:=Ord('n');
iPentecReedSolomon1.EncodeRSEx(data,enc,par);
p:=pChar(@enc[0]);
Edit6.Text:=p;
//エラーを作成する
data[0] := ord('H');
data[1] := ord('o');
p:=pChar(@enc[0]);
Edit2.Text:=p;
iPentecReedSolomon1.DecodeRSEx(data,par,dec);
p:=pChar(@dec[0]);
Edit3.Text:=p;
end;
実行すると下図の結果となります
![](https://resources.ipentec.com/document/image/delphi-reed-solomon-use-02)
エラーが訂正されていることがわかります。
参考・出展
こちらを参考にしております。理論などの解説も下記書籍からどうぞ。
著者
iPentec Document 編集部
iPentec Document 編集部です。
快適な生活のための情報、価値のある体験やレビューを提供します。
最終更新日: 2024-01-24
作成日: 2010-01-22