最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

encode

構文

code = encode(msg,n,k,'linear/fmt',genmat)
code = encode(msg,n,k,'cyclic/fmt',genpoly)
code = encode(msg,n,k,'hamming/fmt',prim_poly)
code = encode(msg,n,k)
[code,added] = encode(...)

オプション入力

入力既定値
fmt binary
genpoly cyclpoly(n,k)
prim_poly gfprimdf(n-k)

説明

すべての構文に対して

関数 encode は、次のいずれかの誤り訂正符号化手法を使って、メッセージを符号化します。

  • 線形ブロック

  • 巡回

  • ハミング

これらのすべての方法で、符号語長は n で、メッセージ長は k です。

メッセージを表す msg は、複数の形式のうちの 1 つをもつことができます。「情報の形式」の表は、msg に対して利用可能な形式、引数 fmtmsg の形式にどのように影響するか、および出力 code の形式がこれらの選択にどのように依存するかをまとめています。表の例は、k = 4 の場合を示しています。fmt を入力として指定しない場合、既定値は binary です。

情報の形式

msg の次元fmt 引数の値code の次元
バイナリ列または行ベクトルbinary バイナリ列または行ベクトル
例: msg = [0 1 1 0, 0 1 0 1, 1 0 0 1].'
k 列のバイナリ行列binary n 列のバイナリ行列
例: msg = [0 1 1 0; 0 1 0 1; 1 0 0 1]
範囲 [0, 2^k-1] の整数の列または行ベクトルdecimal 範囲 [0, 2^n-1] の整数の列または行ベクトル
例: msg = [6, 10, 9].'

メモ

2^n または 2^k が大きい場合は、decimal 形式ではなく、既定の binary 形式を使用してください。これは、関数は内部的にバイナリ形式を使っており、多くのビットを大きい 10 進数に変換することに対応する丸め誤差が大きくなるためです。

特定の構文に対して

code = encode(msg,n,k,'linear/fmt',genmat)genmat を線形ブロック符号化法の生成行列として msg を符号化します。genmat (kn 列の行列) は必須入力です。

code = encode(msg,n,k,'cyclic/fmt',genpoly)msg を符号化し、組織巡回符号を作成します。genpoly は、多項式の文字ベクトルまたはバイナリ生成多項式の係数を昇べきの順に与える行ベクトルです。genpoly の既定値は cyclpoly(n,k) です。定義では、[n,k] 巡回符号に対する生成多項式は、次数 n-k をもち、xn-1 で割り切れなければなりません。

code = encode(msg,n,k,'hamming/fmt',prim_poly) は、ハミング符号化法を使用して msg を符号化します。この構文に対して、n は、3 以上の整数 m に対して 2m-1 の形式でなければならず、kn-m と等しくなければなりません。prim_poly は、多項式の文字ベクトルまたは符号化プロセスで使用される GF(2m) に対する原始多項式のバイナリ係数を昇べきの順に与える行ベクトルです。prim_poly の既定値は、既定の原始多項式 gfprimdf(m) です。

code = encode(msg,n,k) は、code = encode(msg,n,k,'hamming/binary') と同じ結果になります。

[code,added] = encode(...) は、追加の変数 added を出力します。added は、行列を適切な形状にするために符号化前にメッセージ行列の最後に置かれる 0 の数です。“適切な形状” は、nkmsg の形状、および符号化法により異なります。

すべて折りたたむ

3 種類の線形ブロック符号を使用して符号化し、破損したデータを復号化します。

ハミング符号

符号パラメーターを設定します。

n = 15;                % Code length
k = 11;                % Message length

長さ k のバイナリ メッセージを作成します。

data = randi([0 1],k,1);

メッセージを符号化します。

encData = encode(data,n,k,'hamming/binary');

符号化されたシーケンスの 4 番目のビットに誤りを発生させます。

encData(4) = ~encData(4);

破損したシーケンスを復号化します。復号化器がメッセージを正しく復元したことを確認します。

decData = decode(encData,n,k,'hamming/binary');

numerr = biterr(data,decData)
numerr = 0

線形ブロック符号

符号パラメーターを設定します。

n = 7;                % Code length
k = 3;                % Message length

長さ k のバイナリ メッセージを作成します。

data = randi([0 1],k,1);

巡回生成多項式を作成します。次に、パリティ チェック行列を作成し、生成行列に変換します。

pol = cyclpoly(n,k);
parmat = cyclgen(n,pol);
genmat = gen2par(parmat);

生成行列を使用してメッセージ シーケンスを符号化します。

encData = encode(data,n,k,'linear/binary',genmat);

符号化されたシーケンスの 3 番目のビットに誤りを発生させます。

encData(3) = ~encData(3);

破損したシーケンスを復号化します。復号化器がメッセージを正しく復元したことを確認します。

decData = decode(encData,n,k,'linear/binary',genmat);
Single-error patterns loaded in decoding table.  8 rows remaining.
2-error patterns loaded.  1 rows remaining.
3-error patterns loaded.  0 rows remaining.
numerr = biterr(data,decData)
numerr = 0

巡回符号

符号パラメーターを設定します。

n = 15;                % Code length
k = 5;                 % Message length

長さ k のバイナリ メッセージを作成します。

data = randi([0 1],k,1);

巡回符号に対する生成多項式を作成します。生成多項式を使用してパリティ チェック行列を作成します。

gpol = cyclpoly(n,k);
parmat = cyclgen(n,gpol);

パリティ チェック行列を使用してシンドローム復号化テーブルを作成します。

trt = syndtable(parmat);
Single-error patterns loaded in decoding table.  1008 rows remaining.
2-error patterns loaded.  918 rows remaining.
3-error patterns loaded.  648 rows remaining.
4-error patterns loaded.  243 rows remaining.
5-error patterns loaded.  0 rows remaining.

生成多項式を使用してデータを符号化します。

encData = encode(data,n,k,'cyclic/binary',gpol);

符号化されたシーケンスの 4 番目と 7 番目のビットに誤りを発生させます。

encData(4) = ~encData(4);
encData(7) = ~encData(7);

破損したシーケンスを復号化します。復号化器がメッセージを正しく復元したことを確認します。

decData = decode(encData,n,k,'cyclic/binary',gpol,trt);

numerr = biterr(data,decData)
numerr = 0

アルゴリズム

符号化法により、encode は、hammgencyclgen のような低レベル関数に依存します。

R2006a より前に導入