matlabバイナリデジタルベースバンド伝送システムシミュレーション実践--情報論編--線形パケットコードの符号化と復号
2026 ワード
バイナリデータがベースバンドで伝送される場合,通常,情報伝送の精度を向上させるために符号化と復号を行うが,この実験では(5,2)線形パケット符号を用いて符号化と復号を行う.
1つの[n,k]線形パケットコードは、情報をk個のシンボルに分割して1段(情報群と呼ばれる)とし、エンコーダにより長さn個のシンボルの1組となり、[n,k]線形パケットコードの1つの符号語とする.各シンボルの取値にq種(qが素数べき乗、q進)があれば、qのk次方個の符号語が共有される.
この符号化プロセスは、生成マトリクスを用いて実現される.
G=[1,0,1,1,1;
0,1,1,0,1];%せいせいぎょうれつ
R=mod(m*G,2);
次に復号化プロセス:情報論書では,線形パケットコードの復号化プロセスは,受信マトリクス(k,n)と検証マトリクス(n,(n−k))の転置を乗算し,得られた伴随式Sが0マトリクスであるか否かで誤りがあるか否かを判断する.ここで,検証行列自体が符号語行列の対偶空間生成行列であるため,正しい符号語であれば両者の乗算は必ず0行列であることを理解する.エラーであれば、R=E+C(2進符号化であるため、両者の符号語を加算)となり、このときR*H'=E*H'となる.
すなわち、復号プロセスは次のとおりです.
①受信した行列Rを標準復号行列リスト、すなわち本の対応する行列リストにマッピングすることによって(この部分は計算を推奨し、誤り符号語を訂正する原理をさらに理解するのに便利である)、第1行は正しい符号語である.
②誤りパターンはSにより決定され、すなわちS=[001]であればE=[00001]、C=E+Rにより元の符号語を一意に決定して誤り訂正することができる.
本実験では2種目を用い,具体的には:
ここでは式(1)においてバイナリコードワードを10進数に変換する方式を採用し,これによりfind関数を用いてS行列に誤りが発生したか否かおよび誤りが発生した位置を一意に決定することができ,forサイクルを用いて行列を一歩一歩対比することなくmatlabの行列計算特性を利用して演算数を大幅に簡略化した.
1つの[n,k]線形パケットコードは、情報をk個のシンボルに分割して1段(情報群と呼ばれる)とし、エンコーダにより長さn個のシンボルの1組となり、[n,k]線形パケットコードの1つの符号語とする.各シンボルの取値にq種(qが素数べき乗、q進)があれば、qのk次方個の符号語が共有される.
この符号化プロセスは、生成マトリクスを用いて実現される.
1.まず生成マトリクスを決定する
G=[1,0,1,1,1;
0,1,1,0,1];%せいせいぎょうれつ
2.C=m*Gから得られる(n列)符号語行列
R=mod(m*G,2);
次に復号化プロセス:情報論書では,線形パケットコードの復号化プロセスは,受信マトリクス(k,n)と検証マトリクス(n,(n−k))の転置を乗算し,得られた伴随式Sが0マトリクスであるか否かで誤りがあるか否かを判断する.ここで,検証行列自体が符号語行列の対偶空間生成行列であるため,正しい符号語であれば両者の乗算は必ず0行列であることを理解する.エラーであれば、R=E+C(2進符号化であるため、両者の符号語を加算)となり、このときR*H'=E*H'となる.
すなわち、復号プロセスは次のとおりです.
1.まずマトリクスを生成することによって検証マトリクスを決定する
H=[1,1,1,0,0;
1,0,0,1,0;
1,1,0,0,1];%
2.S=R*H′が0行列であるか否かで誤りがあるか否かを判断する
S=mod(R*H',2);
3.第3のステップは、すでに発生したエラーによってコードワードを修正することであり、ここでは2つの考え方がある。
①受信した行列Rを標準復号行列リスト、すなわち本の対応する行列リストにマッピングすることによって(この部分は計算を推奨し、誤り符号語を訂正する原理をさらに理解するのに便利である)、第1行は正しい符号語である.
②誤りパターンはSにより決定され、すなわちS=[001]であればE=[00001]、C=E+Rにより元の符号語を一意に決定して誤り訂正することができる.
本実験では2種目を用い,具体的には:
S=4.*S(:,1)+2.*S(:,2)+S(:,3); (1)
row=find(S~=0);
[a,b]=size(row);
for i=1:a
switch(S(row(i)))
case{1}
R(row(i),:)=mod(R(row(i),:)+[0,0,0,0,1],2);
case{2}
R(row(i),:)=mod(R(row(i),:)+[0,0,0,1,0],2);
case{3}
R(row(i),:)=mod(R(row(i),:)+[0,0,0,1,1],2);
case{4}
R(row(i),:)=mod(R(row(i),:)+[0,0,1,0,0],2);
case{5}
R(row(i),:)=mod(R(row(i),:)+[0,1,0,0,0],2);
case{6}
R(row(i),:)=mod(R(row(i),:)+[0,0,1,1,0],2);
case{7}
R(row(i),:)=mod(R(row(i),:)+[1,0,0,0,0],2);
end
end
C=R;
ここでは式(1)においてバイナリコードワードを10進数に変換する方式を採用し,これによりfind関数を用いてS行列に誤りが発生したか否かおよび誤りが発生した位置を一意に決定することができ,forサイクルを用いて行列を一歩一歩対比することなくmatlabの行列計算特性を利用して演算数を大幅に簡略化した.