Main Content

encode

説明

code = encode(msg,n,k) は、ハミング符号化法を使用して、コードワード長 n、メッセージ長 k としてメッセージ msg を符号化します。n の計算値は、整数 m に対して、m ≥ 2 にならなければなりません。n の値は 2m–1、k の値は n–m として計算されます。

code = encode(msg,n,k,codingMethod,prim_poly) は、codingMethod をハミング符号化法、prim_poly を原始多項式として msg を符号化します。n の計算値は整数で m≥2 にならなければなりません。

code = encode(msg,n,k,codingMethod,genmat) は、codingMethod を線形ブロック符号化法、genmat を生成行列として msg を符号化します。n の計算値は整数で m≥2 にならなければなりません。

code = encode(msg,n,k,codingMethod,genpoly) は、codingMethod を組織巡回符号、genpoly を生成多項式として msg を符号化します。n の計算値は整数で m≥2 にならなければなりません。

[code,added] = encode(___) は、追加の変数 added を返します。added は、符号化前にメッセージ行列の末尾に付加されたゼロの数を示します。前の構文の入力引数を任意に組み合わせて指定できます。

すべて折りたたむ

コードワード長とメッセージ長の値を設定します。

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

メッセージ長と等しい長さのランダムなバイナリ メッセージを作成します。

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

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

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

ランダムな場所に誤りを加えて、符号化されたメッセージを破損させます。

errLoc = randerr(1,n);
encData = mod(encData + errLoc',2);

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

decData = decode(encData,n,k,'hamming/binary');
numerr = biterr(data,decData)
numerr = 0

コードワード長とメッセージ長の値を設定します。

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

メッセージ長と等しい長さのランダムなバイナリ メッセージを作成します。

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);

ランダムな場所に誤りを加えて、符号化されたメッセージを破損させます。

errLoc = randerr(1,n);
encData = mod(encData + errLoc',2);

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

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; % Codeword length
k = 5; % Message length

メッセージ長と等しい長さのランダムなバイナリ メッセージを作成します。

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

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

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

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

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',genpoly);

ランダムな場所に 3 つの誤りを加えて、符号化されたメッセージを破損させます。

errLoc = randerr(1,n,3);
encData = mod(encData + errLoc',2);

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

decData = decode(encData,n,k,'cyclic/binary',genpoly,trt);
numerr = biterr(data,decData)
numerr = 0

入力引数

すべて折りたたむ

入力メッセージ。次のオプションのいずれかとして指定します。

  • k 列のバイナリの列ベクトルまたは行ベクトル

  • k 列のバイナリ行列

  • 範囲 [0, 2k–1] の整数の k 列の列ベクトルまたは行ベクトル

例: msg = [0 1 1 0, 0 1 0 1, 1 0 0 1]k=4 のバイナリ行ベクトルを指定します。

例: msg = [0 1 1 0; 0 1 0 1; 1 0 0 1]k=4 のバイナリ行列を指定します。

例: msg = [6, 10, 9]k=4 の整数の行ベクトルを指定します。

データ型: double

コードワード長。正の整数として指定します。この値は、関数で 2^m–1 として計算されます。m は 2 以上でなければなりません。

データ型: double

メッセージ長。正の整数として指定します。この値は、関数で n–m として計算されます。m は 2 以上でなければなりません。

データ型: double

誤り符号化法と形式。次のいずれかとして指定します。

  • 'hamming/binary'

  • 'hamming/decimal'

  • 'linear/binary'

  • 'linear/decimal'

  • 'cyclic/binary'

  • 'cyclic/decimal'

データ型: char | string

原始多項式。次のオプションのいずれかとして指定します。

  • バイナリ行ベクトル — このベクトルは、prim_poly の係数を昇べきの順に与えます。

  • 文字ベクトルまたは string スカラー — この値は、prim_poly をテキスト表現で定義します。詳細については、多項式の文字ベクトルを参照してください。

  • 正の整数 — この値は、prim_poly を範囲 [2m + 1, 2m + 1 – 1] で定義します。

既定の原始多項式の詳細については、既定の原始多項式を参照してください。原始多項式の表現の詳細については、原始多項式と元の表現を参照してください。

データ型: double | char | string

生成行列。kn 列の数値行列として指定します。

データ型: double

生成多項式。多項式の文字ベクトルまたはバイナリ生成多項式の係数を昇べきの順に与える行ベクトルとして指定します。[n, k] 巡回符号に対する genpoly の値は、次数が nk で、xn-1 で割り切れなければなりません。x は識別子です。

データ型: char | string

出力引数

すべて折りたたむ

出力符号。次の表のオプションのいずれかとして返されます。code の値と次元は、次の表に示すように、msgの値と次元および入力メッセージの形式によって決まります。

msg の値入力メッセージの形式code の値

バイナリの列ベクトルまたは行ベクトル

2 進数

バイナリの列ベクトルまたは行ベクトル

k 列のバイナリ行列

2 進数

n 列のバイナリ行列

範囲 [0, 2k–1] の整数の列ベクトルまたは行ベクトル

10 進数

範囲 [0, 2n–1] の整数の列ベクトルまたは行ベクトル

追加の変数。行列を適切なサイズにするために符号化前にメッセージ行列の末尾に付加されたゼロの数として返されます。メッセージ行列のサイズは、nkmsg、および符号化法によって決まります。

アルゴリズム

誤り訂正符号化法に応じて、関数 encodehammgencyclgenなどの低水準関数に依存します。

バージョン履歴

R2006a より前に導入