このペ,ジの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。一个>
誤りの検出と訂正
巡回冗長検査符号
CRC符号の機能
巡回冗長検査(CRC)符号化は,メッセージが送信されるときに発生する誤りを検出するための誤り制御符号化手法です。ブロック符号や畳み込み符号とは異なり,crc符号には組み込みの誤り訂正能力がありません。代わりに,通信システムが受信メッセージのワードに誤りを検出すると,受信側はメッセージワードを再送信するよう送信側に要求します。
CRC符号化では,送信側で各メッセ,ジワ,ドに規則が適用され,<年代p一个nclass="emphasis">“チェックサム”または<年代p一个nclass="emphasis">“シンドロム”という余分なビットが作成され,チェックサムがメッセジワドに追加されます。送信されたワ,ドを受信した後,受信側は受信したワ,ドに同じ規則を適用します。結果のチェックサムが0以外である場合,誤りが発生しているので,送信側はメッセージワードを再送信する必要があります。
メインの通信工具箱™ブロックライブラリで错误检测和校正ライブラリのアイコンをダブルクリックして,このライブラリを開きます。誤りの検出と訂正のライブラリでCRCサブライブラリのアイコンをダブルクリックしてCRCサブライブラリを開きます。
通信工具箱は,Simulink金宝app<年代up>®年代up>ブロック,系统对象,またはMATLAB<年代up>®年代up>オブジェクトを使用したCRC符号化をサポ,トしています。これらのCRC符号化機能は,<一个href="//www.tatmou.com/jp/help/comm/error-detection-and-correction.html" class="a">誤りの検出と訂正一个>にリストされています。
CRC非直接アルゴリズム
CRC非直接アルゴリズムは,多項式Mに対応するバイナリデータベクトルを受け取り,多項式Cに対応するrビットのチェックサムを追加します。<年代p一个nclass="emphasis">xr年代up>による乗算は入力ベクトルを左側にrビットシフトすることに相当するので,入力ベクトルとチェックサムの連結は,多項式T = M*
xr年代up>+ cに対応します。Tが次数rの定義済み多項式P(生成多項式<年代p一个nclass="emphasis">)によって除算されるようにcを選択します。
アルゴリズムはTをPで除算し,チェックサムを剰余に対応するバイナリベクトルに等しくなるように設定します。したがって,t = q*
P + Rの場合(ここで,Rはより小さい次数の多項式),チェックサムはRに対応するバイナリベクトルです。アルゴリズムは,チェックサムの長さがrになるように,必要に応じてチェックサムの先頭に0を追加します。
CRCアルゴリズムの伝送位相を実装するCRC生成機能は,以下の処理を行います。
入力デ,タベクトルをrビットだけ左にシフトし,対応する多項式をPで除算します。
チェックサムを長さr(ステップ1の剰余に相当)のバイナリベクトルと等しくなるように設定します。
チェックサムを入力デ,タベクトルに追加します。結果は出力ベクトルです。
先に説明したように,crc検出機能は,その入力ベクトル全体のチェックサムを計算します。
CRCアルゴリズムは,バ▪▪ナリベクトルを使用してバ▪▪ナリ多項式を降べきの順で表します。たとえば,ベクトル[1 1 0 1]
は,多項式<年代p一个nclass="emphasis">x3.年代up>+<年代p一个nclass="emphasis">x2年代up>+ 1を表します。
メモ:年代tr在g>
この節で説明する実装は,crcアルゴリズムの多くの有効な実装の1です。別の実装では,別の数値結果が得られることがあります。
ビットは,最小のインデックスビットから最大のインデックスビットに向かって線形フィードバックシフトレジスタ(LFSR)に入力されます。入力メッセ,ジビットのシ,ケンスは,メッセ,ジ多項式の係数を降べきの順で表します。メッセージベクトルはr個の0で拡張され,LFSRをフラッシュします(ここでrは生成多項式の次数です)。左端のレジスタステージからの出力d(1)が1の場合,シフトレジスタ内のビットは生成多項式の係数とXOR計算されたものです。拡張されたメッセージシーケンスがLFSRを介して完全に送信されると,レジスタにはチェックサム[d d(1)(2)。D (r)]が含まれます。これはバナリ長除算の実装です(メッセジシケンスが分子で多項式が分母です)。CRCチェックサムは,除算演算の剰余です。
CRC非直接アルゴリズムの使用例
入力フレ,ムが[1 1 0 0 1 1 0]'
で,多項式m =<年代p一个nclass="emphasis">x6年代up>+<年代p一个nclass="emphasis">x5年代up>+<年代p一个nclass="emphasis">x2年代up>+<年代p一个nclass="emphasis">xに対応し,生成多項式がp =<年代p一个nclass="emphasis">x3.年代up>+<年代p一个nclass="emphasis">x2年代up>+ 1(次数r = 3)であるとします。多項式の除算によって,m*
x3.年代up>= (<年代p一个nclass="emphasis">x6年代up>+<年代p一个nclass="emphasis">x3.年代up>+<年代p一个nclass="emphasis">x)*
P +<年代p一个nclass="emphasis">xになります。剰余はr =<年代p一个nclass="emphasis">xなので,チェックサムは[0 10 0]'
です。チェックサムの長さが3になるように,左側に0が追加されています。
CRC直接アルゴリズム
ここで,
メッセ,ジブロック入力は,<年代p一个nclass="inlineequation">
符号語出力は,<年代p一个nclass="inlineequation">
直接CRC符号化の初期ステップは,位置xにある3のスッチによって生起します。このアルゴリズムはk個のメッセ,ジビットを符号化器に送り込みます。これらのビットは,符号語出力の最初のkビットです。同時に,線形フィ,ドバックシフトレジスタ(LFSR)にk個のビットが送信されます。k番目のメッセージ ビットの LFSR への送り込みが完了すると、スイッチは Y の位置に移動します。この例では、LFSR には多項式除算の数値剰余が含まれます。これらのビットは、LFSR からシフトされます。これらのビットは、符号語出力の残りのビット (チェックサム) です。
CRC符号化の参考文献
[1]斯克拉,伯纳德。,Digital Communications: Fundamentals and Applications, Englewood Cliffs, NJ, Prentice Hall, 1988.
[2]柳条,斯蒂芬B.,数字通信和存储的错误控制系统,上马勒河,新泽西州,普伦提斯大厅,1995。
CRC符号の機能
巡回冗長検査(CRC)符号化は,メッセージが送信されるときに発生する誤りを検出するための誤り制御符号化手法です。ブロック符号や畳み込み符号とは異なり,crc符号には組み込みの誤り訂正能力がありません。代わりに,通信システムが受信メッセージのワードに誤りを検出すると,受信側はメッセージワードを再送信するよう送信側に要求します。
CRC符号化では,送信側で各メッセ,ジワ,ドに規則が適用され,<年代p一个nclass="emphasis">“チェックサム”または<年代p一个nclass="emphasis">“シンドロム”という余分なビットが作成され,チェックサムがメッセジワドに追加されます。送信されたワ,ドを受信した後,受信側は受信したワ,ドに同じ規則を適用します。結果のチェックサムが0以外である場合,誤りが発生しているので,送信側はメッセージワードを再送信する必要があります。
メインの通信工具箱™ブロックライブラリで错误检测和校正ライブラリのアイコンをダブルクリックして,このライブラリを開きます。誤りの検出と訂正のライブラリでCRCサブライブラリのアイコンをダブルクリックしてCRCサブライブラリを開きます。
通信工具箱は,Simulink金宝app<年代up>®年代up>ブロック,系统对象,またはMATLAB<年代up>®年代up>オブジェクトを使用したCRC符号化をサポ,トしています。これらのCRC符号化機能は,<一个href="//www.tatmou.com/jp/help/comm/error-detection-and-correction.html" class="a">誤りの検出と訂正一个>にリストされています。
CRC非直接アルゴリズム
CRC非直接アルゴリズムは,多項式Mに対応するバイナリデータベクトルを受け取り,多項式Cに対応するrビットのチェックサムを追加します。<年代p一个nclass="emphasis">xr年代up>による乗算は入力ベクトルを左側にrビットシフトすることに相当するので,入力ベクトルとチェックサムの連結は,多項式T = M*
xr年代up>+ cに対応します。Tが次数rの定義済み多項式P(生成多項式<年代p一个nclass="emphasis">)によって除算されるようにcを選択します。
アルゴリズムはTをPで除算し,チェックサムを剰余に対応するバイナリベクトルに等しくなるように設定します。したがって,t = q*
P + Rの場合(ここで,Rはより小さい次数の多項式),チェックサムはRに対応するバイナリベクトルです。アルゴリズムは,チェックサムの長さがrになるように,必要に応じてチェックサムの先頭に0を追加します。
CRCアルゴリズムの伝送位相を実装するCRC生成機能は,以下の処理を行います。
入力デ,タベクトルをrビットだけ左にシフトし,対応する多項式をPで除算します。
チェックサムを長さr(ステップ1の剰余に相当)のバイナリベクトルと等しくなるように設定します。
チェックサムを入力デ,タベクトルに追加します。結果は出力ベクトルです。
先に説明したように,crc検出機能は,その入力ベクトル全体のチェックサムを計算します。
CRCアルゴリズムは,バ▪▪ナリベクトルを使用してバ▪▪ナリ多項式を降べきの順で表します。たとえば,ベクトル[1 1 0 1]
は,多項式<年代p一个nclass="emphasis">x3.年代up>+<年代p一个nclass="emphasis">x2年代up>+ 1を表します。
メモ:年代tr在g>
この節で説明する実装は,crcアルゴリズムの多くの有効な実装の1です。別の実装では,別の数値結果が得られることがあります。
ビットは,最小のインデックスビットから最大のインデックスビットに向かって線形フィードバックシフトレジスタ(LFSR)に入力されます。入力メッセ,ジビットのシ,ケンスは,メッセ,ジ多項式の係数を降べきの順で表します。メッセージベクトルはr個の0で拡張され,LFSRをフラッシュします(ここでrは生成多項式の次数です)。左端のレジスタステージからの出力d(1)が1の場合,シフトレジスタ内のビットは生成多項式の係数とXOR計算されたものです。拡張されたメッセージシーケンスがLFSRを介して完全に送信されると,レジスタにはチェックサム[d d(1)(2)。D (r)]が含まれます。これはバナリ長除算の実装です(メッセジシケンスが分子で多項式が分母です)。CRCチェックサムは,除算演算の剰余です。
CRC非直接アルゴリズムの使用例
入力フレ,ムが[1 1 0 0 1 1 0]'
で,多項式m =<年代p一个nclass="emphasis">x6年代up>+<年代p一个nclass="emphasis">x5年代up>+<年代p一个nclass="emphasis">x2年代up>+<年代p一个nclass="emphasis">xに対応し,生成多項式がp =<年代p一个nclass="emphasis">x3.年代up>+<年代p一个nclass="emphasis">x2年代up>+ 1(次数r = 3)であるとします。多項式の除算によって,m*
x3.年代up>= (<年代p一个nclass="emphasis">x6年代up>+<年代p一个nclass="emphasis">x3.年代up>+<年代p一个nclass="emphasis">x)*
P +<年代p一个nclass="emphasis">xになります。剰余はr =<年代p一个nclass="emphasis">xなので,チェックサムは[0 10 0]'
です。チェックサムの長さが3になるように,左側に0が追加されています。
CRC直接アルゴリズム
ここで,
メッセ,ジブロック入力は,<年代p一个nclass="inlineequation">
符号語出力は,<年代p一个nclass="inlineequation">
直接CRC符号化の初期ステップは,位置xにある3のスッチによって生起します。このアルゴリズムはk個のメッセ,ジビットを符号化器に送り込みます。これらのビットは,符号語出力の最初のkビットです。同時に,線形フィ,ドバックシフトレジスタ(LFSR)にk個のビットが送信されます。k番目のメッセージ ビットの LFSR への送り込みが完了すると、スイッチは Y の位置に移動します。この例では、LFSR には多項式除算の数値剰余が含まれます。これらのビットは、LFSR からシフトされます。これらのビットは、符号語出力の残りのビット (チェックサム) です。
CRC符号化の参考文献
[1]斯克拉,伯纳德。,Digital Communications: Fundamentals and Applications, Englewood Cliffs, NJ, Prentice Hall, 1988.
[2]柳条,斯蒂芬B.,数字通信和存储的错误控制系统,上马勒河,新泽西州,普伦提斯大厅,1995。
ブロック符号
ブロック符号化機能
誤り制御符号化の手法では,デジタル通信システムにおいてメッセージが送信されたときに生じる誤りを検出し,可能な場合は訂正します。これを実現するために,符号化器は情報シンボルだけでなく余分な冗長シンボルも送信します。復号化器は受信したものを解釈し,冗長シンボルを使用して,送信中に生じた誤りを検出し,可能な場合は訂正します。送信チャネルにノイズが多い,またはデータがノイズの影響を受けやすい場合,誤り制御符号化を使用する場合があります。デタやノズの性質により,特定のタプの誤り制御符号化を選択することができます。
ブロック符号化は,誤り制御符号化の特殊なケ,スです。ブロック符号化手法は,固定数のメッセージ シンボルを固定数の符号シンボルにマッピングします。ブロック符号化器は、データの各ブロックを個別に扱うメモリのないデバイスです。Communications Toolbox には、Simulink ブロック、System object、および MATLAB 関数を使用することによる、ブロック符号化機能が含まれています。
ブロック符号化手法のクラスには,以下の図に示すカテゴリが含まれます。
通讯工具箱は一般線形ブロック符号をサポ,トしています。これは,巡回、BCH、ハミング、リード・ソロモン符号 (すべて特殊な線形ブロック符号) も処理します。この製品のブロックは、前述の手法のいずれかを使用して、メッセージを符号化または復号化できます。リード・ソロモン復号化器と BCH 復号化器は復号化中に検出した誤りの数を示します。リード・ソロモン符号化ブロックを使用すると、シンボルまたはビットをデータとして使用するかどうかを決定できます。
メモ:年代tr在g>
通讯工具箱のブロックと関数は,2または<年代up>米年代up>個のシンボルをもアルファベットを使用する誤り制御符号用に設計されています。
通信工具箱年代p一个n>がサポトしている関数-年代tr在g>通信工具箱の関数はシミュレーションブロックの以下の機能をサポートしています。
手法の特性(誤り訂正能力や可能なメッセ,ジ長など)を決定する
手法に関連する以下のような下位レベルの計算を実行する
真理表の計算
生成行列またはパリティチェック行列の計算
生成行列とパリティチェック行列の間の変換
生成多項式の計算
誤り制御符号化機能の詳細は,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">ブロック符号一个>を参照してください。
用語
この節では,符号化される情報は”メッセージ”シンボルで構成され,生成される符号は“符号語”で構成されます。<年代p一个nclass="emphasis">
Kメッセージシンボルの各ブロックは,Nメッセージシンボルで構成される符号語に符号化されます。Kはメッセ,ジ長と呼ばれ,nは符号語長と呼ばれ,符号は[n,K]符号と呼ばれます。
ブロック符号化のデ,タ形式
各メッセ,ジまたは各符号語はシンボルを順番に並べたグル,プです。块编码サブラ▪▪▪ブラリの各ブロックは、次の節<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">バ电子邮箱ナリ形式(すべての符号化方法)一个>で説明するように、タ、ムステップごとに1ワ、ド処理します。リ,ド,ソロモン符号化ブロックを使用すると,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">整数形式(リ,ド·ソロモンのみ)一个>で説明するように,バナリデタと整数デタの間で選択できるようになります。
バ▪▪ナリ形式(すべての符号化方法)-年代tr在g>メッセジと符号語をバナリの<年代p一个nclass="emphasis">“ベクトル”信号として構築できます。ここで,各ベクトルはメッセージ ワードまたは符号語を表します。与えられた時間において、符号化器はメッセージ ワード全体を受信してそれを符号化し、符号語全体を出力します。メッセージ信号と符号信号は同じサンプル時間で動作します。
この例は,時間0において,符号化器が4ビットのメッセージを受信し,5ビットの符号語を生成することを示します。時間1では,新しいメッセ,ジに対してこのプロセスを繰り返します。
バ▪ナリ入力を使用するリ▪ド▪ソロモン<年代p一个nclass="emphasis">”“以外のすべての符号化手法では,必要なメッセージベクトルの長さはKで,対応する符号ベクトルの長さはNです。バ▪ナリ入力を使用するリ▪ド▪ソロモン符号では、符号のシンボルは長さ M の 2 進シーケンスで、ガロア体の要素 GF(2<年代up>米年代up>)に対応します。この場合,メッセージ ベクトルの長さは M*K で、対応する符号ベクトルの長さは M*N でなければなりません。バイナリ入力の RS Encoder ブロックとバイナリ出力の RS Decoder ブロックは、メッセージと符号語に対してこの形式を使用します。
ブロック符号化ブロックへの入力がフレームベースベクトルの場合,入力ベクトルは行ベクトルではなく,列ベクトルでなければなりません。
サンプルベ,スのメッセ,ジをバ,<一个href="//www.tatmou.com/jp/jp/help/comm/ref/bernoullibinarygenerator.html">伯努利二进制发生器年代p一个n>ブロックを設定して,その<年代tr在g class="guilabel">[0的概率]年代tr在g>パラメ,タ,が,作成する信号と同じ長さのベクトルになるようにします。フレムベスのメッセジをバナリ形式で生成するには,同じブロックを設定して,その<年代tr在g class="guilabel">[0的概率]年代tr在g>パラメ,タ,をスカラ,にし,その<年代tr在g class="guilabel">[每帧样本]年代tr在g>パラメ,タ,を作成する信号の長さにします。
シリアル信号の使用年代tr在g>
複数のサンプルがまとまってメッセージワードまたは符号語を形成するような状況で,メッセージと符号語をスカラー信号として構築する場合,<一个href="//www.tatmou.com/jp/help/dsp/ref/buffer.html">缓冲年代p一个n>と<一个href="//www.tatmou.com/jp/help/dsp/ref/unbuffer.html" hreflang="en">Unbuffer年代p一个n>を使用できます。バッファリングにはレ▪▪テンシとマルチレ▪▪ト処理が含まれます。モデルが誤り率を計算する場合,符号化とバッファリングの組み合わせにおける初期の遅延は<一个href="//www.tatmou.com/jp/jp/help/comm/ref/errorratecalculation.html">错误率计算年代p一个n>ブロックの<年代tr在g class="guilabel">(接收延迟)年代tr在g>パラメ,タ,に影響します。
モデル内の信号のサンプル時間を表示することができます。<年代tr在g class="guimenuitem">[デバッグ]年代tr在g>タブで,<年代tr在g class="guimenuitem">[情報のオバレ]年代tr在g>を展開します。<年代tr在g class="guimenuitem">[サンプル時間]年代tr在g>セクションで,<年代tr在g class="guimenuitem">[色]年代tr在g>を選択します。または,<一个href="//www.tatmou.com/jp/help/simulink/slref/probe.html">探针年代p一个n>(金宝app模型)年代p一个n>ブロックを接続線につなげて,サンプル時間,バッファリング,および遅延を評価しやすくすることができます。
整数形式(リ.ド·ソロモンのみ)-年代tr在g>[n, k]リ,ド·ソロモン符号に対するメッセ,ジワ,ドはm * kビットで構成されます。これは0から2<年代up>米年代up>までのk個のシンボルを意味します。このシンボルは長さmの2進シケンスで,降べき順で,ガロア体の要素gf (2 .<年代up>米年代up>)に対応します。リ,ド·ソロモン符号の整数形式を使用すると,メッセ,ジと符号語を,バ,ナリ信号ではなく<年代p一个nclass="emphasis">“整数”信号として構築できます(入力はフレ,ムベ,スの列ベクトルでなければなりません)。
メモ:年代tr在g>
この説明で,金宝app仿真软件は”最初の”ビットがシンボルの最上位ビットであると想定しています。<年代p一个nclass="emphasis">最初“とは,ベクトルのインデックスが最小であるか,またはスカラー系列に対する最小時間を意味します。
次の図はリ、ド、ソロモン符号化器におけるバ、ナリ信号と整数信号の間の等価な関係を示します。復号化器の場合も同様です。
サンプルベースのメッセージを整数形式で生成するには,随机整数生成器ブロックを設定し,<年代tr在g class="guilabel">(数量多状态)年代tr在g>パラメ,タ,と<年代tr在g class="guilabel">(初始种子)年代tr在g>パラメ,タ,が目的の長さのベクトルで,<年代tr在g class="guilabel">(数量多状态)年代tr在g>ベクトルのすべてのエントリが2<年代up>米年代up>になるようにします。フレ,ムベ,スのメッセ,ジを整数形式で生成するには,同じブロックを設定して,その<年代tr在g class="guilabel">(数量多状态)年代tr在g>パラメ,タ,と<年代tr在g class="guilabel">(初始种子)年代tr在g>パラメ,タ,をスカラ,にし,その<年代tr在g class="guilabel">[每帧样本]年代tr在g>パラメ,タ,を作成する信号の長さにします。
モデル内でのブロック符号化器と復号化器の使用
符号化ブロックを設定した後,それらをモデル内に正しく配置するために役立つヒントをいくつか紹介しましょう。
ブロックに複数の出力がある場合,最初の出力は常に符号化デ,タのストリ,ムです。
Reed-SolomonブロックとBCHブロックには2番目の出力にエラーカウンターがあります。
信号サズがマスクパラメタとして適切かどうかを確認してください。たとえば,二进制循环编码器ブロックを使用し<年代tr在g class="guilabel">[消息长度K]年代tr在g>を4
に設定する場合,入力信号は長さ4のベクトルでなければなりません。
モデル内の信号のサ@ @ズを表示することができます。<年代tr在g class="guimenuitem">[デバッグ]年代tr在g>タブで,<年代tr在g class="guimenuitem">[情報のオバレ]年代tr在g>を展開します。<年代tr在g class="guimenuitem">[信号]年代tr在g>セクションで,<年代tr在g class="guimenuitem">[信号の次元]年代tr在g>を選択します。
ブロック符号化の例
例:整数書式のリ:ド·ソロモン符号-年代tr在g>この例では整数形式のリ,ド·ソロモン符号を使用します。符号化ブロックに対する符号とメッセ,ジ信号の適切なベクトル長を示します。また各符号語に誤りを発生させる簡単な方法を使用して、誤り訂正を紹介します。
モデルを開くには,matlabコマンドラescンにdoc_rscoding
と入力します。モデルを作成するには,次のブロックを収集し,設定します。
通讯来源ラescブラリの<一个href="//www.tatmou.com/jp/help/comm/ref/randomintegergenerator.html">随机整数发生器年代p一个n>
(数量多状态)年代tr在g>を15
に設定します。
(初始种子)年代tr在g>を正の数値に設定します。ここでは<一个href="//www.tatmou.com/jp/help/matlab/ref/randn.html">randn
を選択します。
(框架输出)年代tr在g>チェックボックスをオンにします。
[每帧样本]年代tr在g>を5
に設定します。
-
[码字长度N]年代tr在g>を15
に設定します。
[消息长度K]年代tr在g>を5
に設定します。
金宝appSimulink数学运算ラescブラリの<一个href="//www.tatmou.com/jp/help/simulink/slref/gain.html">获得年代p一个n>(金宝app模型)年代p一个n>
(获得)年代tr在g>を[0;0;0;0;0;的(1)]
に設定します。
-
[码字长度N]年代tr在g>を15
に設定します。
[消息长度K]年代tr在g>を5
に設定します。
金宝appSimulink sinkラブラリの<一个href="//www.tatmou.com/jp/help/simulink/slref/scope.html">范围年代p一个n>(金宝app模型)年代p一个n>このブロックを2コピします。
金宝appSimulink数学运算ラescブラリの<一个href="//www.tatmou.com/jp/help/simulink/slref/add.html">添加年代p一个n>(金宝app模型)年代p一个n>
[征兆清单]年代tr在g>を|-+
に設定します。
前の図に示したようにブロックを接続します。<年代tr在g class="guimenuitem">[シミュレ,ション]年代tr在g>タブの<年代tr在g class="guimenuitem">[シミュレ,ション]年代tr在g>セクションで,<年代tr在g class="guilabel">[終了時間]年代tr在g>を500
に設定します。<年代tr在g class="guimenuitem">[シミュレ,ション]年代tr在g>セクションは複数のタブに表示されます。
モデル内の信号のベクトル長を表示することができます。<年代tr在g class="guimenuitem">[デバッグ]年代tr在g>タブで,<年代tr在g class="guimenuitem">[情報のオバレ]年代tr在g>を展開します。<年代tr在g class="guimenuitem">[信号]年代tr在g>セクションで,<年代tr在g class="guimenuitem">[信号の次元]年代tr在g>を選択します。
符号化器は長さ5(この場合のK)のベクトルを受け取り,長さ15(この場合のN)のベクトルを生成します。復号化器はこの逆を行います。
モデルを実行すると,次のメジのスコプが生成されます。プロットされる誤りの数は随机整数生成器ブロック内の<年代tr在g class="guilabel">(初始种子)年代tr在g>値によって異なります。軸の範囲を調整して,1目のスコ。2 .目のスコ,プ内のプロット領域で右クリックし,<年代tr在g class="guimenuitem">[コンフィギュレ,ションプロパティ]年代tr在g>を選択します。<年代tr在g class="guimenuitem">[表示]年代tr在g>タブで,座標軸の範囲を調整します。
訂正前の誤り数年代tr在g>
2番目のプロットは,復号化器がメッセ,ジの復元中に検出した誤り数です。获得ブロックが各符号語内の最初の 5 つのシンボルをゼロで置き換えたため、5 の数がしばしば現れています。しかし、正しい符号語の最初の 5 個所に 1 つ以上のゼロを含む場合は、誤り数が 5 を超えることはありません。
最初のプロットは元のメッセージと復元されたメッセージとの差で,復号化器が発生したすべての誤りを訂正できたため,プロットの5つのデータストリームのそれぞれはゼロです。
特定のブロック符号化手法に関するメモ
块编码サブライブラリは外観や使い勝手において同じように見えますが,各種の符号化手法は同一ではありません。この節では,このサブライブラリの符号化手法カテゴリ用のパラメーターや信号に適用される、特別なオプションと制限について説明します。以下で説明する符号化手法には、一般線形ブロック符号、巡回符号、ハミング符号、BCH 符号またはリード・ソロモン符号が含まれます。
一般線形ブロック符号年代tr在g>
一般線形ブロック符号を使ってメッセ,ジを符号化するには,生成行列が必要です。符号の復号化には,生成行列が必要であり,場合によっては真理表も必要です。<一个href="//www.tatmou.com/jp/help/comm/ref/binarylinearencoder.html">二进制线性编码器年代p一个n>ブロックと<一个href="//www.tatmou.com/jp/jp/help/comm/ref/binarylineardecoder.html">二进制线性解码器年代p一个n>ブロックを使用するには,<年代tr在g class="guilabel">(生成矩阵)年代tr在g>パラメ,タ,と<年代tr在g class="guilabel">[纠错真值表]年代tr在g>パラメタにいて理解しなければなりません。
生成矩阵- [n, k]線形ブロック符号にメッセ.ジを符号化する処理は,k行n列の生成行列<年代p一个nclass="emphasis">Gによって決定されます。特に,1行 K 列のメッセージ ベクトル<年代p一个nclass="emphasis">vは,1行n列の符号語ベクトル<年代p一个nclass="emphasis">vGに符号化されます。<年代p一个nclass="emphasis">Gが形式[<年代p一个nclass="emphasis">我k年代ub>,<年代p一个nclass="emphasis">P]または[<年代p一个nclass="emphasis">P,<年代p一个nclass="emphasis">我k年代ub>]をも場合,ここで<年代p一个nclass="emphasis">Pは適当なk行(n-k)列の行列で<年代p一个nclass="emphasis">我k年代ub>はk行<年代p一个nclass="emphasis">-K列の単位行列ですが,<年代p一个nclass="emphasis">Gは<年代p一个nclass="emphasis">“標準形”と呼ばれます(著者によっては,克拉克和凯恩<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">[2]一个>のように最初の標準形を使用する場合も,林和Costello<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">[3]一个>のように後者を使用する場合もあります)。この製品の線形ブロック符号化ブロックでは,<年代tr在g class="guilabel">(生成矩阵)年代tr在g>のマスクパラメ,タ,が標準形である必要があります。
译码表—復号化テブルは,伝送中に生じた符号誤りを訂正する方法を復号化器に示します。ハミング符号は,任意の符号語内の単一シンボルの誤りを訂正することができます。その他の符号は、指定された符号語内の複数のシンボルで発生した誤りを訂正、または部分的に訂正します。
二进制线性解码器年代p一个n>ブロックを使用すると,<年代tr在g class="guilabel">[纠错真值表]年代tr在g>パラメ,タ,で復号化テ,ブルを指定できます。復号化テ,ブルはn列,2<年代up>n - k年代up>行の行列で表します。各行は,受信した符号語ベクトルに対して訂正ベクトルを指定します。
[纠错真值表]年代tr在g>パラメ,タ,を0
に設定することで復号化テ,ブルを明示的に指定することを回避できます。<年代tr在g class="guilabel">[纠错真值表]年代tr在g>が0
の場合,ブロックは関数<一个href="//www.tatmou.com/jp/help/comm/ref/syndtable.html">syndtable
を使用して復号化テ,ブルを計算します。
巡回符号年代tr在g>
巡回符号では,符号語長nの形式は<年代up>米年代up>-1でなければなりません。ここで米は3.以上の整数です。
发电机多项式—巡回符号は,多項式が符号化過程を完全に決定できるような特殊な代数的性質をもます。このいわゆる生成多項式は,多項式<年代p一个nclass="emphasis">xN年代up>-1の(n-k)次除算子です。范·林特の<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">[5]一个>では,生成多項式が巡回符号をどのように決定するかを説明しています。
二进制循环编码器年代p一个n>ブロックと<一个href="//www.tatmou.com/jp/help/comm/ref/binarycyclicdecoder.html">二进制循环译码器年代p一个n>ブロックを使用すると,生成多項式を,そこでKを指定せずに,2番目のマスクパラメーターとして指定できます。ブロックは,多項式の係数を変数の<年代p一个nclass="emphasis">“昇べき”の順にリストするベクトルを使用して,生成多項式を表します。巡回符号用の生成多項式は,関数<一个href="//www.tatmou.com/jp/help/comm/ref/cyclpoly.html">cyclpoly
を使用して見けることができます。
生成多項式を指定しない場合,2番目のマスクパラメ,タ,をkの値に設定します。
ハミング符号年代tr在g>
ハミング符号では,符号語長nの形式は<年代up>米年代up>-1でなければなりません。ここで米は3.以上の整数です。メッセージ長 K は N-M に等しくなければなりません。
原始多项式-ハミング符号は<年代up>米年代up>の要素をも代数体に依存します(より一般的には,素数<年代p一个nclass="emphasis">pに対して<年代p一个nclass="emphasis">p米年代up>要素)。そのようなフィ,ルドの要素は,<年代p一个nclass="emphasis">“原始元”と呼ばれるフィ,ルドの特定の要素に<年代p一个nclass="emphasis">“相対的な”名前が付けられます。原始元の最小多項式は<年代p一个nclass="emphasis">“原始多項式”と呼ばれます。<一个href="//www.tatmou.com/jp/jp/help/comm/ref/hammingencoder.html">汉明编码年代p一个n>ブロックと<一个href="//www.tatmou.com/jp/jp/help/comm/ref/hammingdecoder.html">汉明译码器年代p一个n>ブロックを使用すると,計算に使用する有限体用の原始多項式を指定できます。この多項式を指定する場合は,2番目のマスクパラメ,タ,フィ,ルドで指定します。ブロックは,多項式の係数を変数の<年代p一个nclass="emphasis">“昇べき”の順にリストするベクトルを使用して原始多項式を表します。ガロア体用の生成多項式は,関数<一个href="//www.tatmou.com/jp/jp/help/comm/ref/gfprimfd.html">gfprimfd
を使用して見けることができます。
原始多項式を指定しない場合,2番目のマスクパラメ,タ,をkの値に設定します。
BCH符号年代tr在g>
BCH符号は,有限体を使用して構築される巡回誤り修正符号です。これらの符号では,符号語長nの形式は<年代up>米年代up>-1でなければなりません。ここで米は3.から 9 までの整数です。メッセージ長 K は N に依存する特定の値に制限されます。与えられた N に対する有効な K の値については、<一个href="//www.tatmou.com/jp/help/comm/ref/comm.bchencoder-system-object.html">comm.BCHEncoder
系统对象™のリファレンスペ,ジを参照してください。BCH符号に関する符号語長、メッセージ長、および誤り訂正能力間の関係を説明する既知の解析式はありません。
狭義のBCH符号年代tr在g>
狭義の生成多項式はLCM[m_1(x), m_2(x),…, m_2t(x)]です。ここで各項は以下のとおりです。
LCMは最小公倍数を表します。
M_i (x)はα<年代up>我年代up>に対する最小多項式を表します。αは体gf (n + 1
)の既定の原始多項式の根です。
Tは符号の誤り訂正能力を表します。
リ,ド·ソロモン符号年代tr在g>
リ,ド,ソロモン符号はバ,スト発生する誤りの訂正に便利です。単純なケ,スでは,リ,ド·ソロモン符号の符号語の長さは形式n = 2<年代up>米年代up>-1でなければなりません。ここで2<年代up>米年代up>は符号のシンボル数です。リ,ド·ソロモン符号の誤り訂正能力は地板((n - k) / 2)
です。ここでK はメッセージ ワードの長さです。N-K は偶数でなければなりません。
Nが2<年代up>米年代up>-1よりも小さい,短縮リ,ド·ソロモン符号を使用すると便利な場合があります。この場合,符号化器は<年代up>米年代up>-1-n個のゼロのシンボルを各メッセジワドと符号語に追加します。短縮リ,ド·ソロモン符号の誤り訂正能力も地板((n - k) / 2)
になります。Communications Toolbox の Reed-Solomon ブロックは短縮リード・ソロモン符号を実装することができます。
非二进制符号的影响——リード・ソロモン符号と,この製品でサポートされている他の符号との違いの1つは,リード・ソロモン符号はシンボルをGF(2)ではなく,GF (2<年代up>米年代up>)で処理することです。各シンボルはmビットで指定されます。リ,ド·ソロモン符号のシンボルの非 0-1 的な性質により、Reed-Solomon ブロックは他の符号化ブロックと以下の点で異なります。
整数输入RS编码器年代p一个n>ブロックと<一个href="//www.tatmou.com/jp/jp/help/comm/ref/integeroutputrsdecoder.html">整数输出RS解码器年代p一个n>ブロックを介して,整数形式を使用できます。
バイナリ形式では,ベクトル長が,メッセージに対してはM * K (Kではない)の整数倍,符号語に対しては同じ整数M * N (Nではない)であることを想定しています。
错误信息-リ,ド·ソロモンの復号化ブロック(<一个href="//www.tatmou.com/jp/help/comm/ref/binaryoutputrsdecoder.html">二进制输出RS解码器年代p一个n>と<一个href="//www.tatmou.com/jp/jp/help/comm/ref/integeroutputrsdecoder.html">整数输出RS解码器年代p一个n>)はシミュレ,ション中に誤りに関する情報を返します。2番目の出力信号は、そのブロックが入力符号語内で検出した誤り数を示します。2 番目の出力の A -1 は、ブロックが、その符号化方式で訂正可能な数を上回る誤りを検出したことを示します。
短縮,パンクチャ,および消去
多くの標準がパンクチャド符号を利用し,デジタル受信機は容易に消去を出力できます。受信機が消去を生成するフェージングチャネルでは,BCHとRSのパフォーマンスが大幅に改善されます。
“パンクチャド符号語”ではパリティシンボルだけが削除され,<年代p一个nclass="emphasis">“短縮符号語”では情報シンボルだけが削除されます。符号語は,情報シンボルまたはパリティシンボルのいずれかにこれらの消去をもことができます。
短縮,パンクチャ,および消去を使用するリ,ド·ソロモンの例年代tr在g>
このセクションでは,短縮,パンクチャ,および消去を使用した代表的なリード・ソロモン符号化例を,ますます複雑になる誤り訂正を含めて作成します。
短縮とパンクチャを使用した符号化器例年代tr在g>
次の図は,短縮とパンクチャを使用した(7,3)リード・ソロモン符号化器の代表的な例を示しています。
この図では,メッセ,ジソ,スにより<年代ub>1年代ub>我<年代ub>2年代ub>で指定される2つの情報シンボルが出力されます(BCHの例では,シンボルはバイナリビットです)。この符号は短縮(7,3)符号であるため,情報シンボルの前にゼロを追加しなければなりません。これにより,0i<年代ub>1年代ub>我<年代ub>2年代ub>という3のシンボルから構成されるメッセジが生成されます。変更されたメッセ,ジシ,ケンスは,rsで符号化され,追加された情報ゼロはそのあと削除されます。その結果我<年代ub>1年代ub>我<年代ub>2年代ub>P<年代ub>1年代ub>P<年代ub>2年代ub>P<年代ub>3.年代ub>P<年代ub>4年代ub>が生成されます(この例では,パリティビットは符号語の末尾にあります)。
パンクチャ操作は,パンクチャベクトルによって制御されます。ここでは,このパンクチャベクトルは1011です。パンクチャベクトル内では,1
はシンボルが保持され,0
はシンボルが破棄されたことを意味します。この例では,パンクチャ操作により 2 番目のパリティ シンボルが削除され、I<年代ub>1年代ub>我<年代ub>2年代ub>P<年代ub>1年代ub>P<年代ub>3.年代ub>P<年代ub>4年代ub>という最終的なベクトルが生成されます。
短縮とパンクチャを使用した復号化器例年代tr在g>
次の図は,短縮符号語およびパンクチャド符号語でのrs復号化器の動作を示しています。
このケ,スは,短縮とパンクチャを使用したrs符号化器の図に示した符号化器の動作に対応します。前の図に示したとおり,符号化器は(5,2)符号語を受信します。これは(7,3)符号語から1シンボル短縮され,さらにその1シンボルはパンクチャされているためです。
最初のステップとして,復号化器は,符号語の第2のパリティ位置にEで指定された消去を追加します。これは,パンクチャベクトル1011に対応します。前の図に示したとおり,ゼロを追加することは短縮を意味します。1回の消去は、4 つの消去を訂正できる符号の消去訂正機能を超えません。復号化操作により、3 つのシンボルで構成されるメッセージ DI<年代ub>1年代ub>我<年代ub>2年代ub>が生成されます。前の図のように最初のシンボルは切り捨てられるので,最終出力は<年代ub>1年代ub>我<年代ub>2年代ub>になります。
短縮,パンクチャ,消去を使用する復号化器の例年代tr在g>
次の図は,パンクチャされ,短縮符号語に対して動作しながら,受信機によって生成された消去を生成する復号化器の様子を示しています。
この図では,復調器は符号化器が送信した<年代ub>1年代ub>我<年代ub>2年代ub>P<年代ub>1年代ub>P<年代ub>3.年代ub>P<年代ub>4年代ub>ベクトルを受信します。復調器は,受信した5つのシンボルのうち2つは,信頼できないので消去されることを宣言するため,シンボル2と5は消去と見なされます。外部ソスによって提供された01001ベクトルは,これらの消去を示しています。消去ベクトル内では,1はシンボルが消去シンボルで置き換えられること,0はシンボルが変更なしで渡されることを意味します。
復号化器のブロックは,符号語と消去ベクトルを受信し,ベクトル01001で示される消去を実行します。消去ベクトル内では,1はシンボルが消去シンボルで置き換えられること,0はシンボルが変更なしで渡されることを意味します。結果の符号語ベクトルは,i<年代ub>1年代ub>EP<年代ub>1年代ub>P<年代ub>3.年代ub>Eになります。ここで,Eは消去シンボルです。
符号語は,符号化操作で使用したパンクチャベクトル(1011など)に基づきデパンクチャされます。したがって,消去シンボルがp<年代ub>1年代ub>とP<年代ub>3.年代ub>の間に挿入され,i<年代ub>1年代ub>EP<年代ub>1年代ub>EP<年代ub>3.年代ub>Eという符号語ベクトルが生成されます。
復号化の直前に,情報ベクトルの冒頭にゼロを追加することは短縮を意味します。結果のベクトルは,0i<年代ub>1年代ub>EP<年代ub>1年代ub>EP<年代ub>3.年代ub>Eになるため,(7,3)符号語はBerlekampアルゴリズムに送られます。
この符号語は復号化され,3のシンボルで構成されるdi<年代ub>1年代ub>我<年代ub>2年代ub>(ここで,dはダミシンボルを示します)というメッセジが生成されます。最後に,メッセ,ジベクトルからdシンボルを削除することは,短縮を意味し,元の<年代ub>1年代ub>我<年代ub>2年代ub>ベクトルが生成されます。
詳細にいては,<一个href="//www.tatmou.com/jp/help/comm/ref/comm.rsdecoder-system-object.html" class="a">消失,パンクチャ,および短縮を使用したリ,ド·ソロモン符号化一个>Matlabの例または<一个href="//www.tatmou.com/jp/help/comm/ug/reed-solomon-coding-with-erasures-punctures-and-shortening.html" class="a">金宝appSimulinkでの消失,パンクチャ,および短縮を使用したリ,ド·ソロモン符号化一个>の例を参照してください。
整数書式のリ,ド·ソロモン符号
リド·ソロモン符号を整数形式で使用するモデル例を開くにはmatlabコマンドランでdoc_rscoding
と入力します。モデルの詳細は,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">例:整数書式のリ,ド·ソロモン符号一个>を参照してください。
生成多項式の決定
巡回,bch,リ,ド·ソロモン符号に対する生成多項式を求めるには,それぞれ関数cyclpoly
、bchgenpoly
,またはrsgenpoly
を使用します。次のコマンドを見てみましょう。
genpolyCyclic = cyclpoly(15,5)<年代p一个n年代tyle="color:#228B22">% 1 + X X ^ ^ 5 + 10年代p一个n>genpolyBCH = bchgenpoly(15,5)<年代p一个n年代tyle="color:#228B22">% x x ^ ^ 10 + 8 + x x ^ ^ 5 + 4 + x ^ 2 + x + 1年代p一个n>genpolyRS = rsgenpoly(15,5)
これらのコマンドは,異なるタ。出力は以下のようになります。
genpolycycle = 1 0 0 0 0 1 0 0 0 0 1 genpolyBCH = GF(2)数组。数组元素= 1 0 1 0 0 1 1 0 1 1 genpolyRS = GF(2^4)数组。原始多项式= D^4+D+1(19十进制)数组元素= 1 4 8 10 12 9 4 2 12 2 7
これらの出力の形式は,次のように変わります。
cyclpoly
は,多項式の係数を変数の“昇べき”<年代p一个nclass="emphasis">の順にリストする整数の行ベクトルを使用して,生成多項式を表します。
bchgenpoly
とrsgenpoly
は,多項式の係数を変数の“降べき”<年代p一个nclass="emphasis">の順にリストするガロア行ベクトルを使用して,生成多項式を表します。
rsgenpoly
は,二元体gf(2)以外のガロア体の係数を使用します。これらの係数の意味の詳細は,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">整数をガロア体にどのように対応づけるか一个>と<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">ガロア体上の多項式一个>を参照してください。
生成多項式の非一意性年代tr在g>
メッセ,ジ長と符号語長のペアによって,生成多項式が一意に決定されない場合があります。上記の例の関数の構文には,指定する特定の制約を満たす生成多項式を取り出すためのオプションも含まれています。構文のオプションの詳細は,関数のリファレンスペ,ジを参照してください。
生成多項式の代数表現年代tr在g>
bchgenpoly
とrsgenpoly
によって生成される生成多項式の形式は,(x - a<年代up>b年代up>x - a<年代up>b + 1年代up>)...(X-一个<年代up>b + 2 t - 1年代up>)です。ここで,一个は適切なガロア体に対する原始元で、b と t は整数です。この式の詳細は、関数のリファレンス ページを参照してください。
その他のブロック符号タスクの実行
この節では,線形ブロック符号に関連する典型的なパラメーターを計算する関数と,別の形式に情報を変換する関数について説明します。
線形ブロック符号の誤り訂正と誤り検出年代tr在g>
線形ブロック符号を使用して,d<年代ub>最小值年代ub>-1件の誤り検出かt =<年代p一个nclass="inlineequation">
件の誤り訂正を行うことができます。
符号の誤り訂正能力を低くすることで,t件よりも多くの誤りを検出できます。たとえば,d<年代ub>最小值年代ub>= 7の符号ではt = 3件の誤りを訂正できますが,代わりに最大4件の誤り検出と2件の誤り訂正を行うこともできます。
誤り訂正能力を求める年代tr在g>
関数bchgenpoly
およびrsgenpoly
は,BCHまたはリード・ソロモン符号の誤り訂正能力を示すオプションの第2出力引数を返すことができます。たとえば,次のコマンドを例に考えてみます。
[g,t] = bchgenpoly(31,16);T = 3
これらのコマンドにより,[31日16]BCH符号は各符号語内の3つの誤りまで訂正できることがわかます。
生成行列とパリティチェック行列を求める年代tr在g>
符号語長が2 ^ m - 1
のハミング符号に対するパリティチェック行列と生成行列を求めるには,以下に示すように関数hammgen
を使用します。米
は,少なくとも3でなければなりません。
[parmat,genmat] = hamgen (m);%汉明
巡回符号に対するパリティチェック行列と生成行列を求めるには,関数cyclgen
を使用します。符号語長と有効な生成多項式を与えなければなりません。符号語長とメッセージ長を指定した後、関数cyclpoly
を使用して有効な生成多項式を生成することができます。次に例を示します。
[parmat,genmat] = cyclgen(7,cyclpoly(7,4));<年代p一个n年代tyle="color:#228B22">%循环年代p一个n>
パリティチェック行列と生成行列の変換年代tr在g>
関数gen2par
は,生成行列からパリティチェック行列への変換,およびその逆の変換を行います。gen2par
のリファレンスペ,ジに,これを示す例があります。
ブロック符号化の参考文献
[1] Berlekamp, Elwyn R.,代数编码理论,纽约,McGraw-Hill, 1968。
[2] Clark, George C. Jr.和J. Bibb Cain,数字通信的纠错编码,纽约,全会出版社,1981年。
[3] Lin, Shu,和Daniel J. Costello, Jr.,错误控制编码:基础和应用,Englewood Cliffs, NJ, Prentice-Hall, 1983。
[4]彼得森,W.卫斯理和E. J.韦尔登,纠错码,第二版,剑桥,马萨诸塞州,麻省理工学院出版社,1972年。
[5] van Lint, j.h.,《编码理论导论》,纽约,Springer-Verlag, 1982。
[6]柳条,斯蒂芬B.,数字通信和存储的错误控制系统,上马勒河,新泽西州,普伦提斯大厅,1995。
[7] Robert G. Gallager,低密度奇偶校验码,剑桥,马萨诸塞州,麻省理工学院出版社,1963年。
[8] Ryan, William E.,“LDPC码介绍”,磁重码系统的编码和信号处理(Vasic, B.,编),CRC出版社,2004年。
ブロック符号化機能
誤り制御符号化の手法では,デジタル通信システムにおいてメッセージが送信されたときに生じる誤りを検出し,可能な場合は訂正します。これを実現するために,符号化器は情報シンボルだけでなく余分な冗長シンボルも送信します。復号化器は受信したものを解釈し,冗長シンボルを使用して,送信中に生じた誤りを検出し,可能な場合は訂正します。送信チャネルにノイズが多い,またはデータがノイズの影響を受けやすい場合,誤り制御符号化を使用する場合があります。デタやノズの性質により,特定のタプの誤り制御符号化を選択することができます。
ブロック符号化は,誤り制御符号化の特殊なケ,スです。ブロック符号化手法は,固定数のメッセージ シンボルを固定数の符号シンボルにマッピングします。ブロック符号化器は、データの各ブロックを個別に扱うメモリのないデバイスです。Communications Toolbox には、Simulink ブロック、System object、および MATLAB 関数を使用することによる、ブロック符号化機能が含まれています。
ブロック符号化手法のクラスには,以下の図に示すカテゴリが含まれます。
通讯工具箱は一般線形ブロック符号をサポ,トしています。これは,巡回、BCH、ハミング、リード・ソロモン符号 (すべて特殊な線形ブロック符号) も処理します。この製品のブロックは、前述の手法のいずれかを使用して、メッセージを符号化または復号化できます。リード・ソロモン復号化器と BCH 復号化器は復号化中に検出した誤りの数を示します。リード・ソロモン符号化ブロックを使用すると、シンボルまたはビットをデータとして使用するかどうかを決定できます。
メモ:年代tr在g>
通讯工具箱のブロックと関数は,2または<年代up>米年代up>個のシンボルをもアルファベットを使用する誤り制御符号用に設計されています。
通信工具箱年代p一个n>がサポトしている関数-年代tr在g>通信工具箱の関数はシミュレーションブロックの以下の機能をサポートしています。
手法の特性(誤り訂正能力や可能なメッセ,ジ長など)を決定する
手法に関連する以下のような下位レベルの計算を実行する
真理表の計算
生成行列またはパリティチェック行列の計算
生成行列とパリティチェック行列の間の変換
生成多項式の計算
誤り制御符号化機能の詳細は,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">ブロック符号一个>を参照してください。
用語
この節では,符号化される情報は”メッセージ”シンボルで構成され,生成される符号は“符号語”で構成されます。<年代p一个nclass="emphasis">
Kメッセージシンボルの各ブロックは,Nメッセージシンボルで構成される符号語に符号化されます。Kはメッセ,ジ長と呼ばれ,nは符号語長と呼ばれ,符号は[n,K]符号と呼ばれます。
ブロック符号化のデ,タ形式
各メッセ,ジまたは各符号語はシンボルを順番に並べたグル,プです。块编码サブラ▪▪▪ブラリの各ブロックは、次の節<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">バ电子邮箱ナリ形式(すべての符号化方法)一个>で説明するように、タ、ムステップごとに1ワ、ド処理します。リ,ド,ソロモン符号化ブロックを使用すると,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">整数形式(リ,ド·ソロモンのみ)一个>で説明するように,バナリデタと整数デタの間で選択できるようになります。
バ▪▪ナリ形式(すべての符号化方法)-年代tr在g>メッセジと符号語をバナリの<年代p一个nclass="emphasis">“ベクトル”信号として構築できます。ここで,各ベクトルはメッセージ ワードまたは符号語を表します。与えられた時間において、符号化器はメッセージ ワード全体を受信してそれを符号化し、符号語全体を出力します。メッセージ信号と符号信号は同じサンプル時間で動作します。
この例は,時間0において,符号化器が4ビットのメッセージを受信し,5ビットの符号語を生成することを示します。時間1では,新しいメッセ,ジに対してこのプロセスを繰り返します。
バ▪ナリ入力を使用するリ▪ド▪ソロモン<年代p一个nclass="emphasis">”“以外のすべての符号化手法では,必要なメッセージベクトルの長さはKで,対応する符号ベクトルの長さはNです。バ▪ナリ入力を使用するリ▪ド▪ソロモン符号では、符号のシンボルは長さ M の 2 進シーケンスで、ガロア体の要素 GF(2<年代up>米年代up>)に対応します。この場合,メッセージ ベクトルの長さは M*K で、対応する符号ベクトルの長さは M*N でなければなりません。バイナリ入力の RS Encoder ブロックとバイナリ出力の RS Decoder ブロックは、メッセージと符号語に対してこの形式を使用します。
ブロック符号化ブロックへの入力がフレームベースベクトルの場合,入力ベクトルは行ベクトルではなく,列ベクトルでなければなりません。
サンプルベ,スのメッセ,ジをバ,<一个href="//www.tatmou.com/jp/jp/help/comm/ref/bernoullibinarygenerator.html">伯努利二进制发生器年代p一个n>ブロックを設定して,その<年代tr在g class="guilabel">[0的概率]年代tr在g>パラメ,タ,が,作成する信号と同じ長さのベクトルになるようにします。フレムベスのメッセジをバナリ形式で生成するには,同じブロックを設定して,その<年代tr在g class="guilabel">[0的概率]年代tr在g>パラメ,タ,をスカラ,にし,その<年代tr在g class="guilabel">[每帧样本]年代tr在g>パラメ,タ,を作成する信号の長さにします。
シリアル信号の使用年代tr在g>
複数のサンプルがまとまってメッセージワードまたは符号語を形成するような状況で,メッセージと符号語をスカラー信号として構築する場合,<一个href="//www.tatmou.com/jp/help/dsp/ref/buffer.html">缓冲年代p一个n>と<一个href="//www.tatmou.com/jp/help/dsp/ref/unbuffer.html" hreflang="en">Unbuffer年代p一个n>を使用できます。バッファリングにはレ▪▪テンシとマルチレ▪▪ト処理が含まれます。モデルが誤り率を計算する場合,符号化とバッファリングの組み合わせにおける初期の遅延は<一个href="//www.tatmou.com/jp/jp/help/comm/ref/errorratecalculation.html">错误率计算年代p一个n>ブロックの<年代tr在g class="guilabel">(接收延迟)年代tr在g>パラメ,タ,に影響します。
モデル内の信号のサンプル時間を表示することができます。<年代tr在g class="guimenuitem">[デバッグ]年代tr在g>タブで,<年代tr在g class="guimenuitem">[情報のオバレ]年代tr在g>を展開します。<年代tr在g class="guimenuitem">[サンプル時間]年代tr在g>セクションで,<年代tr在g class="guimenuitem">[色]年代tr在g>を選択します。または,<一个href="//www.tatmou.com/jp/help/simulink/slref/probe.html">探针年代p一个n>(金宝app模型)年代p一个n>ブロックを接続線につなげて,サンプル時間,バッファリング,および遅延を評価しやすくすることができます。
整数形式(リ.ド·ソロモンのみ)-年代tr在g>[n, k]リ,ド·ソロモン符号に対するメッセ,ジワ,ドはm * kビットで構成されます。これは0から2<年代up>米年代up>までのk個のシンボルを意味します。このシンボルは長さmの2進シケンスで,降べき順で,ガロア体の要素gf (2 .<年代up>米年代up>)に対応します。リ,ド·ソロモン符号の整数形式を使用すると,メッセ,ジと符号語を,バ,ナリ信号ではなく<年代p一个nclass="emphasis">“整数”信号として構築できます(入力はフレ,ムベ,スの列ベクトルでなければなりません)。
メモ:年代tr在g>
この説明で,金宝app仿真软件は”最初の”ビットがシンボルの最上位ビットであると想定しています。<年代p一个nclass="emphasis">最初“とは,ベクトルのインデックスが最小であるか,またはスカラー系列に対する最小時間を意味します。
次の図はリ、ド、ソロモン符号化器におけるバ、ナリ信号と整数信号の間の等価な関係を示します。復号化器の場合も同様です。
サンプルベースのメッセージを整数形式で生成するには,随机整数生成器ブロックを設定し,<年代tr在g class="guilabel">(数量多状态)年代tr在g>パラメ,タ,と<年代tr在g class="guilabel">(初始种子)年代tr在g>パラメ,タ,が目的の長さのベクトルで,<年代tr在g class="guilabel">(数量多状态)年代tr在g>ベクトルのすべてのエントリが2<年代up>米年代up>になるようにします。フレ,ムベ,スのメッセ,ジを整数形式で生成するには,同じブロックを設定して,その<年代tr在g class="guilabel">(数量多状态)年代tr在g>パラメ,タ,と<年代tr在g class="guilabel">(初始种子)年代tr在g>パラメ,タ,をスカラ,にし,その<年代tr在g class="guilabel">[每帧样本]年代tr在g>パラメ,タ,を作成する信号の長さにします。
モデル内でのブロック符号化器と復号化器の使用
符号化ブロックを設定した後,それらをモデル内に正しく配置するために役立つヒントをいくつか紹介しましょう。
ブロックに複数の出力がある場合,最初の出力は常に符号化デ,タのストリ,ムです。
Reed-SolomonブロックとBCHブロックには2番目の出力にエラーカウンターがあります。
信号サズがマスクパラメタとして適切かどうかを確認してください。たとえば,二进制循环编码器ブロックを使用し<年代tr在g class="guilabel">[消息长度K]年代tr在g>を
4
に設定する場合,入力信号は長さ4のベクトルでなければなりません。モデル内の信号のサ@ @ズを表示することができます。<年代tr在g class="guimenuitem">[デバッグ]年代tr在g>タブで,<年代tr在g class="guimenuitem">[情報のオバレ]年代tr在g>を展開します。<年代tr在g class="guimenuitem">[信号]年代tr在g>セクションで,<年代tr在g class="guimenuitem">[信号の次元]年代tr在g>を選択します。
ブロック符号化の例
例:整数書式のリ:ド·ソロモン符号-年代tr在g>この例では整数形式のリ,ド·ソロモン符号を使用します。符号化ブロックに対する符号とメッセ,ジ信号の適切なベクトル長を示します。また各符号語に誤りを発生させる簡単な方法を使用して、誤り訂正を紹介します。
モデルを開くには,matlabコマンドラescンにdoc_rscoding
と入力します。モデルを作成するには,次のブロックを収集し,設定します。
通讯来源ラescブラリの<一个href="//www.tatmou.com/jp/help/comm/ref/randomintegergenerator.html">随机整数发生器年代p一个n>
(数量多状态)年代tr在g>を
15
に設定します。(初始种子)年代tr在g>を正の数値に設定します。ここでは<一个href="//www.tatmou.com/jp/help/matlab/ref/randn.html">
randn
を選択します。(框架输出)年代tr在g>チェックボックスをオンにします。
[每帧样本]年代tr在g>を
5
に設定します。
-
[码字长度N]年代tr在g>を
15
に設定します。[消息长度K]年代tr在g>を
5
に設定します。
金宝appSimulink数学运算ラescブラリの<一个href="//www.tatmou.com/jp/help/simulink/slref/gain.html">获得年代p一个n>(金宝app模型)年代p一个n>
(获得)年代tr在g>を
[0;0;0;0;0;的(1)]
に設定します。
-
[码字长度N]年代tr在g>を
15
に設定します。[消息长度K]年代tr在g>を
5
に設定します。
金宝appSimulink sinkラブラリの<一个href="//www.tatmou.com/jp/help/simulink/slref/scope.html">范围年代p一个n>(金宝app模型)年代p一个n>このブロックを2コピします。
金宝appSimulink数学运算ラescブラリの<一个href="//www.tatmou.com/jp/help/simulink/slref/add.html">添加年代p一个n>(金宝app模型)年代p一个n>
[征兆清单]年代tr在g>を
|-+
に設定します。
前の図に示したようにブロックを接続します。<年代tr在g class="guimenuitem">[シミュレ,ション]年代tr在g>タブの<年代tr在g class="guimenuitem">[シミュレ,ション]年代tr在g>セクションで,<年代tr在g class="guilabel">[終了時間]年代tr在g>を500
に設定します。<年代tr在g class="guimenuitem">[シミュレ,ション]年代tr在g>セクションは複数のタブに表示されます。
モデル内の信号のベクトル長を表示することができます。<年代tr在g class="guimenuitem">[デバッグ]年代tr在g>タブで,<年代tr在g class="guimenuitem">[情報のオバレ]年代tr在g>を展開します。<年代tr在g class="guimenuitem">[信号]年代tr在g>セクションで,<年代tr在g class="guimenuitem">[信号の次元]年代tr在g>を選択します。
符号化器は長さ5(この場合のK)のベクトルを受け取り,長さ15(この場合のN)のベクトルを生成します。復号化器はこの逆を行います。
モデルを実行すると,次のメジのスコプが生成されます。プロットされる誤りの数は随机整数生成器ブロック内の<年代tr在g class="guilabel">(初始种子)年代tr在g>値によって異なります。軸の範囲を調整して,1目のスコ。2 .目のスコ,プ内のプロット領域で右クリックし,<年代tr在g class="guimenuitem">[コンフィギュレ,ションプロパティ]年代tr在g>を選択します。<年代tr在g class="guimenuitem">[表示]年代tr在g>タブで,座標軸の範囲を調整します。
訂正前の誤り数年代tr在g>
2番目のプロットは,復号化器がメッセ,ジの復元中に検出した誤り数です。获得ブロックが各符号語内の最初の 5 つのシンボルをゼロで置き換えたため、5 の数がしばしば現れています。しかし、正しい符号語の最初の 5 個所に 1 つ以上のゼロを含む場合は、誤り数が 5 を超えることはありません。
最初のプロットは元のメッセージと復元されたメッセージとの差で,復号化器が発生したすべての誤りを訂正できたため,プロットの5つのデータストリームのそれぞれはゼロです。
特定のブロック符号化手法に関するメモ
块编码サブライブラリは外観や使い勝手において同じように見えますが,各種の符号化手法は同一ではありません。この節では,このサブライブラリの符号化手法カテゴリ用のパラメーターや信号に適用される、特別なオプションと制限について説明します。以下で説明する符号化手法には、一般線形ブロック符号、巡回符号、ハミング符号、BCH 符号またはリード・ソロモン符号が含まれます。
一般線形ブロック符号年代tr在g>
一般線形ブロック符号を使ってメッセ,ジを符号化するには,生成行列が必要です。符号の復号化には,生成行列が必要であり,場合によっては真理表も必要です。<一个href="//www.tatmou.com/jp/help/comm/ref/binarylinearencoder.html">二进制线性编码器年代p一个n>ブロックと<一个href="//www.tatmou.com/jp/jp/help/comm/ref/binarylineardecoder.html">二进制线性解码器年代p一个n>ブロックを使用するには,<年代tr在g class="guilabel">(生成矩阵)年代tr在g>パラメ,タ,と<年代tr在g class="guilabel">[纠错真值表]年代tr在g>パラメタにいて理解しなければなりません。
生成矩阵- [n, k]線形ブロック符号にメッセ.ジを符号化する処理は,k行n列の生成行列<年代p一个nclass="emphasis">Gによって決定されます。特に,1行 K 列のメッセージ ベクトル<年代p一个nclass="emphasis">vは,1行n列の符号語ベクトル<年代p一个nclass="emphasis">vGに符号化されます。<年代p一个nclass="emphasis">Gが形式[<年代p一个nclass="emphasis">我k年代ub>,<年代p一个nclass="emphasis">P]または[<年代p一个nclass="emphasis">P,<年代p一个nclass="emphasis">我k年代ub>]をも場合,ここで<年代p一个nclass="emphasis">Pは適当なk行(n-k)列の行列で<年代p一个nclass="emphasis">我k年代ub>はk行<年代p一个nclass="emphasis">-K列の単位行列ですが,<年代p一个nclass="emphasis">Gは<年代p一个nclass="emphasis">“標準形”と呼ばれます(著者によっては,克拉克和凯恩<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">[2]一个>のように最初の標準形を使用する場合も,林和Costello<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">[3]一个>のように後者を使用する場合もあります)。この製品の線形ブロック符号化ブロックでは,<年代tr在g class="guilabel">(生成矩阵)年代tr在g>のマスクパラメ,タ,が標準形である必要があります。
译码表—復号化テブルは,伝送中に生じた符号誤りを訂正する方法を復号化器に示します。ハミング符号は,任意の符号語内の単一シンボルの誤りを訂正することができます。その他の符号は、指定された符号語内の複数のシンボルで発生した誤りを訂正、または部分的に訂正します。
二进制线性解码器年代p一个n>ブロックを使用すると,<年代tr在g class="guilabel">[纠错真值表]年代tr在g>パラメ,タ,で復号化テ,ブルを指定できます。復号化テ,ブルはn列,2<年代up>n - k年代up>行の行列で表します。各行は,受信した符号語ベクトルに対して訂正ベクトルを指定します。
[纠错真值表]年代tr在g>パラメ,タ,を0
に設定することで復号化テ,ブルを明示的に指定することを回避できます。<年代tr在g class="guilabel">[纠错真值表]年代tr在g>が0
の場合,ブロックは関数<一个href="//www.tatmou.com/jp/help/comm/ref/syndtable.html">syndtable
を使用して復号化テ,ブルを計算します。
巡回符号年代tr在g>
巡回符号では,符号語長nの形式は<年代up>米年代up>-1でなければなりません。ここで米は3.以上の整数です。
发电机多项式—巡回符号は,多項式が符号化過程を完全に決定できるような特殊な代数的性質をもます。このいわゆる生成多項式は,多項式<年代p一个nclass="emphasis">xN年代up>-1の(n-k)次除算子です。范·林特の<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">[5]一个>では,生成多項式が巡回符号をどのように決定するかを説明しています。
二进制循环编码器年代p一个n>ブロックと<一个href="//www.tatmou.com/jp/help/comm/ref/binarycyclicdecoder.html">二进制循环译码器年代p一个n>ブロックを使用すると,生成多項式を,そこでKを指定せずに,2番目のマスクパラメーターとして指定できます。ブロックは,多項式の係数を変数の<年代p一个nclass="emphasis">“昇べき”の順にリストするベクトルを使用して,生成多項式を表します。巡回符号用の生成多項式は,関数<一个href="//www.tatmou.com/jp/help/comm/ref/cyclpoly.html">cyclpoly
を使用して見けることができます。
生成多項式を指定しない場合,2番目のマスクパラメ,タ,をkの値に設定します。
ハミング符号年代tr在g>
ハミング符号では,符号語長nの形式は<年代up>米年代up>-1でなければなりません。ここで米は3.以上の整数です。メッセージ長 K は N-M に等しくなければなりません。
原始多项式-ハミング符号は<年代up>米年代up>の要素をも代数体に依存します(より一般的には,素数<年代p一个nclass="emphasis">pに対して<年代p一个nclass="emphasis">p米年代up>要素)。そのようなフィ,ルドの要素は,<年代p一个nclass="emphasis">“原始元”と呼ばれるフィ,ルドの特定の要素に<年代p一个nclass="emphasis">“相対的な”名前が付けられます。原始元の最小多項式は<年代p一个nclass="emphasis">“原始多項式”と呼ばれます。<一个href="//www.tatmou.com/jp/jp/help/comm/ref/hammingencoder.html">汉明编码年代p一个n>ブロックと<一个href="//www.tatmou.com/jp/jp/help/comm/ref/hammingdecoder.html">汉明译码器年代p一个n>ブロックを使用すると,計算に使用する有限体用の原始多項式を指定できます。この多項式を指定する場合は,2番目のマスクパラメ,タ,フィ,ルドで指定します。ブロックは,多項式の係数を変数の<年代p一个nclass="emphasis">“昇べき”の順にリストするベクトルを使用して原始多項式を表します。ガロア体用の生成多項式は,関数<一个href="//www.tatmou.com/jp/jp/help/comm/ref/gfprimfd.html">gfprimfd
を使用して見けることができます。
原始多項式を指定しない場合,2番目のマスクパラメ,タ,をkの値に設定します。
BCH符号年代tr在g>
BCH符号は,有限体を使用して構築される巡回誤り修正符号です。これらの符号では,符号語長nの形式は<年代up>米年代up>-1でなければなりません。ここで米は3.から 9 までの整数です。メッセージ長 K は N に依存する特定の値に制限されます。与えられた N に対する有効な K の値については、<一个href="//www.tatmou.com/jp/help/comm/ref/comm.bchencoder-system-object.html">comm.BCHEncoder
系统对象™のリファレンスペ,ジを参照してください。BCH符号に関する符号語長、メッセージ長、および誤り訂正能力間の関係を説明する既知の解析式はありません。
狭義のBCH符号年代tr在g>
狭義の生成多項式はLCM[m_1(x), m_2(x),…, m_2t(x)]です。ここで各項は以下のとおりです。
LCMは最小公倍数を表します。
M_i (x)はα<年代up>我年代up>に対する最小多項式を表します。αは体gf (
n + 1
)の既定の原始多項式の根です。Tは符号の誤り訂正能力を表します。
リ,ド·ソロモン符号年代tr在g>
リ,ド,ソロモン符号はバ,スト発生する誤りの訂正に便利です。単純なケ,スでは,リ,ド·ソロモン符号の符号語の長さは形式n = 2<年代up>米年代up>-1でなければなりません。ここで2<年代up>米年代up>は符号のシンボル数です。リ,ド·ソロモン符号の誤り訂正能力は地板((n - k) / 2)
です。ここでK はメッセージ ワードの長さです。N-K は偶数でなければなりません。
Nが2<年代up>米年代up>-1よりも小さい,短縮リ,ド·ソロモン符号を使用すると便利な場合があります。この場合,符号化器は<年代up>米年代up>-1-n個のゼロのシンボルを各メッセジワドと符号語に追加します。短縮リ,ド·ソロモン符号の誤り訂正能力も地板((n - k) / 2)
になります。Communications Toolbox の Reed-Solomon ブロックは短縮リード・ソロモン符号を実装することができます。
非二进制符号的影响——リード・ソロモン符号と,この製品でサポートされている他の符号との違いの1つは,リード・ソロモン符号はシンボルをGF(2)ではなく,GF (2<年代up>米年代up>)で処理することです。各シンボルはmビットで指定されます。リ,ド·ソロモン符号のシンボルの非 0-1 的な性質により、Reed-Solomon ブロックは他の符号化ブロックと以下の点で異なります。
整数输入RS编码器年代p一个n>ブロックと<一个href="//www.tatmou.com/jp/jp/help/comm/ref/integeroutputrsdecoder.html">整数输出RS解码器年代p一个n>ブロックを介して,整数形式を使用できます。
バイナリ形式では,ベクトル長が,メッセージに対してはM * K (Kではない)の整数倍,符号語に対しては同じ整数M * N (Nではない)であることを想定しています。
错误信息-リ,ド·ソロモンの復号化ブロック(<一个href="//www.tatmou.com/jp/help/comm/ref/binaryoutputrsdecoder.html">二进制输出RS解码器年代p一个n>と<一个href="//www.tatmou.com/jp/jp/help/comm/ref/integeroutputrsdecoder.html">整数输出RS解码器年代p一个n>)はシミュレ,ション中に誤りに関する情報を返します。2番目の出力信号は、そのブロックが入力符号語内で検出した誤り数を示します。2 番目の出力の A -1 は、ブロックが、その符号化方式で訂正可能な数を上回る誤りを検出したことを示します。
短縮,パンクチャ,および消去
多くの標準がパンクチャド符号を利用し,デジタル受信機は容易に消去を出力できます。受信機が消去を生成するフェージングチャネルでは,BCHとRSのパフォーマンスが大幅に改善されます。
“パンクチャド符号語”ではパリティシンボルだけが削除され,<年代p一个nclass="emphasis">“短縮符号語”では情報シンボルだけが削除されます。符号語は,情報シンボルまたはパリティシンボルのいずれかにこれらの消去をもことができます。
短縮,パンクチャ,および消去を使用するリ,ド·ソロモンの例年代tr在g>
このセクションでは,短縮,パンクチャ,および消去を使用した代表的なリード・ソロモン符号化例を,ますます複雑になる誤り訂正を含めて作成します。
短縮とパンクチャを使用した符号化器例年代tr在g>
次の図は,短縮とパンクチャを使用した(7,3)リード・ソロモン符号化器の代表的な例を示しています。
この図では,メッセ,ジソ,スにより<年代ub>1年代ub>我<年代ub>2年代ub>で指定される2つの情報シンボルが出力されます(BCHの例では,シンボルはバイナリビットです)。この符号は短縮(7,3)符号であるため,情報シンボルの前にゼロを追加しなければなりません。これにより,0i<年代ub>1年代ub>我<年代ub>2年代ub>という3のシンボルから構成されるメッセジが生成されます。変更されたメッセ,ジシ,ケンスは,rsで符号化され,追加された情報ゼロはそのあと削除されます。その結果我<年代ub>1年代ub>我<年代ub>2年代ub>P<年代ub>1年代ub>P<年代ub>2年代ub>P<年代ub>3.年代ub>P<年代ub>4年代ub>が生成されます(この例では,パリティビットは符号語の末尾にあります)。
パンクチャ操作は,パンクチャベクトルによって制御されます。ここでは,このパンクチャベクトルは1011です。パンクチャベクトル内では,1
はシンボルが保持され,0
はシンボルが破棄されたことを意味します。この例では,パンクチャ操作により 2 番目のパリティ シンボルが削除され、I<年代ub>1年代ub>我<年代ub>2年代ub>P<年代ub>1年代ub>P<年代ub>3.年代ub>P<年代ub>4年代ub>という最終的なベクトルが生成されます。
短縮とパンクチャを使用した復号化器例年代tr在g>
次の図は,短縮符号語およびパンクチャド符号語でのrs復号化器の動作を示しています。
このケ,スは,短縮とパンクチャを使用したrs符号化器の図に示した符号化器の動作に対応します。前の図に示したとおり,符号化器は(5,2)符号語を受信します。これは(7,3)符号語から1シンボル短縮され,さらにその1シンボルはパンクチャされているためです。
最初のステップとして,復号化器は,符号語の第2のパリティ位置にEで指定された消去を追加します。これは,パンクチャベクトル1011に対応します。前の図に示したとおり,ゼロを追加することは短縮を意味します。1回の消去は、4 つの消去を訂正できる符号の消去訂正機能を超えません。復号化操作により、3 つのシンボルで構成されるメッセージ DI<年代ub>1年代ub>我<年代ub>2年代ub>が生成されます。前の図のように最初のシンボルは切り捨てられるので,最終出力は<年代ub>1年代ub>我<年代ub>2年代ub>になります。
短縮,パンクチャ,消去を使用する復号化器の例年代tr在g>
次の図は,パンクチャされ,短縮符号語に対して動作しながら,受信機によって生成された消去を生成する復号化器の様子を示しています。
この図では,復調器は符号化器が送信した<年代ub>1年代ub>我<年代ub>2年代ub>P<年代ub>1年代ub>P<年代ub>3.年代ub>P<年代ub>4年代ub>ベクトルを受信します。復調器は,受信した5つのシンボルのうち2つは,信頼できないので消去されることを宣言するため,シンボル2と5は消去と見なされます。外部ソスによって提供された01001ベクトルは,これらの消去を示しています。消去ベクトル内では,1はシンボルが消去シンボルで置き換えられること,0はシンボルが変更なしで渡されることを意味します。
復号化器のブロックは,符号語と消去ベクトルを受信し,ベクトル01001で示される消去を実行します。消去ベクトル内では,1はシンボルが消去シンボルで置き換えられること,0はシンボルが変更なしで渡されることを意味します。結果の符号語ベクトルは,i<年代ub>1年代ub>EP<年代ub>1年代ub>P<年代ub>3.年代ub>Eになります。ここで,Eは消去シンボルです。
符号語は,符号化操作で使用したパンクチャベクトル(1011など)に基づきデパンクチャされます。したがって,消去シンボルがp<年代ub>1年代ub>とP<年代ub>3.年代ub>の間に挿入され,i<年代ub>1年代ub>EP<年代ub>1年代ub>EP<年代ub>3.年代ub>Eという符号語ベクトルが生成されます。
復号化の直前に,情報ベクトルの冒頭にゼロを追加することは短縮を意味します。結果のベクトルは,0i<年代ub>1年代ub>EP<年代ub>1年代ub>EP<年代ub>3.年代ub>Eになるため,(7,3)符号語はBerlekampアルゴリズムに送られます。
この符号語は復号化され,3のシンボルで構成されるdi<年代ub>1年代ub>我<年代ub>2年代ub>(ここで,dはダミシンボルを示します)というメッセジが生成されます。最後に,メッセ,ジベクトルからdシンボルを削除することは,短縮を意味し,元の<年代ub>1年代ub>我<年代ub>2年代ub>ベクトルが生成されます。
詳細にいては,<一个href="//www.tatmou.com/jp/help/comm/ref/comm.rsdecoder-system-object.html" class="a">消失,パンクチャ,および短縮を使用したリ,ド·ソロモン符号化一个>Matlabの例または<一个href="//www.tatmou.com/jp/help/comm/ug/reed-solomon-coding-with-erasures-punctures-and-shortening.html" class="a">金宝appSimulinkでの消失,パンクチャ,および短縮を使用したリ,ド·ソロモン符号化一个>の例を参照してください。
整数書式のリ,ド·ソロモン符号
リド·ソロモン符号を整数形式で使用するモデル例を開くにはmatlabコマンドランでdoc_rscoding
と入力します。モデルの詳細は,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">例:整数書式のリ,ド·ソロモン符号一个>を参照してください。
生成多項式の決定
巡回,bch,リ,ド·ソロモン符号に対する生成多項式を求めるには,それぞれ関数cyclpoly
、bchgenpoly
,またはrsgenpoly
を使用します。次のコマンドを見てみましょう。
genpolyCyclic = cyclpoly(15,5)<年代p一个n年代tyle="color:#228B22">% 1 + X X ^ ^ 5 + 10年代p一个n>genpolyBCH = bchgenpoly(15,5)<年代p一个n年代tyle="color:#228B22">% x x ^ ^ 10 + 8 + x x ^ ^ 5 + 4 + x ^ 2 + x + 1年代p一个n>genpolyRS = rsgenpoly(15,5)
これらのコマンドは,異なるタ。出力は以下のようになります。
genpolycycle = 1 0 0 0 0 1 0 0 0 0 1 genpolyBCH = GF(2)数组。数组元素= 1 0 1 0 0 1 1 0 1 1 genpolyRS = GF(2^4)数组。原始多项式= D^4+D+1(19十进制)数组元素= 1 4 8 10 12 9 4 2 12 2 7
これらの出力の形式は,次のように変わります。
cyclpoly
は,多項式の係数を変数の“昇べき”<年代p一个nclass="emphasis">の順にリストする整数の行ベクトルを使用して,生成多項式を表します。bchgenpoly
とrsgenpoly
は,多項式の係数を変数の“降べき”<年代p一个nclass="emphasis">の順にリストするガロア行ベクトルを使用して,生成多項式を表します。rsgenpoly
は,二元体gf(2)以外のガロア体の係数を使用します。これらの係数の意味の詳細は,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">整数をガロア体にどのように対応づけるか一个>と<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">ガロア体上の多項式一个>を参照してください。
生成多項式の非一意性年代tr在g>
メッセ,ジ長と符号語長のペアによって,生成多項式が一意に決定されない場合があります。上記の例の関数の構文には,指定する特定の制約を満たす生成多項式を取り出すためのオプションも含まれています。構文のオプションの詳細は,関数のリファレンスペ,ジを参照してください。
生成多項式の代数表現年代tr在g>
bchgenpoly
とrsgenpoly
によって生成される生成多項式の形式は,(x - a<年代up>b年代up>x - a<年代up>b + 1年代up>)...(X-一个<年代up>b + 2 t - 1年代up>)です。ここで,一个は適切なガロア体に対する原始元で、b と t は整数です。この式の詳細は、関数のリファレンス ページを参照してください。
その他のブロック符号タスクの実行
この節では,線形ブロック符号に関連する典型的なパラメーターを計算する関数と,別の形式に情報を変換する関数について説明します。
線形ブロック符号の誤り訂正と誤り検出年代tr在g>
線形ブロック符号を使用して,d<年代ub>最小值年代ub>-1件の誤り検出かt =<年代p一个nclass="inlineequation"> 件の誤り訂正を行うことができます。
符号の誤り訂正能力を低くすることで,t件よりも多くの誤りを検出できます。たとえば,d<年代ub>最小值年代ub>= 7の符号ではt = 3件の誤りを訂正できますが,代わりに最大4件の誤り検出と2件の誤り訂正を行うこともできます。
誤り訂正能力を求める年代tr在g>
関数
bchgenpoly
およびrsgenpoly
は,BCHまたはリード・ソロモン符号の誤り訂正能力を示すオプションの第2出力引数を返すことができます。たとえば,次のコマンドを例に考えてみます。[g,t] = bchgenpoly(31,16);T = 3
これらのコマンドにより,[31日16]BCH符号は各符号語内の3つの誤りまで訂正できることがわかます。
生成行列とパリティチェック行列を求める年代tr在g>
符号語長が
2 ^ m - 1
のハミング符号に対するパリティチェック行列と生成行列を求めるには,以下に示すように関数hammgen
を使用します。米
は,少なくとも3でなければなりません。[parmat,genmat] = hamgen (m);%汉明
巡回符号に対するパリティチェック行列と生成行列を求めるには,関数
cyclgen
を使用します。符号語長と有効な生成多項式を与えなければなりません。符号語長とメッセージ長を指定した後、関数cyclpoly
を使用して有効な生成多項式を生成することができます。次に例を示します。[parmat,genmat] = cyclgen(7,cyclpoly(7,4));<年代p一个n年代tyle="color:#228B22">%循环年代p一个n>
パリティチェック行列と生成行列の変換年代tr在g>
関数
gen2par
は,生成行列からパリティチェック行列への変換,およびその逆の変換を行います。gen2par
のリファレンスペ,ジに,これを示す例があります。
ブロック符号化の参考文献
[1] Berlekamp, Elwyn R.,代数编码理论,纽约,McGraw-Hill, 1968。
[2] Clark, George C. Jr.和J. Bibb Cain,数字通信的纠错编码,纽约,全会出版社,1981年。
[3] Lin, Shu,和Daniel J. Costello, Jr.,错误控制编码:基础和应用,Englewood Cliffs, NJ, Prentice-Hall, 1983。
[4]彼得森,W.卫斯理和E. J.韦尔登,纠错码,第二版,剑桥,马萨诸塞州,麻省理工学院出版社,1972年。
[5] van Lint, j.h.,《编码理论导论》,纽约,Springer-Verlag, 1982。
[6]柳条,斯蒂芬B.,数字通信和存储的错误控制系统,上马勒河,新泽西州,普伦提斯大厅,1995。
[7] Robert G. Gallager,低密度奇偶校验码,剑桥,马萨诸塞州,麻省理工学院出版社,1963年。
[8] Ryan, William E.,“LDPC码介绍”,磁重码系统的编码和信号处理(Vasic, B.,编),CRC出版社,2004年。
畳み込み符号
畳み込み符号の機能
畳み込み符号化は,誤り制御符号化の特殊な場合です。ブロック符号化器と異なり、畳み込み符号化器はメモリのないデバイスではありません。畳み込み符号化器は固定数のメッセージ シンボルを受け取り、固定数のコード シンボルを生成しますが、計算は入力シンボルの現在のセットのみでなく、前の入力シンボルの一部にも依存します。
通信工具箱は仿真软件ブロック、系统对象,およびMA金宝appTLAB関数で畳み込み符号化機能を提供します。この製品は,トレリス構造体または一連の生成多項式で記述されるフィードフォワードまたはフィードバック畳み込み符号をサポートします。硬判定と軟判定の復号化を実装するために,ビタビアルゴリズムを使います。
製品には<年代p一个nclass="emphasis">“事後”確率復号化器も含まれます。これは畳み込み符号の軟出力復号化に使用できます。
畳み込み符号化に関する背景情報は,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">畳み込み符号化の参考文献一个>の文献を参照してください。
畳み込み符号化用ブロックパラメタ年代tr在g>
畳み込み符号を処理するには,卷积サブラ,卷积ブラリの<一个href="//www.tatmou.com/jp/jp/help/comm/ref/convolutionalencoder.html">卷积编码器年代p一个n>ブロック,<一个href="//www.tatmou.com/jp/jp/help/comm/ref/viterbidecoder.html">维特比译码器年代p一个n>ブロック,および/または<一个href="//www.tatmou.com/jp/help/comm/ref/appdecoder.html">应用程序译码器年代p一个n>ブロックを使用します。符号化器と復号化器の両方でマスクパラメ,タ,が必要な場合は,両方のブロックで同じ値を使用します。
卷积サブライブラリのブロックは,畳み込み符号化器の2つの異なる表現のいずれかが使用されると仮定しています。
シフトレジスタと剰余2加算器のブロック線図を使用して符号化器を設計する場合,符号生成多項式行列を計算し,その結果として(通信工具箱の)関数<一个href="//www.tatmou.com/jp/help/comm/ref/poly2trellis.html">poly2trellis
を使用して,自動的にトレリス構造体マスクパラメ,タ,を生成できます。例にいては,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">金宝appSimulinkを使用した符号化率2/3のフィ,ドフォワ,ド符号化器の設計一个>を参照してください。
トレリスダイアグラムを使用して符号化器を設計する場合MATLABでトレリス構造体を構築し,それをマスクパラメーターとして使用できます。
これらの表現の詳細にいては,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">畳み込み符号の多項式表現一个>および<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">畳み込み符号のトレリス表現一个>を参照してください。
ブロックでの多項式表現の使用年代tr在g>
卷积编码器年代p一个n>ブロック,<一个href="//www.tatmou.com/jp/jp/help/comm/ref/viterbidecoder.html">维特比译码器年代p一个n>ブロック,または<一个href="//www.tatmou.com/jp/help/comm/ref/appdecoder.html">应用程序译码器年代p一个n>ブロックで多項式表現を使用するには,通信工具箱のユーティリティ関数<一个href="//www.tatmou.com/jp/help/comm/ref/poly2trellis.html">poly2trellis
を使用します。この関数は多項式表現を受け取り,それをトレリス表現に変換します。たとえば次のコマンドは,拘束長が5で生成多項式が35と31の符号化器のトレリス表現を計算します。
格子= poly2trellis(5,[35 31]);
畳み込み符号化ブロックの1とともにこの符号化器を使用するには,次のようなpoly2trellis
コマンドを
poly2trellis(5[35] 31日);
(框架结构)年代tr在g>パラメ,タ,フィ,ルドに配置します。
畳み込み符号の多項式表現
畳み込み符号化器の多項式表現は,シフトレジスタと剰余2加算器の間の接続を記述します。たとえば,下図は、1 つの入力、2 つの出力、2 つのシフト レジスタをもつフィードフォワード畳み込み符号化器を示しています。
畳み込み符号化器の多項式表現は,符号化器がフィードフォワードか,フィードバックかに応じて,2つまたは3つの成分をもちます。
拘束長-年代tr在g>符号化器の拘束長は,長さが符号化器ダ。このベクトルの要素は,現在の入力ビットを含む各シフトレジスタに格納されたビット数を示します。<年代p一个nclass="emphasis">
上記の図で,拘束長は3です。符号化器は1入力ストリムをもため,拘束長はスカラ値です。その値は,入力に対するシフトレジスタ数プラス1です。
生成多項式-年代tr在g>符号化器ダ▪▪▪▪アグラムがk入力とn出力をも▪▪▪場合,符号生成行列はk行n列行列です。I行j列の要素は,I番目の入力がj番目の出力にどのように寄与するかを示します。
組織的なフィドバック符号化器の“組織的な”<年代p一个nclass="emphasis">ビットに対して,符号生成行列のエントリと対応するフィ,ドバック接続ベクトルの要素を一致させます。詳細は,下記の<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">フィ,ドバック接続多項式一个>を参照してください。
その他の状況では,以下のように行列内の(i,j)エントリを決定することができます。
シフトレジスタからの接続線が加算器に接続される各点に1を置き,それ以外の点に0を置くことにより,2進数表現を作成します。2進数表現の最も左の点は現在の入力を表し,最も右の点はシフトレジスタに残っている最も古い入力を表します。
この2進数表現を,最も右のビットから開始される連続する3つのビットの組と考えることで,8進数表現に変換します。各3ビット内の最も右のビットは,最下位のビットです。ビット数が3の倍数でない場合,必要に応じて左端にゼロビットを置きます(たとえば,1101010を001 101 010と解釈して152に変換します)。
たとえば,上記の図の上部および下部の加算器に対応する2進数は,それぞれ110と111です。これらの2進数は,それぞれ,8進数の6と7に等しいので,生成多項式行列は[6 7]です。
メモ年代tr在g>
str2num (dec2base (bin2dec(“110”),8))
のようなコ,ドを使用してmatlabで2進数から8進数への変換を行うことができます。
有効な畳み込み符号生成器の表として,セクション<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">ブロック符号化の参考文献一个>の<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">[2]一个>,特に文献の付録を参照してください。
フィドバック接続多項式-年代tr在g>フィ,ドバック符号化器を表している場合は,フィ,ドバック接続多項式のベクトルが必要です。このベクトルの長さは,符号化器ダ。このベクトルの要素は,8進法を使って各入力に対するフィ,ドバック接続を示します。最初に上記のステップ1のように2進数表現を作成します。その後2進数表現を上記のステップ2のように8進数表現に変換します。
符号化器がフィードバック設定をもち,組織的である場合は,符号生成器と組織的なビットに対応するフィードバック接続パラメーターは,同じ値をもたなければなりません。
符号化率1/2のフィドバック畳み込み符号化器のトレリス構造体の使用年代tr在g>
次の図に表示されているフィードバックを使用して,符号化率1/2の組織畳み込み符号化器を表すトレリス構造体を作成します。
この符号化器は,拘束長が5で生成多項式行列が33[37]でフィードバック接続多項式は37です。
最初の生成多項式は8進数37です。2番目の生成多項式は 8 進数 33 です。フィードバック多項式は 8 進数 37 です。最初の出力は組織的なビットに対応するため、最初の生成多項式はフィードバック接続多項式と一致します。
バイナリベクトル[1 1 1 1 1]は8進数37を表し,図の上列の2進数値に対応します。バイナリベクトル[1 1 0 1 1]は8進数33を表し,図の下列の2進数値に対応します。これらの2進数値は,図におけるレジスタの出力から2の加算器への接続を示します。最初の1は入力ビットに対応します。
関数poly2trellis
を使用して多項式をトレリス構造体に変換します。フィ,ドバック多項式と共に使用すると,poly2trellis
はトレリスの入力へのフィ,ドバック接続を作成します。
格子= poly2trellis(5,[37 33],37)
格子=<年代p一个nclass="emphasis">带字段的结构:numInputSymbols: 2 numOutputSymbols: 4 numStates: 16 nextStates: [16x2 double] outputs: [16x2 double]
ランダムなバ▪▪ナリデ▪▪タを生成します。指定したトレリス構造体を使用してデ,タを畳み込み符号化します。トレリス構造体,トレースバック長34岁打ち切り操作モード,硬判定を指定したビタビアルゴリズムを使用して,符号化したデータを復号化します。
数据= randi([0 1],70,1);codedData = convc(数据,格子);Tbdepth = 34;<年代p一个n年代tyle="color:#228B22">%回溯深度维特比解码器年代p一个n>decodedData = vitdec(codedData,格子,tbdepth,<年代p一个n年代tyle="color:#A020F0">“trunc”年代p一个n>,<年代p一个n年代tyle="color:#A020F0">“硬”年代p一个n>);
復号化されたデ,タにビット誤りがないことを確認します。
decodedData biterr(数据)
Ans = 0
Matlabでの多項式表現の使用-年代tr在g>関数convenc
およびvitdec
で多項式表現を使用するには,最初に関数poly2trellis
を使用してトレリス表現に変換します。たとえば,以下のコマンドは,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">畳み込み符号の多項式表現一个>の節に示された符号化器のトレリス表現を計算します。
格子= poly2trellis(3,[6 7]);
Matlab構造体格子
は,convenc
およびvitdec
に対する適切な入力引数です。
畳み込み符号のトレリス表現
畳み込み符号化器のトレリス表現は,符号化器への入力が符号化器の出力と状態遷移にどのように影響を与えるかを示します。この節では,トレリスにいて説明しmatlabでトレリスを<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">表現する方法一个>と,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">Matlabトレリスの例一个>を示します。
下図は,前節の畳み込み符号化器に対するトレリスを示しています。符号化器は4つの状態(2進数で00から11まで番号付け),1ビット入力,および2ビット出力をもちます(出力ビットに対する入力ビットの比は,この符号化器を符号化率1/2の符号化器にします)。実線矢印は,現在の入力がゼロであるときに符号化器の状態がどのように変化するかを示し,点線の矢印は,現在の入力が1であるときに符号化器の状態がどのように変化するかを示します。各矢印の上の8進数は,符号化器の現在の出力を示します。
このトレリスダイアグラムの解釈の例として,符号化器の状態が10でゼロ入力を受信する場合,コードシンボル3を出力し,状態01に変化します。状態10で入力1を受信する場合は,コードシンボル0を出力し,状態11に変化します。
トレリスには対応する多項式表現をもたないものがありますが,畳み込み符号化器の多項式表現はトレリス表現と等価です。
Matlabでのトレリスの指定-年代tr在g>MATLABでトレリスを指定するには,トレリス構造体と呼ばれる特殊なMATLABの構造体形式を使います。トレリス構造体は,次の表のように5個のフィ,ルドをもたなければなりません。
符号化率k/nの符号に対するトレリス構造体のフィルド年代tr在g>
トレリス構造体のフィ,ルド
次元
平均
numInputSymbols
スカラ
符号化器への入力シンボルの数:2<年代up>k年代up>
numOutputsymbols
スカラ
符号化器からの出力シンボルの数:2<年代up>n年代up>
numStates
スカラ
符号化器内の状態の数
nextStates
numStates
行 2<年代up>k年代up>列の行列
現在の状態と現在の入力のすべての組み合わせの次の状態
输出
numStates
行 2<年代up>k年代up>列の行列
現在の状態と現在の入力のすべての組み合わせの出力(8進数)
メモ年代tr在g>
トレリス構造体は任意の名前でかまいませんが,フィ,ルドは表に示してある通りの<年代p一个nclass="emphasis">“正確な”名前でなければなりません。フィ,ルド名は,大文字と小文字を区別します。
nextStates
行列において,各エントリは,0 ~numStates
-1の間の整数です。张開始状態がで入力ビットが10進数表現j - 1である場合,i行j列の要素が次の状態を示します。入力ビットを10進数に変換するには,最初の入力ビットを最上位ビット(MSB)として使用します。たとえば,nextStates
行列の2列目は,現在の入力値のセットが{0,…,0,1}であるときに,次の状態を保存します。状態に数値を割り当てる方法の詳細は,<一个href="//www.tatmou.com/jp/help/comm/ref/istrellis.html">istrellis
のリファレンスペ,ジを参照してください。
输出
行列では,開始状態が张で入力ビットが10進数表現j - 1である場合,i行j列の要素が符号化器の出力を示します。10進数値に変換するには,最初の出力ビットをMSBとして使用します。
Matlabトレリス構造体の作成法-年代tr在g>各フィールドに置きたい情報についてわかると,以下の方法によってトレリス構造体を作成することができます。
structurename.fieldname
表記を使って,5個のフィ,ルドを個別に定義します。たとえば,年代
という構造体の最初のフィ,ルドは,以下のコマンドを使って設定します。その他のフィ,ルドを定義するには,さらにコマンドを使います。
s.numInputSymbols = 2;
このアプロ,チの詳細は,関数<一个href="//www.tatmou.com/jp/help/comm/ref/istrellis.html">istrellis
のリファレンスペ,ジを参照してください。
すべてのフィルド名およびそれらの値を1の结构体
コマンドに収集します。次に例を示します。
s = struct('numInputSymbols',2,'numOutputSymbols',2,…“numStates”2“nextStates”,[0 1;0 1],“输出”,[0 0;1 1]);
符号化器の多項式表現から開始し,関数poly2trellis
を使って有効なトレリス構造体に変換します。詳細にいては,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">畳み込み符号の多項式表現一个>を参照してください。
構造体が有効なトレリス構造体であるかどうかを調べるには,関数istrellis
を使用します。
例:matlabトレリス構造体-年代tr在g>以下のトレリスを考えます。
これを記述するトレリス構造体を作成するには,以下のコマンドを使います。
格子= struct(<年代p一个n年代tyle="color:#A020F0">“numInputSymbols”年代p一个n>2,<年代p一个n年代tyle="color:#A020F0">“numOutputSymbols”年代p一个n>4<年代p一个n年代tyle="color:#0000FF">...年代p一个n>“numStates”年代p一个n>4<年代p一个n年代tyle="color:#A020F0">“nextStates”年代p一个n>,[0 2;0 2;1 3;1 3],<年代p一个n年代tyle="color:#0000FF">...年代p一个n>“输出”年代p一个n>,[0 3;1 2;3 0;2 1]);
トレリスダイアグラムが実線の矢印と点線の矢印の2種類の入力パスをもつので,入力シンボル数は2です。矢印の上の数値は0,1,2,3のいずれかなので,出力シンボルの数は4です。トレリスダイアグラムの左側に4つの点があるため,状態数は4です(右側にも同じく4つあります)。次の状態の行列を計算するために,行がトレリスの左側の4つの現在の状態に対応し,列が0と1の入力に対応し,要素がトレリスの右側の矢印の先端で次の状態を与える行列を作成します。出力の行列を計算するために,行と列が次の状態の行列であり,要素がトレリス内の矢印の上に示される8進数の出力を与える行列を作成します。
畳み込み符号の作成と復号化
畳み込み符号を符号化および復号化するための関数は,convenc
とvitdec
です。この節では,これらの関数を使った畳み込み符号の作成と復号化にいて説明します。
符号化-年代tr在g>畳み込み符号を作成するためのconvenc
の簡単な使用法を以下のコマンドに示します。
トレリスを定義します。
T = poly2trellis([4 3],[4 5 17;7 4 2]);
1のベクトルを符号化します。
X = ones(100,1);代码= convc (x,t);
最初のコマンドは,フィードフォワード畳み込み符号化器の多項式表現を,対応するトレリス表現に変換します。2番目のコマンドは,100ビットまたは50個の2ビットシンボルを符号化します。この例の符号化率は2/3なので,出力ベクトル代码
には150ビット(100入力ビットの3/2倍)が含まれます。
トレリスが異常な畳み込み符号に対応するかどうかをチェックするには,関数iscatastrophic
を使用します。
硬判定復号化-年代tr在g>硬判定を使用して復号化するには,フラグ“硬”
と“2進数”<年代p一个nclass="emphasis">入力デ,タと共に関数vitdec
を使用します。convenc
の出力は2進数なので,硬判定復号化は,追加処理なしでconvenc
の出力を直接使用することができます。この例は,前の例を拡張したもので,硬判定復号化を実装しています。
トレリスを定義します。
T = poly2trellis([4 3],[4 5 17;7 4 2]);
1のベクトルを符号化します。
代码= conc (ones(100,1),t);
復号化のトレ,スバック長を設定し,vitdec
を使用して復号化します。
TB = 2;解码= vitdec(code,t,tb,<年代p一个n年代tyle="color:#A020F0">“trunc”年代p一个n>,<年代p一个n年代tyle="color:#A020F0">“硬”年代p一个n>);
復号化されたデ,タが100個の1のベクトルであることを検証します。
isequal(解码(100 1))
ans =<年代p一个nclass="emphasis">逻辑1
軟判定復号化-年代tr在g>軟判定を使用して復号化するには,フラグ“软”
と共に関数vitdec
を使用します。軟判定ビットの数(nsdec
)を指定し,0から2 ^ nsdec-1
までの整数で構成される入力デ,タを使用します。
入力0は最も信頼性の高い0を表し,入力2 ^ nsdec-1
は最も信頼性の高い1を表します。その他の値は、比較的信頼性の低い判定を表します。たとえば、次の表は、3 ビット軟判定に対する値の解釈をまとめています。
3ビット軟判定に対する入力値年代tr在g>
入力値
解釈
0
最も信頼性の高い0
1
2番目に信頼性の高い0 .
2
3番目に信頼性の高い0 .
3.
最も信頼性の低い0
4
最も信頼性の低い
5
3番目に信頼性の高い
6
2番目に信頼性の高い
7
最も信頼性の高い
Matlabを使用した軟判定復号化の実装年代tr在g>
次のスクリプトは,3ビット軟判定での復号化を説明しています。最初にconvenc
を使用して畳み込み符号を作成し,情况下
を使用して符号にホワ▪▪トガウスノ▪▪ズを追加します。その後,軟判定復号化を準備するため,例ではquantiz
を使用してノ▪▪ズを含むデ▪タ値を0から7▪▪までの整数の適切な判定値にマッピングします。quantiz
の2番目の引数は,どのデータ値が0、1、2などにマッピングされるかを決定する分割ベクトルです。分割は0に近い値が0にマッピングされ,1に近い値が7にマッピングされるように選択されます(アプリケーションで必要な場合は,分割を調整して復号化パフォーマンスを高めることができます)。最後に,例では符号を復号化し,ビット誤り率を計算します。復号化されたデ,タと元のメッセ,ジの比較時に,例では復号化の遅延を考慮に入れなければなりません。vitdec
の連続操作モ,ドではトレ,スバック長と等しい遅延が生じるので,味精(1)
は解码(1)
ではなく解码(tblen + 1)
に対応します。
s = RandStream.create(<年代p一个n年代tyle="color:#A020F0">“mt19937ar”年代p一个n>,<年代p一个n年代tyle="color:#A020F0">“种子”年代p一个n>, 94384);prevStream = RandStream.setGlobalStream(s);MSG = randi([0 1],4000,1);<年代p一个n年代tyle="color:#228B22">随机数据年代p一个n>T = poly2trellis(7,[171 133]);<年代p一个n年代tyle="color:#228B22">定义网格。年代p一个n>创建一个卷积编码器系统对象年代p一个n>hconvc = com . convolutionalencoder (t);<年代p一个n年代tyle="color:#228B22">创建一个AWGNChannel系统对象。年代p一个n>hChan = com . awgnchannel (<年代p一个n年代tyle="color:#A020F0">“NoiseMethod”年代p一个n>,<年代p一个n年代tyle="color:#A020F0">信噪比(SNR)年代p一个n>,<年代p一个n年代tyle="color:#0000FF">...年代p一个n>“信噪比”年代p一个n>6);<年代p一个n年代tyle="color:#228B22">创建一个ViterbiDecoder System对象年代p一个n>hVitDec = com . viterbidecoder (t,<年代p一个n年代tyle="color:#A020F0">“InputFormat”年代p一个n>,<年代p一个n年代tyle="color:#A020F0">“软”年代p一个n>,<年代p一个n年代tyle="color:#0000FF">...年代p一个n>“SoftInputWordLength”年代p一个n>3,<年代p一个n年代tyle="color:#A020F0">“TracebackDepth”年代p一个n>现年48岁的<年代p一个n年代tyle="color:#0000FF">...年代p一个n>“TerminationMethod”年代p一个n>,<年代p一个n年代tyle="color:#A020F0">“连续”年代p一个n>);<年代p一个n年代tyle="color:#228B22">创建一个ErrorRate计算器系统对象。接收帐户年代p一个n>%由维特比解码器的回溯长度引起的延迟。年代p一个n>hErrorCalc = com . errorrate (<年代p一个n年代tyle="color:#A020F0">“ReceiveDelay”年代p一个n>48岁);Ber = 0 (3,1);<年代p一个n年代tyle="color:#228B22">%存储BER值年代p一个n>code = step(hconvc,msg);<年代p一个n年代tyle="color:#228B22">编码数据。年代p一个n>hChan。年代我gnalPower = (code'*code)/length(code); ncode = step(hChan,code);<年代p一个n年代tyle="color:#228B22">增加噪音。年代p一个n>量化为软决策解码做准备。年代p一个n>qcode = quantiz (ncode [0.001, 1, 3, 5, 7, 9, .999]);Tblen = 48;延迟= tblen;<年代p一个n年代tyle="color:#228B22">%回溯长度年代p一个n>decoded = step(hVitDec,qcode);<年代p一个n年代tyle="color:#228B22">%解码。年代p一个n>%计算误码率。年代p一个n>ber = step(hErrorCalc, msg,已解码);ratio = ber(1) number = ber(2) RandStream.setGlobalStream(prevStream)
出力は以下のようになります。
数字= 5比= 0.0013
金宝appを使用した軟判定復号化の実装-年代tr在g>この例では,符号化率1/2の畳み込み符号を作成します。軟判定を実行するために,量子化と维特比解码器ブロックを使用します。モデルを開くには,matlabコマンドラescンでdoc_softdecision
と入力します。モデルの記述にいては,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">シミュレ,ションの概要一个>を参照してください。
畳み込み符号の定義年代tr在g>
この例のフィ,ドフォワ,ド畳み込み符号化器を以下に示します。
符号化器は1。拘束長の値は,シフトレジスタに格納されたビット数です。これには現在の入力も含まれます。6つのメモリ レジスタがあり、現在の入力は 1 ビットです。したがって、符号の拘束長は 7 になります。
符号化器は1つの入力と2つの出力をもつので,符号生成器は8進数の1行2列の行列です。行列内の最初の要素は、最初の出力に関連する入力値を示し、2 番目の要素は、2 番目の出力に関連する入力値を示します。
たとえば,符号化器ダイアグラムの最初の出力は,ダイアグラムの入力値の配列の右端の要素および左端の4つの要素の剰余2の和です。7桁の2進数1111001はこの情報を取得しますが,これは8進数の171と等価です。したがって,8進数171は,符号生成行列の最初のエントリとなります。ここでは,各3桁ビットで最上位ビットとして左端のビットを使用します。2番目の出力は,2進数1011011に対応します。これは,8進数133に相当します。したがって,符号生成器は[171 133]になります。
卷积编码器ブロックの<年代tr在g class="guilabel">(框架结构)年代tr在g>パラメ,タ,は,デ,タ処理にどの符号を使用するかを伝えます。この場合,Communications Toolbox の関数<一个href="//www.tatmou.com/jp/help/comm/ref/poly2trellis.html">poly2trellis
は,拘束長と8進数の組を有効なトレリス構造体に変換します。
卷积编码器ブロックに入るときのメッセージデータはスカラービットストリームですが,ブロックから出てくる符号化済みのデータは,長さ2のバイナリベクトルのストリームです。
受信デ,タのマッピング年代tr在g>
受信データ,すなわちAWGN信道ブロックの出力は,1および1に近い複素数で構成されます。元のバイナリメッセージを再構築するためには,モデルの受信機部分で畳み込み符号を復号化しなければなりません。このモデルの维特比译码器ブロックでは,入力データが0 ~ 7の整数であると想定しています。このモデルのカスタムサブシステムである復調器は,受信データを维特比译码器ブロックが正しく解釈できる形式に変換します。具体的には,復調器サブシステムは以下を行います。
虚数部を削除することで,受信デ,タ信号を実信号に変換します。送信されたデータの虚数部はゼロ(小さな丸め誤差は無視)であること,およびチャネルノイズはあまり強くないことなどの理由で,受信データの虚数部には必須の情報が含まれていないと仮定できます。
ノズの推定値の標準偏差で除算し,-1で乗算することにより,受信デタを正規化します。
3のビットを使用して正規化デタを量子化します。
このマッピングと维特比译码器ブロックの判定マッピングの組み合わせにより,このモデルの送信側でBPSK调制基带ブロックが実行するBPSK変調が逆になります。復調器サブシステムを詳しく調べるには,[Soft-Output BPSK解调]というラベルのアイコンをダブルクリックします。
畳み込み符号の復号化年代tr在g>
受信データが3ビットの判定値をもつ長さ2のベクトルに正しくマッピングされると,维特比译码器ブロックによりそれが復号化されます。<年代tr在g class="guilabel">(决策类型)年代tr在g>パラメ,タ,は(软决定)
で,<年代tr在g class="guilabel">[软决策位的数量]年代tr在g>パラメ,タ,は3.
であるため,ブロックは<年代up>3.年代up>の異なる入力値をも軟判定アルゴリズムを使用します。
デ,タの軟判定解釈年代tr在g>
(决策类型)年代tr在g>パラメ,タ,が(软决定)
に設定されると,维特比解码器ブロックでは0 ~ 2<年代up>b年代up>-1の入力値が要求されます。ここで,<年代p一个nclass="emphasis">bは<年代tr在g class="guilabel">[软决策位的数量]年代tr在g>パラメ,タ,です。ブロックは,0を、符号語ビットが 0 であるという最も信頼性の高い判定であると解釈し、2<年代up>b年代up>-1を,符号語ビットが1であるという最も信頼性の高い判定であると解釈します。これらの極値の間の値は,それらよりも信頼性の低い判定を表します。次の表は,この例の入力値として使用できる 8 つの値の解釈をまとめています。
判定値
解釈
0
最も信頼性の高い0
1
2番目に信頼性の高い0 .
2
3番目に信頼性の高い0 .
3.
最も信頼性の低い0
4
最も信頼性の低い
5
3番目に信頼性の高い
6
2番目に信頼性の高い
7
最も信頼性の高い
トレ,スバックと復号化の遅延年代tr在g>
トレ,スバック長は復号化遅延に影響を与えます。復号化遅延は,出力の最初に復号化されるシンボルよりも前の0シンボルの数です。
連続操作モ,ドの場合,復号化遅延はトレ,スバック長シンボルの数と同じです。
打切られた操作モドまたは終了した操作モドの場合,復号化遅延は0です。この場合,トレ,スバック長は,各入力のシンボルの数以下でなければなりません。
トレ,スバック長の推定値年代tr在g>
一般的な推定として,標準のトレ,スバック長の値は<年代p一个nclass="inlineequation">(ConstraintLength - 1) / (1 - code)年代p一个n>の約2倍から3倍になります。符号の拘束長ConstraintLengthは<年代p一个nclass="inlineequation">(log2 (格子
.numStates
) + 1)年代p一个n>に等しくなります。代码r一个teは<年代p一个nclass="inlineequation">(K / N) × (length(punctuation pattern) / sum(punctuation pattern)年代p一个n>に等しくなります。
Kは入力シンボルの数,Nは出力シンボルの数,およびPuncturePatternはパンクチャパターンベクトルです。
たとえば,この一般的な推定を適用することで,次のようなおおよそのトレ,スバック長が得られます。
符号化率1/2の符号のトレスバック長は<年代p一个nclass="inlineequation">5(ConstraintLength - 1)年代p一个n>です。
符号化率2/3の符号のトレスバック長は<年代p一个nclass="inlineequation">7.5(ConstraintLength - 1)年代p一个n>です。
符号化率3/4の符号のトレスバック長は<年代p一个nclass="inlineequation">10(ConstraintLength - 1)年代p一个n>です。
符号化率5/6の符号のトレスバック長は<年代p一个nclass="inlineequation">15(ConstraintLength - 1)年代p一个n>です。
维特比译码器年代p一个n>ブロックの<年代tr在g class="guilabel">(回溯深度)年代tr在g>パラメ,タ,は復号化の遅延を表します。ハ,ドウェア実装によっては48および96のオプションが用意されている場合があります。この例で48が選択されているのは,拘束長が7で符号化率が½の符号で推測されるターゲットに近いためです。
受信デ,タの遅延年代tr在g>
错误率计算年代p一个n>ブロックの<年代tr在g class="guilabel">(接收延迟)年代tr在g>パラメ,タ,は非ゼロです。これは,指定されたメッセージ ビットとそれに対応する復元ビットが非ゼロのシミュレーション時間量で区切られるためです。<年代tr在g class="guilabel">(接收延迟)年代tr在g>パラメ,タ,はエラ,のチェック時に,ブロックに比較する入力信号の要素を伝えます。
この場合,受信遅延値はトレ,スバック長の値(48)と等しくなります。
シミュレ,ション結果を論理上の結果と比較年代tr在g>
この節では,このシミュレーションでのビット誤り率と非量子化復号化から論理的に得たビット誤り率との比較方法を説明します。処理には以下のステップが含まれます。
ビット誤り率の理論的な限界を計算年代tr在g>
このモデルの畳み込み符号のビット誤り率<年代p一个nclass="emphasis">Pb年代ub>の理論的な限界を計算するには,非量子化判定復号化に基づいたこの推定を使用します。
この推定では,<年代p一个nclass="emphasis">cd年代ub>は距離<年代p一个nclass="emphasis">dの誤り电子邮箱ベントのビット誤りの総数を表し,<年代p一个nclass="emphasis">fはその符号の自由距離を表します。量<年代p一个nclass="emphasis">Pd年代ub>はペアワesc escズ誤り確率で,次式で与えられます。
ここで,<年代p一个nclass="emphasis">Rは1/2の符号化率で,<一个href="//www.tatmou.com/jp/help/matlab/ref/erfc.html">误差补函数
はmatlab相補誤差関数で,次式で定義されます。
係数<年代p一个nclass="emphasis">cd年代ub>の値と自由距離<年代p一个nclass="emphasis">fは,“具有最佳距离谱的卷积码”<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">[3]一个>などの刊行物に記載されています。この符号の自由距離は<年代p一个nclass="emphasis">f= 10です。
次のコマンドは<年代p一个nclass="emphasis">Eb年代ub>/ N0年代ub>値に対する<年代p一个nclass="emphasis">Pb年代ub>の値を1 ~ 4まで0.5の増分で計算します。
EbNoVec = [1:0.5:4.0];R = 1/2;<年代p一个n年代tyle="color:#228B22">% Errs是误码率和的向量年代p一个n>%距离d的错误事件,d从10到29。年代p一个n>Errs = [36 0 211 0 1404 0 11633 0 77433 0 502690 0,<年代p一个n年代tyle="color:#0000FF">...年代p一个n>3322763 0 21292910 0 134365911 0 843425871 0];<年代p一个n年代tyle="color:#228B22">% P是成对误差概率的矩阵,为年代p一个n>% Eb/无EbNoVec值,d从10到29。年代p一个n>P = 0 (20,7);<年代p一个n年代tyle="color:#228B22">%初始化。年代p一个n>为年代p一个n>d = 29 P (d-9:) =(1/2) *误差补函数(sqrt (d * R * 10 ^ (EbNoVec / 10)));<年代p一个n年代tyle="color:#0000FF">结束年代p一个n>% Bounds是误码的上界向量年代p一个n>%比率,用于EbNoVec中的Eb/No值。年代p一个n>边界=误差*P;
ビット誤り率を収集するためにシミュレ,ションを複数回実行年代tr在g>
関数<一个href="//www.tatmou.com/jp/help/simulink/slref/sim.html">sim卡
(金宝app模型)年代p一个n>を使用してMATLABコマンドラインからシミュレーションを実行して,シミュレーションパラメーターを効果的に変化させることができます。たとえば,次のコードは 1 dB ~ 4 dB まで 0.5 dB の増分で 1 ビットあたりのエネルギー対ノイズの比でビット誤り率を計算します。このコードはBERVec
行列でこれらのシミュレ,ションからすべてのビット誤り率を収集します。また,上記のコード部分で計算された理論的な範囲に加えて、Figure ウィンドウでビット誤り率もプロットします。
メモ:年代tr在g>
モデルをモデル化するには,matlabコマンドラescンでdoc_softdecision
と入力します。次に,これらのコマンドを実行します。実行には少し時間がかかる場合があります。
绘制理论边界,并建立图形。年代p一个n>图;semilogy (EbNoVec界限,<年代p一个n年代tyle="color:#A020F0">“波”年代p一个n>1南<年代p一个n年代tyle="color:#A020F0">的r *年代p一个n>);包含(<年代p一个n年代tyle="color:#A020F0">“Eb /不(dB)”年代p一个n>);ylabel (<年代p一个n年代tyle="color:#A020F0">“误码率”年代p一个n>);标题(<年代p一个n年代tyle="color:#A020F0">误码率(BER)年代p一个n>);传奇(<年代p一个n年代tyle="color:#A020F0">误码率的理论界限年代p一个n>,<年代p一个n年代tyle="color:#A020F0">的实际数量年代p一个n>);轴([1 4 1e-5 1]);持有<年代p一个n年代tyle="color:#A020F0">在年代p一个n>;BERVec = [];<年代p一个n年代tyle="color:#228B22">使噪音水平可变。年代p一个n>set_param (<年代p一个n年代tyle="color:#A020F0">doc_softdecision / AWGN信道的年代p一个n>,<年代p一个n年代tyle="color:#0000FF">...年代p一个n>“EsNodB”年代p一个n>,<年代p一个n年代tyle="color:#A020F0">“EbNodB + 10 * log10(1/2)”年代p一个n>);<年代p一个n年代tyle="color:#228B22">%模拟多次。年代p一个n>为年代p一个n>n = 1:length(EbNoVec) EbNodB = EbNoVec(n);sim卡(<年代p一个n年代tyle="color:#A020F0">“doc_softdecision”年代p一个n>, 5000000);BERVec(n,:) = BER_Data;semilogy (EbNoVec (n), BERVec (n, 1),<年代p一个n年代tyle="color:#A020F0">的r *年代p一个n>);<年代p一个n年代tyle="color:#228B22">图点。年代p一个n>drawnow;<年代p一个n年代tyle="color:#0000FF">结束年代p一个n>持有<年代p一个n年代tyle="color:#A020F0">从年代p一个n>;
メモ:年代tr在g>
Pb年代ub>の推定は,復号化器が非量子化デ,タ,まり,無限に存在する微細な量子化を使用すると仮定します。一方、この例におけるシミュレーションでは 8 レベル (3 ビット) の量子化を使用しています。この量子化のため、シミュレートされたビット誤り率は S/N 比が高い場合の範囲ほど低くありません。
S/ n比に対するビット誤り率のプロットが後に続きます。シミュレ,ションでは乱数が使用されるため,実際のber点の位置は異なる場合があります。
Matlabを使用した符号化率-2/3のフィドフォワド符号化器の設計
次の例は,下図に示すような符号化率2/3のフィ,ドフォワ,ド符号化器を使います。ここでの説明には、符号化器の図からトレリス パラメーターを決定する方法と、この符号化器を使った符号化方法が示されています。
符号化パラメタの決定-年代tr在g>パラメ、タ、が適切な値をも、場合、関数convenc
およびvitdec
は,このコ,ドを実装できます。
符号化器は2の入力をもので,符号化器の拘束長は,長さ2のベクトルです。このベクトルの要素は,現在の入力ビットを含む各シフトレジスタに格納されたビット数を示します。図の各シフト レジスタ内のメモリ空間の数に、現在の入力として 1 を加えて、拘束長は [5 4] になります。
符号生成パラメーターを8進数からなる2行3列の行列として決定するには,我番目の入力がj番目の出力にどのように寄与するかを示すためにi行j列の要素を使います。たとえば、2行3列の要素を計算するには,図の2番目のシフトレジスタの最も左の要素と最も右の2つの要素の和が3番目の出力になります。この情報を2進数1011まり8進数13として取得します。符号生成行列の全部の値は,[23 35 0;0 5 13]です。
関数convenc
およびvitdec
において拘束長と符号生成パラメーターを使用するには,それらのパラメーターをトレリス構造体に変換する関数poly2trellis
を使用します。これを行うコマンドは,以下のとおりです。
Trel = poly2trellis([5 4],[23 35 0;0 5 13]);定义网格。
符号化器の使用-年代tr在g>次に,この符号化器を使用したスクリプトを示します。
Len = 1000;MSG = randi([0 1],2*len,1);<年代p一个n年代tyle="color:#228B22">2位符号的随机二进制消息年代p一个n>Trel = poly2trellis([5 4],[23 35 0;0 5 13]);<年代p一个n年代tyle="color:#228B22">%格子年代p一个n>创建一个卷积编码器系统对象年代p一个n>hconvc = com . convolutionalencoder (trel);<年代p一个n年代tyle="color:#228B22">创建一个ViterbiDecoder System对象年代p一个n>hVitDec = com . viterbidecoder (trel,<年代p一个n年代tyle="color:#A020F0">“InputFormat”年代p一个n>,<年代p一个n年代tyle="color:#A020F0">“硬”年代p一个n>,<年代p一个n年代tyle="color:#0000FF">...年代p一个n>“TracebackDepth”年代p一个n>34岁的<年代p一个n年代tyle="color:#A020F0">“TerminationMethod”年代p一个n>,<年代p一个n年代tyle="color:#A020F0">“连续”年代p一个n>);<年代p一个n年代tyle="color:#228B22">创建一个ErrorRate计算器系统对象。因为每个符号都代表年代p一个n>% 2位,该对象的接收延迟是回溯长度的两倍年代p一个n>%的维特比解码器。年代p一个n>hErrorCalc = com . errorrate (<年代p一个n年代tyle="color:#A020F0">“ReceiveDelay”年代p一个n>, 68);Ber = 0 (3,1);<年代p一个n年代tyle="color:#228B22">%存储BER值年代p一个n>code = step(hconvc,msg);<年代p一个n年代tyle="color:#228B22">编码消息。年代p一个n>Ncode = rem(code + randerr(3*len,1,[0 1;;96 .04点),2);<年代p一个n年代tyle="color:#228B22">增加噪音。年代p一个n>decoded = step(hVitDec, ncode);<年代p一个n年代tyle="color:#228B22">%解码。年代p一个n>ber = step(hErrorCalc, msg,已解码);
convenc
は,2ビットシンボルを含むベクトルを受け取り,3ビットシンボルを含むベクトルを生成します。vitdec
は,その逆の処理を実行します。またbiterr
は解码
の最初の68要素を無視することにも注意してください。つまり,復号化遅延は68でこれは復元されたメッセージのシンボルあたりのビット数(2)と関数vitdec
のトレ,スバック長の値(34)を乗算した値です。解码
の最初の68要素は0で,その後の要素が復号化されたメッセジを表します。
金宝appを使用した符号化率2/3のフィドフォワド符号化器の設計
この例では,下図の符号化率2/3のフィ,ドフォワ,ド畳み込み符号化器を使用します。ここでの説明には、符号化率 2/3 のフィードフォワード符号化器の図から符号化ブロックのパラメーターを特定する方法が示されています。この例では、受信遅延が発生した場合の<一个href="//www.tatmou.com/jp/jp/help/comm/ref/errorratecalculation.html">错误率计算年代p一个n>ブロックの使用にいても示しています。
符号化パラメタの特定方法-年代tr在g>パラメタが適切な値をも場合,<一个href="//www.tatmou.com/jp/jp/help/comm/ref/convolutionalencoder.html">卷积编码器年代p一个n>および<一个href="//www.tatmou.com/jp/jp/help/comm/ref/viterbidecoder.html">维特比译码器年代p一个n>ブロックは,この符号を実装できます。
符号化器は2の入力をもので,符号化器の拘束長は,長さ2のベクトルです。このベクトルの要素は,現在の入力ビットを含む各シフトレジスタに格納されたビット数を示します。図の各シフト レジスタ内のメモリ空間の数に、現在の入力として 1 を加えて、拘束長は [5 4] になります。
符号生成パラメーターを8進数からなる2行3列の行列として決定するには,我番目の入力がj番目の出力にどのように寄与するかを示すためにi行j列の要素を使います。たとえば、2行3列の要素を計算するには,図の2番目のシフトレジスタの最も左の要素と最も右の2つの要素の和が3番目の出力になります。この情報を2進数1011まり8進数13として取得します。符号生成行列の全部の値は,[27 33 0;0 5 13]です。
卷积编码器および维特比译码器ブロックにおいて拘束長と符号生成パラメーターを使用するには,それらのパラメーターをトレリス構造体に変換する関数poly2trellis
を使用します。
符号化器のシミュレト方法-年代tr在g>次のモデルはこの符号化器をシミュレ,トします。
完成したモデルを開くには,matlabコマンドラescンでdoc_convcoding
と入力します。モデルを作成するには,次のブロックを収集し,設定します。
通讯来源ラescブラリの<一个href="//www.tatmou.com/jp/jp/help/comm/ref/bernoullibinarygenerator.html">伯努利二进制发生器年代p一个n>
[0的概率]年代tr在g>を5
に設定します。
(初始种子)年代tr在g>を任意の正のスカラ,整数(関数<一个href="//www.tatmou.com/jp/help/matlab/ref/randn.html">randn
の出力であることが好ましい)に設定します。
(样品时间)年代tr在g>を5
に設定します。
(框架输出)年代tr在g>チェックボックスをオンにします。
[每帧样本]年代tr在g>を2
に設定します。
-
(框架结构)年代tr在g>をPoly2trellis ([5 4],[23 35 0;0 5 13])
に設定します。
频道ラ,频道ブラリ内の<一个href="//www.tatmou.com/jp/jp/help/comm/ref/binarysymmetricchannel.html">二进制对称信道年代p一个n>
(误差概率)年代tr在g>を0.02
に設定します。
(初始种子)年代tr在g>を任意の正のスカラ,整数(関数<一个href="//www.tatmou.com/jp/help/matlab/ref/randn.html">randn
の出力であることが好ましい)に設定します。
[输出误差向量]年代tr在g>チェックボックスをオフにします。
-
(框架结构)年代tr在g>をPoly2trellis ([5 4],[23 35 0;0 5 13])
に設定します。
(决策类型)年代tr在g>を(决策类型)
に設定します。
通信接收器ラ电子邮件ブラリの<一个href="//www.tatmou.com/jp/jp/help/comm/ref/errorratecalculation.html">错误率计算年代p一个n>
(接收延迟)年代tr在g>を68
に設定します。
(输出数据)年代tr在g>を(港口)
に設定します。
(停止仿真)年代tr在g>チェックボックスをオンにします。
[目标错误数]年代tr在g>をOne hundred.
に設定します。
金宝appSimulink sinkラブラリの<一个href="//www.tatmou.com/jp/help/simulink/slref/display.html">显示年代p一个n>(金宝app模型)年代p一个n>
3のエントリが表示されるようにアコンの下端をドラッグします。
前の図に示したようにブロックを接続します。<年代tr在g class="guimenuitem">[シミュレ,ション]年代tr在g>タブの<年代tr在g class="guimenuitem">[シミュレ,ション]年代tr在g>セクションで,<年代tr在g class="guilabel">[終了時間]年代tr在g>を正
に設定します。<年代tr在g class="guimenuitem">[シミュレ,ション]年代tr在g>セクションは複数のタブに表示されます。
モデルにいての注釈-年代tr在g>モデル内の信号の行列サ@ @ズを表示することができます。<年代tr在g class="guimenuitem">[デバッグ]年代tr在g>タブで,<年代tr在g class="guimenuitem">[情報のオバレ]年代tr在g>を展開します。<年代tr在g class="guimenuitem">[信号]年代tr在g>セクションで,<年代tr在g class="guimenuitem">[信号の次元]年代tr在g>を選択します。
符号化器は2行1列の列ベクトルを受け入れ,3行1列の列ベクトルを生成するのに対し,復号化器はその反対の操作を行います。伯努利二进制发生器ブロックの<年代tr在g class="guilabel">[每帧样本]年代tr在g>パラメーターは,ブロックが長さ2のメッセージワードを生成しなければならないため2に指定されます。
错误率计算ブロックの<年代tr在g class="guilabel">(接收延迟)年代tr在g>パラメ,タ,は68です。この値は,维特比解码器ブロックで復元されたメッセ,ジのベクトル長(2)に<年代tr在g class="guilabel">(回溯深度)年代tr在g>値(34)を掛けたものです。MATLABワークスペースで送信信号と受信信号を行列として調べると、復元されたメッセージの最初の 34 行はゼロになっており、後続の行は復号化されたメッセージを表します。したがって、受信信号での遅延は長さ 2 の 34 ベクトル (68 サンプル) です。
モデルを実行すると,3の数字からなる表示出力が生成されます。つまり,誤り率,誤りの総数,计算错误率ブロックがシミュレーション時に行う比較の総数が生成されます(最初の2つの数字は,伯努利二进制发电机および二进制对称信道ブロックの<年代tr在g class="guilabel">(初始种子)年代tr在g>値によって異なります)。シミュレションは100の誤りが発生した後で停止します。これは,<年代tr在g class="guilabel">[目标错误数]年代tr在g>が错误率计算ブロックでOne hundred.
に設定されているためです。誤り率は二进制对称信道ブロックの<年代tr在g class="guilabel">(误差概率)年代tr在g>の0.02
よりはるかに小さいです。
Matlabを使用した畳み込み符号のパンクチャ
この例では,パンクチャド畳み込み符号の処理を行います。まず,3.0,000個のランダムなビットを作成し、[1 1 1 0 0 1] のパンクチャ パターンをもつ符号化率 -3/4 の畳み込み符号化器で符号化します。結果のベクトルは、40,000 ビットを含み、これは伝送用に値 -1 と 1 にマッピングされます。パンクチャド符号punctcode
は加法性ホワ▪▪トガウスノ▪▪ズチャネルを通過します。次に,vitdec
は,“unquant”
判定タ▪▪プを使用してノ▪▪ズのあるベクトルを復号化します。
最後に,例ではビット誤り率とビット誤りの数を計算します。
Len = 30000;MSG = randi([0 1], len, 1);<年代p一个n年代tyle="color:#228B22">随机数据年代p一个n>T = poly2trellis(7, [133 171]);<年代p一个n年代tyle="color:#228B22">定义网格。年代p一个n>创建一个卷积编码器系统对象年代p一个n>hconvc = com . convolutionalencoder (t,<年代p一个n年代tyle="color:#0000FF">...年代p一个n>“PuncturePatternSource”年代p一个n>,<年代p一个n年代tyle="color:#A020F0">“属性”年代p一个n>,<年代p一个n年代tyle="color:#0000FF">...年代p一个n>“PuncturePattern”年代p一个n>, (1, 1, 1, 0, 0, 1]);<年代p一个n年代tyle="color:#228B22">创建一个AWGNChannel系统对象。年代p一个n>hChan = com . awgnchannel (<年代p一个n年代tyle="color:#A020F0">“NoiseMethod”年代p一个n>,<年代p一个n年代tyle="color:#A020F0">信噪比(SNR)年代p一个n>,<年代p一个n年代tyle="color:#0000FF">...年代p一个n>“信噪比”年代p一个n>3);<年代p一个n年代tyle="color:#228B22">创建一个ViterbiDecoder System对象年代p一个n>hVitDec = com . viterbidecoder (t,<年代p一个n年代tyle="color:#A020F0">“InputFormat”年代p一个n>,<年代p一个n年代tyle="color:#A020F0">“Unquantized”年代p一个n>,<年代p一个n年代tyle="color:#0000FF">...年代p一个n>“TracebackDepth”年代p一个n>, 96,<年代p一个n年代tyle="color:#A020F0">“TerminationMethod”年代p一个n>,<年代p一个n年代tyle="color:#A020F0">“截断”年代p一个n>,<年代p一个n年代tyle="color:#0000FF">...年代p一个n>“PuncturePatternSource”年代p一个n>,<年代p一个n年代tyle="color:#A020F0">“属性”年代p一个n>,<年代p一个n年代tyle="color:#0000FF">...年代p一个n>“PuncturePattern”年代p一个n>, (1, 1, 1, 0, 0, 1]);<年代p一个n年代tyle="color:#228B22">创建一个ErrorRate计算器系统对象。年代p一个n>hErrorCalc = com . errorrate;berP = 0 (3,1);berPE = berP;<年代p一个n年代tyle="color:#228B22">%存储BER值年代p一个n>puntcode = step(hconvc,msg);<年代p一个n年代tyle="color:#228B22">%长度为(2*len)*2/3。年代p一个n>Tcode = 1-2* pointcode;<年代p一个n年代tyle="color:#228B22">将“0”位映射到1,将“1”位映射到-1年代p一个n>hChan。年代我gnalPower = (tcode'*tcode)/length(tcode); ncode = step(hChan,tcode);<年代p一个n年代tyle="color:#228B22">增加噪音。年代p一个n>解码被刺穿的代码年代p一个n>decoded = step(hVitDec,ncode);<年代p一个n年代tyle="color:#228B22">%解码。年代p一个n>berP = step(hErrorCalc, msg,已解码);<年代p一个n年代tyle="color:#228B22">误码率年代p一个n>删除最不可靠的100个符号,然后解码。年代p一个n>释放(hVitDec);重置(hErrorCalc) hVitDec。ErasuresInputPort = true;[dummy idx] = sort(abs(ncode));Erasures = 0 (size(ncode));Erasures (idx(1:100)) = 1;decoded = step(hVitDec,ncode, erasures);<年代p一个n年代tyle="color:#228B22">%解码。年代p一个n>berPE = step(hErrorCalc, msg,已解码);<年代p一个n年代tyle="color:#228B22">误码率年代p一个n>流(<年代p一个n年代tyle="color:#A020F0">'穿孔错误数:%d\n'年代p一个n>, berP(2)) fprintf(<年代p一个n年代tyle="color:#A020F0">'插入和擦除的错误数:%d\n'年代p一个n>berPE (2))
金宝appを使用したフィドバックをも組織符号化器の実装
この節では,卷积编码器ブロックを使用してフィードバックをもつ組織符号化器を実装する方法を説明します。符号は,実際のメッセ,ジワ,ドが符号語の一部として表示される場合は“組織的”です。<年代p一个nclass="emphasis">次の図は,組織符号化器の例を示しています。
この符号化器を実装するには,卷积编码器ブロックの<年代tr在g class="guilabel">(框架结构)年代tr在g>パラメ,タ,をPoly2trellis (5, [37 33], 37)
に設定します。この設定は以下のように対応します。
拘束長:5
生成多項式のペア:33 [37]
フィ,ドバック多項式:37
フィードバック多項式は,上列の2進数値に対応するバイナリベクトル[1 1 1 1 1]によって表されます。これらの数値は,レジスタの出力から加算器への接続を示します。最初の1は入力ビットに対応します。2進数 11111 の 8 進数表現は 37 です。
組織符号を実装するには,最初の生成多項式を卷积编码器ブロックの<年代tr在g class="guilabel">(框架结构)年代tr在g>パラメ,タ,にあるフィ,ドバック多項式と同じに設定します。この例では,両方の多項式の8進数表現は37です。
2番目の生成多項式は,下列の2進数値に対応するバイナリベクトル[1 1 0 1 1]によって表されます。2進数11011に対応する8進数は33です。
卷积编码器ブロックのマスクパラメ,タ,の設定方法の詳細は,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">畳み込み符号の多項式表現一个>を参照してください。
軟判定復号化
この例では,符号化率1/2の畳み込み符号を作成します。軟判定を実行するために,量子化と维特比解码器ブロックを使用します。この説明では,以下のトピックにいて説明します。
シミュレションの概要-年代tr在g>モデルを次の図に示します。モデルを開くには,matlabコマンドラescンでdoc_softdecision
と入力します。シミュレーションでは,作成したランダムバイナリメッセージ信号を畳み込み符号に符号化し,これを2位相シフトキーイング(BPSK)手法により変調後,変調されたデータにホワイトガウスノイズを追加してノイズのあるチャネルをシミュレートします。次に,復号化ブロック用に受信デ,タを準備し,復号化を行います。最後に,復号化した情報と元のメッセ,ジ信号を比較し,ビット誤り率を計算します。畳み込み符号化器は,符号化率1/2の符号化器として構成されます。この符号化器は,2ビットごとに別の2の冗長ビットを追加します。これに適合させ,正確な量のノ@ @ズを追加するため,awgn @ @ブロックのパラメ,@ @タ<年代tr在g class="guilabel">(Eb /不(dB))年代tr在g>は10*log10(2)を差し引くことにより実質半分にされます。シミュレションは100個のビット誤りまたは<年代up>7年代up>メッセジビット(どらか先に起こった方)を処理した後で終了します。
畳み込み符号の定義-年代tr在g>この例のフィ,ドフォワ,ド畳み込み符号化器を以下に示します。
符号化器は1。拘束長の値は,シフトレジスタに格納されたビット数です。これには現在の入力も含まれます。6つのメモリ レジスタがあり、現在の入力は 1 ビットです。したがって、符号の拘束長は 7 になります。
符号化器は1つの入力と2つの出力をもつので,符号生成器は8進数の1行2列の行列です。行列内の最初の要素は、最初の出力に関連する入力値を示し、2 番目の要素は、2 番目の出力に関連する入力値を示します。
たとえば,符号化器ダイアグラムの最初の出力は,ダイアグラムの入力値の配列の右端の要素および左端の4つの要素の剰余2の和です。7桁の2進数1111001はこの情報を取得しますが,これは8進数の171と等価です。したがって,8進数171は,符号生成行列の最初のエントリとなります。ここでは,各3桁ビットで最上位ビットとして左端のビットを使用します。2番目の出力は,2進数1011011に対応します。これは,8進数133に相当します。したがって,符号生成器は[171 133]になります。
卷积编码器ブロックの<年代tr在g class="guilabel">(框架结构)年代tr在g>パラメ,タ,は,デ,タ処理にどの符号を使用するかを伝えます。この場合,Communications Toolbox の関数<一个href="//www.tatmou.com/jp/help/comm/ref/poly2trellis.html">poly2trellis
は,拘束長と8進数の組を有効なトレリス構造体に変換します。
卷积编码器ブロックに入るときのメッセージデータはスカラービットストリームですが,ブロックから出てくる符号化済みのデータは,長さ2のバイナリベクトルのストリームです。
受信デタのマッピング-年代tr在g>受信データ,すなわちAWGN信道ブロックの出力は,1および1に近い複素数で構成されます。元のバイナリメッセージを再構築するためには,モデルの受信機部分で畳み込み符号を復号化しなければなりません。このモデルの维特比译码器ブロックでは,入力データが0 ~ 7の整数であると想定しています。このモデルのカスタムサブシステムである復調器は,受信データを维特比译码器ブロックが正しく解釈できる形式に変換します。具体的には,復調器サブシステムは以下を行います。
虚数部を削除することで,受信デ,タ信号を実信号に変換します。送信されたデータの虚数部はゼロ(小さな丸め誤差は無視)であること,およびチャネルノイズはあまり強くないことなどの理由で,受信データの虚数部には必須の情報が含まれていないと仮定できます。
ノズの推定値の標準偏差で除算し,-1で乗算することにより,受信デタを正規化します。
3のビットを使用して正規化デタを量子化します。
このマッピングと维特比译码器ブロックの判定マッピングの組み合わせにより,このモデルの送信側でBPSK调制基带ブロックが実行するBPSK変調が逆になります。復調器サブシステムを詳しく調べるには,[Soft-Output BPSK解调]というラベルのアイコンをダブルクリックします。
畳み込み符号の復号化-年代tr在g>受信データが3ビットの判定値をもつ長さ2のベクトルに正しくマッピングされると,维特比译码器ブロックによりそれが復号化されます。<年代tr在g class="guilabel">(决策类型)年代tr在g>パラメ,タ,は(软决定)
で,<年代tr在g class="guilabel">[软决策位的数量]年代tr在g>パラメ,タ,は3.
であるため,ブロックは<年代up>3.年代up>の異なる入力値をも軟判定アルゴリズムを使用します。
デ,タの軟判定解釈年代tr在g>
(决策类型)年代tr在g>パラメ,タ,が(软决定)
に設定されると,维特比解码器ブロックでは0 ~ 2<年代up>b年代up>-1の入力値が要求されます。ここで,<年代p一个nclass="emphasis">bは<年代tr在g class="guilabel">[软决策位的数量]年代tr在g>パラメ,タ,です。ブロックは,0を、符号語ビットが 0 であるという最も信頼性の高い判定であると解釈し、2<年代up>b年代up>-1を,符号語ビットが1であるという最も信頼性の高い判定であると解釈します。これらの極値の間の値は,それらよりも信頼性の低い判定を表します。次の表は,この例の入力値として使用できる 8 つの値の解釈をまとめています。
判定値
解釈
0
最も信頼性の高い0
1
2番目に信頼性の高い0 .
2
3番目に信頼性の高い0 .
3.
最も信頼性の低い0
4
最も信頼性の低い
5
3番目に信頼性の高い
6
2番目に信頼性の高い
7
最も信頼性の高い
トレ,スバックと復号化の遅延年代tr在g>
维特比解码器ブロックの<年代tr在g class="guilabel">(回溯深度)年代tr在g>パラメ,タ,は復号化の遅延を表します。トレースバック長の典型的な値は拘束長の約5 ~ 6倍で,この例では35または42になります。ただし,ハードウェア実装によっては48および96のオプションが用意されている場合があります。この例で48が選択されているのは,96よりもターゲット(35および42)に近いためです。
受信デタの遅延-年代tr在g>错误率计算年代p一个n>ブロックの<年代tr在g class="guilabel">(接收延迟)年代tr在g>パラメ,タ,は非ゼロです。これは,指定されたメッセージ ビットとそれに対応する復元ビットが非ゼロのシミュレーション時間量で区切られるためです。<年代tr在g class="guilabel">(接收延迟)年代tr在g>パラメ,タ,はエラ,のチェック時に,ブロックに比較する入力信号の要素を伝えます。
この場合,受信遅延値はトレ,スバック長の値(48)と等しくなります。
シミュレション結果を論理上の結果と比較-年代tr在g>この節では,このシミュレーションでのビット誤り率と非量子化復号化から論理的に得たビット誤り率との比較方法を説明します。このプロセスには以下の節で説明されているいくかの手順が含まれます。
ビット誤り率の理論的な限界を計算年代tr在g>
このモデルの畳み込み符号のビット誤り率<年代p一个nclass="emphasis">Pb年代ub>の理論的な限界を計算するには,非量子化判定復号化に基づいたこの推定を使用します。
この推定では,<年代p一个nclass="emphasis">cd年代ub>は距離<年代p一个nclass="emphasis">dの誤り电子邮箱ベントのビット誤りの総数を表し,<年代p一个nclass="emphasis">fはその符号の自由距離を表します。量<年代p一个nclass="emphasis">Pd年代ub>はペアワesc escズ誤り確率で,次式で与えられます。
ここで,<年代p一个nclass="emphasis">Rは1/2の符号化率で,<一个href="//www.tatmou.com/jp/help/matlab/ref/erfc.html">误差补函数
はmatlab相補誤差関数で,次式で定義されます。
係数<年代p一个nclass="emphasis">cd年代ub>の値と自由距離<年代p一个nclass="emphasis">fは,“具有最佳距离谱的卷积码”<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">[3]一个>などの刊行物に記載されています。この符号の自由距離は<年代p一个nclass="emphasis">f= 10です。
次のコマンドは<年代p一个nclass="emphasis">Eb年代ub>/ N0年代ub>値に対する<年代p一个nclass="emphasis">Pb年代ub>の値を1 ~ 4まで0.5の増分で計算します。
EbNoVec = [1:0.5:4.0];R = 1/2;<年代p一个n年代tyle="color:#228B22">% Errs是误码率和的向量年代p一个n>%距离d的错误事件,d从10到29。年代p一个n>Errs = [36 0 211 0 1404 0 11633 0 77433 0 502690 0,<年代p一个n年代tyle="color:#0000FF">...年代p一个n>3322763 0 21292910 0 134365911 0 843425871 0];<年代p一个n年代tyle="color:#228B22">% P是成对误差概率的矩阵,为年代p一个n>% Eb/无EbNoVec值,d从10到29。年代p一个n>P = 0 (20,7);<年代p一个n年代tyle="color:#228B22">%初始化。年代p一个n>为年代p一个n>d = 29 P (d-9:) =(1/2) *误差补函数(sqrt (d * R * 10 ^ (EbNoVec / 10)));<年代p一个n年代tyle="color:#0000FF">结束年代p一个n>% Bounds是误码的上界向量年代p一个n>%比率,用于EbNoVec中的Eb/No值。年代p一个n>边界=误差*P;
ビット誤り率を収集するためにシミュレ,ションを複数回実行年代tr在g>
関数<一个href="//www.tatmou.com/jp/help/simulink/slref/sim.html">sim卡
(金宝app模型)年代p一个n>を使用してMATLABコマンドラインからシミュレーションを実行して,シミュレーションパラメーターを効果的に変化させることができます。たとえば,次のコードは 1 dB ~ 4 dB まで 0.5 dB の増分で 1 ビットあたりのエネルギー対ノイズの比でビット誤り率を計算します。このコードはBERVec
行列でこれらのシミュレ,ションからすべてのビット誤り率を収集します。また,上記のコード部分で計算された理論的な範囲に加えて、Figure ウィンドウでビット誤り率もプロットします。
メモ:年代tr在g>
モデルを開くには,matlabコマンドラescンでdoc_softdecision
と入力します。次に,これらのコマンドを実行します。実行には少し時間がかかる場合があります。
绘制理论边界,并建立图形。年代p一个n>图;semilogy (EbNoVec界限,<年代p一个n年代tyle="color:#A020F0">“波”年代p一个n>1南<年代p一个n年代tyle="color:#A020F0">的r *年代p一个n>);包含(<年代p一个n年代tyle="color:#A020F0">“Eb /不(dB)”年代p一个n>);ylabel (<年代p一个n年代tyle="color:#A020F0">“误码率”年代p一个n>);标题(<年代p一个n年代tyle="color:#A020F0">误码率(BER)年代p一个n>);传奇(<年代p一个n年代tyle="color:#A020F0">误码率的理论界限年代p一个n>,<年代p一个n年代tyle="color:#A020F0">的实际数量年代p一个n>);轴([1 4 1e-5 1]);持有<年代p一个n年代tyle="color:#A020F0">在年代p一个n>;BERVec = [];<年代p一个n年代tyle="color:#228B22">使噪音水平可变。年代p一个n>set_param (<年代p一个n年代tyle="color:#A020F0">doc_softdecision / AWGN信道的年代p一个n>,<年代p一个n年代tyle="color:#0000FF">...年代p一个n>“EsNodB”年代p一个n>,<年代p一个n年代tyle="color:#A020F0">“EbNodB + 10 * log10(1/2)”年代p一个n>);<年代p一个n年代tyle="color:#228B22">%模拟多次。年代p一个n>为年代p一个n>n = 1:length(EbNoVec) EbNodB = EbNoVec(n);sim卡(<年代p一个n年代tyle="color:#A020F0">“doc_softdecision”年代p一个n>, 5000000);BERVec(n,:) = BER_Data;semilogy (EbNoVec (n), BERVec (n, 1),<年代p一个n年代tyle="color:#A020F0">的r *年代p一个n>);<年代p一个n年代tyle="color:#228B22">图点。年代p一个n>drawnow;<年代p一个n年代tyle="color:#0000FF">结束年代p一个n>持有<年代p一个n年代tyle="color:#A020F0">从年代p一个n>;
メモ:年代tr在g>
Pb年代ub>の推定は,復号化器が非量子化デ,タ,まり,無限に存在する微細な量子化を使用すると仮定します。一方、この例におけるシミュレーションでは 8 レベル (3 ビット) の量子化を使用しています。この量子化のため、シミュレートされたビット誤り率は S/N 比が高い場合の範囲ほど低くありません。
S/ n比に対するビット誤り率のプロットが後に続きます。シミュレ,ションでは乱数が使用されるため,実際のber点の位置は異なる場合があります。
フィドバック符号化器を使用したテルバト符号化
この例は、フィ、ドバック符号化器を使用したテ、ルバ、ト符号化を示しています。フィ,ドバック符号化器では,終了状態はデ,タブロック全体に依存します。テールバイトを実行するには,特定の情報ベクトル(Nビット)に対し,データブロックの符号化後に同じ終了状態をもたらす初期状態を計算しなければなりません。
このためには次の2の手順を実行します。
最初の手順では,特定のデ,タブロックに対して0の状態応答を指定します。符号化器はすべて0の状態で開始します。デ,タブロック全体が入力され,出力ビットは無視されます。Nビット後に,符号化器はx<年代ub>N年代ub>[z]年代up>状態になります。この状態から,対応する初期状態x<年代ub>0年代ub>を計算し,x<年代ub>0年代ub>で符号化器を初期化します。
2番目の手順では,実際に符号化を行います。符号化器は初期状態x<年代ub>0年代ub>から開始されます。デ,タブロックが入力され,有効な符号語は出力され,同じ状態の境界条件に一致します。
状態空間型の公式を使用してx<年代ub>N年代ub>[z]年代up>から初期状態x<年代ub>0年代ub>を理論的に計算するには,[8]を参照してください。これはブロック長を使用した1回限りの計算であり,実際にはルックアップテーブルとして実装できます。ここでは、選択したトレイルとブロック長に使用可能なすべてのエントリをシミュレートすることで、このマッピング テーブルを決定します。
モデルを開くには,matlabコマンドラescンでdoc_mtailbiting_wfeedback
と入力します。
该函数返回给定块长度和网格的映射值,用于从零状态响应确定初始状态。%映射的所有可能组合mapStValuesTab = perms(0:trellis.numStates-1);%遍历所有映射项的组合:for i = 1:length(mapStValuesTab) mapStValues = mapStValuesTab(i,:);%模型参数化的块长度sim('mtailbiting_wfeedback');检查每个运行的边界条件,如果结束和开始状态匹配,选择映射集,如果唯一(out)==0返回结束
查找サブシステムの直接查表(n-D)
ブロックの<年代tr在g class="guilabel">[テ,ブルデ,タ]年代tr在g>パラメ,タ,に対して返されるmapStValues
を選択すると,選択したブロック長とトレ@ @ @ルバ@ @ @ @ @ @ @
畳み込み符号化の参考文献
[1] Clark, George C. Jr.和J. Bibb Cain,数字通信的纠错编码,纽约,全会出版社,1981年。
[2] Gitlin, Richard D., Jeremiah F. Hayes和Stephen B. Weinstein,《数据通信原理》,纽约,全会出版社,1992年。
[3]<年代p一个n>弗兰格,P·奥顿,和t·奥托森。具有最佳距离谱的卷积码IEEE通讯3,no。11(1999年11月):317-19。https://doi.org/10.1109/4234.803468。年代p一个n>
畳み込み符号の機能
畳み込み符号化は,誤り制御符号化の特殊な場合です。ブロック符号化器と異なり、畳み込み符号化器はメモリのないデバイスではありません。畳み込み符号化器は固定数のメッセージ シンボルを受け取り、固定数のコード シンボルを生成しますが、計算は入力シンボルの現在のセットのみでなく、前の入力シンボルの一部にも依存します。
通信工具箱は仿真软件ブロック、系统对象,およびMA金宝appTLAB関数で畳み込み符号化機能を提供します。この製品は,トレリス構造体または一連の生成多項式で記述されるフィードフォワードまたはフィードバック畳み込み符号をサポートします。硬判定と軟判定の復号化を実装するために,ビタビアルゴリズムを使います。
製品には<年代p一个nclass="emphasis">“事後”確率復号化器も含まれます。これは畳み込み符号の軟出力復号化に使用できます。
畳み込み符号化に関する背景情報は,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">畳み込み符号化の参考文献一个>の文献を参照してください。
畳み込み符号化用ブロックパラメタ年代tr在g>
畳み込み符号を処理するには,卷积サブラ,卷积ブラリの<一个href="//www.tatmou.com/jp/jp/help/comm/ref/convolutionalencoder.html">卷积编码器年代p一个n>ブロック,<一个href="//www.tatmou.com/jp/jp/help/comm/ref/viterbidecoder.html">维特比译码器年代p一个n>ブロック,および/または<一个href="//www.tatmou.com/jp/help/comm/ref/appdecoder.html">应用程序译码器年代p一个n>ブロックを使用します。符号化器と復号化器の両方でマスクパラメ,タ,が必要な場合は,両方のブロックで同じ値を使用します。
卷积サブライブラリのブロックは,畳み込み符号化器の2つの異なる表現のいずれかが使用されると仮定しています。
シフトレジスタと剰余2加算器のブロック線図を使用して符号化器を設計する場合,符号生成多項式行列を計算し,その結果として(通信工具箱の)関数<一个href="//www.tatmou.com/jp/help/comm/ref/poly2trellis.html">
poly2trellis
を使用して,自動的にトレリス構造体マスクパラメ,タ,を生成できます。例にいては,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">金宝appSimulinkを使用した符号化率2/3のフィ,ドフォワ,ド符号化器の設計一个>を参照してください。トレリスダイアグラムを使用して符号化器を設計する場合MATLABでトレリス構造体を構築し,それをマスクパラメーターとして使用できます。
これらの表現の詳細にいては,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">畳み込み符号の多項式表現一个>および<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">畳み込み符号のトレリス表現一个>を参照してください。
ブロックでの多項式表現の使用年代tr在g>
卷积编码器年代p一个n>ブロック,<一个href="//www.tatmou.com/jp/jp/help/comm/ref/viterbidecoder.html">维特比译码器年代p一个n>ブロック,または<一个href="//www.tatmou.com/jp/help/comm/ref/appdecoder.html">应用程序译码器年代p一个n>ブロックで多項式表現を使用するには,通信工具箱のユーティリティ関数<一个href="//www.tatmou.com/jp/help/comm/ref/poly2trellis.html">poly2trellis
を使用します。この関数は多項式表現を受け取り,それをトレリス表現に変換します。たとえば次のコマンドは,拘束長が5で生成多項式が35と31の符号化器のトレリス表現を計算します。
格子= poly2trellis(5,[35 31]);
畳み込み符号化ブロックの1とともにこの符号化器を使用するには,次のようなpoly2trellis
コマンドを
poly2trellis(5[35] 31日);
(框架结构)年代tr在g>パラメ,タ,フィ,ルドに配置します。
畳み込み符号の多項式表現
畳み込み符号化器の多項式表現は,シフトレジスタと剰余2加算器の間の接続を記述します。たとえば,下図は、1 つの入力、2 つの出力、2 つのシフト レジスタをもつフィードフォワード畳み込み符号化器を示しています。
畳み込み符号化器の多項式表現は,符号化器がフィードフォワードか,フィードバックかに応じて,2つまたは3つの成分をもちます。
拘束長-年代tr在g>符号化器の拘束長は,長さが符号化器ダ。このベクトルの要素は,現在の入力ビットを含む各シフトレジスタに格納されたビット数を示します。<年代p一个nclass="emphasis">
上記の図で,拘束長は3です。符号化器は1入力ストリムをもため,拘束長はスカラ値です。その値は,入力に対するシフトレジスタ数プラス1です。
生成多項式-年代tr在g>符号化器ダ▪▪▪▪アグラムがk入力とn出力をも▪▪▪場合,符号生成行列はk行n列行列です。I行j列の要素は,I番目の入力がj番目の出力にどのように寄与するかを示します。
組織的なフィドバック符号化器の“組織的な”<年代p一个nclass="emphasis">ビットに対して,符号生成行列のエントリと対応するフィ,ドバック接続ベクトルの要素を一致させます。詳細は,下記の<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">フィ,ドバック接続多項式一个>を参照してください。
その他の状況では,以下のように行列内の(i,j)エントリを決定することができます。
シフトレジスタからの接続線が加算器に接続される各点に1を置き,それ以外の点に0を置くことにより,2進数表現を作成します。2進数表現の最も左の点は現在の入力を表し,最も右の点はシフトレジスタに残っている最も古い入力を表します。
この2進数表現を,最も右のビットから開始される連続する3つのビットの組と考えることで,8進数表現に変換します。各3ビット内の最も右のビットは,最下位のビットです。ビット数が3の倍数でない場合,必要に応じて左端にゼロビットを置きます(たとえば,1101010を001 101 010と解釈して152に変換します)。
たとえば,上記の図の上部および下部の加算器に対応する2進数は,それぞれ110と111です。これらの2進数は,それぞれ,8進数の6と7に等しいので,生成多項式行列は[6 7]です。
メモ年代tr在g>
str2num (dec2base (bin2dec(“110”),8))
のようなコ,ドを使用してmatlabで2進数から8進数への変換を行うことができます。
有効な畳み込み符号生成器の表として,セクション<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">ブロック符号化の参考文献一个>の<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">[2]一个>,特に文献の付録を参照してください。
フィドバック接続多項式-年代tr在g>フィ,ドバック符号化器を表している場合は,フィ,ドバック接続多項式のベクトルが必要です。このベクトルの長さは,符号化器ダ。このベクトルの要素は,8進法を使って各入力に対するフィ,ドバック接続を示します。最初に上記のステップ1のように2進数表現を作成します。その後2進数表現を上記のステップ2のように8進数表現に変換します。
符号化器がフィードバック設定をもち,組織的である場合は,符号生成器と組織的なビットに対応するフィードバック接続パラメーターは,同じ値をもたなければなりません。
符号化率1/2のフィドバック畳み込み符号化器のトレリス構造体の使用年代tr在g>
次の図に表示されているフィードバックを使用して,符号化率1/2の組織畳み込み符号化器を表すトレリス構造体を作成します。
この符号化器は,拘束長が5で生成多項式行列が33[37]でフィードバック接続多項式は37です。
最初の生成多項式は8進数37です。2番目の生成多項式は 8 進数 33 です。フィードバック多項式は 8 進数 37 です。最初の出力は組織的なビットに対応するため、最初の生成多項式はフィードバック接続多項式と一致します。
バイナリベクトル[1 1 1 1 1]は8進数37を表し,図の上列の2進数値に対応します。バイナリベクトル[1 1 0 1 1]は8進数33を表し,図の下列の2進数値に対応します。これらの2進数値は,図におけるレジスタの出力から2の加算器への接続を示します。最初の1は入力ビットに対応します。
関数poly2trellis
を使用して多項式をトレリス構造体に変換します。フィ,ドバック多項式と共に使用すると,poly2trellis
はトレリスの入力へのフィ,ドバック接続を作成します。
格子= poly2trellis(5,[37 33],37)
格子=<年代p一个nclass="emphasis">带字段的结构:numInputSymbols: 2 numOutputSymbols: 4 numStates: 16 nextStates: [16x2 double] outputs: [16x2 double]
ランダムなバ▪▪ナリデ▪▪タを生成します。指定したトレリス構造体を使用してデ,タを畳み込み符号化します。トレリス構造体,トレースバック長34岁打ち切り操作モード,硬判定を指定したビタビアルゴリズムを使用して,符号化したデータを復号化します。
数据= randi([0 1],70,1);codedData = convc(数据,格子);Tbdepth = 34;<年代p一个n年代tyle="color:#228B22">%回溯深度维特比解码器年代p一个n>decodedData = vitdec(codedData,格子,tbdepth,<年代p一个n年代tyle="color:#A020F0">“trunc”年代p一个n>,<年代p一个n年代tyle="color:#A020F0">“硬”年代p一个n>);
復号化されたデ,タにビット誤りがないことを確認します。
decodedData biterr(数据)
Ans = 0
Matlabでの多項式表現の使用-年代tr在g>関数convenc
およびvitdec
で多項式表現を使用するには,最初に関数poly2trellis
を使用してトレリス表現に変換します。たとえば,以下のコマンドは,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">畳み込み符号の多項式表現一个>の節に示された符号化器のトレリス表現を計算します。
格子= poly2trellis(3,[6 7]);
Matlab構造体格子
は,convenc
およびvitdec
に対する適切な入力引数です。
畳み込み符号のトレリス表現
畳み込み符号化器のトレリス表現は,符号化器への入力が符号化器の出力と状態遷移にどのように影響を与えるかを示します。この節では,トレリスにいて説明しmatlabでトレリスを<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">表現する方法一个>と,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">Matlabトレリスの例一个>を示します。
下図は,前節の畳み込み符号化器に対するトレリスを示しています。符号化器は4つの状態(2進数で00から11まで番号付け),1ビット入力,および2ビット出力をもちます(出力ビットに対する入力ビットの比は,この符号化器を符号化率1/2の符号化器にします)。実線矢印は,現在の入力がゼロであるときに符号化器の状態がどのように変化するかを示し,点線の矢印は,現在の入力が1であるときに符号化器の状態がどのように変化するかを示します。各矢印の上の8進数は,符号化器の現在の出力を示します。
このトレリスダイアグラムの解釈の例として,符号化器の状態が10でゼロ入力を受信する場合,コードシンボル3を出力し,状態01に変化します。状態10で入力1を受信する場合は,コードシンボル0を出力し,状態11に変化します。
トレリスには対応する多項式表現をもたないものがありますが,畳み込み符号化器の多項式表現はトレリス表現と等価です。
Matlabでのトレリスの指定-年代tr在g>MATLABでトレリスを指定するには,トレリス構造体と呼ばれる特殊なMATLABの構造体形式を使います。トレリス構造体は,次の表のように5個のフィ,ルドをもたなければなりません。
符号化率k/nの符号に対するトレリス構造体のフィルド年代tr在g>
トレリス構造体のフィ,ルド | 次元 | 平均 |
---|---|---|
numInputSymbols |
スカラ | 符号化器への入力シンボルの数:2<年代up>k年代up> |
numOutputsymbols |
スカラ | 符号化器からの出力シンボルの数:2<年代up>n年代up> |
numStates |
スカラ | 符号化器内の状態の数 |
nextStates |
numStates 行 2<年代up>k年代up>列の行列 |
現在の状態と現在の入力のすべての組み合わせの次の状態 |
输出 |
numStates 行 2<年代up>k年代up>列の行列 |
現在の状態と現在の入力のすべての組み合わせの出力(8進数) |
メモ年代tr在g>
トレリス構造体は任意の名前でかまいませんが,フィ,ルドは表に示してある通りの<年代p一个nclass="emphasis">“正確な”名前でなければなりません。フィ,ルド名は,大文字と小文字を区別します。
nextStates
行列において,各エントリは,0 ~numStates
-1の間の整数です。张開始状態がで入力ビットが10進数表現j - 1である場合,i行j列の要素が次の状態を示します。入力ビットを10進数に変換するには,最初の入力ビットを最上位ビット(MSB)として使用します。たとえば,nextStates
行列の2列目は,現在の入力値のセットが{0,…,0,1}であるときに,次の状態を保存します。状態に数値を割り当てる方法の詳細は,<一个href="//www.tatmou.com/jp/help/comm/ref/istrellis.html">istrellis
のリファレンスペ,ジを参照してください。
输出
行列では,開始状態が张で入力ビットが10進数表現j - 1である場合,i行j列の要素が符号化器の出力を示します。10進数値に変換するには,最初の出力ビットをMSBとして使用します。
Matlabトレリス構造体の作成法-年代tr在g>各フィールドに置きたい情報についてわかると,以下の方法によってトレリス構造体を作成することができます。
structurename.fieldname
表記を使って,5個のフィ,ルドを個別に定義します。たとえば,年代
という構造体の最初のフィ,ルドは,以下のコマンドを使って設定します。その他のフィ,ルドを定義するには,さらにコマンドを使います。s.numInputSymbols = 2;
このアプロ,チの詳細は,関数<一个href="//www.tatmou.com/jp/help/comm/ref/istrellis.html">
istrellis
のリファレンスペ,ジを参照してください。すべてのフィルド名およびそれらの値を1の
结构体
コマンドに収集します。次に例を示します。s = struct('numInputSymbols',2,'numOutputSymbols',2,…“numStates”2“nextStates”,[0 1;0 1],“输出”,[0 0;1 1]);
符号化器の多項式表現から開始し,関数
poly2trellis
を使って有効なトレリス構造体に変換します。詳細にいては,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">畳み込み符号の多項式表現一个>を参照してください。
構造体が有効なトレリス構造体であるかどうかを調べるには,関数istrellis
を使用します。
例:matlabトレリス構造体-年代tr在g>以下のトレリスを考えます。
これを記述するトレリス構造体を作成するには,以下のコマンドを使います。
格子= struct(<年代p一个n年代tyle="color:#A020F0">“numInputSymbols”年代p一个n>2,<年代p一个n年代tyle="color:#A020F0">“numOutputSymbols”年代p一个n>4<年代p一个n年代tyle="color:#0000FF">...年代p一个n>“numStates”年代p一个n>4<年代p一个n年代tyle="color:#A020F0">“nextStates”年代p一个n>,[0 2;0 2;1 3;1 3],<年代p一个n年代tyle="color:#0000FF">...年代p一个n>“输出”年代p一个n>,[0 3;1 2;3 0;2 1]);
トレリスダイアグラムが実線の矢印と点線の矢印の2種類の入力パスをもつので,入力シンボル数は2です。矢印の上の数値は0,1,2,3のいずれかなので,出力シンボルの数は4です。トレリスダイアグラムの左側に4つの点があるため,状態数は4です(右側にも同じく4つあります)。次の状態の行列を計算するために,行がトレリスの左側の4つの現在の状態に対応し,列が0と1の入力に対応し,要素がトレリスの右側の矢印の先端で次の状態を与える行列を作成します。出力の行列を計算するために,行と列が次の状態の行列であり,要素がトレリス内の矢印の上に示される8進数の出力を与える行列を作成します。
畳み込み符号の作成と復号化
畳み込み符号を符号化および復号化するための関数は,convenc
とvitdec
です。この節では,これらの関数を使った畳み込み符号の作成と復号化にいて説明します。
符号化-年代tr在g>畳み込み符号を作成するためのconvenc
の簡単な使用法を以下のコマンドに示します。
トレリスを定義します。
T = poly2trellis([4 3],[4 5 17;7 4 2]);
1のベクトルを符号化します。
X = ones(100,1);代码= convc (x,t);
最初のコマンドは,フィードフォワード畳み込み符号化器の多項式表現を,対応するトレリス表現に変換します。2番目のコマンドは,100ビットまたは50個の2ビットシンボルを符号化します。この例の符号化率は2/3なので,出力ベクトル代码
には150ビット(100入力ビットの3/2倍)が含まれます。
トレリスが異常な畳み込み符号に対応するかどうかをチェックするには,関数iscatastrophic
を使用します。
硬判定復号化-年代tr在g>硬判定を使用して復号化するには,フラグ“硬”
と“2進数”<年代p一个nclass="emphasis">入力デ,タと共に関数vitdec
を使用します。convenc
の出力は2進数なので,硬判定復号化は,追加処理なしでconvenc
の出力を直接使用することができます。この例は,前の例を拡張したもので,硬判定復号化を実装しています。
トレリスを定義します。
T = poly2trellis([4 3],[4 5 17;7 4 2]);
1のベクトルを符号化します。
代码= conc (ones(100,1),t);
復号化のトレ,スバック長を設定し,vitdec
を使用して復号化します。
TB = 2;解码= vitdec(code,t,tb,<年代p一个n年代tyle="color:#A020F0">“trunc”年代p一个n>,<年代p一个n年代tyle="color:#A020F0">“硬”年代p一个n>);
復号化されたデ,タが100個の1のベクトルであることを検証します。
isequal(解码(100 1))
ans =<年代p一个nclass="emphasis">逻辑1
軟判定復号化-年代tr在g>軟判定を使用して復号化するには,フラグ“软”
と共に関数vitdec
を使用します。軟判定ビットの数(nsdec
)を指定し,0から2 ^ nsdec-1
までの整数で構成される入力デ,タを使用します。
入力0は最も信頼性の高い0を表し,入力2 ^ nsdec-1
は最も信頼性の高い1を表します。その他の値は、比較的信頼性の低い判定を表します。たとえば、次の表は、3 ビット軟判定に対する値の解釈をまとめています。
3ビット軟判定に対する入力値年代tr在g>
入力値 | 解釈 |
---|---|
0 | 最も信頼性の高い0 |
1 | 2番目に信頼性の高い0 . |
2 | 3番目に信頼性の高い0 . |
3. | 最も信頼性の低い0 |
4 | 最も信頼性の低い |
5 | 3番目に信頼性の高い |
6 | 2番目に信頼性の高い |
7 | 最も信頼性の高い |
Matlabを使用した軟判定復号化の実装年代tr在g>
次のスクリプトは,3ビット軟判定での復号化を説明しています。最初にconvenc
を使用して畳み込み符号を作成し,情况下
を使用して符号にホワ▪▪トガウスノ▪▪ズを追加します。その後,軟判定復号化を準備するため,例ではquantiz
を使用してノ▪▪ズを含むデ▪タ値を0から7▪▪までの整数の適切な判定値にマッピングします。quantiz
の2番目の引数は,どのデータ値が0、1、2などにマッピングされるかを決定する分割ベクトルです。分割は0に近い値が0にマッピングされ,1に近い値が7にマッピングされるように選択されます(アプリケーションで必要な場合は,分割を調整して復号化パフォーマンスを高めることができます)。最後に,例では符号を復号化し,ビット誤り率を計算します。復号化されたデ,タと元のメッセ,ジの比較時に,例では復号化の遅延を考慮に入れなければなりません。vitdec
の連続操作モ,ドではトレ,スバック長と等しい遅延が生じるので,味精(1)
は解码(1)
ではなく解码(tblen + 1)
に対応します。
s = RandStream.create(<年代p一个n年代tyle="color:#A020F0">“mt19937ar”年代p一个n>,<年代p一个n年代tyle="color:#A020F0">“种子”年代p一个n>, 94384);prevStream = RandStream.setGlobalStream(s);MSG = randi([0 1],4000,1);<年代p一个n年代tyle="color:#228B22">随机数据年代p一个n>T = poly2trellis(7,[171 133]);<年代p一个n年代tyle="color:#228B22">定义网格。年代p一个n>创建一个卷积编码器系统对象年代p一个n>hconvc = com . convolutionalencoder (t);<年代p一个n年代tyle="color:#228B22">创建一个AWGNChannel系统对象。年代p一个n>hChan = com . awgnchannel (<年代p一个n年代tyle="color:#A020F0">“NoiseMethod”年代p一个n>,<年代p一个n年代tyle="color:#A020F0">信噪比(SNR)年代p一个n>,<年代p一个n年代tyle="color:#0000FF">...年代p一个n>“信噪比”年代p一个n>6);<年代p一个n年代tyle="color:#228B22">创建一个ViterbiDecoder System对象年代p一个n>hVitDec = com . viterbidecoder (t,<年代p一个n年代tyle="color:#A020F0">“InputFormat”年代p一个n>,<年代p一个n年代tyle="color:#A020F0">“软”年代p一个n>,<年代p一个n年代tyle="color:#0000FF">...年代p一个n>“SoftInputWordLength”年代p一个n>3,<年代p一个n年代tyle="color:#A020F0">“TracebackDepth”年代p一个n>现年48岁的<年代p一个n年代tyle="color:#0000FF">...年代p一个n>“TerminationMethod”年代p一个n>,<年代p一个n年代tyle="color:#A020F0">“连续”年代p一个n>);<年代p一个n年代tyle="color:#228B22">创建一个ErrorRate计算器系统对象。接收帐户年代p一个n>%由维特比解码器的回溯长度引起的延迟。年代p一个n>hErrorCalc = com . errorrate (<年代p一个n年代tyle="color:#A020F0">“ReceiveDelay”年代p一个n>48岁);Ber = 0 (3,1);<年代p一个n年代tyle="color:#228B22">%存储BER值年代p一个n>code = step(hconvc,msg);<年代p一个n年代tyle="color:#228B22">编码数据。年代p一个n>hChan。年代我gnalPower = (code'*code)/length(code); ncode = step(hChan,code);<年代p一个n年代tyle="color:#228B22">增加噪音。年代p一个n>量化为软决策解码做准备。年代p一个n>qcode = quantiz (ncode [0.001, 1, 3, 5, 7, 9, .999]);Tblen = 48;延迟= tblen;<年代p一个n年代tyle="color:#228B22">%回溯长度年代p一个n>decoded = step(hVitDec,qcode);<年代p一个n年代tyle="color:#228B22">%解码。年代p一个n>%计算误码率。年代p一个n>ber = step(hErrorCalc, msg,已解码);ratio = ber(1) number = ber(2) RandStream.setGlobalStream(prevStream)
出力は以下のようになります。
数字= 5比= 0.0013
金宝appを使用した軟判定復号化の実装-年代tr在g>この例では,符号化率1/2の畳み込み符号を作成します。軟判定を実行するために,量子化と维特比解码器ブロックを使用します。モデルを開くには,matlabコマンドラescンでdoc_softdecision
と入力します。モデルの記述にいては,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">シミュレ,ションの概要一个>を参照してください。
畳み込み符号の定義年代tr在g>
この例のフィ,ドフォワ,ド畳み込み符号化器を以下に示します。
符号化器は1。拘束長の値は,シフトレジスタに格納されたビット数です。これには現在の入力も含まれます。6つのメモリ レジスタがあり、現在の入力は 1 ビットです。したがって、符号の拘束長は 7 になります。
符号化器は1つの入力と2つの出力をもつので,符号生成器は8進数の1行2列の行列です。行列内の最初の要素は、最初の出力に関連する入力値を示し、2 番目の要素は、2 番目の出力に関連する入力値を示します。
たとえば,符号化器ダイアグラムの最初の出力は,ダイアグラムの入力値の配列の右端の要素および左端の4つの要素の剰余2の和です。7桁の2進数1111001はこの情報を取得しますが,これは8進数の171と等価です。したがって,8進数171は,符号生成行列の最初のエントリとなります。ここでは,各3桁ビットで最上位ビットとして左端のビットを使用します。2番目の出力は,2進数1011011に対応します。これは,8進数133に相当します。したがって,符号生成器は[171 133]になります。
卷积编码器ブロックの<年代tr在g class="guilabel">(框架结构)年代tr在g>パラメ,タ,は,デ,タ処理にどの符号を使用するかを伝えます。この場合,Communications Toolbox の関数<一个href="//www.tatmou.com/jp/help/comm/ref/poly2trellis.html">poly2trellis
は,拘束長と8進数の組を有効なトレリス構造体に変換します。
卷积编码器ブロックに入るときのメッセージデータはスカラービットストリームですが,ブロックから出てくる符号化済みのデータは,長さ2のバイナリベクトルのストリームです。
受信デ,タのマッピング年代tr在g>
受信データ,すなわちAWGN信道ブロックの出力は,1および1に近い複素数で構成されます。元のバイナリメッセージを再構築するためには,モデルの受信機部分で畳み込み符号を復号化しなければなりません。このモデルの维特比译码器ブロックでは,入力データが0 ~ 7の整数であると想定しています。このモデルのカスタムサブシステムである復調器は,受信データを维特比译码器ブロックが正しく解釈できる形式に変換します。具体的には,復調器サブシステムは以下を行います。
虚数部を削除することで,受信デ,タ信号を実信号に変換します。送信されたデータの虚数部はゼロ(小さな丸め誤差は無視)であること,およびチャネルノイズはあまり強くないことなどの理由で,受信データの虚数部には必須の情報が含まれていないと仮定できます。
ノズの推定値の標準偏差で除算し,-1で乗算することにより,受信デタを正規化します。
3のビットを使用して正規化デタを量子化します。
このマッピングと维特比译码器ブロックの判定マッピングの組み合わせにより,このモデルの送信側でBPSK调制基带ブロックが実行するBPSK変調が逆になります。復調器サブシステムを詳しく調べるには,[Soft-Output BPSK解调]というラベルのアイコンをダブルクリックします。
畳み込み符号の復号化年代tr在g>
受信データが3ビットの判定値をもつ長さ2のベクトルに正しくマッピングされると,维特比译码器ブロックによりそれが復号化されます。<年代tr在g class="guilabel">(决策类型)年代tr在g>パラメ,タ,は(软决定)
で,<年代tr在g class="guilabel">[软决策位的数量]年代tr在g>パラメ,タ,は3.
であるため,ブロックは<年代up>3.年代up>の異なる入力値をも軟判定アルゴリズムを使用します。
デ,タの軟判定解釈年代tr在g>
(决策类型)年代tr在g>パラメ,タ,が(软决定)
に設定されると,维特比解码器ブロックでは0 ~ 2<年代up>b年代up>-1の入力値が要求されます。ここで,<年代p一个nclass="emphasis">bは<年代tr在g class="guilabel">[软决策位的数量]年代tr在g>パラメ,タ,です。ブロックは,0を、符号語ビットが 0 であるという最も信頼性の高い判定であると解釈し、2<年代up>b年代up>-1を,符号語ビットが1であるという最も信頼性の高い判定であると解釈します。これらの極値の間の値は,それらよりも信頼性の低い判定を表します。次の表は,この例の入力値として使用できる 8 つの値の解釈をまとめています。
判定値 | 解釈 |
---|---|
0 | 最も信頼性の高い0 |
1 | 2番目に信頼性の高い0 . |
2 | 3番目に信頼性の高い0 . |
3. | 最も信頼性の低い0 |
4 | 最も信頼性の低い |
5 | 3番目に信頼性の高い |
6 | 2番目に信頼性の高い |
7 | 最も信頼性の高い |
トレ,スバックと復号化の遅延年代tr在g>
トレ,スバック長は復号化遅延に影響を与えます。復号化遅延は,出力の最初に復号化されるシンボルよりも前の0シンボルの数です。
連続操作モ,ドの場合,復号化遅延はトレ,スバック長シンボルの数と同じです。
打切られた操作モドまたは終了した操作モドの場合,復号化遅延は0です。この場合,トレ,スバック長は,各入力のシンボルの数以下でなければなりません。
トレ,スバック長の推定値年代tr在g>
一般的な推定として,標準のトレ,スバック長の値は<年代p一个nclass="inlineequation">(ConstraintLength - 1) / (1 - code)年代p一个n>の約2倍から3倍になります。符号の拘束長ConstraintLengthは<年代p一个nclass="inlineequation">(log2 (格子
.numStates
) + 1)年代p一个n>に等しくなります。代码r一个teは<年代p一个nclass="inlineequation">(K / N) × (length(punctuation pattern) / sum(punctuation pattern)年代p一个n>に等しくなります。
Kは入力シンボルの数,Nは出力シンボルの数,およびPuncturePatternはパンクチャパターンベクトルです。
たとえば,この一般的な推定を適用することで,次のようなおおよそのトレ,スバック長が得られます。
符号化率1/2の符号のトレスバック長は<年代p一个nclass="inlineequation">5(ConstraintLength - 1)年代p一个n>です。
符号化率2/3の符号のトレスバック長は<年代p一个nclass="inlineequation">7.5(ConstraintLength - 1)年代p一个n>です。
符号化率3/4の符号のトレスバック長は<年代p一个nclass="inlineequation">10(ConstraintLength - 1)年代p一个n>です。
符号化率5/6の符号のトレスバック長は<年代p一个nclass="inlineequation">15(ConstraintLength - 1)年代p一个n>です。
维特比译码器年代p一个n>ブロックの<年代tr在g class="guilabel">(回溯深度)年代tr在g>パラメ,タ,は復号化の遅延を表します。ハ,ドウェア実装によっては48および96のオプションが用意されている場合があります。この例で48が選択されているのは,拘束長が7で符号化率が½の符号で推測されるターゲットに近いためです。
受信デ,タの遅延年代tr在g>
错误率计算年代p一个n>ブロックの<年代tr在g class="guilabel">(接收延迟)年代tr在g>パラメ,タ,は非ゼロです。これは,指定されたメッセージ ビットとそれに対応する復元ビットが非ゼロのシミュレーション時間量で区切られるためです。<年代tr在g class="guilabel">(接收延迟)年代tr在g>パラメ,タ,はエラ,のチェック時に,ブロックに比較する入力信号の要素を伝えます。
この場合,受信遅延値はトレ,スバック長の値(48)と等しくなります。
シミュレ,ション結果を論理上の結果と比較年代tr在g>
この節では,このシミュレーションでのビット誤り率と非量子化復号化から論理的に得たビット誤り率との比較方法を説明します。処理には以下のステップが含まれます。
ビット誤り率の理論的な限界を計算年代tr在g>
このモデルの畳み込み符号のビット誤り率<年代p一个nclass="emphasis">Pb年代ub>の理論的な限界を計算するには,非量子化判定復号化に基づいたこの推定を使用します。
この推定では,<年代p一个nclass="emphasis">cd年代ub>は距離<年代p一个nclass="emphasis">dの誤り电子邮箱ベントのビット誤りの総数を表し,<年代p一个nclass="emphasis">fはその符号の自由距離を表します。量<年代p一个nclass="emphasis">Pd年代ub>はペアワesc escズ誤り確率で,次式で与えられます。
ここで,<年代p一个nclass="emphasis">Rは1/2の符号化率で,<一个href="//www.tatmou.com/jp/help/matlab/ref/erfc.html">
误差补函数
はmatlab相補誤差関数で,次式で定義されます。係数<年代p一个nclass="emphasis">cd年代ub>の値と自由距離<年代p一个nclass="emphasis">fは,“具有最佳距离谱的卷积码”<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">[3]一个>などの刊行物に記載されています。この符号の自由距離は<年代p一个nclass="emphasis">f= 10です。
次のコマンドは<年代p一个nclass="emphasis">Eb年代ub>/ N0年代ub>値に対する<年代p一个nclass="emphasis">Pb年代ub>の値を1 ~ 4まで0.5の増分で計算します。
EbNoVec = [1:0.5:4.0];R = 1/2;<年代p一个n年代tyle="color:#228B22">% Errs是误码率和的向量年代p一个n>%距离d的错误事件,d从10到29。年代p一个n>Errs = [36 0 211 0 1404 0 11633 0 77433 0 502690 0,<年代p一个n年代tyle="color:#0000FF">...年代p一个n>3322763 0 21292910 0 134365911 0 843425871 0];<年代p一个n年代tyle="color:#228B22">% P是成对误差概率的矩阵,为年代p一个n>% Eb/无EbNoVec值,d从10到29。年代p一个n>P = 0 (20,7);<年代p一个n年代tyle="color:#228B22">%初始化。年代p一个n>为年代p一个n>d = 29 P (d-9:) =(1/2) *误差补函数(sqrt (d * R * 10 ^ (EbNoVec / 10)));<年代p一个n年代tyle="color:#0000FF">结束年代p一个n>% Bounds是误码的上界向量年代p一个n>%比率,用于EbNoVec中的Eb/No值。年代p一个n>边界=误差*P;
ビット誤り率を収集するためにシミュレ,ションを複数回実行年代tr在g>
関数<一个href="//www.tatmou.com/jp/help/simulink/slref/sim.html">
sim卡
(金宝app模型)年代p一个n>を使用してMATLABコマンドラインからシミュレーションを実行して,シミュレーションパラメーターを効果的に変化させることができます。たとえば,次のコードは 1 dB ~ 4 dB まで 0.5 dB の増分で 1 ビットあたりのエネルギー対ノイズの比でビット誤り率を計算します。このコードはBERVec
行列でこれらのシミュレ,ションからすべてのビット誤り率を収集します。また,上記のコード部分で計算された理論的な範囲に加えて、Figure ウィンドウでビット誤り率もプロットします。メモ:年代tr在g>
モデルをモデル化するには,matlabコマンドラescンで
doc_softdecision
と入力します。次に,これらのコマンドを実行します。実行には少し時間がかかる場合があります。绘制理论边界,并建立图形。年代p一个n>图;semilogy (EbNoVec界限,<年代p一个n年代tyle="color:#A020F0">“波”年代p一个n>1南<年代p一个n年代tyle="color:#A020F0">的r *年代p一个n>);包含(<年代p一个n年代tyle="color:#A020F0">“Eb /不(dB)”年代p一个n>);ylabel (<年代p一个n年代tyle="color:#A020F0">“误码率”年代p一个n>);标题(<年代p一个n年代tyle="color:#A020F0">误码率(BER)年代p一个n>);传奇(<年代p一个n年代tyle="color:#A020F0">误码率的理论界限年代p一个n>,<年代p一个n年代tyle="color:#A020F0">的实际数量年代p一个n>);轴([1 4 1e-5 1]);持有<年代p一个n年代tyle="color:#A020F0">在年代p一个n>;BERVec = [];<年代p一个n年代tyle="color:#228B22">使噪音水平可变。年代p一个n>set_param (<年代p一个n年代tyle="color:#A020F0">doc_softdecision / AWGN信道的年代p一个n>,<年代p一个n年代tyle="color:#0000FF">...年代p一个n>“EsNodB”年代p一个n>,<年代p一个n年代tyle="color:#A020F0">“EbNodB + 10 * log10(1/2)”年代p一个n>);<年代p一个n年代tyle="color:#228B22">%模拟多次。年代p一个n>为年代p一个n>n = 1:length(EbNoVec) EbNodB = EbNoVec(n);sim卡(<年代p一个n年代tyle="color:#A020F0">“doc_softdecision”年代p一个n>, 5000000);BERVec(n,:) = BER_Data;semilogy (EbNoVec (n), BERVec (n, 1),<年代p一个n年代tyle="color:#A020F0">的r *年代p一个n>);<年代p一个n年代tyle="color:#228B22">图点。年代p一个n>drawnow;<年代p一个n年代tyle="color:#0000FF">结束年代p一个n>持有<年代p一个n年代tyle="color:#A020F0">从年代p一个n>;
メモ:年代tr在g>
Pb年代ub>の推定は,復号化器が非量子化デ,タ,まり,無限に存在する微細な量子化を使用すると仮定します。一方、この例におけるシミュレーションでは 8 レベル (3 ビット) の量子化を使用しています。この量子化のため、シミュレートされたビット誤り率は S/N 比が高い場合の範囲ほど低くありません。
S/ n比に対するビット誤り率のプロットが後に続きます。シミュレ,ションでは乱数が使用されるため,実際のber点の位置は異なる場合があります。
Matlabを使用した符号化率-2/3のフィドフォワド符号化器の設計
次の例は,下図に示すような符号化率2/3のフィ,ドフォワ,ド符号化器を使います。ここでの説明には、符号化器の図からトレリス パラメーターを決定する方法と、この符号化器を使った符号化方法が示されています。
符号化パラメタの決定-年代tr在g>パラメ、タ、が適切な値をも、場合、関数convenc
およびvitdec
は,このコ,ドを実装できます。
符号化器は2の入力をもので,符号化器の拘束長は,長さ2のベクトルです。このベクトルの要素は,現在の入力ビットを含む各シフトレジスタに格納されたビット数を示します。図の各シフト レジスタ内のメモリ空間の数に、現在の入力として 1 を加えて、拘束長は [5 4] になります。
符号生成パラメーターを8進数からなる2行3列の行列として決定するには,我番目の入力がj番目の出力にどのように寄与するかを示すためにi行j列の要素を使います。たとえば、2行3列の要素を計算するには,図の2番目のシフトレジスタの最も左の要素と最も右の2つの要素の和が3番目の出力になります。この情報を2進数1011まり8進数13として取得します。符号生成行列の全部の値は,[23 35 0;0 5 13]です。
関数convenc
およびvitdec
において拘束長と符号生成パラメーターを使用するには,それらのパラメーターをトレリス構造体に変換する関数poly2trellis
を使用します。これを行うコマンドは,以下のとおりです。
Trel = poly2trellis([5 4],[23 35 0;0 5 13]);定义网格。
符号化器の使用-年代tr在g>次に,この符号化器を使用したスクリプトを示します。
Len = 1000;MSG = randi([0 1],2*len,1);<年代p一个n年代tyle="color:#228B22">2位符号的随机二进制消息年代p一个n>Trel = poly2trellis([5 4],[23 35 0;0 5 13]);<年代p一个n年代tyle="color:#228B22">%格子年代p一个n>创建一个卷积编码器系统对象年代p一个n>hconvc = com . convolutionalencoder (trel);<年代p一个n年代tyle="color:#228B22">创建一个ViterbiDecoder System对象年代p一个n>hVitDec = com . viterbidecoder (trel,<年代p一个n年代tyle="color:#A020F0">“InputFormat”年代p一个n>,<年代p一个n年代tyle="color:#A020F0">“硬”年代p一个n>,<年代p一个n年代tyle="color:#0000FF">...年代p一个n>“TracebackDepth”年代p一个n>34岁的<年代p一个n年代tyle="color:#A020F0">“TerminationMethod”年代p一个n>,<年代p一个n年代tyle="color:#A020F0">“连续”年代p一个n>);<年代p一个n年代tyle="color:#228B22">创建一个ErrorRate计算器系统对象。因为每个符号都代表年代p一个n>% 2位,该对象的接收延迟是回溯长度的两倍年代p一个n>%的维特比解码器。年代p一个n>hErrorCalc = com . errorrate (<年代p一个n年代tyle="color:#A020F0">“ReceiveDelay”年代p一个n>, 68);Ber = 0 (3,1);<年代p一个n年代tyle="color:#228B22">%存储BER值年代p一个n>code = step(hconvc,msg);<年代p一个n年代tyle="color:#228B22">编码消息。年代p一个n>Ncode = rem(code + randerr(3*len,1,[0 1;;96 .04点),2);<年代p一个n年代tyle="color:#228B22">增加噪音。年代p一个n>decoded = step(hVitDec, ncode);<年代p一个n年代tyle="color:#228B22">%解码。年代p一个n>ber = step(hErrorCalc, msg,已解码);
convenc
は,2ビットシンボルを含むベクトルを受け取り,3ビットシンボルを含むベクトルを生成します。vitdec
は,その逆の処理を実行します。またbiterr
は解码
の最初の68要素を無視することにも注意してください。つまり,復号化遅延は68でこれは復元されたメッセージのシンボルあたりのビット数(2)と関数vitdec
のトレ,スバック長の値(34)を乗算した値です。解码
の最初の68要素は0で,その後の要素が復号化されたメッセジを表します。
金宝appを使用した符号化率2/3のフィドフォワド符号化器の設計
この例では,下図の符号化率2/3のフィ,ドフォワ,ド畳み込み符号化器を使用します。ここでの説明には、符号化率 2/3 のフィードフォワード符号化器の図から符号化ブロックのパラメーターを特定する方法が示されています。この例では、受信遅延が発生した場合の<一个href="//www.tatmou.com/jp/jp/help/comm/ref/errorratecalculation.html">错误率计算年代p一个n>ブロックの使用にいても示しています。
符号化パラメタの特定方法-年代tr在g>パラメタが適切な値をも場合,<一个href="//www.tatmou.com/jp/jp/help/comm/ref/convolutionalencoder.html">卷积编码器年代p一个n>および<一个href="//www.tatmou.com/jp/jp/help/comm/ref/viterbidecoder.html">维特比译码器年代p一个n>ブロックは,この符号を実装できます。
符号化器は2の入力をもので,符号化器の拘束長は,長さ2のベクトルです。このベクトルの要素は,現在の入力ビットを含む各シフトレジスタに格納されたビット数を示します。図の各シフト レジスタ内のメモリ空間の数に、現在の入力として 1 を加えて、拘束長は [5 4] になります。
符号生成パラメーターを8進数からなる2行3列の行列として決定するには,我番目の入力がj番目の出力にどのように寄与するかを示すためにi行j列の要素を使います。たとえば、2行3列の要素を計算するには,図の2番目のシフトレジスタの最も左の要素と最も右の2つの要素の和が3番目の出力になります。この情報を2進数1011まり8進数13として取得します。符号生成行列の全部の値は,[27 33 0;0 5 13]です。
卷积编码器および维特比译码器ブロックにおいて拘束長と符号生成パラメーターを使用するには,それらのパラメーターをトレリス構造体に変換する関数poly2trellis
を使用します。
符号化器のシミュレト方法-年代tr在g>次のモデルはこの符号化器をシミュレ,トします。
完成したモデルを開くには,matlabコマンドラescンでdoc_convcoding
と入力します。モデルを作成するには,次のブロックを収集し,設定します。
通讯来源ラescブラリの<一个href="//www.tatmou.com/jp/jp/help/comm/ref/bernoullibinarygenerator.html">伯努利二进制发生器年代p一个n>
[0的概率]年代tr在g>を
5
に設定します。(初始种子)年代tr在g>を任意の正のスカラ,整数(関数<一个href="//www.tatmou.com/jp/help/matlab/ref/randn.html">
randn
の出力であることが好ましい)に設定します。(样品时间)年代tr在g>を
5
に設定します。(框架输出)年代tr在g>チェックボックスをオンにします。
[每帧样本]年代tr在g>を
2
に設定します。
-
(框架结构)年代tr在g>を
Poly2trellis ([5 4],[23 35 0;0 5 13])
に設定します。
频道ラ,频道ブラリ内の<一个href="//www.tatmou.com/jp/jp/help/comm/ref/binarysymmetricchannel.html">二进制对称信道年代p一个n>
(误差概率)年代tr在g>を
0.02
に設定します。(初始种子)年代tr在g>を任意の正のスカラ,整数(関数<一个href="//www.tatmou.com/jp/help/matlab/ref/randn.html">
randn
の出力であることが好ましい)に設定します。[输出误差向量]年代tr在g>チェックボックスをオフにします。
-
(框架结构)年代tr在g>を
Poly2trellis ([5 4],[23 35 0;0 5 13])
に設定します。(决策类型)年代tr在g>を
(决策类型)
に設定します。
通信接收器ラ电子邮件ブラリの<一个href="//www.tatmou.com/jp/jp/help/comm/ref/errorratecalculation.html">错误率计算年代p一个n>
(接收延迟)年代tr在g>を
68
に設定します。(输出数据)年代tr在g>を
(港口)
に設定します。(停止仿真)年代tr在g>チェックボックスをオンにします。
[目标错误数]年代tr在g>を
One hundred.
に設定します。
金宝appSimulink sinkラブラリの<一个href="//www.tatmou.com/jp/help/simulink/slref/display.html">显示年代p一个n>(金宝app模型)年代p一个n>
3のエントリが表示されるようにアコンの下端をドラッグします。
前の図に示したようにブロックを接続します。<年代tr在g class="guimenuitem">[シミュレ,ション]年代tr在g>タブの<年代tr在g class="guimenuitem">[シミュレ,ション]年代tr在g>セクションで,<年代tr在g class="guilabel">[終了時間]年代tr在g>を正
に設定します。<年代tr在g class="guimenuitem">[シミュレ,ション]年代tr在g>セクションは複数のタブに表示されます。
モデルにいての注釈-年代tr在g>モデル内の信号の行列サ@ @ズを表示することができます。<年代tr在g class="guimenuitem">[デバッグ]年代tr在g>タブで,<年代tr在g class="guimenuitem">[情報のオバレ]年代tr在g>を展開します。<年代tr在g class="guimenuitem">[信号]年代tr在g>セクションで,<年代tr在g class="guimenuitem">[信号の次元]年代tr在g>を選択します。
符号化器は2行1列の列ベクトルを受け入れ,3行1列の列ベクトルを生成するのに対し,復号化器はその反対の操作を行います。伯努利二进制发生器ブロックの<年代tr在g class="guilabel">[每帧样本]年代tr在g>パラメーターは,ブロックが長さ2のメッセージワードを生成しなければならないため2に指定されます。
错误率计算ブロックの<年代tr在g class="guilabel">(接收延迟)年代tr在g>パラメ,タ,は68です。この値は,维特比解码器ブロックで復元されたメッセ,ジのベクトル長(2)に<年代tr在g class="guilabel">(回溯深度)年代tr在g>値(34)を掛けたものです。MATLABワークスペースで送信信号と受信信号を行列として調べると、復元されたメッセージの最初の 34 行はゼロになっており、後続の行は復号化されたメッセージを表します。したがって、受信信号での遅延は長さ 2 の 34 ベクトル (68 サンプル) です。
モデルを実行すると,3の数字からなる表示出力が生成されます。つまり,誤り率,誤りの総数,计算错误率ブロックがシミュレーション時に行う比較の総数が生成されます(最初の2つの数字は,伯努利二进制发电机および二进制对称信道ブロックの<年代tr在g class="guilabel">(初始种子)年代tr在g>値によって異なります)。シミュレションは100の誤りが発生した後で停止します。これは,<年代tr在g class="guilabel">[目标错误数]年代tr在g>が错误率计算ブロックでOne hundred.
に設定されているためです。誤り率は二进制对称信道ブロックの<年代tr在g class="guilabel">(误差概率)年代tr在g>の0.02
よりはるかに小さいです。
Matlabを使用した畳み込み符号のパンクチャ
この例では,パンクチャド畳み込み符号の処理を行います。まず,3.0,000個のランダムなビットを作成し、[1 1 1 0 0 1] のパンクチャ パターンをもつ符号化率 -3/4 の畳み込み符号化器で符号化します。結果のベクトルは、40,000 ビットを含み、これは伝送用に値 -1 と 1 にマッピングされます。パンクチャド符号punctcode
は加法性ホワ▪▪トガウスノ▪▪ズチャネルを通過します。次に,vitdec
は,“unquant”
判定タ▪▪プを使用してノ▪▪ズのあるベクトルを復号化します。
最後に,例ではビット誤り率とビット誤りの数を計算します。
Len = 30000;MSG = randi([0 1], len, 1);<年代p一个n年代tyle="color:#228B22">随机数据年代p一个n>T = poly2trellis(7, [133 171]);<年代p一个n年代tyle="color:#228B22">定义网格。年代p一个n>创建一个卷积编码器系统对象年代p一个n>hconvc = com . convolutionalencoder (t,<年代p一个n年代tyle="color:#0000FF">...年代p一个n>“PuncturePatternSource”年代p一个n>,<年代p一个n年代tyle="color:#A020F0">“属性”年代p一个n>,<年代p一个n年代tyle="color:#0000FF">...年代p一个n>“PuncturePattern”年代p一个n>, (1, 1, 1, 0, 0, 1]);<年代p一个n年代tyle="color:#228B22">创建一个AWGNChannel系统对象。年代p一个n>hChan = com . awgnchannel (<年代p一个n年代tyle="color:#A020F0">“NoiseMethod”年代p一个n>,<年代p一个n年代tyle="color:#A020F0">信噪比(SNR)年代p一个n>,<年代p一个n年代tyle="color:#0000FF">...年代p一个n>“信噪比”年代p一个n>3);<年代p一个n年代tyle="color:#228B22">创建一个ViterbiDecoder System对象年代p一个n>hVitDec = com . viterbidecoder (t,<年代p一个n年代tyle="color:#A020F0">“InputFormat”年代p一个n>,<年代p一个n年代tyle="color:#A020F0">“Unquantized”年代p一个n>,<年代p一个n年代tyle="color:#0000FF">...年代p一个n>“TracebackDepth”年代p一个n>, 96,<年代p一个n年代tyle="color:#A020F0">“TerminationMethod”年代p一个n>,<年代p一个n年代tyle="color:#A020F0">“截断”年代p一个n>,<年代p一个n年代tyle="color:#0000FF">...年代p一个n>“PuncturePatternSource”年代p一个n>,<年代p一个n年代tyle="color:#A020F0">“属性”年代p一个n>,<年代p一个n年代tyle="color:#0000FF">...年代p一个n>“PuncturePattern”年代p一个n>, (1, 1, 1, 0, 0, 1]);<年代p一个n年代tyle="color:#228B22">创建一个ErrorRate计算器系统对象。年代p一个n>hErrorCalc = com . errorrate;berP = 0 (3,1);berPE = berP;<年代p一个n年代tyle="color:#228B22">%存储BER值年代p一个n>puntcode = step(hconvc,msg);<年代p一个n年代tyle="color:#228B22">%长度为(2*len)*2/3。年代p一个n>Tcode = 1-2* pointcode;<年代p一个n年代tyle="color:#228B22">将“0”位映射到1,将“1”位映射到-1年代p一个n>hChan。年代我gnalPower = (tcode'*tcode)/length(tcode); ncode = step(hChan,tcode);<年代p一个n年代tyle="color:#228B22">增加噪音。年代p一个n>解码被刺穿的代码年代p一个n>decoded = step(hVitDec,ncode);<年代p一个n年代tyle="color:#228B22">%解码。年代p一个n>berP = step(hErrorCalc, msg,已解码);<年代p一个n年代tyle="color:#228B22">误码率年代p一个n>删除最不可靠的100个符号,然后解码。年代p一个n>释放(hVitDec);重置(hErrorCalc) hVitDec。ErasuresInputPort = true;[dummy idx] = sort(abs(ncode));Erasures = 0 (size(ncode));Erasures (idx(1:100)) = 1;decoded = step(hVitDec,ncode, erasures);<年代p一个n年代tyle="color:#228B22">%解码。年代p一个n>berPE = step(hErrorCalc, msg,已解码);<年代p一个n年代tyle="color:#228B22">误码率年代p一个n>流(<年代p一个n年代tyle="color:#A020F0">'穿孔错误数:%d\n'年代p一个n>, berP(2)) fprintf(<年代p一个n年代tyle="color:#A020F0">'插入和擦除的错误数:%d\n'年代p一个n>berPE (2))
金宝appを使用したフィドバックをも組織符号化器の実装
この節では,卷积编码器ブロックを使用してフィードバックをもつ組織符号化器を実装する方法を説明します。符号は,実際のメッセ,ジワ,ドが符号語の一部として表示される場合は“組織的”です。<年代p一个nclass="emphasis">次の図は,組織符号化器の例を示しています。
この符号化器を実装するには,卷积编码器ブロックの<年代tr在g class="guilabel">(框架结构)年代tr在g>パラメ,タ,をPoly2trellis (5, [37 33], 37)
に設定します。この設定は以下のように対応します。
拘束長:
5
生成多項式のペア:
33 [37]
フィ,ドバック多項式:
37
フィードバック多項式は,上列の2進数値に対応するバイナリベクトル[1 1 1 1 1]によって表されます。これらの数値は,レジスタの出力から加算器への接続を示します。最初の1は入力ビットに対応します。2進数 11111 の 8 進数表現は 37 です。
組織符号を実装するには,最初の生成多項式を卷积编码器ブロックの<年代tr在g class="guilabel">(框架结构)年代tr在g>パラメ,タ,にあるフィ,ドバック多項式と同じに設定します。この例では,両方の多項式の8進数表現は37です。
2番目の生成多項式は,下列の2進数値に対応するバイナリベクトル[1 1 0 1 1]によって表されます。2進数11011に対応する8進数は33です。
卷积编码器ブロックのマスクパラメ,タ,の設定方法の詳細は,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">畳み込み符号の多項式表現一个>を参照してください。
軟判定復号化
この例では,符号化率1/2の畳み込み符号を作成します。軟判定を実行するために,量子化と维特比解码器ブロックを使用します。この説明では,以下のトピックにいて説明します。
シミュレションの概要-年代tr在g>モデルを次の図に示します。モデルを開くには,matlabコマンドラescンでdoc_softdecision
と入力します。シミュレーションでは,作成したランダムバイナリメッセージ信号を畳み込み符号に符号化し,これを2位相シフトキーイング(BPSK)手法により変調後,変調されたデータにホワイトガウスノイズを追加してノイズのあるチャネルをシミュレートします。次に,復号化ブロック用に受信デ,タを準備し,復号化を行います。最後に,復号化した情報と元のメッセ,ジ信号を比較し,ビット誤り率を計算します。畳み込み符号化器は,符号化率1/2の符号化器として構成されます。この符号化器は,2ビットごとに別の2の冗長ビットを追加します。これに適合させ,正確な量のノ@ @ズを追加するため,awgn @ @ブロックのパラメ,@ @タ<年代tr在g class="guilabel">(Eb /不(dB))年代tr在g>は10*log10(2)を差し引くことにより実質半分にされます。シミュレションは100個のビット誤りまたは<年代up>7年代up>メッセジビット(どらか先に起こった方)を処理した後で終了します。
畳み込み符号の定義-年代tr在g>この例のフィ,ドフォワ,ド畳み込み符号化器を以下に示します。
符号化器は1。拘束長の値は,シフトレジスタに格納されたビット数です。これには現在の入力も含まれます。6つのメモリ レジスタがあり、現在の入力は 1 ビットです。したがって、符号の拘束長は 7 になります。
符号化器は1つの入力と2つの出力をもつので,符号生成器は8進数の1行2列の行列です。行列内の最初の要素は、最初の出力に関連する入力値を示し、2 番目の要素は、2 番目の出力に関連する入力値を示します。
たとえば,符号化器ダイアグラムの最初の出力は,ダイアグラムの入力値の配列の右端の要素および左端の4つの要素の剰余2の和です。7桁の2進数1111001はこの情報を取得しますが,これは8進数の171と等価です。したがって,8進数171は,符号生成行列の最初のエントリとなります。ここでは,各3桁ビットで最上位ビットとして左端のビットを使用します。2番目の出力は,2進数1011011に対応します。これは,8進数133に相当します。したがって,符号生成器は[171 133]になります。
卷积编码器ブロックの<年代tr在g class="guilabel">(框架结构)年代tr在g>パラメ,タ,は,デ,タ処理にどの符号を使用するかを伝えます。この場合,Communications Toolbox の関数<一个href="//www.tatmou.com/jp/help/comm/ref/poly2trellis.html">poly2trellis
は,拘束長と8進数の組を有効なトレリス構造体に変換します。
卷积编码器ブロックに入るときのメッセージデータはスカラービットストリームですが,ブロックから出てくる符号化済みのデータは,長さ2のバイナリベクトルのストリームです。
受信デタのマッピング-年代tr在g>受信データ,すなわちAWGN信道ブロックの出力は,1および1に近い複素数で構成されます。元のバイナリメッセージを再構築するためには,モデルの受信機部分で畳み込み符号を復号化しなければなりません。このモデルの维特比译码器ブロックでは,入力データが0 ~ 7の整数であると想定しています。このモデルのカスタムサブシステムである復調器は,受信データを维特比译码器ブロックが正しく解釈できる形式に変換します。具体的には,復調器サブシステムは以下を行います。
虚数部を削除することで,受信デ,タ信号を実信号に変換します。送信されたデータの虚数部はゼロ(小さな丸め誤差は無視)であること,およびチャネルノイズはあまり強くないことなどの理由で,受信データの虚数部には必須の情報が含まれていないと仮定できます。
ノズの推定値の標準偏差で除算し,-1で乗算することにより,受信デタを正規化します。
3のビットを使用して正規化デタを量子化します。
このマッピングと维特比译码器ブロックの判定マッピングの組み合わせにより,このモデルの送信側でBPSK调制基带ブロックが実行するBPSK変調が逆になります。復調器サブシステムを詳しく調べるには,[Soft-Output BPSK解调]というラベルのアイコンをダブルクリックします。
畳み込み符号の復号化-年代tr在g>受信データが3ビットの判定値をもつ長さ2のベクトルに正しくマッピングされると,维特比译码器ブロックによりそれが復号化されます。<年代tr在g class="guilabel">(决策类型)年代tr在g>パラメ,タ,は(软决定)
で,<年代tr在g class="guilabel">[软决策位的数量]年代tr在g>パラメ,タ,は3.
であるため,ブロックは<年代up>3.年代up>の異なる入力値をも軟判定アルゴリズムを使用します。
デ,タの軟判定解釈年代tr在g>
(决策类型)年代tr在g>パラメ,タ,が(软决定)
に設定されると,维特比解码器ブロックでは0 ~ 2<年代up>b年代up>-1の入力値が要求されます。ここで,<年代p一个nclass="emphasis">bは<年代tr在g class="guilabel">[软决策位的数量]年代tr在g>パラメ,タ,です。ブロックは,0を、符号語ビットが 0 であるという最も信頼性の高い判定であると解釈し、2<年代up>b年代up>-1を,符号語ビットが1であるという最も信頼性の高い判定であると解釈します。これらの極値の間の値は,それらよりも信頼性の低い判定を表します。次の表は,この例の入力値として使用できる 8 つの値の解釈をまとめています。
判定値 | 解釈 |
---|---|
0 | 最も信頼性の高い0 |
1 | 2番目に信頼性の高い0 . |
2 | 3番目に信頼性の高い0 . |
3. | 最も信頼性の低い0 |
4 | 最も信頼性の低い |
5 | 3番目に信頼性の高い |
6 | 2番目に信頼性の高い |
7 | 最も信頼性の高い |
トレ,スバックと復号化の遅延年代tr在g>
维特比解码器ブロックの<年代tr在g class="guilabel">(回溯深度)年代tr在g>パラメ,タ,は復号化の遅延を表します。トレースバック長の典型的な値は拘束長の約5 ~ 6倍で,この例では35または42になります。ただし,ハードウェア実装によっては48および96のオプションが用意されている場合があります。この例で48が選択されているのは,96よりもターゲット(35および42)に近いためです。
受信デタの遅延-年代tr在g>错误率计算年代p一个n>ブロックの<年代tr在g class="guilabel">(接收延迟)年代tr在g>パラメ,タ,は非ゼロです。これは,指定されたメッセージ ビットとそれに対応する復元ビットが非ゼロのシミュレーション時間量で区切られるためです。<年代tr在g class="guilabel">(接收延迟)年代tr在g>パラメ,タ,はエラ,のチェック時に,ブロックに比較する入力信号の要素を伝えます。
この場合,受信遅延値はトレ,スバック長の値(48)と等しくなります。
シミュレション結果を論理上の結果と比較-年代tr在g>この節では,このシミュレーションでのビット誤り率と非量子化復号化から論理的に得たビット誤り率との比較方法を説明します。このプロセスには以下の節で説明されているいくかの手順が含まれます。
ビット誤り率の理論的な限界を計算年代tr在g>
このモデルの畳み込み符号のビット誤り率<年代p一个nclass="emphasis">Pb年代ub>の理論的な限界を計算するには,非量子化判定復号化に基づいたこの推定を使用します。
この推定では,<年代p一个nclass="emphasis">cd年代ub>は距離<年代p一个nclass="emphasis">dの誤り电子邮箱ベントのビット誤りの総数を表し,<年代p一个nclass="emphasis">fはその符号の自由距離を表します。量<年代p一个nclass="emphasis">Pd年代ub>はペアワesc escズ誤り確率で,次式で与えられます。
ここで,<年代p一个nclass="emphasis">Rは1/2の符号化率で,<一个href="//www.tatmou.com/jp/help/matlab/ref/erfc.html">误差补函数
はmatlab相補誤差関数で,次式で定義されます。
係数<年代p一个nclass="emphasis">cd年代ub>の値と自由距離<年代p一个nclass="emphasis">fは,“具有最佳距离谱的卷积码”<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">[3]一个>などの刊行物に記載されています。この符号の自由距離は<年代p一个nclass="emphasis">f= 10です。
次のコマンドは<年代p一个nclass="emphasis">Eb年代ub>/ N0年代ub>値に対する<年代p一个nclass="emphasis">Pb年代ub>の値を1 ~ 4まで0.5の増分で計算します。
EbNoVec = [1:0.5:4.0];R = 1/2;<年代p一个n年代tyle="color:#228B22">% Errs是误码率和的向量年代p一个n>%距离d的错误事件,d从10到29。年代p一个n>Errs = [36 0 211 0 1404 0 11633 0 77433 0 502690 0,<年代p一个n年代tyle="color:#0000FF">...年代p一个n>3322763 0 21292910 0 134365911 0 843425871 0];<年代p一个n年代tyle="color:#228B22">% P是成对误差概率的矩阵,为年代p一个n>% Eb/无EbNoVec值,d从10到29。年代p一个n>P = 0 (20,7);<年代p一个n年代tyle="color:#228B22">%初始化。年代p一个n>为年代p一个n>d = 29 P (d-9:) =(1/2) *误差补函数(sqrt (d * R * 10 ^ (EbNoVec / 10)));<年代p一个n年代tyle="color:#0000FF">结束年代p一个n>% Bounds是误码的上界向量年代p一个n>%比率,用于EbNoVec中的Eb/No值。年代p一个n>边界=误差*P;
ビット誤り率を収集するためにシミュレ,ションを複数回実行年代tr在g>
関数<一个href="//www.tatmou.com/jp/help/simulink/slref/sim.html">sim卡
(金宝app模型)年代p一个n>を使用してMATLABコマンドラインからシミュレーションを実行して,シミュレーションパラメーターを効果的に変化させることができます。たとえば,次のコードは 1 dB ~ 4 dB まで 0.5 dB の増分で 1 ビットあたりのエネルギー対ノイズの比でビット誤り率を計算します。このコードはBERVec
行列でこれらのシミュレ,ションからすべてのビット誤り率を収集します。また,上記のコード部分で計算された理論的な範囲に加えて、Figure ウィンドウでビット誤り率もプロットします。
メモ:年代tr在g>
モデルを開くには,matlabコマンドラescンでdoc_softdecision
と入力します。次に,これらのコマンドを実行します。実行には少し時間がかかる場合があります。
绘制理论边界,并建立图形。年代p一个n>图;semilogy (EbNoVec界限,<年代p一个n年代tyle="color:#A020F0">“波”年代p一个n>1南<年代p一个n年代tyle="color:#A020F0">的r *年代p一个n>);包含(<年代p一个n年代tyle="color:#A020F0">“Eb /不(dB)”年代p一个n>);ylabel (<年代p一个n年代tyle="color:#A020F0">“误码率”年代p一个n>);标题(<年代p一个n年代tyle="color:#A020F0">误码率(BER)年代p一个n>);传奇(<年代p一个n年代tyle="color:#A020F0">误码率的理论界限年代p一个n>,<年代p一个n年代tyle="color:#A020F0">的实际数量年代p一个n>);轴([1 4 1e-5 1]);持有<年代p一个n年代tyle="color:#A020F0">在年代p一个n>;BERVec = [];<年代p一个n年代tyle="color:#228B22">使噪音水平可变。年代p一个n>set_param (<年代p一个n年代tyle="color:#A020F0">doc_softdecision / AWGN信道的年代p一个n>,<年代p一个n年代tyle="color:#0000FF">...年代p一个n>“EsNodB”年代p一个n>,<年代p一个n年代tyle="color:#A020F0">“EbNodB + 10 * log10(1/2)”年代p一个n>);<年代p一个n年代tyle="color:#228B22">%模拟多次。年代p一个n>为年代p一个n>n = 1:length(EbNoVec) EbNodB = EbNoVec(n);sim卡(<年代p一个n年代tyle="color:#A020F0">“doc_softdecision”年代p一个n>, 5000000);BERVec(n,:) = BER_Data;semilogy (EbNoVec (n), BERVec (n, 1),<年代p一个n年代tyle="color:#A020F0">的r *年代p一个n>);<年代p一个n年代tyle="color:#228B22">图点。年代p一个n>drawnow;<年代p一个n年代tyle="color:#0000FF">结束年代p一个n>持有<年代p一个n年代tyle="color:#A020F0">从年代p一个n>;
メモ:年代tr在g>
Pb年代ub>の推定は,復号化器が非量子化デ,タ,まり,無限に存在する微細な量子化を使用すると仮定します。一方、この例におけるシミュレーションでは 8 レベル (3 ビット) の量子化を使用しています。この量子化のため、シミュレートされたビット誤り率は S/N 比が高い場合の範囲ほど低くありません。
S/ n比に対するビット誤り率のプロットが後に続きます。シミュレ,ションでは乱数が使用されるため,実際のber点の位置は異なる場合があります。
フィドバック符号化器を使用したテルバト符号化
この例は、フィ、ドバック符号化器を使用したテ、ルバ、ト符号化を示しています。フィ,ドバック符号化器では,終了状態はデ,タブロック全体に依存します。テールバイトを実行するには,特定の情報ベクトル(Nビット)に対し,データブロックの符号化後に同じ終了状態をもたらす初期状態を計算しなければなりません。
このためには次の2の手順を実行します。
最初の手順では,特定のデ,タブロックに対して0の状態応答を指定します。符号化器はすべて0の状態で開始します。デ,タブロック全体が入力され,出力ビットは無視されます。Nビット後に,符号化器はx<年代ub>N年代ub>[z]年代up>状態になります。この状態から,対応する初期状態x<年代ub>0年代ub>を計算し,x<年代ub>0年代ub>で符号化器を初期化します。
2番目の手順では,実際に符号化を行います。符号化器は初期状態x<年代ub>0年代ub>から開始されます。デ,タブロックが入力され,有効な符号語は出力され,同じ状態の境界条件に一致します。
状態空間型の公式を使用してx<年代ub>N年代ub>[z]年代up>から初期状態x<年代ub>0年代ub>を理論的に計算するには,[8]を参照してください。これはブロック長を使用した1回限りの計算であり,実際にはルックアップテーブルとして実装できます。ここでは、選択したトレイルとブロック長に使用可能なすべてのエントリをシミュレートすることで、このマッピング テーブルを決定します。
モデルを開くには,matlabコマンドラescンでdoc_mtailbiting_wfeedback
と入力します。
该函数返回给定块长度和网格的映射值,用于从零状态响应确定初始状态。%映射的所有可能组合mapStValuesTab = perms(0:trellis.numStates-1);%遍历所有映射项的组合:for i = 1:length(mapStValuesTab) mapStValues = mapStValuesTab(i,:);%模型参数化的块长度sim('mtailbiting_wfeedback');检查每个运行的边界条件,如果结束和开始状态匹配,选择映射集,如果唯一(out)==0返回结束
查找サブシステムの直接查表(n-D)
ブロックの<年代tr在g class="guilabel">[テ,ブルデ,タ]年代tr在g>パラメ,タ,に対して返されるmapStValues
を選択すると,選択したブロック長とトレ@ @ @ルバ@ @ @ @ @ @ @
畳み込み符号化の参考文献
[1] Clark, George C. Jr.和J. Bibb Cain,数字通信的纠错编码,纽约,全会出版社,1981年。
[2] Gitlin, Richard D., Jeremiah F. Hayes和Stephen B. Weinstein,《数据通信原理》,纽约,全会出版社,1992年。
[3]<年代p一个n>弗兰格,P·奥顿,和t·奥托森。具有最佳距离谱的卷积码IEEE通讯3,no。11(1999年11月):317-19。https://doi.org/10.1109/4234.803468。年代p一个n>
線形ブロック符号
線形ブロック符号に対するワ,ドの表現
この製品の巡回,ハミング,および一般線形ブロック符号の機能は,メッセージまたは符号語のビットをまとめる方法を複数提供します。以下のトピックでは,使用可能な形式を説明します。
BCHまたはリ、ド、ソロモン符号に対するワ、ドを表す方法の詳細は、<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">BCH符号に対するワ,ドの表現一个>または<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">リ,ド,ソロモン符号のワ,ドの表現一个>を参照してください。
Matlabを使用したメッセジと符号語のバナリベクトル形式での作成-年代tr在g>メッセ,ジと符号語は,0と,1で構成されるベクトルの形式です。たとえば,メッセ,ジとコ,ドは,以下の行に示す味精
や代码
のようになります。
N = 6;K = 4;<年代p一个n年代tyle="color:#228B22">设置码字长度和消息长度年代p一个n>%用于[6,4]代码。年代p一个n>MSG = [1 0 0 1 1 0 1 0 1 0 1 1 1]';<年代p一个n年代tyle="color:#228B22">消息为二进制列。年代p一个n>代码=编码(msg,n,k,<年代p一个n年代tyle="color:#A020F0">“循环”年代p一个n>);<年代p一个n年代tyle="color:#228B22">% Code将是一个二进制列。年代p一个n>味精的代码
出力は以下のようになります。
ans =第1 ~ 5列10 0 11 6 ~ 10列0 10 10 11 ~ 12列11 ans =第1 ~ 5列11 11 0 0 6 ~ 10列10 0 10 11 ~ 15列10 0 11 16 ~ 18列0 11
この例では,味精
は,3の4桁(k
= 4)のメッセ,ジとして解釈される12のエントリで構成されます。結果のベクトル代码
は,長さ18のベクトルを形成する連結した3の6桁(n
= 6)の符号語で構成されます。パリティビットは,各符号語の先頭にあります。
Matlabを使用したメッセジと符号語のバナリ行列形式での作成-年代tr在g>符号化情報を整理して,桁数をメッセ,ジと符号語に明確に分けることができます。このアプロチを使用する場合は,各メッセジまたは符号語はバナリ行列内の1行を占めます。以下の例では,味精
の各行に4ビットのメッセ,ジをリストし,代码
の各行に6ビットの符号語をリストして,このアプロ,チを示します。
N = 6;K = 4;<年代p一个n年代tyle="color:#228B22">设置码字长度和消息长度。年代p一个n>MSG = [1 0 0 1;10 0 10 0;1 0 1 1];<年代p一个n年代tyle="color:#228B22">消息是一个二进制矩阵。年代p一个n>代码=编码(msg,n,k,<年代p一个n年代tyle="color:#A020F0">“循环”年代p一个n>);<年代p一个n年代tyle="color:#228B22">代码将是一个二进制矩阵。年代p一个n>味精的代码
出力は以下のようになります。
味精= 1 0 0 1 1 0 1 0 1 0 1 1代码= 1 1 1 0 0 1 0 0 1 0 1 0 0 1 1 0 1 1
メモ年代tr在g>
バ@ @ナリ行列の形式では,メッセ@ @ジ行列にはk
列が必要です。対応する符号行列は,n
列あります。パリティビットは,各行の先頭にあります。
Matlabを使用したメッセ,ジと符号語の10進数ベクトル形式での作成-年代tr在g>メッセ,ジと符号語は,整数からなるベクトルの形式です。ベクトルの各要素は、1 つのメッセージまたは 1 つの符号語内のビットの 10 進数表現を示します。
メモ年代tr在g>
2 ^ n
または2 ^ k
が非常に大きい場合,10進数の形式ではなく既定のバescナリ形式を使用する必要があります。これは,関数は内部的にバイナリ形式を使っており、多くのビットを大きい 10 進数に変換することに対応する丸め誤差が大きくなるためです。
メモ年代tr在g>
10進数のベクトル形式を使用する場合,编码
では,“最も左側”のビットが最下位ビットであることが予期されます。<年代p一个nclass="emphasis">
编码
コマンドの構文は,10進数形式を以下の例のように明示的に示さなければなりません。/十进制
が编码
コマンドの4番目の引数に付加されることに注意してください。
N = 6;K = 4;<年代p一个n年代tyle="color:#228B22">设置码字长度和消息长度。年代p一个n>MSG = [9;5;13];<年代p一个n年代tyle="color:#228B22">消息是一个十进制列向量。年代p一个n>% Code将是一个十进制向量。年代p一个n>代码=编码(msg,n,k,<年代p一个n年代tyle="color:#A020F0">“循环/十进制”年代p一个n>)
出力は以下のようになります。
代码= 39 20 54
メモ年代tr在g>
上の3の例では,巡回符号化を使用しました。メッセ,ジとコ,ドの形式は,ハミングおよび一般線形ブロック符号に対しても同じです。
線形ブロック符号のパラメ,タ,の設定
このサブセクションでは,(n, k)巡回,ハミング,一般線形ブロック符号を処理するために必要な項目を説明します。次の表は,最も関連する項目と符号化手法をまとめています。
ブロック符号化手法で使用されるパラメタ年代tr在g>
パラメタ
ブロック符号化手法
生成行列一个>
一般線形ブロック
パリティチェック行列一个>
一般線形ブロック
生成多項式一个>
巡回
復号化テ,ブル一个>
一般線形ブロック,ハミング
生成行列-年代tr在g>(n, k)線形ブロック符号にメッセージを符号化する処理は,k行n列の生成行列克によって決定されます。特に1行k列のメッセージベクトルvは1行n列の符号語ベクトルvGに符号化されます。Gが形式[i<年代ub>k年代ub>P]または[P<年代ub>k年代ub>]をも場合,ここでPは適当なk行(n-k)列の行列で<年代ub>k年代ub>はk行k列の単位行列ですが,Gは“標準形”と呼ばれます<年代p一个nclass="emphasis">(著者によって,克拉克和凯恩<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">[2]一个>のように最初の標準形を使用する場合も,林和Costello<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">[3]一个>のように後者を使用する場合もあります)。このルボックスのほとんどの関数では,入力引数として使用する生成行列は標準形であると仮定します。
生成行列の例は,次の節<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">パリティチェック行列一个>で示します。
パリティチェック行列-年代tr在g>(n, k)線形ブロック符号の復号化では,(n - k)行n列パリティチェック行列Hを必要とします。“大酒店”<年代up>tr年代up>
= 0 (mod 2)が成り立ます。ここで,h<年代up>tr年代up>は行列Hの転置を示し,Gは符号の生成行列であり,このゼロ行列はk行(n-k)列です。G = [i]<年代ub>k年代ub>P]の場合,h = [-p<年代up>tr年代up>我<年代ub>n - k年代ub>]です。この製品のほとんどの関数では,入力引数として使用するパリティチェック行列は標準形であると仮定します。
次の表は,n, kバイナリ線形ブロック符号に対する生成行列とパリティチェック行列の標準形をまとめています。
行列の種類
標準形
次元
生成行列
(我<年代ub>k年代ub>P]または[P<年代ub>k年代ub>]
K行n列
パリティチェック行列
(- p'
我<年代ub>n - k年代ub>または[i。<年代ub>n - k年代ub>- p'
]
(n-k)行n列
我<年代ub>k年代ub>はサ▪▪ズkの単位行列であり,シンボル'
は行列の転置を示します("<年代p一个nclass="emphasis">2値”符号に対して,上記のパリティチェック形式のマescナス符号は意味がありません。)。
例年代tr在g>
以下のコマンドで,parmat
はパリティチェック行列で,genmat
は[n,k] = [2 .<年代up>3.年代up>-1, n-3] =[7,4]であるハミング符号の生成行列です。genmat
は標準形[p<年代ub>k年代ub>]をもます。
[parmat, genmat] = hammgen (3) parmat = 1 0 0 1 0 1 1 0 1 0 1 1 1 0 0 0 1 0 1 1 1 genmat = 1 1 0 1 0 0 0 0 1 1 0 1 0 0 1 1 1 0 0 1 0 1 0 1 0 0 0 1)
次の例では,[7,3]巡回符号に対するパリティチェック行列および生成行列を求めます。関数cyclpoly
の詳細は,以下の<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">生成多項式一个>を参照してください。
Genpoly = cyclpoly(7,3);[parmat, genmat] = cyclgen (7, genpoly) parmat = 1 0 0 0 1 1 0 0 1 0 0 0 1 1 0 0 1 0 1 1 1 0 0 0 1 1 0 1 genmat = 1 0 1 1 1 0 0 1 1 1 0 0 1 0 0 1 1 1 0 0 1
以下の例では,[5,3]線形ブロック符号の生成行列を対応するパリティチェック行列に変換します。
Genmat = [1 0 0 1 0;0 1 0 1 1;0 0 1 0 1];Parmat = gen2par(genmat) Parmat = 1 1 0 1 0 0 1 1 0 1
同じ関数gen2par
で,パリティチェック行列から生成行列に変換することもできます。
生成多項式-年代tr在g>巡回符号は,多項式が符号化過程を完全に決定できるような代数的性質をもます。このいわゆる<年代p一个nclass="emphasis">“生成多項式”は,多項式x<年代up>n年代up>-1の(n-k)次除算子です。范·林特の<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">[5]一个>では,生成多項式が巡回符号をどのように決定するかを説明しています。
関数cyclpoly
は,巡回符号に対する生成多項式を作成します。cyclpoly
は,多項式の係数を変数の“昇べき”<年代p一个nclass="emphasis">の順にリストする行ベクトルを使用して生成多項式を表します。たとえば,次のコマンド
Genpoly = cyclpoly(7,3) Genpoly = 1 0 1 1 1
このコマンドは,[7,3]巡回符号に対する有効な生成多項式が1 + x<年代up>2年代up>+ x<年代up>3.年代up>+ x<年代up>4年代up>であることを求めます。
復号化テブル-年代tr在g>復号化テ,ブルは,伝送中に生じた符号誤りを訂正する方法を復号化器に示します。ハミング符号は,任意の符号語内の単一シンボルの誤りを訂正することができます。その他の符号は、指定された符号語内の複数のシンボルで発生した誤りを訂正、または部分的に訂正します。
このルボックスは,復号化テブルをn
列と2 ^ (n - k)
行を含む行列として表します。各行は,受信した符号語ベクトルに対して訂正ベクトルを指定します。ハミング復号化テ,ブルにはn
+1行あります。関数syndtable
は,パリティチェック行列に対する復号化テ,ブルを生成します。
Matlabでの復号化テ,ブルの使用年代tr在g>
下記のスクリプトは,受信メッセ,ジ内の誤り訂正のためのハミング復号化テ,ブルの使用法を示します。関数hammgen
はパリティチェック行列を生成し,関数syndtable
は復号化テ,ブルを生成します。パリティチェック行列の転置は、受信した符号語への左乗算で、"シンドローム" を生成します。<年代p一个nclass="emphasis">復号化テ,ブルは,訂正ベクトルの決定に役立,ます。訂正された符号語は,訂正ベクトルと受信した符号語の和(剰余2)です。
使用[7,4]汉明码。年代p一个n>M = 3;N = 2^m-1;K = n-m;Parmat = hamgen (m);<年代p一个n年代tyle="color:#228B22">生成奇偶校验矩阵。年代p一个n>TRT = syndtable(parmat);<年代p一个n年代tyle="color:#228B22">制作解码表。年代p一个n>Recd = [1 0 0 1 1 1 1]<年代p一个n年代tyle="color:#228B22">假设这是接收到的向量。年代p一个n>综合征= rem(recd * parmat',2);Syndrome_de = bi2de(综合征,<年代p一个n年代tyle="color:#A020F0">“left-msb”年代p一个n>);<年代p一个n年代tyle="color:#228B22">转换为小数。年代p一个n>disp ([<年代p一个n年代tyle="color:#A020F0">'综合征= '年代p一个n>num2str (syndrome_de),<年代p一个n年代tyle="color:#0000FF">...年代p一个n>'(十进制),'年代p一个n>num2str(综合征),<年代p一个n年代tyle="color:#A020F0">“(二)”年代p一个n>= trt(1+syndrome me_de,:)<年代p一个n年代tyle="color:#228B22">修正向量年代p一个n>现在计算正确的码字。年代p一个n>正确的代码= rem(正确的+recd,2)
出力は以下のようになります。
recd = 1 0 0 1 1 1 1 1综合征= 3(十进制),0 1 1 1(二进制)correctedcode = 0 0 0 0 1 0 1 1 1
線形ブロック符号の作成と復号化
巡回,ハミング,および一般線形ブロック符号の符号化と復号化のための関数は,编码
と解码
です。この節では,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">一般線形ブロック一个>符号、<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">巡回一个>符号、<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">ハミング一个>符号を作成し,復号化するために,これらの関数の使用方法を説明します。
一般線形ブロック符号-年代tr在g>一般線形ブロック符号を使ってメッセ,ジを符号化するには,生成行列が必要です。変数味精
、n
、k
,およびgenmat
を定義している場合を考えてみます。
代码=编码(msg,n,k,“线性”
, genmat);代码=编码(msg,n,k,线性/十进制的
, genmat);
上記のいずれかのコマンドは,生成行列genmat
が決定する[n
,k
]符号を使用して,味精
内の情報を符号化します。2 ^ n
と2 ^ k
があまり大きくない場合に適している/十进制
オプションは,味精
が2進数表現以外の負でない10進数整数を含むことを示します。味精
および代码
の形式の詳細は,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">線形ブロック符号に対するワ,ドの表現一个>または関数<一个href="//www.tatmou.com/jp/jp/help/comm/ref/encode.html">编码
のリファレンスペ,ジを参照してください。
復号化には,生成行列が必要であり,場合によっては復号化テ,ブルも必要です。変数代码
、n
、k
,およびgenmat
に加えて,泰爱泰党
も定義している場合を考えてみます。
Newmsg = decode(code,n,k,“线性”
, genmat);Newmsg = decode(code,n,k,线性/十进制的
, genmat);Newmsg = decode(code,n,k,“线性”
genmat,泰爱泰党);Newmsg = decode(code,n,k,线性/十进制的
genmat,泰爱泰党);
上記のコマンドは,生成行列genmat
が決定する[n
,k
]符号を使用して代码
内の情報を復号化します。解码
は,泰爱泰党
が表す復号化テ,ブルの指示に従って誤りを訂正します。
例:一般線形ブロック符号化年代tr在g>
下記の例は,メッセージを符号化し,人工的にノイズを付加し,ノイズを含む符号を復号化し,復号化器が途中で検出する誤りを記録します。復号化テ,ブルはゼロのみを含むので,復号化器は誤りを訂正しません。
N = 4;K = 2;Genmat = [[1 1;10 0],眼睛(2)];<年代p一个n年代tyle="color:#228B22">%生成矩阵年代p一个n>MSG = [0 1;0 0;1 0];<年代p一个n年代tyle="color:#228B22">三条消息,每条2比特年代p一个n>创建三个码字,每个码字4位。年代p一个n>代码=编码(msg,n,k,<年代p一个n年代tyle="color:#A020F0">“线性”年代p一个n>, genmat);Noisycode = rem(code + randerr(3,4,[0 1;7。3]),2);<年代p一个n年代tyle="color:#228B22">增加噪音。年代p一个n>TRT = 0 (2^(n-k),n);<年代p一个n年代tyle="color:#228B22">不更正错误年代p一个n>解码,跟踪所有检测到的错误。年代p一个n>[newmsg,err] = decode(noisycode,n,k,<年代p一个n年代tyle="color:#A020F0">“线性”年代p一个n>genmat,泰爱泰党);Err_words = find(err~=0)<年代p一个n年代tyle="color:#228B22">找出哪些单词有错误。年代p一个n>
出力は,最初と2番目のワ,ドで誤りが発生したことを示します。この例では誤りとして乱数を使用するため,結果は異なることがあります。
Err_words = 1
巡回符号-年代tr在g>巡回符号は(一連のビットで表現された)符号語の巡回シフトも符号語であるという性質をもつ線形ブロック符号です。巡回符号の他の特性は,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">生成多項式一个>と<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">[5]一个>で説明するように,その生成多項式に基づきます。
巡回符号を使ったメッセ,ジの符号化には,生成多項式が必要です。変数味精
、n
、k
,およびgenpoly
を定義している場合を考えてみます。
代码=编码(msg,n,k,“循环”
, genpoly);代码=编码(msg,n,k,“循环/十进制”
, genpoly);
上記のいずれかのコマンドは,生成多項式genpoly
によって決定される[n
,k
]符号を使用して味精
内の情報を符号化します。genpoly
は,编码
のオプションの引数です。既定の生成多項式はcyclpoly (n, k)
です。2 ^ n
と2 ^ k
があまり大きくない場合に適している/十进制
オプションは,味精
が2進数表現以外の負でない10進数整数を含むことを示します。味精
および代码
の形式の詳細は,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">線形ブロック符号に対するワ,ドの表現一个>または関数<一个href="//www.tatmou.com/jp/jp/help/comm/ref/encode.html">编码
のリファレンスペ,ジを参照してください。
復号化には,生成多項式が必要であり,場合によっては復号化テ,ブルも必要です。変数代码
、n
、k
、genpoly
,および泰爱泰党
を定義している場合を考えてみます。
Newmsg = decode(code,n,k,“循环”
, genpoly);Newmsg = decode(code,n,k,“循环/十进制”
, genpoly);Newmsg = decode(code,n,k,“循环”
genpoly,泰爱泰党);Newmsg = decode(code,n,k,“循环/十进制”
genpoly,泰爱泰党);
上記のコマンドは,生成行列genmat
が決定する[n
,k
]符号を使用して代码
内の情報を復号化します。解码
は,泰爱泰党
が表す復号化テ,ブルの指示に従って誤りを訂正します。genpoly
は,上記の最初の2の構文のオプションの引数です。既定の生成多項式はcyclpoly (n, k)
です。
例年代tr在g>
一般線形ブロック符号一个>の例では,生成行列genmat
を使った線形ブロック符号の代わりに,巡回符号化手法を使うように変更できます。以下のように変更を行います。
2行目を以下で置き換えます。
Genpoly = [10 0 1];<年代p一个n年代tyle="color:#228B22">% generator poly = 1 + x^2年代p一个n>
5行目と9行目(编码
コマンドと解码
コマンド)で,genmat
をgenpoly
で置き換え,“线性”
を“循环”
で置き換えます。
巡回符号および復号化のもう1の例は,関数<一个href="//www.tatmou.com/jp/jp/help/comm/ref/encode.html">编码
のリファレンスペ,ジにあります。
ハミング符号-年代tr在g>编码
と<一个href="//www.tatmou.com/jp/help/comm/ref/decode.html">解码
のリファレンスペ,ジには,ハミング符号の符号化と復号化の例があります。また,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">復号化テ,ブル一个>では,ハミング符号の誤り訂正を説明します。
線形ブロック符号に対するワ,ドの表現
この製品の巡回,ハミング,および一般線形ブロック符号の機能は,メッセージまたは符号語のビットをまとめる方法を複数提供します。以下のトピックでは,使用可能な形式を説明します。
BCHまたはリ、ド、ソロモン符号に対するワ、ドを表す方法の詳細は、<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">BCH符号に対するワ,ドの表現一个>または<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">リ,ド,ソロモン符号のワ,ドの表現一个>を参照してください。
Matlabを使用したメッセジと符号語のバナリベクトル形式での作成-年代tr在g>メッセ,ジと符号語は,0と,1で構成されるベクトルの形式です。たとえば,メッセ,ジとコ,ドは,以下の行に示す味精
や代码
のようになります。
N = 6;K = 4;<年代p一个n年代tyle="color:#228B22">设置码字长度和消息长度年代p一个n>%用于[6,4]代码。年代p一个n>MSG = [1 0 0 1 1 0 1 0 1 0 1 1 1]';<年代p一个n年代tyle="color:#228B22">消息为二进制列。年代p一个n>代码=编码(msg,n,k,<年代p一个n年代tyle="color:#A020F0">“循环”年代p一个n>);<年代p一个n年代tyle="color:#228B22">% Code将是一个二进制列。年代p一个n>味精的代码
出力は以下のようになります。
ans =第1 ~ 5列10 0 11 6 ~ 10列0 10 10 11 ~ 12列11 ans =第1 ~ 5列11 11 0 0 6 ~ 10列10 0 10 11 ~ 15列10 0 11 16 ~ 18列0 11
この例では,味精
は,3の4桁(k
= 4)のメッセ,ジとして解釈される12のエントリで構成されます。結果のベクトル代码
は,長さ18のベクトルを形成する連結した3の6桁(n
= 6)の符号語で構成されます。パリティビットは,各符号語の先頭にあります。
Matlabを使用したメッセジと符号語のバナリ行列形式での作成-年代tr在g>符号化情報を整理して,桁数をメッセ,ジと符号語に明確に分けることができます。このアプロチを使用する場合は,各メッセジまたは符号語はバナリ行列内の1行を占めます。以下の例では,味精
の各行に4ビットのメッセ,ジをリストし,代码
の各行に6ビットの符号語をリストして,このアプロ,チを示します。
N = 6;K = 4;<年代p一个n年代tyle="color:#228B22">设置码字长度和消息长度。年代p一个n>MSG = [1 0 0 1;10 0 10 0;1 0 1 1];<年代p一个n年代tyle="color:#228B22">消息是一个二进制矩阵。年代p一个n>代码=编码(msg,n,k,<年代p一个n年代tyle="color:#A020F0">“循环”年代p一个n>);<年代p一个n年代tyle="color:#228B22">代码将是一个二进制矩阵。年代p一个n>味精的代码
出力は以下のようになります。
味精= 1 0 0 1 1 0 1 0 1 0 1 1代码= 1 1 1 0 0 1 0 0 1 0 1 0 0 1 1 0 1 1
メモ年代tr在g>
バ@ @ナリ行列の形式では,メッセ@ @ジ行列にはk
列が必要です。対応する符号行列は,n
列あります。パリティビットは,各行の先頭にあります。
Matlabを使用したメッセ,ジと符号語の10進数ベクトル形式での作成-年代tr在g>メッセ,ジと符号語は,整数からなるベクトルの形式です。ベクトルの各要素は、1 つのメッセージまたは 1 つの符号語内のビットの 10 進数表現を示します。
メモ年代tr在g>
2 ^ n
または2 ^ k
が非常に大きい場合,10進数の形式ではなく既定のバescナリ形式を使用する必要があります。これは,関数は内部的にバイナリ形式を使っており、多くのビットを大きい 10 進数に変換することに対応する丸め誤差が大きくなるためです。
メモ年代tr在g>
10進数のベクトル形式を使用する場合,编码
では,“最も左側”のビットが最下位ビットであることが予期されます。<年代p一个nclass="emphasis">
编码
コマンドの構文は,10進数形式を以下の例のように明示的に示さなければなりません。/十进制
が编码
コマンドの4番目の引数に付加されることに注意してください。
N = 6;K = 4;<年代p一个n年代tyle="color:#228B22">设置码字长度和消息长度。年代p一个n>MSG = [9;5;13];<年代p一个n年代tyle="color:#228B22">消息是一个十进制列向量。年代p一个n>% Code将是一个十进制向量。年代p一个n>代码=编码(msg,n,k,<年代p一个n年代tyle="color:#A020F0">“循环/十进制”年代p一个n>)
出力は以下のようになります。
代码= 39 20 54
メモ年代tr在g>
上の3の例では,巡回符号化を使用しました。メッセ,ジとコ,ドの形式は,ハミングおよび一般線形ブロック符号に対しても同じです。
線形ブロック符号のパラメ,タ,の設定
このサブセクションでは,(n, k)巡回,ハミング,一般線形ブロック符号を処理するために必要な項目を説明します。次の表は,最も関連する項目と符号化手法をまとめています。
ブロック符号化手法で使用されるパラメタ年代tr在g>
パラメタ | ブロック符号化手法 |
---|---|
生成行列一个> | 一般線形ブロック |
パリティチェック行列一个> | 一般線形ブロック |
生成多項式一个> | 巡回 |
復号化テ,ブル一个> | 一般線形ブロック,ハミング |
生成行列-年代tr在g>(n, k)線形ブロック符号にメッセージを符号化する処理は,k行n列の生成行列克によって決定されます。特に1行k列のメッセージベクトルvは1行n列の符号語ベクトルvGに符号化されます。Gが形式[i<年代ub>k年代ub>P]または[P<年代ub>k年代ub>]をも場合,ここでPは適当なk行(n-k)列の行列で<年代ub>k年代ub>はk行k列の単位行列ですが,Gは“標準形”と呼ばれます<年代p一个nclass="emphasis">(著者によって,克拉克和凯恩<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">[2]一个>のように最初の標準形を使用する場合も,林和Costello<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">[3]一个>のように後者を使用する場合もあります)。このルボックスのほとんどの関数では,入力引数として使用する生成行列は標準形であると仮定します。
生成行列の例は,次の節<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">パリティチェック行列一个>で示します。
パリティチェック行列-年代tr在g>(n, k)線形ブロック符号の復号化では,(n - k)行n列パリティチェック行列Hを必要とします。“大酒店”<年代up>tr年代up>= 0 (mod 2)が成り立ます。ここで,h<年代up>tr年代up>は行列Hの転置を示し,Gは符号の生成行列であり,このゼロ行列はk行(n-k)列です。G = [i]<年代ub>k年代ub>P]の場合,h = [-p<年代up>tr年代up>我<年代ub>n - k年代ub>]です。この製品のほとんどの関数では,入力引数として使用するパリティチェック行列は標準形であると仮定します。
次の表は,n, kバイナリ線形ブロック符号に対する生成行列とパリティチェック行列の標準形をまとめています。
行列の種類 | 標準形 | 次元 |
---|---|---|
生成行列 | (我<年代ub>k年代ub>P]または[P<年代ub>k年代ub>] | K行n列 |
パリティチェック行列 | (- p' 我<年代ub>n - k年代ub>または[i。<年代ub>n - k年代ub>- p' ] |
(n-k)行n列 |
我<年代ub>k年代ub>はサ▪▪ズkの単位行列であり,シンボル'
は行列の転置を示します("<年代p一个nclass="emphasis">2値”符号に対して,上記のパリティチェック形式のマescナス符号は意味がありません。)。
例年代tr在g>
以下のコマンドで,parmat
はパリティチェック行列で,genmat
は[n,k] = [2 .<年代up>3.年代up>-1, n-3] =[7,4]であるハミング符号の生成行列です。genmat
は標準形[p<年代ub>k年代ub>]をもます。
[parmat, genmat] = hammgen (3) parmat = 1 0 0 1 0 1 1 0 1 0 1 1 1 0 0 0 1 0 1 1 1 genmat = 1 1 0 1 0 0 0 0 1 1 0 1 0 0 1 1 1 0 0 1 0 1 0 1 0 0 0 1)
次の例では,[7,3]巡回符号に対するパリティチェック行列および生成行列を求めます。関数cyclpoly
の詳細は,以下の<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">生成多項式一个>を参照してください。
Genpoly = cyclpoly(7,3);[parmat, genmat] = cyclgen (7, genpoly) parmat = 1 0 0 0 1 1 0 0 1 0 0 0 1 1 0 0 1 0 1 1 1 0 0 0 1 1 0 1 genmat = 1 0 1 1 1 0 0 1 1 1 0 0 1 0 0 1 1 1 0 0 1
以下の例では,[5,3]線形ブロック符号の生成行列を対応するパリティチェック行列に変換します。
Genmat = [1 0 0 1 0;0 1 0 1 1;0 0 1 0 1];Parmat = gen2par(genmat) Parmat = 1 1 0 1 0 0 1 1 0 1
同じ関数gen2par
で,パリティチェック行列から生成行列に変換することもできます。
生成多項式-年代tr在g>巡回符号は,多項式が符号化過程を完全に決定できるような代数的性質をもます。このいわゆる<年代p一个nclass="emphasis">“生成多項式”は,多項式x<年代up>n年代up>-1の(n-k)次除算子です。范·林特の<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">[5]一个>では,生成多項式が巡回符号をどのように決定するかを説明しています。
関数cyclpoly
は,巡回符号に対する生成多項式を作成します。cyclpoly
は,多項式の係数を変数の“昇べき”<年代p一个nclass="emphasis">の順にリストする行ベクトルを使用して生成多項式を表します。たとえば,次のコマンド
Genpoly = cyclpoly(7,3) Genpoly = 1 0 1 1 1
このコマンドは,[7,3]巡回符号に対する有効な生成多項式が1 + x<年代up>2年代up>+ x<年代up>3.年代up>+ x<年代up>4年代up>であることを求めます。
復号化テブル-年代tr在g>復号化テ,ブルは,伝送中に生じた符号誤りを訂正する方法を復号化器に示します。ハミング符号は,任意の符号語内の単一シンボルの誤りを訂正することができます。その他の符号は、指定された符号語内の複数のシンボルで発生した誤りを訂正、または部分的に訂正します。
このルボックスは,復号化テブルをn
列と2 ^ (n - k)
行を含む行列として表します。各行は,受信した符号語ベクトルに対して訂正ベクトルを指定します。ハミング復号化テ,ブルにはn
+1行あります。関数syndtable
は,パリティチェック行列に対する復号化テ,ブルを生成します。
Matlabでの復号化テ,ブルの使用年代tr在g>
下記のスクリプトは,受信メッセ,ジ内の誤り訂正のためのハミング復号化テ,ブルの使用法を示します。関数hammgen
はパリティチェック行列を生成し,関数syndtable
は復号化テ,ブルを生成します。パリティチェック行列の転置は、受信した符号語への左乗算で、"シンドローム" を生成します。<年代p一个nclass="emphasis">復号化テ,ブルは,訂正ベクトルの決定に役立,ます。訂正された符号語は,訂正ベクトルと受信した符号語の和(剰余2)です。
使用[7,4]汉明码。年代p一个n>M = 3;N = 2^m-1;K = n-m;Parmat = hamgen (m);<年代p一个n年代tyle="color:#228B22">生成奇偶校验矩阵。年代p一个n>TRT = syndtable(parmat);<年代p一个n年代tyle="color:#228B22">制作解码表。年代p一个n>Recd = [1 0 0 1 1 1 1]<年代p一个n年代tyle="color:#228B22">假设这是接收到的向量。年代p一个n>综合征= rem(recd * parmat',2);Syndrome_de = bi2de(综合征,<年代p一个n年代tyle="color:#A020F0">“left-msb”年代p一个n>);<年代p一个n年代tyle="color:#228B22">转换为小数。年代p一个n>disp ([<年代p一个n年代tyle="color:#A020F0">'综合征= '年代p一个n>num2str (syndrome_de),<年代p一个n年代tyle="color:#0000FF">...年代p一个n>'(十进制),'年代p一个n>num2str(综合征),<年代p一个n年代tyle="color:#A020F0">“(二)”年代p一个n>= trt(1+syndrome me_de,:)<年代p一个n年代tyle="color:#228B22">修正向量年代p一个n>现在计算正确的码字。年代p一个n>正确的代码= rem(正确的+recd,2)
出力は以下のようになります。
recd = 1 0 0 1 1 1 1 1综合征= 3(十进制),0 1 1 1(二进制)correctedcode = 0 0 0 0 1 0 1 1 1
線形ブロック符号の作成と復号化
巡回,ハミング,および一般線形ブロック符号の符号化と復号化のための関数は,编码
と解码
です。この節では,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">一般線形ブロック一个>符号、<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">巡回一个>符号、<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">ハミング一个>符号を作成し,復号化するために,これらの関数の使用方法を説明します。
一般線形ブロック符号-年代tr在g>一般線形ブロック符号を使ってメッセ,ジを符号化するには,生成行列が必要です。変数味精
、n
、k
,およびgenmat
を定義している場合を考えてみます。
代码=编码(msg,n,k,“线性”
, genmat);代码=编码(msg,n,k,线性/十进制的
, genmat);
上記のいずれかのコマンドは,生成行列genmat
が決定する[n
,k
]符号を使用して,味精
内の情報を符号化します。2 ^ n
と2 ^ k
があまり大きくない場合に適している/十进制
オプションは,味精
が2進数表現以外の負でない10進数整数を含むことを示します。味精
および代码
の形式の詳細は,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">線形ブロック符号に対するワ,ドの表現一个>または関数<一个href="//www.tatmou.com/jp/jp/help/comm/ref/encode.html">编码
のリファレンスペ,ジを参照してください。
復号化には,生成行列が必要であり,場合によっては復号化テ,ブルも必要です。変数代码
、n
、k
,およびgenmat
に加えて,泰爱泰党
も定義している場合を考えてみます。
Newmsg = decode(code,n,k,“线性”
, genmat);Newmsg = decode(code,n,k,线性/十进制的
, genmat);Newmsg = decode(code,n,k,“线性”
genmat,泰爱泰党);Newmsg = decode(code,n,k,线性/十进制的
genmat,泰爱泰党);
上記のコマンドは,生成行列genmat
が決定する[n
,k
]符号を使用して代码
内の情報を復号化します。解码
は,泰爱泰党
が表す復号化テ,ブルの指示に従って誤りを訂正します。
例:一般線形ブロック符号化年代tr在g>
下記の例は,メッセージを符号化し,人工的にノイズを付加し,ノイズを含む符号を復号化し,復号化器が途中で検出する誤りを記録します。復号化テ,ブルはゼロのみを含むので,復号化器は誤りを訂正しません。
N = 4;K = 2;Genmat = [[1 1;10 0],眼睛(2)];<年代p一个n年代tyle="color:#228B22">%生成矩阵年代p一个n>MSG = [0 1;0 0;1 0];<年代p一个n年代tyle="color:#228B22">三条消息,每条2比特年代p一个n>创建三个码字,每个码字4位。年代p一个n>代码=编码(msg,n,k,<年代p一个n年代tyle="color:#A020F0">“线性”年代p一个n>, genmat);Noisycode = rem(code + randerr(3,4,[0 1;7。3]),2);<年代p一个n年代tyle="color:#228B22">增加噪音。年代p一个n>TRT = 0 (2^(n-k),n);<年代p一个n年代tyle="color:#228B22">不更正错误年代p一个n>解码,跟踪所有检测到的错误。年代p一个n>[newmsg,err] = decode(noisycode,n,k,<年代p一个n年代tyle="color:#A020F0">“线性”年代p一个n>genmat,泰爱泰党);Err_words = find(err~=0)<年代p一个n年代tyle="color:#228B22">找出哪些单词有错误。年代p一个n>
出力は,最初と2番目のワ,ドで誤りが発生したことを示します。この例では誤りとして乱数を使用するため,結果は異なることがあります。
Err_words = 1
巡回符号-年代tr在g>巡回符号は(一連のビットで表現された)符号語の巡回シフトも符号語であるという性質をもつ線形ブロック符号です。巡回符号の他の特性は,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">生成多項式一个>と<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">[5]一个>で説明するように,その生成多項式に基づきます。
巡回符号を使ったメッセ,ジの符号化には,生成多項式が必要です。変数味精
、n
、k
,およびgenpoly
を定義している場合を考えてみます。
代码=编码(msg,n,k,“循环”
, genpoly);代码=编码(msg,n,k,“循环/十进制”
, genpoly);
上記のいずれかのコマンドは,生成多項式genpoly
によって決定される[n
,k
]符号を使用して味精
内の情報を符号化します。genpoly
は,编码
のオプションの引数です。既定の生成多項式はcyclpoly (n, k)
です。2 ^ n
と2 ^ k
があまり大きくない場合に適している/十进制
オプションは,味精
が2進数表現以外の負でない10進数整数を含むことを示します。味精
および代码
の形式の詳細は,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">線形ブロック符号に対するワ,ドの表現一个>または関数<一个href="//www.tatmou.com/jp/jp/help/comm/ref/encode.html">编码
のリファレンスペ,ジを参照してください。
復号化には,生成多項式が必要であり,場合によっては復号化テ,ブルも必要です。変数代码
、n
、k
、genpoly
,および泰爱泰党
を定義している場合を考えてみます。
Newmsg = decode(code,n,k,“循环”
, genpoly);Newmsg = decode(code,n,k,“循环/十进制”
, genpoly);Newmsg = decode(code,n,k,“循环”
genpoly,泰爱泰党);Newmsg = decode(code,n,k,“循环/十进制”
genpoly,泰爱泰党);
上記のコマンドは,生成行列genmat
が決定する[n
,k
]符号を使用して代码
内の情報を復号化します。解码
は,泰爱泰党
が表す復号化テ,ブルの指示に従って誤りを訂正します。genpoly
は,上記の最初の2の構文のオプションの引数です。既定の生成多項式はcyclpoly (n, k)
です。
例年代tr在g>
一般線形ブロック符号一个>の例では,生成行列genmat
を使った線形ブロック符号の代わりに,巡回符号化手法を使うように変更できます。以下のように変更を行います。
2行目を以下で置き換えます。
Genpoly = [10 0 1];<年代p一个n年代tyle="color:#228B22">% generator poly = 1 + x^2年代p一个n>
5行目と9行目(
编码
コマンドと解码
コマンド)で,genmat
をgenpoly
で置き換え,“线性”
を“循环”
で置き換えます。
巡回符号および復号化のもう1の例は,関数<一个href="//www.tatmou.com/jp/jp/help/comm/ref/encode.html">编码
のリファレンスペ,ジにあります。
ハミング符号-年代tr在g>编码
と<一个href="//www.tatmou.com/jp/help/comm/ref/decode.html">解码
のリファレンスペ,ジには,ハミング符号の符号化と復号化の例があります。また,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">復号化テ,ブル一个>では,ハミング符号の誤り訂正を説明します。
ハミング符号
金宝appを使用したバ@ @ナリ形式でのハミング符号の作成
この例では,符号化器と復号化器を使用する方法を非常に簡単に示します。符号化ブロックに対する符号とメッセ,ジ信号の適切なベクトル長を示します。<一个href="//www.tatmou.com/jp/jp/help/comm/ref/errorratecalculation.html">错误率计算年代p一个n>ブロックは送信信号と受信信号としてスカラーまたはフレームベースの列ベクトルしか受け取らないため,この例ではフレームベースの列ベクトルを最初から最後まで使用します(したがって,<一个href="//www.tatmou.com/jp/help/dsp/ref/convert1dto2d.html" hreflang="en">将一维转换为二维年代p一个n>などのブロックを使用して信号属性を変更する必要はありません)。
このモデルを開くにはmatlabコマンドラescンでdoc_hamming
と入力します。モデルを作成するには,次のブロックを収集し,設定します。
通讯来源ラescブラリの<一个href="//www.tatmou.com/jp/jp/help/comm/ref/bernoullibinarygenerator.html">伯努利二进制发生器年代p一个n>
[0的概率]年代tr在g>を5
に設定します。
(初始种子)年代tr在g>を任意の正のスカラ,整数(関数<一个href="//www.tatmou.com/jp/help/matlab/ref/randn.html">randn
の出力であることが好ましい)に設定します。
(框架输出)年代tr在g>チェックボックスをオンにします。
[每帧样本]年代tr在g>を4
に設定します。
汉明编码年代p一个n>(既定のパラメ,タ,値を使用)
汉明译码器年代p一个n>(既定のパラメ,タ,値を使用)
错误率计算年代p一个n>(Comm sinkラブラリに存在し,既定のパラメタ値を使用)
前の図に示したようにブロックを接続します。モデル内の信号のベクトル長を表示することができます。<年代tr在g class="guimenuitem">[デバッグ]年代tr在g>タブで,<年代tr在g class="guimenuitem">[情報のオバレ]年代tr在g>を展開します。<年代tr在g class="guimenuitem">[信号]年代tr在g>セクションで,<年代tr在g class="guimenuitem">[信号の次元]年代tr在g>を選択します。必要に応じてブロック図を更新した後,<年代tr在g class="guilabel">Ctrl + D年代tr在g>を押してモデルをコンパesc escルし,誤り統計をチェックします。
関連する信号属性が接続線に表示されます。コネクタラインはフレームベースの信号を示すように二重線で表示され,行の隣にある注釈は信号が適切なサイズの列ベクトルであることを示します。
ハミング符号を使用して誤り率を減らす
この節では,誤り修正符号を追加して,誤り率を減らす方法を説明します。次の図は,ハミング符号を使用するモデルを示します。
モデルの完成したバジョンを開くにはmatlabプロンプトでdoc_hamming
と入力します。
ハミング符号モデルのビルド年代tr在g>
ハミング符号モデルをビルドするには,以下の手順に従います。
チャネルノ▪▪ズモデルを開くにはmatlabコマンドラ▪▪ンでdoc_channel
と入力します。
次に,作業ファルを保管するフォルダのモデルに”my_hamming
という名前を付けて保存します。
金宝app仿真软件ライブラリブラウザーから错误检测和校正/块サブライブラリの<一个href="//www.tatmou.com/jp/jp/help/comm/ref/hammingencoder.html">汉明编码年代p一个n>および<一个href="//www.tatmou.com/jp/jp/help/comm/ref/hammingdecoder.html">汉明译码器年代p一个n>ブロックをモデルウィンドウにドラッグします。
モデルの右の境界をクリックし,右にドラッグしてモデルウィンドウを広げます。
二进制对称信道年代p一个n>、<一个href="//www.tatmou.com/jp/jp/help/comm/ref/errorratecalculation.html">错误率计算年代p一个n>、<一个href="//www.tatmou.com/jp/help/simulink/slref/display.html">显示年代p一个n>(金宝app模型)年代p一个n>の各ブロックをクリックアンドドラッグで右に移動します。
伯努利二进制发生器年代p一个n>と<一个href="//www.tatmou.com/jp/jp/help/comm/ref/binarysymmetricchannel.html">二进制对称信道年代p一个n>ブロック間に十分なスペ,スを作成し,その間に<一个href="//www.tatmou.com/jp/jp/help/comm/ref/hammingencoder.html">汉明编码年代p一个n>を当てはめます。
次の図に示すように,<一个href="//www.tatmou.com/jp/jp/help/comm/ref/bernoullibinarygenerator.html">伯努利二进制发生器年代p一个n>ブロックと<年代p一个nclass="block">二进制对称信道年代p一个n>ブロック間のラ@ @ン上にある<年代p一个nclass="block">汉明编码年代p一个n>ブロックをクリックして分岐点の右側にドラッグします。次に,マウスボタンを離します。汉明编码ブロックは<年代p一个nclass="block">伯努利二进制发生器年代p一个n>ブロックから<年代p一个nclass="block">二进制对称信道年代p一个n>ブロックのラ@ @ンに自動的に接続されます。
ブロックを再度移動して<一个href="//www.tatmou.com/jp/jp/help/comm/ref/binarysymmetricchannel.html">二进制对称信道年代p一个n>と<一个href="//www.tatmou.com/jp/jp/help/comm/ref/errorratecalculation.html">错误率计算年代p一个n>ブロック間に十分なスペ,スを作成し,その間に<一个href="//www.tatmou.com/jp/jp/help/comm/ref/hammingdecoder.html">汉明译码器年代p一个n>を当てはめます。
汉明译码器年代p一个n>ブロックをクリックして<年代p一个nclass="block">二进制对称信道年代p一个n>ブロックと<年代p一个nclass="block">错误率计算年代p一个n>ブロックとの間のラ@ @ン上にドラッグします。
モデルはこの図に類似したものになります。
汉明编码器および解码器ブロックの使用年代tr在g>
汉明编码年代p一个n>ブロックはデ,タをチャネル経由で送信する前に符号化します。既定のコードは[7 4]ハミング符号で,このコードは長さ4のメッセージワードを長さ7の符号語に符号化します。。コドは送信された各符号語で1の誤りを修正できます。
(n, k)符号では,汉明编码ブロックへの入力はサイズkのベクトルから構成されなければなりません。この例ではk = 4です。
汉明译码器年代p一个n>ブロックはデ,タをチャネル経由で送信した後に復号化します。誤りがチャネルによって符号語で1でも作成されると,。ただし,複数の誤りが生じると,<年代p一个nclass="block">汉明译码器年代p一个n>ブロックが正しく復号化しない場合があります。
ブロック符号化機能の詳細にいては,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">ブロック符号一个>を参照してください。
ハミング符号モデルでのパラメ,タ,の設定年代tr在g>
伯努利二进制发生器年代p一个n>ブロックをダブルクリックし,次の図に示すように,ブロックのダイアログボックスのパラメーター設定に次の変更を行います。
[每帧样本]年代tr在g>を4
に設定します。これにより,ブロックの出力がサイズ4のフレームに変換され,汉明编码ブロックの入力条件が満たされます。フレ,ムの詳細は,<一个href="//www.tatmou.com/jp/help/comm/ug/sample-based-and-frame-based-processing.html" class="a">サンプルベ,スおよびフレ,ムベ,スの処理一个>を参照してください。
メモ:年代tr在g>
汉明编码年代p一个n>ブロックなどの多数のブロックでは,入力を指定のサ。<年代p一个nclass="block">伯努利二进制发生器年代p一个n>ブロックなどのソ,スブロックをこれらのブロックのいずれかに接続する場合は,<年代tr在g class="guilabel">[每帧样本]年代tr在g>を必要な値に設定します。このモデルでは<年代p一个nclass="block">伯努利二进制发生器年代p一个n>ブロックの<年代tr在g class="guilabel">[每帧样本]年代tr在g>パラメ,タ,は,<年代p一个nclass="block">汉明编码年代p一个n>ブロックの<年代tr在g class="guilabel">[消息长度K]年代tr在g>パラメ,タ,の倍数でなければなりません。
显示ブロックのラベル付け年代tr在g>
ブロックの下に表示されるラベルを変更し,有用な情報を入力することができます。たとえば,显示ブロックの下のラベルを“错误率显示”
に変更するには,まずマウスでラベルを選択します。これにより,テキストの周囲にボックスが表示されます。ボックスにテキストへの変更を入力します。
ハミング符号モデルの実行年代tr在g>
モデルを実行するには,<年代tr在g class="guimenuitem">[シミュレ,ション]年代tr在g>、<年代tr在g class="guimenuitem">[実行]年代tr在g>を選択します。モデルは100の誤りが発生すると終了します。显示ブロックの最上部のウィンドウに表示される誤り率はおよそ .001 です。モデルで<年代tr在g class="guilabel">(初始种子)年代tr在g>パラメ,タ,を変更するか,シミュレ,ションの実行時間を変えると,結果は若干異なります。
誤り率がおよそ.001になることは,次の理由から予想されます。2つ以上の誤りが長さ 7 の符号語で発生する確率は次のようになります。
1 - (0.99)<年代up>7年代up>- 7 (0.99)<年代up>6年代up>(0.01) = 0.002
2つ以上の誤りを含んだ符号語がランダムに復号化されると,復号化されたメッセージワード内のビットのおよそ半分が無効であると予想されます。したがって,ビット誤り率.001は妥当な値と言えます。
同じ誤り確率で低い誤り率を得るには,大きなパラメ,タ,でハミング符号を使用してみてください。このためには,<年代p一个nclass="block">汉明编码年代p一个n>および<年代p一个nclass="block">汉明译码器年代p一个n>ブロックダ@ @アログボックスの<年代tr在g class="guilabel">(码字长度)年代tr在g>および<年代tr在g class="guilabel">(消息长度)年代tr在g>パラメ,タ,を変更します。<年代p一个nclass="block">伯努利二进制发生器年代p一个n>ブロックおよび<年代p一个nclass="block">二进制对称信道年代p一个n>ブロックのパラメ,タ,も適切に変更する必要があります。
フレムサズの表示年代tr在g>
モデルの異なる部分のデタフレムのサズを表示することができます。<年代tr在g class="guimenuitem">[デバッグ]年代tr在g>タブで,<年代tr在g class="guimenuitem">[情報のオバレ]年代tr在g>を展開します。<年代tr在g class="guimenuitem">[信号]年代tr在g>セクションで,<年代tr在g class="guimenuitem">[信号の次元]年代tr在g>を選択します。<年代p一个nclass="block">伯努利二进制发生器年代p一个n>ブロックから出ているラ@ @ンには(4 x1)
というラベルが付いています。これは,出力がサイズ 4 の列ベクトルから構成されていることを示します。<年代p一个nclass="block">汉明编码年代p一个n>ブロックは[7 4]符号を使用するため,サイズ4のフレームはサイズ7のフレームに変換され,その結果,出力はx1 [7]
となります。
スコ,プのモデルへの追加年代tr在g>
二进制对称信道年代p一个n>ブロックが生成したチャネル誤りを表示するには,<年代p一个nclass="block">范围年代p一个n>ブロックをモデルに追加します。この方法は,モデルが正しく機能しているかどうかを確認する場合に役立ます。以下の図に示した例は,<年代p一个nclass="block">范围年代p一个n>ブロックをモデルに挿入する場所を示しています。
図<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">ハミング符号を使用して誤り率を減らす一个>に示したモデルからこのモデルをビルドするには,次の手順に従います。
次のブロックをS金宝appimulinkラブラリブラウザからモデルウィンドウにドラッグします。
金宝appSimulinkの逻辑和位操作ラescブラリの<一个href="//www.tatmou.com/jp/help/simulink/slref/relationaloperator.html">关系操作符年代p一个n>(金宝app模型)年代p一个n>ブロック
金宝appSimulink sinkラブラリの<一个href="//www.tatmou.com/jp/help/simulink/slref/scope.html">范围年代p一个n>(金宝app模型)年代p一个n>ブロック
DSP系统工具箱™にある信号管理ラ▪ブラリの缓冲区サブラ▪▪ブラリの<一个href="//www.tatmou.com/jp/help/dsp/ref/unbuffer.html" hreflang="en">Unbuffer年代p一个n>ブロックの2のコピ
二进制对称信道年代p一个n>ブロックをダブルクリックして,そのダ<年代tr在g class="guilabel">[输出误差向量]年代tr在g>を選択します。これにより,誤りベクトルをもブロックの2番目の出力端子が作成されます。
范围年代p一个n>ブロックをダブルクリックして,<年代tr在g class="guimenuitem">[表示]年代tr在g>、<年代tr在g class="guimenuitem">[コンフィギュレ,ションプロパティ]年代tr在g>の下で<年代tr在g class="guilabel">[入力端子の数]年代tr在g>を2
に設定します。<年代tr在g class="guibutton">[レ电子邮箱アウト]年代tr在g>を選択して,2のブロックを垂直に強調表示します。<年代tr在g class="guibutton">(好的)年代tr在g>をクリックします。
前の図に示したようにブロックを接続します。
拡張モデルでのパラメ,タ,の設定年代tr在g>
モデルに追加したブロックのパラメ,タ,に次の変更を行います。
错误率计算块年代tr在g>-误码率计算ブロックをダブルクリックし,ブロックのダイアログボックスの<年代tr在g class="guilabel">(停止仿真)年代tr在g>の隣にあるボックスをオフにします。
范围块年代tr在g>- - - - - -<一个href="//www.tatmou.com/jp/help/simulink/slref/scope.html">范围年代p一个n>(金宝app模型)年代p一个n>ブロックにはチャネル誤りと未補正の誤りが表示されます。ブロックを設定するには,以下のようにします。
范围ブロックをダブルクリックして,<年代tr在g class="guimenuitem">[表示]年代tr在g>、<年代tr在g class="guimenuitem">[コンフィギュレ,ションプロパティ]年代tr在g>を選択します。
[時間]年代tr在g>タブを選択して,<年代tr在g class="guilabel">[時間範囲]年代tr在g>を5000
に設定します。
[ログ]年代tr在g>タブを選択して,<年代tr在g class="guilabel">[デ,タ点の制限]年代tr在g>を30000
に設定します。
(好的)年代tr在g>をクリックします。
スコ,プが以下のように表示されます。
座標軸を設定するには,次の手順に従います。
上部のスコ,プの左側にある縦軸を右クリックします。
コンテキストメニュ,で<年代tr在g class="guimenuitem">[コンフィギュレ,ションプロパティ]年代tr在g>を選択します。
[y軸範囲(最小)]年代tr在g>を-1
に設定します。
[y軸範囲(最大)]年代tr在g>を2
に設定して,<年代tr在g class="guibutton">(好的)年代tr在g>をクリックします。
下部のスコ,プの縦軸にも同じ手順を適用します。
スコプウィンドウの幅を高さの約3倍になるまで広げます。これには,左マウスボタンを押しながら,ウィンドウの右の境界をクリックし境界を右にドラッグします。
关系操作符年代tr在g>-ブロックのダie浏览器アログボックスで<年代tr在g class="guilabel">[関係演算子]年代tr在g>を~ =
に設定します。Relational Operator ブロックは Bernoulli Random Generator ブロックからの送信信号と Hamming Decoder ブロックからの受信信号を比較します。2 つの信号が一致すると 0 が出力され、一致しない場合は 1 が出力されます。
スコ,プによるチャネル誤りの観察年代tr在g>
モデルを実行する場合は,スコ,プに誤りデ,タが表示されます。5000のタイム ステップを終了するたびに、スコープは以下の図のように表示されます。この後、スコープは表示されたデータをクリアし、次の 5000 のデータ点を表示します。
上部のスコ,プは,<一个href="//www.tatmou.com/jp/jp/help/comm/ref/binarysymmetricchannel.html">二进制对称信道年代p一个n>ブロックが生成したチャネル誤りを示します。下部のスコ,プは,チャネル符号化によって訂正されていない誤りを示します。
スコプを停止するには,モデルウィンドウの上部のルバにある<年代tr在g class="guibutton">[停止]年代tr在g>ボタンをクリックします。
個々の誤りは、スコ、プをズ、ム、ンすることで確認できます。まず,<年代p一个nclass="block">范围年代p一个n>ウィンドウの左上にある真ん中の虫眼鏡ボタンをクリックします。次に,下部のスコ,プでいずれかのラ,ンをクリックします。これにより,ラ。横方向のスケールが個々の誤りを検出できるくらいに拡大されるまで,下部のスコープのラインをクリックし続けます。以下の図は,典型的な例を示します。
上部のスコプの真ん中にある幅の広い矩形パルスは2の1を表します。1。これは,下部のスコ,プにある補正されていない誤りからも把握できます。上部のスコプの右側にある幅の狭い矩形パルスは1の誤りを表し,。
誤りの確認を完了したら,<年代tr在g class="guimenuitem">[シミュレ,ション]年代tr在g>、<年代tr在g class="guimenuitem">[停止]年代tr在g>を選択します。
Matlabへのデ,タのエクスポ,ト一个>では,誤りデータをMATLABワークスペースに送信し,詳しく解析する方法について説明しています。
金宝appを使用したバ@ @ナリ形式でのハミング符号の作成
この例では,符号化器と復号化器を使用する方法を非常に簡単に示します。符号化ブロックに対する符号とメッセ,ジ信号の適切なベクトル長を示します。<一个href="//www.tatmou.com/jp/jp/help/comm/ref/errorratecalculation.html">错误率计算年代p一个n>ブロックは送信信号と受信信号としてスカラーまたはフレームベースの列ベクトルしか受け取らないため,この例ではフレームベースの列ベクトルを最初から最後まで使用します(したがって,<一个href="//www.tatmou.com/jp/help/dsp/ref/convert1dto2d.html" hreflang="en">将一维转换为二维年代p一个n>などのブロックを使用して信号属性を変更する必要はありません)。
このモデルを開くにはmatlabコマンドラescンでdoc_hamming
と入力します。モデルを作成するには,次のブロックを収集し,設定します。
通讯来源ラescブラリの<一个href="//www.tatmou.com/jp/jp/help/comm/ref/bernoullibinarygenerator.html">伯努利二进制发生器年代p一个n>
[0的概率]年代tr在g>を
5
に設定します。(初始种子)年代tr在g>を任意の正のスカラ,整数(関数<一个href="//www.tatmou.com/jp/help/matlab/ref/randn.html">
randn
の出力であることが好ましい)に設定します。(框架输出)年代tr在g>チェックボックスをオンにします。
[每帧样本]年代tr在g>を
4
に設定します。
汉明编码年代p一个n>(既定のパラメ,タ,値を使用)
汉明译码器年代p一个n>(既定のパラメ,タ,値を使用)
错误率计算年代p一个n>(Comm sinkラブラリに存在し,既定のパラメタ値を使用)
前の図に示したようにブロックを接続します。モデル内の信号のベクトル長を表示することができます。<年代tr在g class="guimenuitem">[デバッグ]年代tr在g>タブで,<年代tr在g class="guimenuitem">[情報のオバレ]年代tr在g>を展開します。<年代tr在g class="guimenuitem">[信号]年代tr在g>セクションで,<年代tr在g class="guimenuitem">[信号の次元]年代tr在g>を選択します。必要に応じてブロック図を更新した後,<年代tr在g class="guilabel">Ctrl + D年代tr在g>を押してモデルをコンパesc escルし,誤り統計をチェックします。
関連する信号属性が接続線に表示されます。コネクタラインはフレームベースの信号を示すように二重線で表示され,行の隣にある注釈は信号が適切なサイズの列ベクトルであることを示します。
ハミング符号を使用して誤り率を減らす
この節では,誤り修正符号を追加して,誤り率を減らす方法を説明します。次の図は,ハミング符号を使用するモデルを示します。
モデルの完成したバジョンを開くにはmatlabプロンプトでdoc_hamming
と入力します。
ハミング符号モデルのビルド年代tr在g>
ハミング符号モデルをビルドするには,以下の手順に従います。
チャネルノ▪▪ズモデルを開くにはmatlabコマンドラ▪▪ンで
doc_channel
と入力します。次に,作業ファルを保管するフォルダのモデルに”
my_hamming
という名前を付けて保存します。金宝app仿真软件ライブラリブラウザーから错误检测和校正/块サブライブラリの<一个href="//www.tatmou.com/jp/jp/help/comm/ref/hammingencoder.html">汉明编码年代p一个n>および<一个href="//www.tatmou.com/jp/jp/help/comm/ref/hammingdecoder.html">汉明译码器年代p一个n>ブロックをモデルウィンドウにドラッグします。
モデルの右の境界をクリックし,右にドラッグしてモデルウィンドウを広げます。
二进制对称信道年代p一个n>、<一个href="//www.tatmou.com/jp/jp/help/comm/ref/errorratecalculation.html">错误率计算年代p一个n>、<一个href="//www.tatmou.com/jp/help/simulink/slref/display.html">显示年代p一个n>(金宝app模型)年代p一个n>の各ブロックをクリックアンドドラッグで右に移動します。
伯努利二进制发生器年代p一个n>と<一个href="//www.tatmou.com/jp/jp/help/comm/ref/binarysymmetricchannel.html">二进制对称信道年代p一个n>ブロック間に十分なスペ,スを作成し,その間に<一个href="//www.tatmou.com/jp/jp/help/comm/ref/hammingencoder.html">汉明编码年代p一个n>を当てはめます。
次の図に示すように,<一个href="//www.tatmou.com/jp/jp/help/comm/ref/bernoullibinarygenerator.html">伯努利二进制发生器年代p一个n>ブロックと<年代p一个nclass="block">二进制对称信道年代p一个n>ブロック間のラ@ @ン上にある<年代p一个nclass="block">汉明编码年代p一个n>ブロックをクリックして分岐点の右側にドラッグします。次に,マウスボタンを離します。汉明编码ブロックは<年代p一个nclass="block">伯努利二进制发生器年代p一个n>ブロックから<年代p一个nclass="block">二进制对称信道年代p一个n>ブロックのラ@ @ンに自動的に接続されます。
ブロックを再度移動して<一个href="//www.tatmou.com/jp/jp/help/comm/ref/binarysymmetricchannel.html">二进制对称信道年代p一个n>と<一个href="//www.tatmou.com/jp/jp/help/comm/ref/errorratecalculation.html">错误率计算年代p一个n>ブロック間に十分なスペ,スを作成し,その間に<一个href="//www.tatmou.com/jp/jp/help/comm/ref/hammingdecoder.html">汉明译码器年代p一个n>を当てはめます。
汉明译码器年代p一个n>ブロックをクリックして<年代p一个nclass="block">二进制对称信道年代p一个n>ブロックと<年代p一个nclass="block">错误率计算年代p一个n>ブロックとの間のラ@ @ン上にドラッグします。
モデルはこの図に類似したものになります。
汉明编码器および解码器ブロックの使用年代tr在g>
汉明编码年代p一个n>ブロックはデ,タをチャネル経由で送信する前に符号化します。既定のコードは[7 4]ハミング符号で,このコードは長さ4のメッセージワードを長さ7の符号語に符号化します。。コドは送信された各符号語で1の誤りを修正できます。
(n, k)符号では,汉明编码ブロックへの入力はサイズkのベクトルから構成されなければなりません。この例ではk = 4です。
汉明译码器年代p一个n>ブロックはデ,タをチャネル経由で送信した後に復号化します。誤りがチャネルによって符号語で1でも作成されると,。ただし,複数の誤りが生じると,<年代p一个nclass="block">汉明译码器年代p一个n>ブロックが正しく復号化しない場合があります。
ブロック符号化機能の詳細にいては,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">ブロック符号一个>を参照してください。
ハミング符号モデルでのパラメ,タ,の設定年代tr在g>
伯努利二进制发生器年代p一个n>ブロックをダブルクリックし,次の図に示すように,ブロックのダイアログボックスのパラメーター設定に次の変更を行います。
[每帧样本]年代tr在g>を
4
に設定します。これにより,ブロックの出力がサイズ4のフレームに変換され,汉明编码ブロックの入力条件が満たされます。フレ,ムの詳細は,<一个href="//www.tatmou.com/jp/help/comm/ug/sample-based-and-frame-based-processing.html" class="a">サンプルベ,スおよびフレ,ムベ,スの処理一个>を参照してください。メモ:年代tr在g>
汉明编码年代p一个n>ブロックなどの多数のブロックでは,入力を指定のサ。<年代p一个nclass="block">伯努利二进制发生器年代p一个n>ブロックなどのソ,スブロックをこれらのブロックのいずれかに接続する場合は,<年代tr在g class="guilabel">[每帧样本]年代tr在g>を必要な値に設定します。このモデルでは<年代p一个nclass="block">伯努利二进制发生器年代p一个n>ブロックの<年代tr在g class="guilabel">[每帧样本]年代tr在g>パラメ,タ,は,<年代p一个nclass="block">汉明编码年代p一个n>ブロックの<年代tr在g class="guilabel">[消息长度K]年代tr在g>パラメ,タ,の倍数でなければなりません。
显示ブロックのラベル付け年代tr在g>
ブロックの下に表示されるラベルを変更し,有用な情報を入力することができます。たとえば,显示ブロックの下のラベルを“错误率显示”
に変更するには,まずマウスでラベルを選択します。これにより,テキストの周囲にボックスが表示されます。ボックスにテキストへの変更を入力します。
ハミング符号モデルの実行年代tr在g>
モデルを実行するには,<年代tr在g class="guimenuitem">[シミュレ,ション]年代tr在g>、<年代tr在g class="guimenuitem">[実行]年代tr在g>を選択します。モデルは100の誤りが発生すると終了します。显示ブロックの最上部のウィンドウに表示される誤り率はおよそ .001 です。モデルで<年代tr在g class="guilabel">(初始种子)年代tr在g>パラメ,タ,を変更するか,シミュレ,ションの実行時間を変えると,結果は若干異なります。
誤り率がおよそ.001になることは,次の理由から予想されます。2つ以上の誤りが長さ 7 の符号語で発生する確率は次のようになります。
1 - (0.99)<年代up>7年代up>- 7 (0.99)<年代up>6年代up>(0.01) = 0.002
2つ以上の誤りを含んだ符号語がランダムに復号化されると,復号化されたメッセージワード内のビットのおよそ半分が無効であると予想されます。したがって,ビット誤り率.001は妥当な値と言えます。
同じ誤り確率で低い誤り率を得るには,大きなパラメ,タ,でハミング符号を使用してみてください。このためには,<年代p一个nclass="block">汉明编码年代p一个n>および<年代p一个nclass="block">汉明译码器年代p一个n>ブロックダ@ @アログボックスの<年代tr在g class="guilabel">(码字长度)年代tr在g>および<年代tr在g class="guilabel">(消息长度)年代tr在g>パラメ,タ,を変更します。<年代p一个nclass="block">伯努利二进制发生器年代p一个n>ブロックおよび<年代p一个nclass="block">二进制对称信道年代p一个n>ブロックのパラメ,タ,も適切に変更する必要があります。
フレムサズの表示年代tr在g>
モデルの異なる部分のデタフレムのサズを表示することができます。<年代tr在g class="guimenuitem">[デバッグ]年代tr在g>タブで,<年代tr在g class="guimenuitem">[情報のオバレ]年代tr在g>を展開します。<年代tr在g class="guimenuitem">[信号]年代tr在g>セクションで,<年代tr在g class="guimenuitem">[信号の次元]年代tr在g>を選択します。<年代p一个nclass="block">伯努利二进制发生器年代p一个n>ブロックから出ているラ@ @ンには(4 x1)
というラベルが付いています。これは,出力がサイズ 4 の列ベクトルから構成されていることを示します。<年代p一个nclass="block">汉明编码年代p一个n>ブロックは[7 4]符号を使用するため,サイズ4のフレームはサイズ7のフレームに変換され,その結果,出力はx1 [7]
となります。
スコ,プのモデルへの追加年代tr在g>
二进制对称信道年代p一个n>ブロックが生成したチャネル誤りを表示するには,<年代p一个nclass="block">范围年代p一个n>ブロックをモデルに追加します。この方法は,モデルが正しく機能しているかどうかを確認する場合に役立ます。以下の図に示した例は,<年代p一个nclass="block">范围年代p一个n>ブロックをモデルに挿入する場所を示しています。
図<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">ハミング符号を使用して誤り率を減らす一个>に示したモデルからこのモデルをビルドするには,次の手順に従います。
次のブロックをS金宝appimulinkラブラリブラウザからモデルウィンドウにドラッグします。
金宝appSimulinkの逻辑和位操作ラescブラリの<一个href="//www.tatmou.com/jp/help/simulink/slref/relationaloperator.html">关系操作符年代p一个n>(金宝app模型)年代p一个n>ブロック
金宝appSimulink sinkラブラリの<一个href="//www.tatmou.com/jp/help/simulink/slref/scope.html">范围年代p一个n>(金宝app模型)年代p一个n>ブロック
DSP系统工具箱™にある信号管理ラ▪ブラリの缓冲区サブラ▪▪ブラリの<一个href="//www.tatmou.com/jp/help/dsp/ref/unbuffer.html" hreflang="en">Unbuffer年代p一个n>ブロックの2のコピ
二进制对称信道年代p一个n>ブロックをダブルクリックして,そのダ<年代tr在g class="guilabel">[输出误差向量]年代tr在g>を選択します。これにより,誤りベクトルをもブロックの2番目の出力端子が作成されます。
范围年代p一个n>ブロックをダブルクリックして,<年代tr在g class="guimenuitem">[表示]年代tr在g>、<年代tr在g class="guimenuitem">[コンフィギュレ,ションプロパティ]年代tr在g>の下で<年代tr在g class="guilabel">[入力端子の数]年代tr在g>を
2
に設定します。<年代tr在g class="guibutton">[レ电子邮箱アウト]年代tr在g>を選択して,2のブロックを垂直に強調表示します。<年代tr在g class="guibutton">(好的)年代tr在g>をクリックします。前の図に示したようにブロックを接続します。
拡張モデルでのパラメ,タ,の設定年代tr在g>
モデルに追加したブロックのパラメ,タ,に次の変更を行います。
错误率计算块年代tr在g>-误码率计算ブロックをダブルクリックし,ブロックのダイアログボックスの<年代tr在g class="guilabel">(停止仿真)年代tr在g>の隣にあるボックスをオフにします。
范围块年代tr在g>- - - - - -<一个href="//www.tatmou.com/jp/help/simulink/slref/scope.html">范围年代p一个n>(金宝app模型)年代p一个n>ブロックにはチャネル誤りと未補正の誤りが表示されます。ブロックを設定するには,以下のようにします。
范围ブロックをダブルクリックして,<年代tr在g class="guimenuitem">[表示]年代tr在g>、<年代tr在g class="guimenuitem">[コンフィギュレ,ションプロパティ]年代tr在g>を選択します。
[時間]年代tr在g>タブを選択して,<年代tr在g class="guilabel">[時間範囲]年代tr在g>を
5000
に設定します。[ログ]年代tr在g>タブを選択して,<年代tr在g class="guilabel">[デ,タ点の制限]年代tr在g>を
30000
に設定します。(好的)年代tr在g>をクリックします。
スコ,プが以下のように表示されます。
座標軸を設定するには,次の手順に従います。
上部のスコ,プの左側にある縦軸を右クリックします。
コンテキストメニュ,で<年代tr在g class="guimenuitem">[コンフィギュレ,ションプロパティ]年代tr在g>を選択します。
[y軸範囲(最小)]年代tr在g>を
-1
に設定します。[y軸範囲(最大)]年代tr在g>を
2
に設定して,<年代tr在g class="guibutton">(好的)年代tr在g>をクリックします。下部のスコ,プの縦軸にも同じ手順を適用します。
スコプウィンドウの幅を高さの約3倍になるまで広げます。これには,左マウスボタンを押しながら,ウィンドウの右の境界をクリックし境界を右にドラッグします。
关系操作符年代tr在g>-ブロックのダie浏览器アログボックスで<年代tr在g class="guilabel">[関係演算子]年代tr在g>を
~ =
に設定します。Relational Operator ブロックは Bernoulli Random Generator ブロックからの送信信号と Hamming Decoder ブロックからの受信信号を比較します。2 つの信号が一致すると 0 が出力され、一致しない場合は 1 が出力されます。
スコ,プによるチャネル誤りの観察年代tr在g>
モデルを実行する場合は,スコ,プに誤りデ,タが表示されます。5000のタイム ステップを終了するたびに、スコープは以下の図のように表示されます。この後、スコープは表示されたデータをクリアし、次の 5000 のデータ点を表示します。
上部のスコ,プは,<一个href="//www.tatmou.com/jp/jp/help/comm/ref/binarysymmetricchannel.html">二进制对称信道年代p一个n>ブロックが生成したチャネル誤りを示します。下部のスコ,プは,チャネル符号化によって訂正されていない誤りを示します。
スコプを停止するには,モデルウィンドウの上部のルバにある<年代tr在g class="guibutton">[停止]年代tr在g>ボタンをクリックします。
個々の誤りは、スコ、プをズ、ム、ンすることで確認できます。まず,<年代p一个nclass="block">范围年代p一个n>ウィンドウの左上にある真ん中の虫眼鏡ボタンをクリックします。次に,下部のスコ,プでいずれかのラ,ンをクリックします。これにより,ラ。横方向のスケールが個々の誤りを検出できるくらいに拡大されるまで,下部のスコープのラインをクリックし続けます。以下の図は,典型的な例を示します。
上部のスコプの真ん中にある幅の広い矩形パルスは2の1を表します。1。これは,下部のスコ,プにある補正されていない誤りからも把握できます。上部のスコプの右側にある幅の狭い矩形パルスは1の誤りを表し,。
誤りの確認を完了したら,<年代tr在g class="guimenuitem">[シミュレ,ション]年代tr在g>、<年代tr在g class="guimenuitem">[停止]年代tr在g>を選択します。
Matlabへのデ,タのエクスポ,ト一个>では,誤りデータをMATLABワークスペースに送信し,詳しく解析する方法について説明しています。
BCH符号
BCH符号に対するワ,ドの表現
[n
,k
] BCH符号に対するメッセ,ジは,k
列のバ@ @ナリガロア体配列でなければなりません。そのメッセ,ジに対応するコ,ドは,n
列のバ@ @ナリガロア体配列です。これらのガロア体配列の各行は,1のワ。
以下の例は,[15,11]BCH符号に対するワ.ドの表現方法を示します。
MSG = [1 0 0 1 0;1 0 1 1 1];<年代p一个n年代tyle="color:#228B22">% Galois数组中的消息年代p一个n>obj = com . bchencoder;C1 = step(obj, msg(1,:)');C2 = step(obj, msg(2,:)');CBCH = [c1 c2].'
出力は以下のようになります。
1 ~ 5列10 0 10 10 11 1 6 ~ 10列0 0 11 10 0 0 0 1 11 ~ 15列10 10 10 10 0 0 1
BCH符号に対するパラメ,タ,
BCH符号は,n
とk
の特殊な値を使用します。
符号語長n
は,ある整数m > 2に対して形式2<年代up>米年代up>-1の整数です。
メッセ,ジ長k
は,n
より小さい正の整数です。ただし,n
より小さいいくかの正の整数のみがk
に対して有効です。511までのn
の値に対するk
の有効な値のリストは,<一个href="//www.tatmou.com/jp/help/comm/ref/bchencoder.html">BCH编码年代p一个n>ブロックのリファレンスペ,ジを参照してください。
BCH符号の作成と復号化
BCH编码
系统对象とBCH译码器
系统对象は,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">BCH符号に対するワ,ドの表現一个>および<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">BCH符号に対するパラメ,タ,一个>に説明されているデ,タを使用してBCH符号を作成し,復号化します。
トピックは,以下のとおりです。
例:bch符号化の構文-年代tr在g>以下の例は,[15,5]BCH符号を使用してデタを符号化および復号化する方法を示します。
N = 15;K = 5;<年代p一个n年代tyle="color:#228B22">%码字长度和消息长度年代p一个n>MSG = randi([0 1],4*k,1);<年代p一个n年代tyle="color:#228B22">%四个随机二进制消息年代p一个n>最简单的编码语法年代p一个n>enc = com . bchencoder (n,k);dec = com . bchdecoder (n,k);C1 = step(enc,msg);<年代p一个n年代tyle="color:#228B22">% BCH编码年代p一个n>D1 = step(dec,c1);<年代p一个n年代tyle="color:#228B22">% BCH解码年代p一个n>检查解码工作是否正确。年代p一个n>CHK = isequal(d1,msg)<年代p一个n年代tyle="color:#228B22">下面的代码显示了如何执行编码和解码年代p一个n>%操作,如果选择将奇偶校验符号放在前面。年代p一个n>转换带有附加奇偶校验符号的编码数据的步骤年代p一个n>使用前置奇偶校验符号对数据进行编码年代p一个n>C11 =重塑(c1, n, []);C12 = circshift(c11,n-k);C1_prepend = c12(:);<年代p一个n年代tyle="color:#228B22">% BCH用前置奇偶校验符号编码数据年代p一个n>使用前置奇偶校验符号转换已编码数据的步骤年代p一个n>%以在解码之前附加奇偶校验符号对数据进行编码年代p一个n>C21 =重塑(c1_prepend, n, []);C22 = circshift(c21,k);C1_append = c22(:);<年代p一个n年代tyle="color:#228B22">% BCH用附加的奇偶校验符号编码数据年代p一个n>检查前缀到追加的转换是否正确工作。年代p一个n>D1_append = step(dec,c1_append);CHK = isequal(msg,d1_append)
出力は以下のようになります。
CHK = 1
Matlabを使用したBCH符号の誤りの検出と訂正-年代tr在g>次の例は,誤りのあるコ,ドの復号化結果を示します。この例では,データを符号化し、各符号語に誤りを加え、BCH译码器
系统对象を使用して,ノescズを含む符号の復号化を試みます。
N = 15;K = 5;<年代p一个n年代tyle="color:#228B22">%码字长度和消息长度年代p一个n>[gp,t] = bchgenpoly(n,k);<年代p一个n年代tyle="color:#228B22">% t是纠错能力。年代p一个n>Nw = 4;<年代p一个n年代tyle="color:#228B22">要处理的字数年代p一个n>MSGW = randi([0 1], nw*k, 1);<年代p一个n年代tyle="color:#228B22">%随机的k符号消息年代p一个n>enc = com . bchencoder (n,k,gp);dec = com . bchdecoder (n,k,gp);C = step(enc, msgw);<年代p一个n年代tyle="color:#228B22">编码数据。年代p一个n>噪声= randerr(nw,n,t);<年代p一个n年代tyle="color:#228B22">每个码字出错% t年代p一个n>噪声=噪音';吵闹=吵闹(:);cnoise = mod(c + noise,2);<年代p一个n年代tyle="color:#228B22">在代码中添加噪声。年代p一个n>[dc, nerrs] = step(dec, cnoise);<年代p一个n年代tyle="color:#228B22">解码杂乱。年代p一个n>检查解码工作是否正确。年代p一个n>Chk2 = isequal(dc,msgw) nerrs<年代p一个n年代tyle="color:#228B22">找出改正了多少错误。年代p一个n>
ノ▪▪ズの値の配列はバ▪▪ナリ値を含むこと,およびc
がgf(2)のガロア体配列であるために加算演算C +噪声
はガロア体gf(2)上で行われることに注意してください。
例からの出力は以下のようになります。答
が0以外の値である場合,復号化器が誤りを含む符号語を訂正して元のメッセージを復元できたことを示します。ベクトルnerrs
の値は,復号化器が各符号語においてt
個の誤りを訂正したことを示します。
Chk2 = 1 nerrs = 3 3 3 3 3
BCH符号語内での過度のノaapl . exeズ年代tr在g>
前の例では,BCH译码器
系统对象によってすべての誤りが訂正されました。しかし,各BCH符号の誤り訂正能力には限界があります。ノ@ @ズが過度である場合のBCH译码器
系统对象の動作の詳細は,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">リ、ド、ソロモン符号語内での過度のノ、ズ一个>にあるリ,ド·ソロモン符号に,いての同様の説明を参照してください。
BCHとrsの誤りのみの復号化のアルゴリズム
概要-年代tr在g>BCHおよびrs符号に使用される誤りのみの復号化アルゴリズムは,以下のステップ(<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">[2]一个>の5.3.2,5.4,5.6節)で説明します。
無限次数シンドロ,ム多項式,<年代p一个nclass="inlineequation">
の最初の2t項を計算します。
のこれらの2 t項がすべてゼロに等しい場合,符号誤りはないため訂正は不要となり,復号化アルゴリズムは終了します。
に1つ以上の非ゼロ項がある場合は,Berlekampアルゴリズムを使用して誤り位置多項式Λ(z)を計算します。
誤り評価多項式<年代p一个nclass="inlineequation">
を計算します。
次の式に従って符号語の誤りを修正します。
ここで,<年代p一个nclass="inlineequation">
は符号語の<年代p一个nclass="inlineequation">
番目の位置における誤りの大きさで,mはその符号の誤り訂正能力よりも小さい値,<年代p一个nclass="inlineequation">
は誤り量多項式,Λ'(z)は誤り位置多項式Λ(z)の形式導関数<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">[5]一个>,そしてαは符号のガロア体原始元です。
いくかの手順の詳細は,次の節で説明します。
シンドロム計算-年代tr在g>狭義のコ,ドの場合,<年代p一个nclass="inlineequation">
の2 t項は,受け取った符号語を0 ~ 2 t - 1のα(体の原始元)の逐次べき乗で評価して計算されます。言い換えると,符号語<年代p一个nclass="inlineequation">
とシンドロ,ム多項式<年代p一个nclass="inlineequation">
が1ベスでンデックスが付けられ,符号語が<年代p一个nclass="inlineequation">
の形式であると仮定した場合,<年代p一个nclass="inlineequation">
の各項<年代p一个nclass="inlineequation">
は以下のようになります。
誤り位置多項式の計算-年代tr在g>誤り位置多項式Λ(z)はBerlekampアルゴリズムを使用して見けます。このアルゴリズムの詳細な説明は<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">[2]一个>に記載されていますが,アルゴリズムの要約を以下に示します。
次の変数を定義します。
変数
説明
n
迭代器変数
k
迭代器変数
l
の最初の2t項を生成するために使用するフィ,ドバックレジスタの長さ
D (z)
訂正多項式
d
誤差
次の図はΛ(z)を見つけるために使用する反復手法(Berlekampアルゴリズム)を示します。
誤り評価多項式の計算-年代tr在g>誤り評価多項式<年代p一个nclass="inlineequation">
は単純に,Λ(z)と<年代p一个nclass="inlineequation">
の畳み込みです。
BCH符号に対するワ,ドの表現
[n
,k
] BCH符号に対するメッセ,ジは,k
列のバ@ @ナリガロア体配列でなければなりません。そのメッセ,ジに対応するコ,ドは,n
列のバ@ @ナリガロア体配列です。これらのガロア体配列の各行は,1のワ。
以下の例は,[15,11]BCH符号に対するワ.ドの表現方法を示します。
MSG = [1 0 0 1 0;1 0 1 1 1];<年代p一个n年代tyle="color:#228B22">% Galois数组中的消息年代p一个n>obj = com . bchencoder;C1 = step(obj, msg(1,:)');C2 = step(obj, msg(2,:)');CBCH = [c1 c2].'
出力は以下のようになります。
1 ~ 5列10 0 10 10 11 1 6 ~ 10列0 0 11 10 0 0 0 1 11 ~ 15列10 10 10 10 0 0 1
BCH符号に対するパラメ,タ,
BCH符号は,n
とk
の特殊な値を使用します。
符号語長
n
は,ある整数m > 2に対して形式2<年代up>米年代up>-1の整数です。メッセ,ジ長
k
は,n
より小さい正の整数です。ただし,n
より小さいいくかの正の整数のみがk
に対して有効です。511までのn
の値に対するk
の有効な値のリストは,<一个href="//www.tatmou.com/jp/help/comm/ref/bchencoder.html">BCH编码年代p一个n>ブロックのリファレンスペ,ジを参照してください。
BCH符号の作成と復号化
BCH编码
系统对象とBCH译码器
系统对象は,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">BCH符号に対するワ,ドの表現一个>および<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">BCH符号に対するパラメ,タ,一个>に説明されているデ,タを使用してBCH符号を作成し,復号化します。
トピックは,以下のとおりです。
例:bch符号化の構文-年代tr在g>以下の例は,[15,5]BCH符号を使用してデタを符号化および復号化する方法を示します。
N = 15;K = 5;<年代p一个n年代tyle="color:#228B22">%码字长度和消息长度年代p一个n>MSG = randi([0 1],4*k,1);<年代p一个n年代tyle="color:#228B22">%四个随机二进制消息年代p一个n>最简单的编码语法年代p一个n>enc = com . bchencoder (n,k);dec = com . bchdecoder (n,k);C1 = step(enc,msg);<年代p一个n年代tyle="color:#228B22">% BCH编码年代p一个n>D1 = step(dec,c1);<年代p一个n年代tyle="color:#228B22">% BCH解码年代p一个n>检查解码工作是否正确。年代p一个n>CHK = isequal(d1,msg)<年代p一个n年代tyle="color:#228B22">下面的代码显示了如何执行编码和解码年代p一个n>%操作,如果选择将奇偶校验符号放在前面。年代p一个n>转换带有附加奇偶校验符号的编码数据的步骤年代p一个n>使用前置奇偶校验符号对数据进行编码年代p一个n>C11 =重塑(c1, n, []);C12 = circshift(c11,n-k);C1_prepend = c12(:);<年代p一个n年代tyle="color:#228B22">% BCH用前置奇偶校验符号编码数据年代p一个n>使用前置奇偶校验符号转换已编码数据的步骤年代p一个n>%以在解码之前附加奇偶校验符号对数据进行编码年代p一个n>C21 =重塑(c1_prepend, n, []);C22 = circshift(c21,k);C1_append = c22(:);<年代p一个n年代tyle="color:#228B22">% BCH用附加的奇偶校验符号编码数据年代p一个n>检查前缀到追加的转换是否正确工作。年代p一个n>D1_append = step(dec,c1_append);CHK = isequal(msg,d1_append)
出力は以下のようになります。
CHK = 1
Matlabを使用したBCH符号の誤りの検出と訂正-年代tr在g>次の例は,誤りのあるコ,ドの復号化結果を示します。この例では,データを符号化し、各符号語に誤りを加え、BCH译码器
系统对象を使用して,ノescズを含む符号の復号化を試みます。
N = 15;K = 5;<年代p一个n年代tyle="color:#228B22">%码字长度和消息长度年代p一个n>[gp,t] = bchgenpoly(n,k);<年代p一个n年代tyle="color:#228B22">% t是纠错能力。年代p一个n>Nw = 4;<年代p一个n年代tyle="color:#228B22">要处理的字数年代p一个n>MSGW = randi([0 1], nw*k, 1);<年代p一个n年代tyle="color:#228B22">%随机的k符号消息年代p一个n>enc = com . bchencoder (n,k,gp);dec = com . bchdecoder (n,k,gp);C = step(enc, msgw);<年代p一个n年代tyle="color:#228B22">编码数据。年代p一个n>噪声= randerr(nw,n,t);<年代p一个n年代tyle="color:#228B22">每个码字出错% t年代p一个n>噪声=噪音';吵闹=吵闹(:);cnoise = mod(c + noise,2);<年代p一个n年代tyle="color:#228B22">在代码中添加噪声。年代p一个n>[dc, nerrs] = step(dec, cnoise);<年代p一个n年代tyle="color:#228B22">解码杂乱。年代p一个n>检查解码工作是否正确。年代p一个n>Chk2 = isequal(dc,msgw) nerrs<年代p一个n年代tyle="color:#228B22">找出改正了多少错误。年代p一个n>
ノ▪▪ズの値の配列はバ▪▪ナリ値を含むこと,およびc
がgf(2)のガロア体配列であるために加算演算C +噪声
はガロア体gf(2)上で行われることに注意してください。
例からの出力は以下のようになります。答
が0以外の値である場合,復号化器が誤りを含む符号語を訂正して元のメッセージを復元できたことを示します。ベクトルnerrs
の値は,復号化器が各符号語においてt
個の誤りを訂正したことを示します。
Chk2 = 1 nerrs = 3 3 3 3 3
BCH符号語内での過度のノaapl . exeズ年代tr在g>
前の例では,BCH译码器
系统对象によってすべての誤りが訂正されました。しかし,各BCH符号の誤り訂正能力には限界があります。ノ@ @ズが過度である場合のBCH译码器
系统对象の動作の詳細は,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">リ、ド、ソロモン符号語内での過度のノ、ズ一个>にあるリ,ド·ソロモン符号に,いての同様の説明を参照してください。
BCHとrsの誤りのみの復号化のアルゴリズム
概要-年代tr在g>BCHおよびrs符号に使用される誤りのみの復号化アルゴリズムは,以下のステップ(<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">[2]一个>の5.3.2,5.4,5.6節)で説明します。
無限次数シンドロ,ム多項式,<年代p一个nclass="inlineequation"> の最初の2t項を計算します。
のこれらの2 t項がすべてゼロに等しい場合,符号誤りはないため訂正は不要となり,復号化アルゴリズムは終了します。
に1つ以上の非ゼロ項がある場合は,Berlekampアルゴリズムを使用して誤り位置多項式Λ(z)を計算します。
誤り評価多項式<年代p一个nclass="inlineequation"> を計算します。
次の式に従って符号語の誤りを修正します。
ここで,<年代p一个nclass="inlineequation"> は符号語の<年代p一个nclass="inlineequation"> 番目の位置における誤りの大きさで,mはその符号の誤り訂正能力よりも小さい値,<年代p一个nclass="inlineequation"> は誤り量多項式,Λ'(z)は誤り位置多項式Λ(z)の形式導関数<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">[5]一个>,そしてαは符号のガロア体原始元です。
いくかの手順の詳細は,次の節で説明します。
シンドロム計算-年代tr在g>狭義のコ,ドの場合,<年代p一个nclass="inlineequation"> の2 t項は,受け取った符号語を0 ~ 2 t - 1のα(体の原始元)の逐次べき乗で評価して計算されます。言い換えると,符号語<年代p一个nclass="inlineequation"> とシンドロ,ム多項式<年代p一个nclass="inlineequation"> が1ベスでンデックスが付けられ,符号語が<年代p一个nclass="inlineequation"> の形式であると仮定した場合,<年代p一个nclass="inlineequation"> の各項<年代p一个nclass="inlineequation"> は以下のようになります。
誤り位置多項式の計算-年代tr在g>誤り位置多項式Λ(z)はBerlekampアルゴリズムを使用して見けます。このアルゴリズムの詳細な説明は<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">[2]一个>に記載されていますが,アルゴリズムの要約を以下に示します。
次の変数を定義します。
変数 | 説明 |
---|---|
n | 迭代器変数 |
k | 迭代器変数 |
l | の最初の2t項を生成するために使用するフィ,ドバックレジスタの長さ |
D (z) | 訂正多項式 |
d | 誤差 |
次の図はΛ(z)を見つけるために使用する反復手法(Berlekampアルゴリズム)を示します。
誤り評価多項式の計算-年代tr在g>誤り評価多項式<年代p一个nclass="inlineequation"> は単純に,Λ(z)と<年代p一个nclass="inlineequation"> の畳み込みです。
リ,ド·ソロモン符号
リ,ド,ソロモン符号のワ,ドの表現
このツールボックスは,ビットの代わりにmビットのシンボルを使用するリード・ソロモン符号をサポートします。[n
,k
]リ,ド·ソロモン符号に対するメッセ,ジは,体gf (2 .<年代up>米年代up>)のk
列のガロア体配列でなければなりません。各配列エントリは,0から2<年代up>米年代up>-1の整数でなければなりません。そのメッセ,ジに対応するコ,ドは,gf (2<年代up>米年代up>)のn
列のガロア体配列です。符号語長n
は,3から<年代up>米年代up>-1の値でなければなりません。
メモ年代tr在g>
ガロア体配列とその作成方法の詳細は,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">ガロア体の元の表現一个>または関数<一个href="//www.tatmou.com/jp/help/comm/ref/gf.html">女朋友
のリファレンスペ,ジを参照してください。
以下の例は,[7,3]リ,ド·ソロモン符号に対するワ,ドの表現方法を示します。
N = 7;K = 3;<年代p一个n年代tyle="color:#228B22">%码字长度和消息长度年代p一个n>M = 3;<年代p一个n年代tyle="color:#228B22">%每个符号中的比特数年代p一个n>MSG = [1 6 4;0 4 3];<年代p一个n年代tyle="color:#228B22">Message是一个Galois数组。年代p一个n>obj = com . rsencoder (n, k);C1 = step(obj, msg(1,:)');C2 = step(obj, msg(2,:)');C = [c1 c2].'
出力は以下のようになります。
C = 1 6 4 4 3 6 3 0 4 3 3 7 4 7
リ、ド、ソロモン符号のパラメ、タ、
この節では,リ,ド·ソロモン符号に関連する整数に<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">生成多項式一个>の求め方を説明します。
使用可能な整数パラメタの値-年代tr在g>次の表は,このツールボックスでサポートされるリード・ソロモン符号に関連する正の整数値の意味とそれらが取りうる値をまとめています。値n
とk
は,この。
シンボル
平均
値または範囲
米
シンボルあたりのビット数
3から16の整数
n
符号語ごとのシンボル数
3から2<年代up>米年代up>-1の整数
k
メッセ,ジごとのシンボル数
n
よりも小さい正の整数(n - k
は偶数)
t
符号の誤り訂正能力
(n - k) / 2
生成多項式-年代tr在g>関数rsgenpoly
は,リ,ド·ソロモン符号に対する生成多項式を作成します。rsgenpoly
は,多項式の係数を変数の<年代p一个nclass="emphasis">“降べき”の順にリストするガロア行ベクトルを使用して生成多項式を表します。各シンボルにmビットがある場合は,ガロア行ベクトルは体<年代up>米年代up>)に属します。たとえば,次のコマンド
R = rsgenpoly(15,13)
r = GF(2^4)数组。原始多项式= D^4+D+1(19十进制)数组元素= 1 6 8
このコマンドにより,[15,13]リ.ド·ソロモン符号に対する生成多項式はx .<年代up>2年代up>+ (<年代up>2年代up>+ a) x + (a<年代up>3.年代up>)となります。ここで,一个はGF (16)に対する既定の原始多項式の根です。
生成多項式の代数表現年代tr在g>
rsgenpoly
が生成する生成多項式の形式は,(x - a<年代up>b年代up>x - a<年代up>b + 1年代up>)...(X-一个<年代up>b + 2 t - 1年代up>)です。ここで,bは整数、A はガロア体に対する原始多項式の根、t は(n - k) / 2
です。bの既定値は1です。rsgenpoly
の出力は,要素の乗算とxのべき乗の収集の結果です。以下の例は,b = 1を使用して,[15、13]リード・ソロモン符号の場合にこの式をチェックします。
N = 15;A = gf(2,log2(n+1));<年代p一个n年代tyle="color:#228B22">原始多项式的%根年代p一个n>F1 = [1 a];F2 = [1 a^2];<年代p一个n年代tyle="color:#228B22">%构成生成器多项式的因子年代p一个n>F = conv(f1,f2)<年代p一个n年代tyle="color:#228B22">%生成器多项式,与上面r相同。年代p一个n>
リ,ド·ソロモン符号の作成と復号化
RS编码器
系统对象およびRS译码器
系统对象は,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">リ,ド,ソロモン符号のワ,ドの表現一个>と<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">リ、ド、ソロモン符号のパラメ、タ、一个>で説明したデ,タを使用してリ,ド·ソロモン符号を作成し,復号化します。
この節では,RS编码器
系统对象およびRS译码器
系统对象の使用方法を説明します。トピックは,以下のとおりです。
Matlabでのリ.ド·ソロモン符号化の構文-年代tr在g>以下の例は,[15、13]リード・ソロモン符号を使用してデータを符号化および復号化する複数の方法を示します。この例から,以下のタスクを実行できることがわかります。
異なる生成多項式を作成するためにrsgenpoly
を使用してコ,ドの生成多項式を変更する
女朋友
の入力引数を使用して,シンボルを含むガロア体の原始多項式を変更する
末尾(既定)または先頭を選択して,符号語内のパリティシンボルの位置を変更する
この例では,RS编码器
系统对象とRS译码器
系统对象の対応する構文が,最初の入力引数を除き同じ入力引数を使用することも示します。
M = 4;<年代p一个n年代tyle="color:#228B22">%每个符号中的比特数年代p一个n>N = 2^m-1;K = 13;<年代p一个n年代tyle="color:#228B22">%码字长度和消息长度年代p一个n>MSG = randi([0 m-1],4*k,1);<年代p一个n年代tyle="color:#228B22">% 4条随机整数消息年代p一个n>最简单的编码语法年代p一个n>hEnc = com . rsencoder (n,k);hDec = com . rsdecoder (n,k);c1 = step(hEnc, msg);d1 = step(hDec, c1);<年代p一个n年代tyle="color:#228B22">改变代码的生成器多项式。年代p一个n>释放(hEnc),释放(hDec)。GeneratorPolynomialSource =<年代p一个n年代tyle="color:#A020F0">“属性”年代p一个n>;hDec。Gener一个torPolynomialSource =<年代p一个n年代tyle="color:#A020F0">“属性”年代p一个n>;hEnc。Gener一个torPolynomial = rsgenpoly(n,k,19,2); hDec.GeneratorPolynomial = rsgenpoly(n,k,19,2); c2 = step(hEnc, msg); d2 = step(hDec, c2);<年代p一个n年代tyle="color:#228B22">改变GF(16)的原始多项式。年代p一个n>释放(hEnc),释放(hDec)。PrimitivePolynomialSource =<年代p一个n年代tyle="color:#A020F0">“属性”年代p一个n>;hDec。Pr我米我t我vePolynomialSource =<年代p一个n年代tyle="color:#A020F0">“属性”年代p一个n>;hEnc。Gener一个torPolynomialSource =<年代p一个n年代tyle="color:#A020F0">“汽车”年代p一个n>;hDec。Gener一个torPolynomialSource =<年代p一个n年代tyle="color:#A020F0">“汽车”年代p一个n>;hEnc。Pr我米我t我vePolynomial = [1 1 0 0 1]; hDec.PrimitivePolynomial = [1 1 0 0 1]; c3 = step(hEnc, msg); d3 = step(hDec, c3);<年代p一个n年代tyle="color:#228B22">检查解码工作是否正确。年代p一个n>CHK = isequal(d1,msg) & isequal(d2,msg) & isequal(d3,msg)<年代p一个n年代tyle="color:#228B22">下面的代码显示了如何执行编码和解码年代p一个n>%操作,如果选择将奇偶校验符号放在前面。年代p一个n>转换带有附加奇偶校验符号的编码数据的步骤年代p一个n>使用前置奇偶校验符号对数据进行编码年代p一个n>C31 =重塑(c3, n, []);C32 = circshift(c31,n-k);C3_prepend = c32(:);<年代p一个n年代tyle="color:#228B22">% RS用前置奇偶校验符号编码数据年代p一个n>使用前置奇偶校验符号转换已编码数据的步骤年代p一个n>%以在解码之前附加奇偶校验符号对数据进行编码年代p一个n>C34 =重塑(c3_prepend, n, []);C35 = circshift(c34,k);C3_append = c35(:);<年代p一个n年代tyle="color:#228B22">% RS用附加的奇偶校验符号编码数据年代p一个n>检查前缀到追加的转换是否正确工作。年代p一个n>d3_append = step(hDec,c3_append);CHK = isequal(msg,d3_append)
出力は以下のようになります。
CHK = 1
Matlabを使用したリ.ド·ソロモン符号の誤りの検出と訂正-年代tr在g>以下の例は,誤りのあるコ,ドの復号化結果を示します。この例では,デ,タを符号化し,各符号語に誤りを加え,RS译码器
系统对象を使用して,ノescズを含む符号の復号化を試みます。
M = 3;<年代p一个n年代tyle="color:#228B22">%每个符号的比特数年代p一个n>N = 2^m-1;K = 3;<年代p一个n年代tyle="color:#228B22">%码字长度和消息长度年代p一个n>T = (n-k)/2;<年代p一个n年代tyle="color:#228B22">代码的纠错能力年代p一个n>Nw = 4;<年代p一个n年代tyle="color:#228B22">要处理的字数年代p一个n>MSGW = randi([0 n],nw*k,1);<年代p一个n年代tyle="color:#228B22">%随机的k符号消息年代p一个n>hEnc = com . rsencoder (n,k);hDec = com . rsdecoder (n,k);c = step(hEnc, msgw);<年代p一个n年代tyle="color:#228B22">编码数据。年代p一个n>噪声= (1+randi([0 n-1],nw,n)).*randerr(nw,n,t);<年代p一个n年代tyle="color:#228B22">每个码字出错% t年代p一个n>噪声=噪音';吵闹=吵闹(:);cnoise = gf(c,m) + noise;<年代p一个n年代tyle="color:#228B22">在gf(m)算法下给代码添加噪声。年代p一个n>[dc nerrs] = step(hDec, cnois .x);<年代p一个n年代tyle="color:#228B22">解码有噪声的代码。年代p一个n>检查解码工作是否正确。年代p一个n>isequal nerrs(直流,msgw)<年代p一个n年代tyle="color:#228B22">找出hDec更正了多少错误。年代p一个n>
ノesc escズ値の配列には,1 esc escから2 ^ m
の整数が含まれます。c
がGF (2 ^ m
)内のガロア体配列であるため,加算演算C +噪声
はガロア体gf (2 ^ m
)上で行われます。
例からの出力は以下のようになります。答
が0以外の値である場合,復号化器が誤りを含む符号語を訂正して元のメッセージを復元できたことを示します。ベクトルnerrs
の値は,復号化器が各符号語においてt
個の誤りを訂正したことを示します。
Ans = 1
Nerrs = 2 2 2 2
リド·ソロモン符号語内での過度のノズ-年代tr在g>前の例では,RS编码器
系统对象によってすべての誤りが訂正されましたが。しかし,各リ,ド·ソロモン符号の誤り訂正能力には限界があります。ノイズが大きいために,正しい符号語から誤りを含む符号語までのハミング距離が非常に大きい場合,以下のいずれかになります。
誤りを含む符号語が,正しい符号語“以外”<年代p一个nclass="emphasis">の有効な符号語の近似になる。復号化器は,他の符号語に対応するメッセ,ジを出力します。
誤りを含む符号語は,正常な復号化の符号語との距離が近くない。この状況は,“復号化失敗”<年代p一个nclass="emphasis">と呼ばれます。復号化器は,誤りを含む符号語からパリティ位置のシンボルを削除し,残りのシンボルを出力します。
両方の場合とも,復号化器は誤ったメッセ,ジを出力します。ただし,RS译码器
系统对象は2番目の出力で値-1
も返すので,復号化失敗がい発生するのかを知ることができます。
符号語にノ▪▪ズが多すぎて復号化に失敗する場合に▪▪いて調べるには,前の例を変更して噪音
を次のように定義します。
噪音=(1 +兰迪([0 n - 1], nw, n))。* randerr (nw n t + 1);<年代p一个n年代tyle="color:#228B22">% t+1个错误/行年代p一个n>
短縮リド·ソロモン符号の作成-年代tr在g>リ,ド·ソロモン符号化器は,整数mに対して<年代up>米年代up>-1の符号語長を使用します。短縮リ,ド·ソロモン符号の符号語長は<年代up>米年代up>-1ではありません。短縮 [n
,k
[n .]リ.ド·ソロモン符号は,暗黙的に[n .<年代ub>1年代ub>k<年代ub>1年代ub>]符号化器を使用します。ここで,
n<年代ub>1年代ub>= 2<年代up>米年代up>- 1, mはシンボルあたりのビット数です。
k<年代ub>1年代ub>= k + (n<年代ub>1年代ub>- n)
RS编码器
系统对象では,非短縮符号用と同じ構文で短縮符号がサポ,トされます。短縮符号を使用することを明示的に示す必要はありません。
hEnc = com . rsencoder (7,5);ordinarycode = step(hEnc,[1 1 1 1 1 1]');hEnc = com . rsencoder (5,3);shortenedcode = step(hEnc,[1 1 1]');
RS编码器年代tr在g>
系统对象による短縮符号の作成方法年代tr在g>
短縮符号を作成する際,RS编码器
系统对象では以下のステップを実行します。
各メッセジの前に0を付加する
有効な符号語長と目的の誤り訂正能力をもつリード・ソロモン符号化器を使用して,0を付加されたメッセージを符号化する
各符号語の非パリティシンボルから余分な0を削除する
次の例はこのプロセスを説明します。
N = 12;K = 8;<年代p一个n年代tyle="color:#228B22">缩短后的代码的长度年代p一个n>M = ceil(log2(n+1));<年代p一个n年代tyle="color:#228B22">%每个符号的比特数年代p一个n>MSG = randi([0 2^m-1],3*k,1);<年代p一个n年代tyle="color:#228B22">% 3个k符号单词的随机数组年代p一个n>hEnc = com . rsencoder (n,k);代码= step(hEnc, msg);<年代p一个n年代tyle="color:#228B22">创建一个缩短的代码。年代p一个n>手动缩短,只是为了展示它如何工作。。年代p一个n>N_pad = 2^m-1;<年代p一个n年代tyle="color:#228B22">%实际编码器中的码字长度年代p一个n>K_pad = k+(n_pad-n);<年代p一个n年代tyle="color:#228B22">%实际编码器中的消息字长度年代p一个n>hEnc = com . rsencoder (n_pad,k_pad);Mw =重塑(msg,k,[]);<年代p一个n年代tyle="color:#228B22">每个列向量表示一个消息字年代p一个n>Msg_pad = [0 (n_pad-n,3);mw);<年代p一个n年代tyle="color:#228B22">在每个单词前加0。年代p一个n>Msg_pad = Msg_pad (:);code_pad = step(hEnc,msg_pad);<年代p一个n年代tyle="color:#228B22">编码填充词。年代p一个n>Cw =重塑(code_pad,2^m-1,[]);<年代p一个n年代tyle="color:#228B22">每个列向量表示一个码字年代p一个n>Code_eqv = cw(n_pad-n+1:n_pad,:);<年代p一个n年代tyle="color:#228B22">除去多余的0。年代p一个n>Code_eqv = Code_eqv (:);Ck = isequal(code_eqv,code);<年代p一个n年代tyle="color:#228B22">返回true(1)。年代p一个n>
生成多項式の決定
巡回,bch,リ,ド·ソロモン符号に対する生成多項式を求めるには,それぞれ関数cyclpoly
、bchgenpoly
,またはrsgenpoly
を使用します。次のコマンドを見てみましょう。
genpolyCyclic = cyclpoly(15,5)<年代p一个n年代tyle="color:#228B22">% 1 + X X ^ ^ 5 + 10年代p一个n>genpolyBCH = bchgenpoly(15,5)<年代p一个n年代tyle="color:#228B22">% x x ^ ^ 10 + 8 + x x ^ ^ 5 + 4 + x ^ 2 + x + 1年代p一个n>genpolyRS = rsgenpoly(15,5)
これらのコマンドは,異なるタ。出力は以下のようになります。
genpolycycle = 1 0 0 0 0 1 0 0 0 0 1 genpolyBCH = GF(2)数组。数组元素= 1 0 1 0 0 1 1 0 1 1 genpolyRS = GF(2^4)数组。原始多项式= D^4+D+1(19十进制)数组元素= 1 4 8 10 12 9 4 2 12 2 7
これらの出力の形式は,次のように変わります。
cyclpoly
は,多項式の係数を変数の“昇べき”<年代p一个nclass="emphasis">の順にリストする整数の行ベクトルを使用して,生成多項式を表します。
bchgenpoly
とrsgenpoly
は,多項式の係数を変数の“降べき”<年代p一个nclass="emphasis">の順にリストするガロア行ベクトルを使用して,生成多項式を表します。
rsgenpoly
は,二元体gf(2)以外のガロア体の係数を使用します。これらの係数の意味の詳細は,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">整数をガロア体にどのように対応づけるか一个>と<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">ガロア体上の多項式一个>を参照してください。
生成多項式の非一意性-年代tr在g>メッセ,ジ長と符号語長のペアによって,生成多項式が一意に決定されない場合があります。上記の例の関数の構文には,指定する特定の制約を満たす生成多項式を取り出すためのオプションも含まれています。構文のオプションの詳細は,関数のリファレンスペ,ジを参照してください。
生成多項式の代数表現-年代tr在g>bchgenpoly
とrsgenpoly
によって生成される生成多項式の形式は,(x - a<年代up>b年代up>x - a<年代up>b + 1年代up>)...(X-一个<年代up>b + 2 t - 1年代up>)です。ここで,一个は適切なガロア体に対する原始元で、b と t は整数です。この式の詳細は、関数のリファレンス ページを参照してください。
短縮,パンクチャ,および消去を使用するリ,ド·ソロモンの例
このセクションでは,短縮,パンクチャ,および消去を使用した代表的なリード・ソロモン符号化例を,ますます複雑になる誤り訂正を含めて作成します。
短縮とパンクチャを使用した符号化器例-年代tr在g>次の図は,短縮とパンクチャを使用した(7,3)リード・ソロモン符号化器の代表的な例を示しています。
この図では,メッセ,ジソ,スにより<年代ub>1年代ub>我<年代ub>2年代ub>で指定される2つの情報シンボルが出力されます(BCHの例では,シンボルはバイナリビットにすぎません)。この符号は短縮(7,3)符号であるため,情報シンボルの前にゼロを追加しなければなりません。これにより,0i<年代ub>1年代ub>我<年代ub>2年代ub>という3のシンボルから構成されるメッセジが生成されます。変更されたメッセ,ジシ,ケンスは,rsで符号化され,追加された情報ゼロはそのあと削除されます。その結果我<年代ub>1年代ub>我<年代ub>2年代ub>P<年代ub>1年代ub>P<年代ub>2年代ub>P<年代ub>3.年代ub>P<年代ub>4年代ub>が生成されます(この例では,パリティビットは符号語の末尾にあります)。
パンクチャ操作は,パンクチャベクトルによって制御されます。ここでは,このパンクチャベクトルは1011です。パンクチャベクトル内では,1はシンボルが保持され,0はシンボルが破棄されたことを意味します。この例では,パンクチャ操作により 2 番目のパリティ シンボルが削除され、I<年代ub>1年代ub>我<年代ub>2年代ub>P<年代ub>1年代ub>P<年代ub>3.年代ub>P<年代ub>4年代ub>という最終的なベクトルが生成されます。
短縮とパンクチャを使用した復号化器例-年代tr在g>次の図は,短縮符号語およびパンクチャ符号語でのrs符号化器の動作を示しています。
このケ,スは,短縮とパンクチャを使用したrs符号化器の図に示した符号化器の動作に対応します。前の図に示したとおり,符号化器は(5,2)符号語を受信します。これは(7,3)符号語から1シンボル短縮され,さらにその1シンボルはパンクチャされているためです。
最初のステップとして,復号化器は,符号語の第2のパリティ位置にEで指定された消去を追加します。これは,パンクチャベクトル1011に対応します。前の図に示したとおり,ゼロを追加することは短縮を意味します。1回の消去は、4 つの消去を訂正できる符号の消去訂正機能を超えません。復号化操作により、3 つのシンボルで構成されるメッセージ DI<年代ub>1年代ub>我<年代ub>2年代ub>が生成されます。前の図のように最初のシンボルは切り捨てられるので,最終出力は<年代ub>1年代ub>我<年代ub>2年代ub>になります。
短縮,パンクチャ,および消去を使用した符号化器例-年代tr在g>次の図は,パンクチャされ,短縮符号語に対して動作しながら,受信機によって生成された消去を生成する復号化器の様子を示しています。
この図では,復調器は符号化器が送信した<年代ub>1年代ub>我<年代ub>2年代ub>P<年代ub>1年代ub>P<年代ub>3.年代ub>P<年代ub>4年代ub>ベクトルを受信します。復調器は,受信した5つのシンボルのうち2つは,信頼できないので消去されることを宣言するため,シンボル2と5は消去と見なされます。外部ソスによって提供された01001ベクトルは,これらの消去を示しています。消去ベクトル内では,1はシンボルが消去シンボルで置き換えられること,0はシンボルが変更なしで渡されることを意味します。
復号化器のブロックは,符号語と消去ベクトルを受信し,ベクトル01001で示される消去を実行します。消去ベクトル内では,1はシンボルが消去シンボルで置き換えられること,0はシンボルが変更なしで渡されることを意味します。結果の符号語ベクトルは,i<年代ub>1年代ub>EP<年代ub>1年代ub>P<年代ub>3.年代ub>Eになります。ここで,Eは消去シンボルです。
符号語は,符号化操作で使用したパンクチャベクトル(1011など)に基づきデパンクチャされます。したがって,消去シンボルがp<年代ub>1年代ub>とP<年代ub>3.年代ub>の間に挿入され,i<年代ub>1年代ub>EP<年代ub>1年代ub>EP<年代ub>3.年代ub>Eという符号語ベクトルが生成されます。
復号化の直前に,情報ベクトルの冒頭にゼロを追加することは短縮を意味します。結果のベクトルは,0i<年代ub>1年代ub>EP<年代ub>1年代ub>EP<年代ub>3.年代ub>Eになるため,(7,3)符号語はBerlekampアルゴリズムに送られます。
この符号語は復号化され,3のシンボルで構成されるdi<年代ub>1年代ub>我<年代ub>2年代ub>(ここで,dはダミシンボルを示します)というメッセジが生成されます。最後に,メッセ,ジベクトルからdシンボルを削除することは,短縮を意味し,元の<年代ub>1年代ub>我<年代ub>2年代ub>ベクトルが生成されます。
詳細は,<一个href="//www.tatmou.com/jp/help/comm/ug/reed-solomon-coding-with-erasures-punctures-and-shortening.html" class="a">金宝appSimulinkでの消失,パンクチャ,および短縮を使用したリ,ド·ソロモン符号化一个>の例を参照してください。
リ,ド,ソロモン符号のワ,ドの表現
このツールボックスは,ビットの代わりにmビットのシンボルを使用するリード・ソロモン符号をサポートします。[n
,k
]リ,ド·ソロモン符号に対するメッセ,ジは,体gf (2 .<年代up>米年代up>)のk
列のガロア体配列でなければなりません。各配列エントリは,0から2<年代up>米年代up>-1の整数でなければなりません。そのメッセ,ジに対応するコ,ドは,gf (2<年代up>米年代up>)のn
列のガロア体配列です。符号語長n
は,3から<年代up>米年代up>-1の値でなければなりません。
メモ年代tr在g>
ガロア体配列とその作成方法の詳細は,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">ガロア体の元の表現一个>または関数<一个href="//www.tatmou.com/jp/help/comm/ref/gf.html">女朋友
のリファレンスペ,ジを参照してください。
以下の例は,[7,3]リ,ド·ソロモン符号に対するワ,ドの表現方法を示します。
N = 7;K = 3;<年代p一个n年代tyle="color:#228B22">%码字长度和消息长度年代p一个n>M = 3;<年代p一个n年代tyle="color:#228B22">%每个符号中的比特数年代p一个n>MSG = [1 6 4;0 4 3];<年代p一个n年代tyle="color:#228B22">Message是一个Galois数组。年代p一个n>obj = com . rsencoder (n, k);C1 = step(obj, msg(1,:)');C2 = step(obj, msg(2,:)');C = [c1 c2].'
出力は以下のようになります。
C = 1 6 4 4 3 6 3 0 4 3 3 7 4 7
リ、ド、ソロモン符号のパラメ、タ、
この節では,リ,ド·ソロモン符号に関連する整数に<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">生成多項式一个>の求め方を説明します。
使用可能な整数パラメタの値-年代tr在g>次の表は,このツールボックスでサポートされるリード・ソロモン符号に関連する正の整数値の意味とそれらが取りうる値をまとめています。値n
とk
は,この。
シンボル | 平均 | 値または範囲 |
---|---|---|
米 | シンボルあたりのビット数 | 3から16の整数 |
n |
符号語ごとのシンボル数 | 3から2<年代up>米年代up>-1の整数 |
k |
メッセ,ジごとのシンボル数 | n よりも小さい正の整数(n - k は偶数) |
t | 符号の誤り訂正能力 | (n - k) / 2 |
生成多項式-年代tr在g>関数rsgenpoly
は,リ,ド·ソロモン符号に対する生成多項式を作成します。rsgenpoly
は,多項式の係数を変数の<年代p一个nclass="emphasis">“降べき”の順にリストするガロア行ベクトルを使用して生成多項式を表します。各シンボルにmビットがある場合は,ガロア行ベクトルは体<年代up>米年代up>)に属します。たとえば,次のコマンド
R = rsgenpoly(15,13)
r = GF(2^4)数组。原始多项式= D^4+D+1(19十进制)数组元素= 1 6 8
このコマンドにより,[15,13]リ.ド·ソロモン符号に対する生成多項式はx .<年代up>2年代up>+ (<年代up>2年代up>+ a) x + (a<年代up>3.年代up>)となります。ここで,一个はGF (16)に対する既定の原始多項式の根です。
生成多項式の代数表現年代tr在g>
rsgenpoly
が生成する生成多項式の形式は,(x - a<年代up>b年代up>x - a<年代up>b + 1年代up>)...(X-一个<年代up>b + 2 t - 1年代up>)です。ここで,bは整数、A はガロア体に対する原始多項式の根、t は(n - k) / 2
です。bの既定値は1です。rsgenpoly
の出力は,要素の乗算とxのべき乗の収集の結果です。以下の例は,b = 1を使用して,[15、13]リード・ソロモン符号の場合にこの式をチェックします。
N = 15;A = gf(2,log2(n+1));<年代p一个n年代tyle="color:#228B22">原始多项式的%根年代p一个n>F1 = [1 a];F2 = [1 a^2];<年代p一个n年代tyle="color:#228B22">%构成生成器多项式的因子年代p一个n>F = conv(f1,f2)<年代p一个n年代tyle="color:#228B22">%生成器多项式,与上面r相同。年代p一个n>
リ,ド·ソロモン符号の作成と復号化
RS编码器
系统对象およびRS译码器
系统对象は,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">リ,ド,ソロモン符号のワ,ドの表現一个>と<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">リ、ド、ソロモン符号のパラメ、タ、一个>で説明したデ,タを使用してリ,ド·ソロモン符号を作成し,復号化します。
この節では,RS编码器
系统对象およびRS译码器
系统对象の使用方法を説明します。トピックは,以下のとおりです。
Matlabでのリ.ド·ソロモン符号化の構文-年代tr在g>以下の例は,[15、13]リード・ソロモン符号を使用してデータを符号化および復号化する複数の方法を示します。この例から,以下のタスクを実行できることがわかります。
異なる生成多項式を作成するために
rsgenpoly
を使用してコ,ドの生成多項式を変更する女朋友
の入力引数を使用して,シンボルを含むガロア体の原始多項式を変更する末尾(既定)または先頭を選択して,符号語内のパリティシンボルの位置を変更する
この例では,RS编码器
系统对象とRS译码器
系统对象の対応する構文が,最初の入力引数を除き同じ入力引数を使用することも示します。
M = 4;<年代p一个n年代tyle="color:#228B22">%每个符号中的比特数年代p一个n>N = 2^m-1;K = 13;<年代p一个n年代tyle="color:#228B22">%码字长度和消息长度年代p一个n>MSG = randi([0 m-1],4*k,1);<年代p一个n年代tyle="color:#228B22">% 4条随机整数消息年代p一个n>最简单的编码语法年代p一个n>hEnc = com . rsencoder (n,k);hDec = com . rsdecoder (n,k);c1 = step(hEnc, msg);d1 = step(hDec, c1);<年代p一个n年代tyle="color:#228B22">改变代码的生成器多项式。年代p一个n>释放(hEnc),释放(hDec)。GeneratorPolynomialSource =<年代p一个n年代tyle="color:#A020F0">“属性”年代p一个n>;hDec。Gener一个torPolynomialSource =<年代p一个n年代tyle="color:#A020F0">“属性”年代p一个n>;hEnc。Gener一个torPolynomial = rsgenpoly(n,k,19,2); hDec.GeneratorPolynomial = rsgenpoly(n,k,19,2); c2 = step(hEnc, msg); d2 = step(hDec, c2);<年代p一个n年代tyle="color:#228B22">改变GF(16)的原始多项式。年代p一个n>释放(hEnc),释放(hDec)。PrimitivePolynomialSource =<年代p一个n年代tyle="color:#A020F0">“属性”年代p一个n>;hDec。Pr我米我t我vePolynomialSource =<年代p一个n年代tyle="color:#A020F0">“属性”年代p一个n>;hEnc。Gener一个torPolynomialSource =<年代p一个n年代tyle="color:#A020F0">“汽车”年代p一个n>;hDec。Gener一个torPolynomialSource =<年代p一个n年代tyle="color:#A020F0">“汽车”年代p一个n>;hEnc。Pr我米我t我vePolynomial = [1 1 0 0 1]; hDec.PrimitivePolynomial = [1 1 0 0 1]; c3 = step(hEnc, msg); d3 = step(hDec, c3);<年代p一个n年代tyle="color:#228B22">检查解码工作是否正确。年代p一个n>CHK = isequal(d1,msg) & isequal(d2,msg) & isequal(d3,msg)<年代p一个n年代tyle="color:#228B22">下面的代码显示了如何执行编码和解码年代p一个n>%操作,如果选择将奇偶校验符号放在前面。年代p一个n>转换带有附加奇偶校验符号的编码数据的步骤年代p一个n>使用前置奇偶校验符号对数据进行编码年代p一个n>C31 =重塑(c3, n, []);C32 = circshift(c31,n-k);C3_prepend = c32(:);<年代p一个n年代tyle="color:#228B22">% RS用前置奇偶校验符号编码数据年代p一个n>使用前置奇偶校验符号转换已编码数据的步骤年代p一个n>%以在解码之前附加奇偶校验符号对数据进行编码年代p一个n>C34 =重塑(c3_prepend, n, []);C35 = circshift(c34,k);C3_append = c35(:);<年代p一个n年代tyle="color:#228B22">% RS用附加的奇偶校验符号编码数据年代p一个n>检查前缀到追加的转换是否正确工作。年代p一个n>d3_append = step(hDec,c3_append);CHK = isequal(msg,d3_append)
出力は以下のようになります。
CHK = 1
Matlabを使用したリ.ド·ソロモン符号の誤りの検出と訂正-年代tr在g>以下の例は,誤りのあるコ,ドの復号化結果を示します。この例では,デ,タを符号化し,各符号語に誤りを加え,RS译码器
系统对象を使用して,ノescズを含む符号の復号化を試みます。
M = 3;<年代p一个n年代tyle="color:#228B22">%每个符号的比特数年代p一个n>N = 2^m-1;K = 3;<年代p一个n年代tyle="color:#228B22">%码字长度和消息长度年代p一个n>T = (n-k)/2;<年代p一个n年代tyle="color:#228B22">代码的纠错能力年代p一个n>Nw = 4;<年代p一个n年代tyle="color:#228B22">要处理的字数年代p一个n>MSGW = randi([0 n],nw*k,1);<年代p一个n年代tyle="color:#228B22">%随机的k符号消息年代p一个n>hEnc = com . rsencoder (n,k);hDec = com . rsdecoder (n,k);c = step(hEnc, msgw);<年代p一个n年代tyle="color:#228B22">编码数据。年代p一个n>噪声= (1+randi([0 n-1],nw,n)).*randerr(nw,n,t);<年代p一个n年代tyle="color:#228B22">每个码字出错% t年代p一个n>噪声=噪音';吵闹=吵闹(:);cnoise = gf(c,m) + noise;<年代p一个n年代tyle="color:#228B22">在gf(m)算法下给代码添加噪声。年代p一个n>[dc nerrs] = step(hDec, cnois .x);<年代p一个n年代tyle="color:#228B22">解码有噪声的代码。年代p一个n>检查解码工作是否正确。年代p一个n>isequal nerrs(直流,msgw)<年代p一个n年代tyle="color:#228B22">找出hDec更正了多少错误。年代p一个n>
ノesc escズ値の配列には,1 esc escから2 ^ m
の整数が含まれます。c
がGF (2 ^ m
)内のガロア体配列であるため,加算演算C +噪声
はガロア体gf (2 ^ m
)上で行われます。
例からの出力は以下のようになります。答
が0以外の値である場合,復号化器が誤りを含む符号語を訂正して元のメッセージを復元できたことを示します。ベクトルnerrs
の値は,復号化器が各符号語においてt
個の誤りを訂正したことを示します。
Ans = 1
Nerrs = 2 2 2 2
リド·ソロモン符号語内での過度のノズ-年代tr在g>前の例では,RS编码器
系统对象によってすべての誤りが訂正されましたが。しかし,各リ,ド·ソロモン符号の誤り訂正能力には限界があります。ノイズが大きいために,正しい符号語から誤りを含む符号語までのハミング距離が非常に大きい場合,以下のいずれかになります。
誤りを含む符号語が,正しい符号語“以外”<年代p一个nclass="emphasis">の有効な符号語の近似になる。復号化器は,他の符号語に対応するメッセ,ジを出力します。
誤りを含む符号語は,正常な復号化の符号語との距離が近くない。この状況は,“復号化失敗”<年代p一个nclass="emphasis">と呼ばれます。復号化器は,誤りを含む符号語からパリティ位置のシンボルを削除し,残りのシンボルを出力します。
両方の場合とも,復号化器は誤ったメッセ,ジを出力します。ただし,RS译码器
系统对象は2番目の出力で値-1
も返すので,復号化失敗がい発生するのかを知ることができます。
符号語にノ▪▪ズが多すぎて復号化に失敗する場合に▪▪いて調べるには,前の例を変更して噪音
を次のように定義します。
噪音=(1 +兰迪([0 n - 1], nw, n))。* randerr (nw n t + 1);<年代p一个n年代tyle="color:#228B22">% t+1个错误/行年代p一个n>
短縮リド·ソロモン符号の作成-年代tr在g>リ,ド·ソロモン符号化器は,整数mに対して<年代up>米年代up>-1の符号語長を使用します。短縮リ,ド·ソロモン符号の符号語長は<年代up>米年代up>-1ではありません。短縮 [n
,k
[n .]リ.ド·ソロモン符号は,暗黙的に[n .<年代ub>1年代ub>k<年代ub>1年代ub>]符号化器を使用します。ここで,
n<年代ub>1年代ub>= 2<年代up>米年代up>- 1, mはシンボルあたりのビット数です。
k<年代ub>1年代ub>= k + (n<年代ub>1年代ub>- n)
RS编码器
系统对象では,非短縮符号用と同じ構文で短縮符号がサポ,トされます。短縮符号を使用することを明示的に示す必要はありません。
hEnc = com . rsencoder (7,5);ordinarycode = step(hEnc,[1 1 1 1 1 1]');hEnc = com . rsencoder (5,3);shortenedcode = step(hEnc,[1 1 1]');
RS编码器年代tr在g>
系统对象による短縮符号の作成方法年代tr在g>
短縮符号を作成する際,RS编码器
系统对象では以下のステップを実行します。
各メッセジの前に0を付加する
有効な符号語長と目的の誤り訂正能力をもつリード・ソロモン符号化器を使用して,0を付加されたメッセージを符号化する
各符号語の非パリティシンボルから余分な0を削除する
次の例はこのプロセスを説明します。
N = 12;K = 8;<年代p一个n年代tyle="color:#228B22">缩短后的代码的长度年代p一个n>M = ceil(log2(n+1));<年代p一个n年代tyle="color:#228B22">%每个符号的比特数年代p一个n>MSG = randi([0 2^m-1],3*k,1);<年代p一个n年代tyle="color:#228B22">% 3个k符号单词的随机数组年代p一个n>hEnc = com . rsencoder (n,k);代码= step(hEnc, msg);<年代p一个n年代tyle="color:#228B22">创建一个缩短的代码。年代p一个n>手动缩短,只是为了展示它如何工作。。年代p一个n>N_pad = 2^m-1;<年代p一个n年代tyle="color:#228B22">%实际编码器中的码字长度年代p一个n>K_pad = k+(n_pad-n);<年代p一个n年代tyle="color:#228B22">%实际编码器中的消息字长度年代p一个n>hEnc = com . rsencoder (n_pad,k_pad);Mw =重塑(msg,k,[]);<年代p一个n年代tyle="color:#228B22">每个列向量表示一个消息字年代p一个n>Msg_pad = [0 (n_pad-n,3);mw);<年代p一个n年代tyle="color:#228B22">在每个单词前加0。年代p一个n>Msg_pad = Msg_pad (:);code_pad = step(hEnc,msg_pad);<年代p一个n年代tyle="color:#228B22">编码填充词。年代p一个n>Cw =重塑(code_pad,2^m-1,[]);<年代p一个n年代tyle="color:#228B22">每个列向量表示一个码字年代p一个n>Code_eqv = cw(n_pad-n+1:n_pad,:);<年代p一个n年代tyle="color:#228B22">除去多余的0。年代p一个n>Code_eqv = Code_eqv (:);Ck = isequal(code_eqv,code);<年代p一个n年代tyle="color:#228B22">返回true(1)。年代p一个n>
生成多項式の決定
巡回,bch,リ,ド·ソロモン符号に対する生成多項式を求めるには,それぞれ関数cyclpoly
、bchgenpoly
,またはrsgenpoly
を使用します。次のコマンドを見てみましょう。
genpolyCyclic = cyclpoly(15,5)<年代p一个n年代tyle="color:#228B22">% 1 + X X ^ ^ 5 + 10年代p一个n>genpolyBCH = bchgenpoly(15,5)<年代p一个n年代tyle="color:#228B22">% x x ^ ^ 10 + 8 + x x ^ ^ 5 + 4 + x ^ 2 + x + 1年代p一个n>genpolyRS = rsgenpoly(15,5)
これらのコマンドは,異なるタ。出力は以下のようになります。
genpolycycle = 1 0 0 0 0 1 0 0 0 0 1 genpolyBCH = GF(2)数组。数组元素= 1 0 1 0 0 1 1 0 1 1 genpolyRS = GF(2^4)数组。原始多项式= D^4+D+1(19十进制)数组元素= 1 4 8 10 12 9 4 2 12 2 7
これらの出力の形式は,次のように変わります。
cyclpoly
は,多項式の係数を変数の“昇べき”<年代p一个nclass="emphasis">の順にリストする整数の行ベクトルを使用して,生成多項式を表します。bchgenpoly
とrsgenpoly
は,多項式の係数を変数の“降べき”<年代p一个nclass="emphasis">の順にリストするガロア行ベクトルを使用して,生成多項式を表します。rsgenpoly
は,二元体gf(2)以外のガロア体の係数を使用します。これらの係数の意味の詳細は,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">整数をガロア体にどのように対応づけるか一个>と<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">ガロア体上の多項式一个>を参照してください。
生成多項式の非一意性-年代tr在g>メッセ,ジ長と符号語長のペアによって,生成多項式が一意に決定されない場合があります。上記の例の関数の構文には,指定する特定の制約を満たす生成多項式を取り出すためのオプションも含まれています。構文のオプションの詳細は,関数のリファレンスペ,ジを参照してください。
生成多項式の代数表現-年代tr在g>bchgenpoly
とrsgenpoly
によって生成される生成多項式の形式は,(x - a<年代up>b年代up>x - a<年代up>b + 1年代up>)...(X-一个<年代up>b + 2 t - 1年代up>)です。ここで,一个は適切なガロア体に対する原始元で、b と t は整数です。この式の詳細は、関数のリファレンス ページを参照してください。
短縮,パンクチャ,および消去を使用するリ,ド·ソロモンの例
このセクションでは,短縮,パンクチャ,および消去を使用した代表的なリード・ソロモン符号化例を,ますます複雑になる誤り訂正を含めて作成します。
短縮とパンクチャを使用した符号化器例-年代tr在g>次の図は,短縮とパンクチャを使用した(7,3)リード・ソロモン符号化器の代表的な例を示しています。
この図では,メッセ,ジソ,スにより<年代ub>1年代ub>我<年代ub>2年代ub>で指定される2つの情報シンボルが出力されます(BCHの例では,シンボルはバイナリビットにすぎません)。この符号は短縮(7,3)符号であるため,情報シンボルの前にゼロを追加しなければなりません。これにより,0i<年代ub>1年代ub>我<年代ub>2年代ub>という3のシンボルから構成されるメッセジが生成されます。変更されたメッセ,ジシ,ケンスは,rsで符号化され,追加された情報ゼロはそのあと削除されます。その結果我<年代ub>1年代ub>我<年代ub>2年代ub>P<年代ub>1年代ub>P<年代ub>2年代ub>P<年代ub>3.年代ub>P<年代ub>4年代ub>が生成されます(この例では,パリティビットは符号語の末尾にあります)。
パンクチャ操作は,パンクチャベクトルによって制御されます。ここでは,このパンクチャベクトルは1011です。パンクチャベクトル内では,1はシンボルが保持され,0はシンボルが破棄されたことを意味します。この例では,パンクチャ操作により 2 番目のパリティ シンボルが削除され、I<年代ub>1年代ub>我<年代ub>2年代ub>P<年代ub>1年代ub>P<年代ub>3.年代ub>P<年代ub>4年代ub>という最終的なベクトルが生成されます。
短縮とパンクチャを使用した復号化器例-年代tr在g>次の図は,短縮符号語およびパンクチャ符号語でのrs符号化器の動作を示しています。
このケ,スは,短縮とパンクチャを使用したrs符号化器の図に示した符号化器の動作に対応します。前の図に示したとおり,符号化器は(5,2)符号語を受信します。これは(7,3)符号語から1シンボル短縮され,さらにその1シンボルはパンクチャされているためです。
最初のステップとして,復号化器は,符号語の第2のパリティ位置にEで指定された消去を追加します。これは,パンクチャベクトル1011に対応します。前の図に示したとおり,ゼロを追加することは短縮を意味します。1回の消去は、4 つの消去を訂正できる符号の消去訂正機能を超えません。復号化操作により、3 つのシンボルで構成されるメッセージ DI<年代ub>1年代ub>我<年代ub>2年代ub>が生成されます。前の図のように最初のシンボルは切り捨てられるので,最終出力は<年代ub>1年代ub>我<年代ub>2年代ub>になります。
短縮,パンクチャ,および消去を使用した符号化器例-年代tr在g>次の図は,パンクチャされ,短縮符号語に対して動作しながら,受信機によって生成された消去を生成する復号化器の様子を示しています。
この図では,復調器は符号化器が送信した<年代ub>1年代ub>我<年代ub>2年代ub>P<年代ub>1年代ub>P<年代ub>3.年代ub>P<年代ub>4年代ub>ベクトルを受信します。復調器は,受信した5つのシンボルのうち2つは,信頼できないので消去されることを宣言するため,シンボル2と5は消去と見なされます。外部ソスによって提供された01001ベクトルは,これらの消去を示しています。消去ベクトル内では,1はシンボルが消去シンボルで置き換えられること,0はシンボルが変更なしで渡されることを意味します。
復号化器のブロックは,符号語と消去ベクトルを受信し,ベクトル01001で示される消去を実行します。消去ベクトル内では,1はシンボルが消去シンボルで置き換えられること,0はシンボルが変更なしで渡されることを意味します。結果の符号語ベクトルは,i<年代ub>1年代ub>EP<年代ub>1年代ub>P<年代ub>3.年代ub>Eになります。ここで,Eは消去シンボルです。
符号語は,符号化操作で使用したパンクチャベクトル(1011など)に基づきデパンクチャされます。したがって,消去シンボルがp<年代ub>1年代ub>とP<年代ub>3.年代ub>の間に挿入され,i<年代ub>1年代ub>EP<年代ub>1年代ub>EP<年代ub>3.年代ub>Eという符号語ベクトルが生成されます。
復号化の直前に,情報ベクトルの冒頭にゼロを追加することは短縮を意味します。結果のベクトルは,0i<年代ub>1年代ub>EP<年代ub>1年代ub>EP<年代ub>3.年代ub>Eになるため,(7,3)符号語はBerlekampアルゴリズムに送られます。
この符号語は復号化され,3のシンボルで構成されるdi<年代ub>1年代ub>我<年代ub>2年代ub>(ここで,dはダミシンボルを示します)というメッセジが生成されます。最後に,メッセ,ジベクトルからdシンボルを削除することは,短縮を意味し,元の<年代ub>1年代ub>我<年代ub>2年代ub>ベクトルが生成されます。
詳細は,<一个href="//www.tatmou.com/jp/help/comm/ug/reed-solomon-coding-with-erasures-punctures-and-shortening.html" class="a">金宝appSimulinkでの消失,パンクチャ,および短縮を使用したリ,ド·ソロモン符号化一个>の例を参照してください。
LDPC符号
低密度パリティチェック(ldpc)コ,ドは,以下を伴う線形の誤り制御符号です。
スパ,スパリティチェック行列
シャノン限界に近いパフォマンスを達成できる長いブロック長(<一个href="//www.tatmou.com/jp/help/comm/ref/ldpcencoder.html">LDPC编码器年代p一个n>および<一个href="//www.tatmou.com/jp/help/comm/ref/ldpcdecoder.html">LDPC译码器年代p一个n>を参照)
通信工具箱は仿真软件ブロックとMATLABオブジェ金宝appクトを使用してLDPC符号を実行します。
復号化処理は反復して行われます。反復数が小さすぎると,アルゴリズムが収束しないことがあります。モデルの適切な値を見けるために,多くの反復を行って実験する必要があることもあります。復号化アルゴリズムの詳細は,<一个href="//www.tatmou.com/jp/help/comm/ref/ldpcdecoder.html" class="a">復号化アルゴリズム一个>を参照してください。
他のコーデックと違い,復号化器は対数尤度比(LLR)を必要とするので,LDPC符号化器の出力にLDPC復号化器を直接接続することはできません。従って,llrを計算するために復調器を使用できます。
さらに,他の復号化器と違い,LDPC復号化器の出力が一部のパリティチェックを満たさない可能性もあります。
ガロア体の計算
“ガロア体”は,有限個の要素をも代数体です。2<年代up>米年代up>個の要素をもガロア体は,誤り制御符号化で利用され,gf (2<年代up>米年代up>)と記されます。この節では,2<年代up>米年代up>個の要素をもいて説明します。ここで,米は1から 16 までの整数です。この章には、以下の節があります。
奇数個の要素をもガロア体を使用する必要がある場合は,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">奇数個の元をもガロア体一个>を参照してください。
ガロア体の要素からなる配列を扱う特定の関数の詳細は,MATLABまたは通信工具箱ソフトウェア用ドキュメンテーションのオンラインリファレンスページを参照してください。
メモ年代tr在g>
ガロア体オブジェクトは复制
メソッドをサポ,トしません。
ガロア体への一般化が簡単に記述できるMATLAB関数についてのリファレンスページは,MATLABドキュメンテーションの項目と重複するため,このマニュアルにはありません。
ガロア体の用語
本書ではガロア体の説明にいて,文献と整合性のない用語をいくか利用します。ここで利用される定義は,范·林特<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">[4]一个>に記述されています。
GF (2<年代up>米年代up>)の<年代p一个nclass="emphasis">“原始元”は,gf (2<年代up>米年代up>)の非ゼロ元の巡回生成を行います。これは,gf (2<年代up>米年代up>)のすべての非ゼロ元は,gf (2<年代up>米年代up>)の原始元の整数乗として表されることを意味します。
GF (2<年代up>米年代up>)の<年代p一个nclass="emphasis">“原始多項式”は,gf (2<年代up>米年代up>)の原始元の最小多項式です。これは,gf (2<年代up>米年代up>)の根としてある原始元をも最小の非ゼロ次数のバナリ係数多項式です。そのため,原始多項式は次数mをも,既約です。
この定義は,原始元が対応する原始多項式の根であることを意味しています。
ガロア体の元の表現
この節の概要-年代tr在g>この節では,ガロア体の元を表すmatlab式である“ガロア体配列”<年代p一个nclass="emphasis">の作成方法にいて説明します。この節では,MATLAB技術計算ソフトウェアが表現で使う数値をどのように解釈するかについても説明し、例も示します。
ガロア体配列の作成-年代tr在g>ガロア体gf (2 ^ m
)のデータから作業を始めるために,体に関する重要な情報とデータを関連付けることによって,コンテキストを設定しなければなりません。関数女朋友
は,この関連付けを行い,matlab上でガロア体配列を作成します。この関数は,入力として以下を受け取ります。
ガロア体デ,タ
x
。これは,要素が0から2 ^ m - 1
の間の整数であるmatlab配列です。(<年代p一个nclass="emphasis">“オプション”)
x
が体gf (2 ^ m
)上にあることを示す整数米
。米
の有効な値は1と16の間の値です。既定値は1です。これは,体が GF(2) であることを意味します。(<年代p一个nclass="emphasis">“オプション”)
x
内の表現でgf (2 ^ m
)のどの原始多項式を利用しているかを示す正の整数。この入力引数を省略する場合は,女朋友
はGF (2 ^ m
)に対する既定の原始多項式を使います。この引数にいての詳細は,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">原始多項式と元の表現一个>を参照してください。
関数女朋友
の出力は,matlabが,整数の配列ではなくガロア体配列として認識する変数です。結果として,変数を操作すると,matlabは指定したガロア体内で動作します。たとえば,関数日志
をガロア体配列に適用する場合,MATLABは,実数または複素数の体ではなく,ガロア体内で対数を計算します。<年代p一个nclass="emphasis">
MATLAB<年代tr在g class="emphasis bold">がガロア体配列を暗黙的に作成する場合年代tr在g>
ガロア体配列の演算の中には,複数の引数が必須のものがあります。1つの引数にはガロア体配列を指定し、もう 1 つには通常の MATLAB 配列を指定する場合、MATLAB は両方を同じ体のガロア体配列と解釈します。つまり、通常の MATLAB 配列に対して関数女朋友
を暗黙的に呼び出します。この暗黙的な呼び出しでは,関数女朋友
への参照がいくらか省略されるため,構文が簡略化されます。簡略化の例にいては,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">例:加算と減算一个>を参照してください。
例:ガロア体変数の作成-年代tr在g>下記のコ,ドは,元が体gf(4)にある行ベクトルを作成し,行自身を加算します。
X = 0:3;<年代p一个n年代tyle="color:#228B22">包含整数的行向量年代p一个n>M = 2;<年代p一个n年代tyle="color:#228B22">GF(2^2),或者GF(4)。年代p一个n>A = gf(x,m)<年代p一个n年代tyle="color:#228B22">在GF(2^m)中创建一个伽罗瓦数组。年代p一个n>B = a + a<年代p一个n年代tyle="color:#228B22">将a加到自身,创建b。年代p一个n>
出力は以下のようになります。
a = GF(2^2)数组。原始多项式= D^2+D+1(7十进制)数组元素= 0 1 2 3 b = GF(2^2)数组。原始多项式= D^2+D+1(7十进制)数组元素= 0 0 0 0 0
出力は,名前が一个
、b
というガロア体配列の値を示します。各出力セクションは,次を示します。
Gf (2^2) = Gf(4)という変数を含む体
体に対する原始多項式.この場合,gf(4)に対するルボックスの既定の原始多項式です。
変数を含むガロア体の値からなる配列。特に,
一个
の配列要素は,ベクトルx
の要素であり,b
の配列要素はgf(4)の4のゼロです。
b
を作成するコマンドは,変数一个
をガロア体配列として定義し,通常の+
演算子を利用することによって一个
自身を加算する方法を示します。MATLABは,体GF (4)においてベクトル化された加算を行います。出力は、次を示します。
一个
と比較すると,b
は同じ体にあり,同じ原始多項式を利用します。和b
を定義する際に体を示す必要はありません。これは,matlabが加算の定義一个
の情報を記憶しているためです。b
の配列要素は,ゼロです。これは,<年代p一个nclass="emphasis">“標数2”のガロア体内の任意の値同士の和がゼロであるためです。この結果は,無限の整数の体での加算を表す和X + X
とは異なります。
例:gf(8)の元の表現-年代tr在g>ガロア体配列内の配列要素が何を意味するかを示すために,下記の表は,GF(8)の元を整数および原始元一个の多項式としてリストします。この表は,次のようなガロア体配列を解釈するのに役立ます。
Gf8 = gf([0:7],3);<年代p一个n年代tyle="color:#228B22">GF中的% Galois向量(2^3)年代p一个n>
整数表現 | バ@ @ナリ表現 | Gf(8)の元 |
---|---|---|
0 | 000 | 0 |
1 | 001 | 1 |
2 | 010 | 一个 |
3. | 011 | A + 1 |
4 | One hundred. | 一个<年代up>2年代up> |
5 | 101 | 一个<年代up>2年代up>+ 1 |
6 | 110 | 一个<年代up>2年代up>+一个 |
7 | 111 | 一个<年代up>2年代up>+ a + 1 |
逆にgf (2 ^ m
)の任意の元は,次数が最大m - 1
のバesc escナリ多項式として表され,体の原始元で評価されます。多項式の米
組(ベクトル表現)の係数は,0から2 ^ m
の整数のバ@ @ナリ表現に対応します。
下記は,2進形式で表された整数xとガロア体の元の対応をシンボリックに示しています。各b<年代ub>k年代ub>はゼロまたは1で,一个は原始元です。
例:原始元の表現-年代tr在g>下記のコ,ドは,体gf (2<年代up>4年代up>)上の原始元を表す変数alph
を定義します。
M = 4;<年代p一个n年代tyle="color:#228B22">或取m的任意正整数。年代p一个n>alpha = gf(2,m)<年代p一个n年代tyle="color:#228B22">GF中的原始元素% (2^m)年代p一个n>
出力は以下のようになります。
alpha = GF(2^4)数组。原始多项式= D^4+D+1(19十进制)数组元素= 2
ガロア体配列alph
は,以下の対応により,原始元を表します。
女朋友
構文で指定された整数22の2進表現10(または4ビットを利用した0010)
多項式a + 0。ここで一个は,この体の原始元です (または、A の 4 つの低次のべき乗を使った 0A<年代up>3.年代up>+ 0<年代up>2年代up>+ a + 0)
原始多項式と元の表現-年代tr在g>この節では,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">ガロア体配列の作成一个>に基づき,ガロア体配列の作成時に独自仕様の原始多項式を指定する方法を説明します。トピックは,以下のとおりです。
既定でない原始多項式を使って多くの計算を実行する場合は,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">既定でない原始多項式と計算速度一个>を参照してください。
原始多項式の指定年代tr在g>
ガロア体配列の作成時に独自仕様の原始多項式を指定するには,
C = gf(5,4,25)<年代p一个n年代tyle="color:#228B22">% 25表示GF(16)的原始多项式。年代p一个n>
を使用します。
c1 = gf (4);<年代p一个n年代tyle="color:#228B22">GF(16)使用默认的原始多项式。年代p一个n>
は,使用しません。この場合25
である追加入力引数は,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">整数をガロア体にどのように対応づけるか一个>で説明した表現と同じ方法で,体gf (2 ^ m
)の原始多項式を指定します。この場合,整数 25 は、2 進表現 11001 に対応し、多項式 D<年代up>4年代up>+ D<年代up>3.年代up>+ 1に対応します。
メモ年代tr在g>
原始多項式の指定時に,入力引数は,不要な先頭のゼロを含まずに,正確にm + 1
ビットを使った2進表現でなければなりません。言い換えると,gf (2 ^ m
)に対する原始多項式は,常に次数米
です。
入力引数を利用して原始多項式を指定する際には,出力は整数値と多項式表現を示すことによって,選択を反映します。
D = gf([1 2 3],4,25)
d = GF(2^4)数组。原始多项式= D^4+D^3+1(25十进制)数组元素= 1 2 3
メモ年代tr在g>
ガロア体配列を定義した後で,MATLABが配列要素を解釈する原始多項式を変更することはできません。
原始多項式を求める年代tr在g>
GF (2 ^ m
)に対する原始多項式を求めるために関数primpoly
を,また,多項式がgf (2 ^ m
)に対して原始多項式であるかどうかを決定するために,関数isprimitive
を利用することができます。次のコ,ドにより実証します。
M = 4;Defaultprimpoly = primpoly(m)<年代p一个n年代tyle="color:#228B22">GF(16)的默认原始多边形年代p一个n>Allprimpolys = primpolys (m,<年代p一个n年代tyle="color:#A020F0">“所有”年代p一个n>)<年代p一个n年代tyle="color:#228B22">GF(16)的所有原始多边形年代p一个n>I1 = isprimitive(25)<年代p一个n年代tyle="color:#228B22">% 25可以是gf(…)中的prim_poly输入吗?年代p一个n>I2 = isprimitive(21)<年代p一个n年代tyle="color:#228B22">21可以是gf(…)中的prim_poly输入吗?年代p一个n>
出力は以下のようになります。
原始多项式(s) = D^4+D^1+1 defaultprimpoly = 19原始多项式(s) = D^4+D^1+1 D^4+D^3+1
Allprimpolys = 19 25 i1 = 1 i2 = 0
数値結果への既定でない原始多項式の影響年代tr在g>
ほとんどの体には,体の要素の表現のための原始多項式にいて複数の選択肢があります。関数女朋友
を使うとき,原始多項式を変更すると,配列要素の解釈が変わり,そのためガロア体配列へのその後の演算の結果も変わります。たとえば,原始元の指数形式は,原始多項式が体の元の表現にどのように影響を与えるかをわかりやすくします。
A11 = gf(2,3);<年代p一个n年代tyle="color:#228B22">使用默认的11的原始多项式。年代p一个n>A13 = gf(2,3,13);<年代p一个n年代tyle="color:#228B22">使用D^3+D^2+1作为原始多项式。年代p一个n>Z = a13。^3.+一个13.^2+ 1<年代p一个n年代tyle="color:#228B22">% 0,因为a13满足方程年代p一个n>Nz = a11。^3 + a11。^2 + 1<年代p一个n年代tyle="color:#228B22">% 0。A11不满足方程。年代p一个n>
下記の出力は,原始多項式が整数表現13
をもとき,ガロア体配列はある式を満たすことを示します。一方,原始多項式が整数表現11
をもときには,ガロア体配列は式を満たしません。
z = GF(2^3)数组。原始多项式= D^3+D^2+1(13个十进制)数组元素= 0 nz = GF(2^3)数组。原始多项式= D^3+D+1(11个十进制)数组元素= 6
この例を行ったときの出力は,ルックアップテ,ブルに関する警告を含む場合もあります。これは,13の既定でない原始多項式に関する計算を最適化するために関数gftable
を利用しなかった場合には正常です。
ガロア体の演算
この節の概要-年代tr在g>下記の表にリストされた通常のMATLAB演算子を使って,ガロア体配列に対する算術演算を実行することができます。ガロア体配列の組にいて演算を行うときは,配列は両方とも同じガロア体になければなりません。
操作 | 演算子 |
---|---|
加算 | + |
減算 | - |
要素単位の乗算 | . * |
行列乗算 | * |
要素単位の左除算 | 。/ |
要素単位の右除算 | 。\ |
行列の左除算 | / |
行列の右除算 | \ |
要素ごとのべき乗 | ^。 |
要素単位の対数 | 日志() |
正方ガロア行列のスカラ,整数による指数形式 | ^ |
ガロア体上の多項式の乗算と除算にいては,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">多項式の加算と減算一个>を参照してください。
例:加算と減算-年代tr在g>下記のコ,ドは2:のガロア体配列を加算し,gf(8)に対する加算テ,ブルを作成します。加算は,通常の+
演算子を利用します.下記のコ.ドは,gf(8)の元に1を加算した結果を求めるためにaddtb
配列に@ @ンデックスを付ける方法も示します。
M = 3;E = repmat([0:2^m-1],2^m,1);F = gf(e,m);<年代p一个n年代tyle="color:#228B22">创建一个Galois数组。年代p一个n>Addtb = f + f'<年代p一个n年代tyle="color:#228B22">将f加到它自己的矩阵转置。年代p一个n>Addone = addtb(2,:);<年代p一个n年代tyle="color:#228B22">将第二行分配给Galois向量addone。年代p一个n>
出力は以下のようになります。
addtb = GF(2^3)数组。本原多项式= ^ 3 + D + 1(十进制)11日数组元素= 0 1 2 3 4 5 6 7 1 0 3 2 5 4 7 6 2 3 0 6 7 5 4 3 2 1 0 7 6 5 4 0 1 2 3 4 5 6 7 5 4 7 6 1 0 3 2 6 7 4 2 3 5 0 1 7 6 5 4 3 2 1 0
この加算テ,ブルの解釈の例として,addtb
配列の(7,4)エントリは,gf (3)
プラスgf (3)
がgf (3)
に等しいことを示します。同様に,元<年代up>2年代up>+ aプラス元a +1は,元a<年代up>2年代up>+1に等しくなります。この等価性は6の2進表現が110年3の2進表現が011年5の2進表現が101であることから生じます。
+
を-
で置き換えることによって得られる減算テ,ブルは,addtb
と同じです。これは,減算と加算は<年代p一个nclass="emphasis">“標数2”の体では同じ演算であるためです。実際に,addtb
の主対角の0は,gf(8)に対してこの事実を示しています。
構文の簡略化年代tr在g>
下記のコードは,スカラー拡張と通常のMATLAB配列からガロア体配列を暗黙的に作成する方法を示します。ガロア体配列h
とh1
は同一ですが,h
の作成は簡単な構文を使います。
G = gf(ones(2,3),4);<年代p一个n年代tyle="color:#228B22">显式创建一个Galois数组。年代p一个n>H = g + 5;<年代p一个n年代tyle="color:#228B22">将gf(5,4)加到g的每个元素上。年代p一个n>H1 = g + gf(5*ones(2,3),4)<年代p一个n年代tyle="color:#228B22">%与h相同。年代p一个n>
出力は以下のようになります。
h1 = GF(2^4)数组。原始多项式= D^4+D+1(19十进制)数组元素= 4 4 4 4 4 4 4 4 4 4
1+5はガロア体では4として出力されることに注目します。5は多項式表現a .<年代up>2年代up>+1を表し,gf(16)の1+(a<年代up>2年代up>+1)は<年代up>2年代up>であるので,これは真になります。さらに,多項式表現<年代up>2年代up>を表す整数は4です。
例:乗算-年代tr在g>下記の例は,ガロア体配列の個々の元を. *
演算子を使って乗算します。その後で,*
演算子を使って行列乗算を行います。要素単位の乗算は,サイズがその入力と一致する配列を生成します。一方、行列乗算は行ベクトルと列ベクトルの行列の積であるため、ガロア スカラーを生成します。
M = 5;Row1 = gf([1:2:9],m);Row2 = gf([2:2:10],m);Col = row2';<年代p一个n年代tyle="color:#228B22">转置创建列数组。年代p一个n>Ep = row1 .* row2;<年代p一个n年代tyle="color:#228B22">%元素产品。年代p一个n>Mp = row1 * col;<年代p一个n年代tyle="color:#228B22">%矩阵乘积。年代p一个n>
Gf(8)に対する乗算テ,ブル年代tr在g>
別の例として,下記のコードは,行列乗算を使って2つのガロアベクトルを乗算します。結果は,GF(8)に対する乗算テーブルです。
M = 3;Els = gf([0:2^m-1]',m);Multb = els * els'<年代p一个n年代tyle="color:#228B22">用els乘以它自己的矩阵转置。年代p一个n>
出力は以下のようになります。
multb = GF(2^3)数组。本原多项式= ^ 3 + D + 1(十进制)11日数组元素= 0 0 0 0 0 0 0 0 0 1 2 3 4 5 6 7 0 2 4 6 3 1 7 5 0 3 4 5 6 7 1 2 0 4 1 3 7 6 2 5 0 5 1 4 2 7 3 6 0 6 7 1 5 3 2 4 0 7 5 1 2 6 4 3
例:除算-年代tr在g>下記の例は,個々の元および配列の乗法的な逆数を計算することによって,ガロア体での4つの除算演算子を示します。发票
を利用,あるいは-1の指数を利用して逆数を計算することもできます。
要素ごとの除算年代tr在g>
この例では,。/
および。\
演算子を使ってガロア体配列の個々の要素でそれぞれ1を除算します。これらの2の演算子は,入力引数の順序のみが異なります。各商ベクトルは,体の非ゼロ元の乗法的な逆数リストです。この例では,MATLABは,計算の前にスカラー 1 をサイズ新西兰
に拡張します。あるいは,同じサ▪▪▪ズの2▪▪▪の配列を引数として使うことができます。
M = 5;Nz = gf([1:2^m-1],m);<年代p一个n年代tyle="color:#228B22">字段的非零元素年代p一个n>Inv1 = 1 ./ nz;<年代p一个n年代tyle="color:#228B22">每个元素除以1。年代p一个n>Inv2 = nz .\ 1;<年代p一个n年代tyle="color:#228B22">使用。\操作符获得相同的结果。年代p一个n>
行列の除算年代tr在g>
この例では,/
および\
演算を使って正方ガロア体配列垫
で単位配列を除算します。各商行列は,垫
の乗法的逆数です。\
を使った等価な演算で転置演算子('
)がどのように現れるかに注目してください。正方行列に対しては,転置演算のシ,ケンスは不要ですが,非正方行列に対しては必要です。
M = 5;Mat = gf([1 2 3;4 5 6;7 8 9],m);Minv1 = eye(3) / mat;<年代p一个n年代tyle="color:#228B22">计算矩阵逆。年代p一个n>Minv2 = (mat' \ eye(3)')';<年代p一个n年代tyle="color:#228B22">使用操作符获得相同的结果。年代p一个n>
例:べき乗-年代tr在g>下記の例は,ガロア体配列の整数乗の計算方法を示します。ガロア体配列に対して行列のべき乗を行うには、底として正方ガロア体配列を使い、指数として (ガロアでなく) 通常の整数スカラーを使わなければなりません。
要素ごとのべき乗年代tr在g>
この例は,ガロア体の原始元一个のべき乗を計算します。次に,これらの別々に計算されたべき乗を使って、A で既定の原始多項式を評価します。0 という答えは、A が原始多項式の根であることを示します。^。
演算子は,配列の元を別々にべき乗します。
M = 3;Av = gf(2*ones(1,m+1),m);<年代p一个n年代tyle="color:#228B22">包含原始元素的行年代p一个n>exp = av .^ [0:m];<年代p一个n年代tyle="color:#228B22">将元素提升到不同的幂。年代p一个n>Evp = expa(4)+expa(2)+expa(1)<年代p一个n年代tyle="color:#228B22">计算D^3 + D + 1。年代p一个n>
出力は以下のようになります。
evp = GF(2^3)数组。原始多项式= D^3+D+1(11个十进制)数组元素= 0
行列のべき乗年代tr在g>
この例は,行列をpower -1まで上げることによって正方行列の逆を計算します。これは,正方行列を次方2と-2までも上げます。
M = 5;Mat = gf([1 2 3;4 5 6;7 8 9],m);Minvs = mat ^ (-1);<年代p一个n年代tyle="color:#228B22">%矩阵逆年代p一个n>Matsq = mat^2;<年代p一个n年代tyle="color:#228B22">%同席子*席子年代p一个n>Matinvssq = mat^(-2);<年代p一个n年代tyle="color:#228B22">%与minvs * minvs相同年代p一个n>
例:要素単位の対数-年代tr在g>下記のコ,ドは,ガロア体配列の要素の対数を計算します.出力は,gf(8)の<年代p一个nclass="emphasis">“非ゼロ元”を原始元のべき乗として表す方法を示します。体の元ゼロの対数は未定義です。
Gf8_nonzero = gf([1:7],3);<年代p一个n年代tyle="color:#228B22">GF(8)非零元素的%向量年代p一个n>Expformat = log(gf8_nonzero)<年代p一个n年代tyle="color:#228B22">%每个元素的对数年代p一个n>
出力は以下のようになります。
Expformat = 0 1 3 2 6 4
出力の解釈方法の例として,この例の各ベクトルの最後のエントリを考えます.gf(8)の元gf (7,3)
が以下のいずれかで表すことができると推定できます。
expformat
の最後の元を使った,a<年代up>5年代up>。7のバesc escナリ表現として111を使った<年代up>2年代up>+ + 1。詳細にいては,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">例:gf(8)の元の表現一个>を参照してください。
ガロア体の論理演算
この節の概要-年代tr在g>ガロア体配列に論理テストを適用し,論理配列を得ることができます。重要なテストタ▪▪プは,2▪▪のガロア体配列の等価性を調べることと,ガロア体配列内の<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">非ゼロ値を調べる一个>ことです。
等価性のテスト-年代tr在g>同じサ▪▪ズをも▪▪2▪▪のガロア体配列の対応する要素を比較するために,演算子= =
と~ =
を利用します。結果は,論理配列で,各要素は対応する要素ごとの比較が真または偽であることを示します。同じ演算子を利用してスカラーとガロア体配列を比較する場合は,MATLAB技術計算ソフトウェアはスカラーと配列の各要素を比較し,同じサイズの論理配列を生成します。
M = 5;R1 = gf([1:3],m);R2 = 1 ./ r1;Lg1 = (r1 .* r2 == [1 1 1])<年代p一个n年代tyle="color:#228B22">每个元素都等于1吗?年代p一个n>Lg2 = (r1 .* r2 == 1)<年代p一个n年代tyle="color:#228B22">与上面相同,使用标量展开年代p一个n>Lg3 = (r1 ~= r2)<年代p一个n年代tyle="color:#228B22">每个元素与其逆元素不同吗?年代p一个n>
出力は以下のようになります。
lg2 = 1 1 1 1 1 lg3 = 0 1 1 1
Isequalと==の比較年代tr在g>
配列全体を比較し,論理配列ではなく論理<年代p一个nclass="emphasis">“スカラ,”の結果を得るために,組み込み関数isequal
を利用することができます。しかし,isequal
は比較に対して厳格な規則を使い,以下を比較する場合には0
(错误)を出力します。
ガロア体配列と通常のmatlab配列(基となる配列要素の値が一致していても)
スカラ、と非スカラ、配列(配列内のすべての要素がスカラ、と一致しても)
下記の例は,= =
とisequal
の違いを示します。
M = 5;R1 = gf([1:3],m);R2 = 1 ./ r1;Lg4 = isequal(r1 .* r2, [1 1 1]);<年代p一个n年代tyle="color:#228B22">%假年代p一个n>Lg5 = isequal(r1 .* r2, gf(1,m));<年代p一个n年代tyle="color:#228B22">%假年代p一个n>Lg6 = isequal(r1 .* r2, gf([1 1 1],m));<年代p一个n年代tyle="color:#228B22">%真实年代p一个n>
非ゼロ値のテスト-年代tr在g>ガロアベクトル内,または複数行をもガロア体配列の列の非ゼロ値を調べるには,関数任何
または関数所有
を使います。これらの2つの関数は,基となる配列要素のみを考慮し,元がどのガロア体に含まれるかに関する情報を無視すること以外は,通常のMATLAB関数任何
および所有
と同様に機能します。例は、以下のとおりです。
M = 3;Randels = gf(randi([0 2^m-1],6,1),m);<年代p一个n年代tyle="color:#0000FF">如果年代p一个n>所有(randel)<年代p一个n年代tyle="color:#228B22">如果所有元素都是可逆的年代p一个n>Invels = randels .\ 1;<年代p一个n年代tyle="color:#228B22">计算元素的逆。年代p一个n>其他的年代p一个n>disp (<年代p一个n年代tyle="color:#A020F0">“至少有一个元素是不可逆的。”年代p一个n>);<年代p一个n年代tyle="color:#0000FF">结束年代p一个n>alpha = gf(2,4);Poly = 1 + alpha + alpha ^3;<年代p一个n年代tyle="color:#0000FF">如果年代p一个n>任何(聚)<年代p一个n年代tyle="color:#228B22">%如果poly包含非零值年代p一个n>disp (<年代p一个n年代tyle="color:#A020F0">不是1 + D + D^3的根年代p一个n>);<年代p一个n年代tyle="color:#0000FF">结束年代p一个n>代码= [0:4 4 0;3:7 4 5]<年代p一个n年代tyle="color:#0000FF">如果年代p一个n>(所有代码,2)<年代p一个n年代tyle="color:#228B22">每一行是否完全非零?年代p一个n>disp (<年代p一个n年代tyle="color:#A020F0">“两个码字都完全非零。”年代p一个n>);<年代p一个n年代tyle="color:#0000FF">其他的年代p一个n>disp (<年代p一个n年代tyle="color:#A020F0">"至少有一个码字包含零"年代p一个n>);<年代p一个n年代tyle="color:#0000FF">结束年代p一个n>
ガロア体の行列操作
ガロア体配列の基本操作-年代tr在g>ガロア体配列の基本的な配列操作を次の表に示します。これらの演算の機能は,同じ構文をもmatlab演算と同じです。
操作 | 構文 |
---|---|
場合によっては,明示的なインデックスをもつベクトルではなくコロン演算子を使った配列へのインデックス付け | (向量) または(向量,vector1) 。向量 および/またはvector1 は,ベクトルではなく”: になります。 |
配列転置 | 一个“ |
行列の連結 | [a, b] または[a, b] |
指定した対角要素をも配列の作成 | 诊断接头(向量) または诊断接头(向量,k) |
対角要素の抽出 | 诊断接头(a) または诊断接头(k) |
下三角部分の抽出 | 下三角阵(a) または下三角阵(k) |
上三角部分の抽出 | triu (a) またはtriu (k) |
配列の型の変更 | 重塑(k1, k2) |
下記のコ,ドはこれらの構文を利用します。
M = 4;A = gf([0:15],m);A (1:2) = [13 13];<年代p一个n年代tyle="color:#228B22">替换向量a中的某些元素。年代p一个n>B =重塑(a,2,8);<年代p一个n年代tyle="color:#228B22">创建2 × 8矩阵。年代p一个n>C = [b([1 1 2],1:3);(6)];<年代p一个n年代tyle="color:#228B22">创建4 × 3矩阵。年代p一个n>D = [c, a(1:4)'];<年代p一个n年代tyle="color:#228B22">创建4 × 4矩阵。年代p一个n>Dvec = diag(d);<年代p一个n年代tyle="color:#228B22">提取d的主对角线。年代p一个n>Dmat = diag(a(5:9));<年代p一个n年代tyle="color:#228B22">创建5 × 5对角线矩阵年代p一个n>Dtril = tril(d);<年代p一个n年代tyle="color:#228B22">提取上下三角形年代p一个n>Dtriu = triu(d);<年代p一个n年代tyle="color:#228B22">d的%部分。年代p一个n>
ガロア体配列に関する基本情報-年代tr在g>関数长度
および関数大小
を利用して,ガロアベクトルの長さやガロア体配列のサ。ガロア体配列に対する機能は,関数大小
および関数长度
の出力引数がガロア体配列ではなく常に整数であること以外は,通常の配列に対するMATLAB演算と同じです。下記のコ,ドは,これらの関数の使用法を示します。
M = 4;E = gf([0:5],m);F =重塑(e,2,3);Lne =长度(e);<年代p一个n年代tyle="color:#228B22">% e的向量长度年代p一个n>SZF =大小(f);<年代p一个n年代tyle="color:#228B22">% f的大小,作为两个元素的行返回年代p一个n>[nr,nc] = size(f);<年代p一个n年代tyle="color:#228B22">% f的大小,作为两个标量返回年代p一个n>Nc2 = size(f,2);<年代p一个n年代tyle="color:#228B22">另一种计算列数的方法年代p一个n>
非ゼロ要素の位置年代tr在g>
ガロア体配列から決定したい別のタesc escプの情報は,非ゼロ要素の位置です。通常のmatlab配列に対しては,関数找到
を使います。しかし,ガロア体配列に対しては,以下のように找到
と~ =
演算子を組み合わせて利用します。
X = [0 1 2 1 0 2];M = 2;G = gf(x,m);NZX = find(x);<年代p一个n年代tyle="color:#228B22">在普通数组x中查找非零值。年代p一个n>NZG = find(g~=0);<年代p一个n年代tyle="color:#228B22">在伽罗瓦数组g中找到非零值。年代p一个n>
ガロア体の線形代数
逆行列と行列式の計算-年代tr在g>正方ガロア体配列を反転させるには,関数发票
を使います。関連する関数は依据
で,ガロア体配列の行列式を計算します。関数发票
と関数依据
は,両方とも複素数の体ではなくガロア体で計算を行うこと以外は,通常のMATLABのバージョンのように機能します。
メモ年代tr在g>
ガロア体配列は,行列式が正確にゼロである場合にのみ特異です。実数や複素数配列の場合のように,丸め誤差を考慮する必要はありません。
下記のコ,ドは,逆行列と行列式の計算を示します。
M = 4;Randommatrix = gf(randi([0 2^m-1],4,4),m);Gfid = gf(眼(4),m);<年代p一个n年代tyle="color:#0000FF">如果年代p一个n>Det (randommatrix) ~= 0 invmatrix = inv(randommatrix);Check1 = invmatrix * randommatrix;Check2 = randommatrix * invmatrix;<年代p一个n年代tyle="color:#0000FF">如果年代p一个n>(isequal(check1,gfid) & isequal(check2,gfid))<年代p一个n年代tyle="color:#A020F0">inv找到了正确的矩阵逆年代p一个n>);<年代p一个n年代tyle="color:#0000FF">结束年代p一个n>其他的年代p一个n>disp (<年代p一个n年代tyle="color:#A020F0">矩阵是不可逆的年代p一个n>);<年代p一个n年代tyle="color:#0000FF">结束年代p一个n>
この例の出力は,ランダムに生成された行列が非特異か,あるいは特異かに応じて,以下の2つのメッセージのいずれかになります。
逆找到了正确的矩阵逆。这个矩阵不是可逆的。
ランクの計算-年代tr在g>ガロア体配列のランクを計算するには,関数排名
を使います。入力引数を1だけ指定した場合には,通常のmatlab関数排名
と同様に機能します。下記の例は,正方および非正方ガロア体配列のランクを求める方法を示します。
M = 3;正方形= gf([4 7 6;4 6 5;0 6 1],m);R1 = rank(square);Anonsquare = gf([4 7 6 3;4 6 5 1;0 6 1 1],m);R2 = rank(anonsquare);(r1, r2)
出力は以下のようになります。
Ans = 2 3
r1
とr2
の値は,中途
がフルランクでないことと,anonsquare
がフルランクであることを示します。
正方行列の分解-年代tr在g>正方ガロア体配列(またはその並べ替え)を下三角ガロア体配列と上三角ガロア体配列の積として表すには,関数陆
を使います。この関数は,1入力引数を受け取り,2または3の出力引数を生成します。同じ構文を指定した場合は,通常のmatlab関数陆
と同様に機能します。下記の例は,陆
を利用した分解方法を示します。
Tofactor = gf([6 5 7 6;5 6 2 5;0 1 7 7;1 0 5 1],3);陆[L U] = (tofactor);<年代p一个n年代tyle="color:#228B22">% lu,有两个输出参数年代p一个n>c1 = isequal(L*U, tofactor)<年代p一个n年代tyle="color:#228B22">%真实年代p一个n>Tofactor2 = gf([1 2 3 4;1 2 3 0;2 5 2 1;0 5 0 0],3);[L2,U2,P] = lu(tofactor2);<年代p一个n年代tyle="color:#228B22">% lu,有三个输出参数年代p一个n>c2 = isequal(L2*U2, P*tofactor2)<年代p一个n年代tyle="color:#228B22">%真实年代p一个n>
線形方程式の解-年代tr在g>ガロア体で線形方程式の固有の解を求めるには,ガロア体配列に対して\
または/
演算子を使います。次の表は,一个
とB
がガロア体配列とあらかじめ定義されていると仮定し,各演算子が扱う式を示します。
演算子 | 線形方程式 | 構文 | \を使った等価な構文 |
---|---|---|---|
バックスラッシュ(\ ) |
A * x = B |
x = A \ B |
該当なし |
スラッシュ(/ ) |
x * A = B |
x = B / A |
x = (A'\B')' |
表の構文の結果は,ガロア体配列一个
の特性により異なります。
一个
が正方で非特異の場合は,出力x
は線形方程式の一意的な解です。一个
が正方で特異の場合は,表の構文はエラ,になります。一个
が正方でない場合は,matlabは,特解を求めようとします。“*
または*“
が特異配列である場合,あるいは一个
が過決定システムを表す行列(行数が列数より多い行列)である場合は,試みは失敗します。
メモ年代tr在g>
エラ,メッセ,ジは,線形方程式が解をもたないことを必ずも指摘しません。問題を言い換えることにより,解を求めることができる場合があります。たとえば,gf ([1 2;0 0],3) \ gf([1;0), 3)
はエラ,になりますが,数学的に等価なGf ([1 2],3) \ Gf ([1],3)
はエラ,になりません。最初の構文は,gf ([1 2;0 0], 3)
が特異正方行列であるため失敗します。
例:線形方程式の解年代tr在g>
下記の例は,ガロア体にいて線形方程式の固有の解を求める方法を示します。
M = 4;A = gf(magic(3),m);<年代p一个n年代tyle="color:#228B22">%平方非奇异矩阵年代p一个n>什么方法= [A, 2 * (:, 3)];<年代p一个n年代tyle="color:#228B22">% 3 × 4矩阵,冗余在右边年代p一个n>Atall =宽距';<年代p一个n年代tyle="color:#228B22">% 4 × 3矩阵,底部有冗余年代p一个n>B = gf([0:2]',m);C = [b];2 * B (3)];D = [b;B (3) + 1);答案= A \ B;<年代p一个n年代tyle="color:#228B22">% A * x = B的解年代p一个n>solution2 = B' / A;<年代p一个n年代tyle="color:#228B22">x * A = B'的%解年代p一个n>ck1 = all(A * solution == B)<年代p一个n年代tyle="color:#228B22">检查解决方案的有效性。金宝搏官方网站年代p一个n>ck2 = all(solution2 * A == B')<年代p一个n年代tyle="color:#228B22">% wide * x = B有无穷多个解。金宝搏官方网站找到一个。年代p一个n>onesolution =宽\ B;ck3 = all(宽度* onesolution == B)<年代p一个n年代tyle="color:#228B22">检查解决方案的有效性。年代p一个n>% Atall * x = C有一个解决方案。年代p一个n>solution = Atall \ C;ck4 = all(Atall * solution == C)<年代p一个n年代tyle="color:#228B22">检查解决方案的有效性。年代p一个n>% Atall * x = D没有解。年代p一个n>notasolution = Atall \ D;ck5 = all(Atall * notasolution == D)<年代p一个n年代tyle="color:#228B22">这不是一个有效的解决方案。。年代p一个n>
この例の出力は、偽(0
)であるck5
以外は、妥当性のチェックはすべて真(1
)であることを示します。
ガロア体での信号処理操作
この節は,これらの操作の実行方法を説明します。
通常の実数ベクトルの対応する操作に関するその他の情報は,信号处理工具箱™ドキュメンテーションに記載されています。
过滤,年代tr在g>ガロアベクトルをフィルタ,処理するには,関数过滤器
を使います。入力引数を3だけ指定した場合には,通常のmatlab関数过滤器
と同様に機能します。
下記のコドと図は,gf(2)上の特定のフィルタのンパルス応答を示します。
M = 1;<年代p一个n年代tyle="color:#228B22">%适用于GF(2)。年代p一个n>B = gf([1 0 0 1 0 1 0 1],m);<年代p一个n年代tyle="color:#228B22">%分子年代p一个n>A = gf([1 0 1 1],m);<年代p一个n年代tyle="color:#228B22">%分母年代p一个n>X = gf([1, 0 (1,19)],m);Y = filter(b,a,x);<年代p一个n年代tyle="color:#228B22">%过滤x。年代p一个n>图;茎(y.x);<年代p一个n年代tyle="color:#228B22">%创建茎图。年代p一个n>轴([0 20 -。1 1.1))
畳み込み-年代tr在g>通信工具箱ソフトウェアは,ガロアベクトルの組を畳み込みする2つの等価な方法を提供します。
多項式の乗算と除算一个>で説明した関数
conv
を利用します。これは,2つのベクトルの畳み込みが、係数がベクトルのエントリである 2 つの多項式の乗算と等価であるため機能します。関数
convmtx
を使ってベクトルの畳み込み行列を計算した後で,その行列と別のベクトルを乗算します。これは,2つのベクトルの畳み込みが、片方のベクトルをもう一方のベクトルでフィルター処理することと等価であるためです。この等価性により、デジタル フィルターを畳み込み行列として表すことができ、適切な長さの任意のガロア ベクトルを乗算することができます。
ヒント年代tr在g>
大規模なガロアベクトルの畳み込みを行う必要がある場合,畳み込み行列の乗算は,conv
の利用よりも高速な場合があります。
例年代tr在g>
Gf(4)のベクトルb
に対し畳み込み行列を計算します。デジタルフィルタ,の分子係数を表し,その後,2 .の等価な,ガロア体上のx
によるb
の畳み込みの方法を示します。
M = 2;B = gf([1 2 3]',m);N = 3;X = gf(randi([0 2^m-1],n,1),m);C = convmtx(b,n);<年代p一个n年代tyle="color:#228B22">计算卷积矩阵。年代p一个n>V1 = conv(b,x);<年代p一个n年代tyle="color:#228B22">使用conv将b与x进行卷积年代p一个n>v2 = C*x;<年代p一个n年代tyle="color:#228B22">用C来卷积b和x。年代p一个n>
離散フリエ変換-年代tr在g>離散フリエ変換は,デジタル信号処理の重要なルです。このルボックスは,離散フリエ変換の処理に役立ルを提供します。
fft
。ガロアベクトルを変換传输线
。ガロアベクトルにいて逆離散フリエ変換を行います。dftmtx
。ガロアベクトルにいて離散フリエ変換またはその逆を行うためのガロア体配列を出力します。
すべての場合で,変換されるベクトルは,体<年代up>米年代up>)の長さ<年代up>米年代up>-1のガロアベクトルでなければなりません。以下の例では,これらの関数の使用法を示します。関数isequal
を使用して,y
は日元
と同等で,z
がz1
と同等で,z
がx
と同等であることを確認できます。
M = 4;X = gf(randi([0 2^m-1],2^m-1,1),m);<年代p一个n年代tyle="color:#228B22">要变换的向量年代p一个n>alpha = gf(2,m);Dm = dftmtx(alph);Idm = dftmtx(1/alph);Y = dm*x;<年代p一个n年代tyle="color:#228B22">使用dftmtx的结果转换x。年代p一个n>Y1 = fft(x);<年代p一个n年代tyle="color:#228B22">使用fft变换x。年代p一个n>Z = idm*y;<年代p一个n年代tyle="color:#228B22">%使用dftmtx(1/alph)的结果恢复x。年代p一个n>Z1 = ifft(y1);<年代p一个n年代tyle="color:#228B22">使用ifft恢复x。年代p一个n>
ヒント年代tr在g>
変換したいベクトルが(同じ体に)多くある場合は,fft
を何回も使うよりも,dftmtx
を1回,行列乗算を複数回行うほうが高速となる場合があります。
ガロア体上の多項式
この節の概要-年代tr在g>ガロアベクトルを使って,不定量xで多項式を,ガロア体でその係数を表すことができます。多項式の係数をxの降べき順にベクトルに並べることによって,表現を作成します。たとえば,次のベクトルを例に説明します。
Gf ([2 1 0 3],4)
は,多項式Ax<年代up>3.年代up>x + 1<年代up>2年代up>+ 0x + (A+1)を表します。ここで,
一个は,一个体gf (2<年代up>4年代up>)の原始元です。
Xは,多項式の不定量です。
このようなガロアベクトルを使って演算の実行,多項式の<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">評価一个>、<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">多項式の根一个>を求めることができます。ガロア体の元の<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">最小多項式一个>を求めることもできます。
多項式の加算と減算-年代tr在g>多項式を加算および減算するには,多項式を表す長さの等しいガロアベクトルに対して通常の+
および-
演算子を使います。片方の多項式がもう一方よりも低次である場合は,2つのベクトルが同じ長さとなるように,短い方のベクトルの先頭にゼロを付加しなければなりません。下記の例は,1次と2次の多項式を加える方法を示します。
Lin = gf([4 2],3);<年代p一个n年代tyle="color:#228B22">% A^2 x + A,在x上是线性的年代p一个n>linpadding = gf([0 4 2],3);<年代p一个n年代tyle="color:#228B22">相同的多项式,填零年代p一个n>Quadr = gf([1 4 2],3);<年代p一个n年代tyle="color:#228B22">% x^2 + A^2 x + A,它是x的二次函数年代p一个n>不能用lin + 4,因为它们的向量长度不同。年代p一个n>Sumpoly = [0, lin] + quadr;<年代p一个n年代tyle="color:#228B22">%两个多项式的和年代p一个n>Sumpoly2 = linpadding + quadr;<年代p一个n年代tyle="color:#228B22">%相同金额年代p一个n>
多項式の乗算と除算-年代tr在g>多項式を乗算および除算するには,多項式を表すガロアベクトルに対して関数conv
と関数deconv
を利用します。多項式の乗算と除算は、ベクトルの畳み込みと逆畳み込みと等価です。関数deconv
は,2の多項式の商と剰余多項式を出力します。例は,以下のとおりです。
M = 4;Apoly = gf([4 5 3],m);<年代p一个n年代tyle="color:#228B22">% A²x²+ (A²+ 1)x + (A + 1)年代p一个n>Bpoly = gf([1 1],m);<年代p一个n年代tyle="color:#228B22">% x + 1年代p一个n>Xpoly = gf([10],m);<年代p一个n年代tyle="color:#228B22">% x年代p一个n>% Product是A^2 x^3 + x^2 + (A^2 + A) x + (A + 1)年代p一个n>Cpoly = conv(poly,bpoly);[a2,remd] = deconv(cpoly,bpoly);<年代p一个n年代tyle="color:#228B22">% a2 = =的载脂蛋白e。Remd是零。年代p一个n>[otherpol,remd2] = deconv(cpoly,xpoly);<年代p一个n年代tyle="color:#228B22">% remd非零。年代p一个n>
ガロア体の演算一个>における乗算と除算の演算は,多項式ではなく,要素または行列を乗算します。
多項式の評価-年代tr在g>ガロア体の元にいて多項式を評価するには,関数polyval
を使います。入力引数を2だけ指定した場合には,通常のmatlab関数polyval
と同様に機能します。下記の例は,体のいくつかの元で多項式を評価し、体の^。
と. *
を使って結果をチェックします。
M = 4;Apoly = gf([4 5 3],m);<年代p一个n年代tyle="color:#228B22">% A²x²+ (A²+ 1)x + (A + 1)年代p一个n>X0 = gf([0 1 2],m);<年代p一个n年代tyle="color:#228B22">%求多项式值的点年代p一个n>Y = polyval(poly,x0) a = gf(2,m);<年代p一个n年代tyle="color:#228B22">字段的原始元素,对应于A。年代p一个n>Y2 = a.^2 *x0。^2+ (a ^2+1)*x0 + (a+1)<年代p一个n年代tyle="color:#228B22">检查结果。年代p一个n>
出力は以下のようになります。
y = GF(2^4)数组。原始多项式= D^4+D+1(19十进制)数组元素= 3 2 10 y2 = GF(2^4)数组。原始多项式= D^4+D+1(19十进制)数组元素= 3 2 10
y
の最初の要素は,0
で多項式を評価するので,多項式の定数項3.
を出力します。
多項式の根-年代tr在g>ガロア体において多項式の根を求めるには,多項式を表すガロアベクトルに対して関数根
を使います。この関数はガロアベクトルが存在するのと同じ体の根を求めます。根
からの出力ベクトルにエントリが表示される回数は,多項式の根の多重度になります。
メモ年代tr在g>
ガロアベクトルがgf (2<年代up>米年代up>)にある場合は,それが表す多項式は,拡大体<年代up>米年代up>)<年代up>k年代up>)に根をも場合があります。しかし,根
はそれらの付加的な根は求めないか,あるいは存在を示しません。
下記の例は,gf(8)上で3次多項式の根を求めます。
P = 3;M = 2;Field = gftuple([-1:p^m-2]',m,p);<年代p一个n年代tyle="color:#228B22">GF(9)所有元素列表年代p一个n>此处使用默认基元多项式。年代p一个n>多项式= [1 0 1 1];<年代p一个n年代tyle="color:#228B22">% 1 + x²+ x³年代p一个n>rts = gfroots(多项式,m, p)<年代p一个n年代tyle="color:#228B22">以指数形式求根年代p一个n>检查每一个实际上是根。年代p一个n>为年代p一个n>Ii = 1:3根= rts(Ii);Rootsquared = gfmul(根,根,字段);Rootcubed = gfmul(根,rootsquared,字段);回答(2)= gfadd (gfadd (0 rootsquared字段),rootcubed,字段);<年代p一个n年代tyle="color:#228B22">回想一下,1实际上是的0次方。年代p一个n>如果answer = -Inf,则变量root表示年代p一个n>多项式的根。年代p一个n>结束年代p一个n>回答
バesc escナリ多項式の根-年代tr在g>バ▪▪ナリ係数をも▪▪特殊な多項式の場合では,拡大体に存在する根を求めることは簡単です。これは,元0
と1
が標数2のすべての体で同じ明白な表現をもためです。拡大体においてバesc escナリ多項式の根を求めるには,関数根
を,配列要素が多項式のバ。
下記の例は,さまざまな体においてバ。
Gf2poly = gf([1 1 1],1);<年代p一个n年代tyle="color:#228B22">GF(2)中的% x^2 + x + 1年代p一个n>Noroots =根(gf2poly);<年代p一个n年代tyle="color:#228B22">%地场无根,GF(2)年代p一个n>Gf4poly = gf([1 1 1],2);<年代p一个n年代tyle="color:#228B22">GF(4)中的% x^2 + x + 1年代p一个n>Roots4 =根(gf4poly);<年代p一个n年代tyle="color:#228B22">在GF(4)中,根为A和A+1。年代p一个n>Gf16poly = gf([1 1 1],4);<年代p一个n年代tyle="color:#228B22">GF(16)中的% x^2 + x + 1年代p一个n>Roots16 =根(gf16poly);<年代p一个n年代tyle="color:#228B22">%根于GF(16)年代p一个n>Checkanswer4 = polyval(gf4poly,roots4);<年代p一个n年代tyle="color:#228B22">%零向量年代p一个n>Checkanswer16 = polyval(gf16poly,roots16);<年代p一个n年代tyle="color:#228B22">%零向量年代p一个n>
多項式の根はgf(2)に存在しないので,noroots
は空配列です。しかし,多項式の根はGF (4)とGF (16)に存在するため、roots4
とroots16
は空ではありません。
roots4
とroots16
は互いに等しくないことに注意してください。これらは,以下の点が異なります。
roots4
はgf(4)配列で,roots16
はgf(16)配列です。MATLABは,ガロア体配列の基となる体を追っています。roots4
とroots16
の配列要素は,異なる原始多項式に関する表現を使うために異なっています。たとえば,2
(原始元を表す)は,gf(4)に対する既定の原始多項式がgf4poly
が表す多項式と同じであるため,ベクトルroots4
の元です。一方、2
は,gf(16)の原始元がgf16poly
が表す多項式の根ではないため,roots16
の元ではありません。
最小多項式-年代tr在g>GF (2<年代up>米年代up>)の元の最小多項式は,元を<年代up>米年代up>)の根としても最小次数が非ゼロのバナリ係数多項式です。元または元の列ベクトルの最小多項式を求めるには,関数minpol
を使います。
下記のコ,ドは,gf (4)
の最小多項式がd<年代up>2年代up>+ d + 1であることを求め,gf (4)
が実際に体gf(16)の多項式の根にあることを検証します。
M = 4;E = gf(6,4);Em = minpol(e)<年代p一个n年代tyle="color:#228B22">在GF(2)中找到e的最小多项式。年代p一个n>Emr =根(gf([0 0 1 1 1],m))<年代p一个n年代tyle="color:#228B22">GF中D^2+D+1的%根(2^m)年代p一个n>
出力は以下のようになります。
em = GF(2)数组。数组元素= 0 0 1 1 1 emr = GF(2^4)数组。原始多项式= D^4+D+1(19十进制)数组元素= 6
ガロア体のどの元が同じ最小多項式を共有するかを求めるには,関数叠合组
を使います。
ガロア変数の操作
この節の概要-年代tr在g>この節では,ガロア体配列と通常のMATLAB配列間のガロア変数の操作や情報の伝送のための手法を説明します。
メモ年代tr在g>
これらの手法は,ガロア体配列を処理するMATLABファイル関数を作成する場合に,特に該当します。このタesc escプの使用例として,コマンドウィンドウで编辑gf / conv
と入力し,エディタ,ウィンドウでコ,ドの最初の数行を調べてください。
変数がガロア体配列であるかどうかを決定-年代tr在g>変数が通常のmatlab配列ではなくガロア体配列であるかどうかを調べるには,関数isa
を使います。説明は、以下のとおりです。
Mlvar =眼睛(3);Gfvar = gf(mlvar,3);No = isa(mlvar,<年代p一个n年代tyle="color:#A020F0">“女朋友”年代p一个n>);<年代p一个n年代tyle="color:#228B22">% False,因为mlvar不是一个伽罗瓦数组年代p一个n>是= isa(gfvar,<年代p一个n年代tyle="color:#A020F0">“女朋友”年代p一个n>);<年代p一个n年代tyle="color:#228B22">% True,因为gfvar是一个Galois数组年代p一个n>
ガロア体配列から情報を抽出-年代tr在g>配列要素,体の次数,原始多項式をガロア体配列である変数から抽出するためには,変数名にサフィックスを付加します。次の表は,変数名に依存しないサフィックスを示します。
情報 | サフィックス | 出力値 |
---|---|---|
配列の要素 | 以下方式 |
ガロア体配列からのデ,タ値を含むuint16 型のmatlab配列 |
フィ,ルドの順番 | 00 |
ガロア体配列がgf (2 ^ m )にあることを示す双 整数型。 |
原始多項式 | .prim_poly |
原始多項式を表すuint32 整数型。表現は,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">整数をガロア体にどのように対応づけるか一个>での説明と同じです。 |
メモ年代tr在g>
出力値が整数デ,タ型で,後の操作のために双
に変換したい場合は,関数双
を使います。
下記のコ,ドは,これらのサフィックスの使用法を示します。empr
の定義は,拡大体のガロア体配列を作成するために,多項式のバesc escナリ係数のベクトルを利用します。例の別の部分は、体に対する原始多項式を取得し、適切なビット数をもつバイナリベクトル表現に変換します。
检查e是否能解出自己的最小多项式。。年代p一个n>E = gf(6,4);<年代p一个n年代tyle="color:#228B22">GF(16)元素年代p一个n>Emp = minpol(e);<年代p一个n年代tyle="color:#228B22">最小多项式emp在GF(2)中。年代p一个n>Empr =根(gf(emp.x,e.m));<年代p一个n年代tyle="color:#228B22">在GF中找到emp的根(16)。年代p一个n>检查基本元素gf(2,m)为年代p一个n>%是场的原始多项式的根。年代p一个n>Primpoly_int = double(e.prim_poly);Mval = e.m;Primpoly_vect = gf(de2bi(primpoly_int,mval+1,<年代p一个n年代tyle="color:#A020F0">“left-msb”年代p一个n>), mval);Containstwo =根(primpoly_vector);<年代p一个n年代tyle="color:#228B22">输出向量包含2。年代p一个n>
ガロア体配列の双への変換年代tr在g>
A = gf([1,0]) b = double(a.x) % AX是uint16
次の情報が返されます。
a = GF(2)数组。数组元素= 10 0 b = 10 0
既定でない原始多項式と計算速度
高速化のメカニズムは,特定の計算の反復実行を回避するために一部の計算関数が使用するデ,タファ,ルuserGftable.mat
です。体の次数(米
)と原始多項式(prim_poly
)の組み合わせに利用するには,以下のようにします。
Matlabアプリケションで書き込み権限をもフォルダに移動します。関数
cd
または現在のフォルダ,機能を使用すると移動できます。米
およびprim_poly
をワ,クスペ,ス変数として定義します。次に例を示します。M = 3;Prim_poly = 13;有效值示例
関数
gftable
を呼び出します。gftable (m, prim_poly);%如果您之前定义了m和prim_poly
関数は,現在の作業フォルダ,内でuserGftable.mat
を変更または作成して,体の次数と原始多項式の組み合わせに関連するデ,タを含めます。関数gftable
を呼び出す時間を最初に与えると,米
およびprim_poly
の値を使用するその後の計算は高速になります。
メモ年代tr在g>
関数gftable
を呼び出した後で現在の作業ディレクトリを変更する場合は,userGftable.mat
をmatlabパス上に配置してmatlabが確認できるようにする必要があります。これを行うには,目录
コマンドを使用してuserGftable.mat
を含むディレクトリをmatlabパスの前に配置します。パス上にuserGftable.mat
のコピ,が複数ある場合は,(“userGftable.mat”、“-”)
を使用してコピの場所とmatlabが使っているコピを確認します。
gftable
がどの程度計算速度を向上させたかを調べるには,計算を関数抽搐
と関数toc
で囲みます。例については、<一个href="//www.tatmou.com/jp/help/comm/ref/gftable.html">gftable
のリファレンスペ,ジを参照してください。
ガロア体の参考文献
[1] Blahut, Richard E.,错误控制码的理论与实践,阅读,MA, Addison-Wesley, 1983,第105页。
[2]朗,Serge,代数,第三版,阅读,MA, Addison-Wesley, 1993。
[3] Lin, Shu,和Daniel J. Costello, Jr.,错误控制编码:基础和应用,Englewood Cliffs, NJ, Prentice-Hall, 1983。
[4] van Lint, j.h.,《编码理论导论》,纽约,Springer-Verlag, 1982。
[5]柳条,斯蒂芬B.,数字通信和存储的错误控制系统,上马勒河,新泽西州,普伦提斯大厅,1995。
奇数個の元をもガロア体
“ガロア体”はp<年代up>米年代up>個の元をも代数体です。ここで,pは素数で、m は正の整数です。この節では、p が<年代p一个nclass="emphasis">“奇素数”のときのガロア体の取り扱い方法を説明します。偶数個の元をもガロア体の取り扱いにいては,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">ガロア体の計算一个>を参照してください。この章には,以下の節があります。
ガロア体の用語
この節では,pは奇素数でmは正の整数です。
また,本書では文献と整合性のない用語をいくか利用します。ここで利用される定義は,范·林特<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">[5]一个>に記述されています。
GF (p<年代up>米年代up>)の<年代p一个nclass="emphasis">“原始元”は,GF(p<年代up>米年代up>)の非ゼロ元の巡回生成を行います。これは,gf (2<年代up>米年代up>)のすべての非ゼロ元は,gf (2<年代up>米年代up>)の原始元の整数乗として表されることを意味します。原始元は,この節では一个と呼ばれます。
GF (p<年代up>米年代up>)の<年代p一个nclass="emphasis">“原始多項式”は,GF(p<年代up>米年代up>)の原始元の最小多項式です。結果として,次数mをも既約です。
ガロア体の元の表現
この節の概要-年代tr在g>この節では,本ルボックスの<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">指数一个>形式および<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">多項式一个>形式を使ってガロア体の元を表す方法を説明します。ガロア体の<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">すべての元をリスト一个>する方法も示します。これは,関数の中には入力引数としてそのようなリストを使うものがあるためです。最後に、ガロア体の元の表現の<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">非一意性一个>を説明します。
GF(p)の元は,0からp-1の整数を使って表すことができます。
mが少なくとも2である場合,GF(p<年代up>米年代up>)は拡大体と呼ばれます。整数単独ではGF<年代up>米年代up>)の元を直接表すことはできません。MATLAB技術計算ソフトウェアは、GF(p<年代up>米年代up>)の元を表すときに2の主要な表記法,指数形式と多項式形式を使用します。
メモ年代tr在g>
指数形式と多項式形式は両方共,GF(p<年代up>米年代up>)の特定の原始元aの選択に関連します。
指数形式-年代tr在g>この形式は,GF(p<年代up>米年代up>)のすべての非ゼロ元が0からp<年代up>米年代up>-2の整数cに対して<年代up>c年代up>として表すことができるという特性を利用します。ガロア体の理論は,GF(p<年代up>米年代up>)のすべての非ゼロ元がq = p<年代up>米年代up>のとき式x<年代up>q1年代up>= 1を満たすことを示すので,高次の指数は必要ありません。
指数形式の利用を以下の表に示します。
GF (p<年代up>米年代up>)の元 | 元のmatlab表現 |
---|---|
0 | 负 |
一个<年代up>0年代up>= 1 | 0 |
一个<年代up>1年代up> | 1 |
... | ... |
一个<年代up>q2年代up>ここで问 = p<年代up>米年代up> |
q2 |
负
はゼロ元の標準の指数表現ですが,すべての負の整数は,指数形式で<年代p一个nclass="emphasis">“入力”引数として使用されると负
と等価になります。この等価性は役に立ます。たとえば,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">既定の原始多項式一个>の最後のコ,ドの簡潔な行を参照してください。
メモ年代tr在g>
指数形式としてすべての負の整数と负
が等価であることは,たとえば,-1はaの逆数であるa<年代up>-1年代up>を<年代p一个nclass="emphasis">“表さない”ことを意味します。-1はこの体のゼロ元を表します。
多項式形式-年代tr在g>多項式形式は,GF(p<年代up>米年代up>)のすべての元が0からm - 1の指数とGF (p)の係数によって,一个の多項式として表すことができる特性を利用します。多項式形式では,元
(1)
+(2)
+(3)
一个<年代up>2年代up>+……+(米)
一个<年代up>m - 1年代up>
は,matlabでは次のベクトルで表されます。
(1) a (2) a(3)…(m))
メモ年代tr在g>
本ルボックスのガロア体関数は,係数を変数の<年代p一个nclass="emphasis">“昇べき順”に示すベクトルとして多項式を表します。これは,他の関数 MATLAB が使用する順序とは逆です。
ガロア体のすべての元のリスト-年代tr在g>本<年代up>米年代up>)のすべての元のリストを引数として必要とするものがあります。これは,再度<年代up>米年代up>)の特定の原始元aに関連します。元のリストに対する適切なフォ,マットは,体の各元に対して1,p<年代up>米年代up>行をも行列のフォマットです。行列はm列で,上記の<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">多項式形式一个>に示されている多項式形式のaのべき乗の各係数にいて1列です。1行目は,GF(p<年代up>米年代up>)のゼロの元に対応するため,ゼロのみを含みます。Kが2からp<年代up>米年代up>の間である場合は,k行目は元<年代up>k-2年代up>の多項式形式を指定します。
一个の最小多項式は,一个のより低階のべき乗で<年代up>米年代up>を表す方法を示すので,この行列の計算に役立ます。たとえば,以下の表は,gf (3<年代up>2年代up>)の元をリストします。ここで,一个は,原始多項式2+2x+ x<年代up>2年代up>の根です。この多項式を使って,表の中央の列の計算を行うとき,
一个<年代up>2年代up>= -2 - 2a = 1 + a
という置換を繰り返し使用できます。
Gf(9)の元年代tr在g>
指数形式 | 多項式形式 | 元のmatlab行列の行 |
---|---|---|
一个<年代up>负年代up> | 0 | 0 0 |
一个<年代up>0年代up> | 1 | 1 0 |
一个<年代up>1年代up> | 一个 | 0 1 |
一个<年代up>2年代up> | 1 +一个 | 1 1 |
一个<年代up>3.年代up> | A + A<年代up>2年代up>= a + 1 + a = 1 + 2a | 1 2 |
一个<年代up>4年代up> | A + 2a<年代up>2年代up>= a + 2 + 2a = 2 | 2 0 |
一个<年代up>5年代up> | 2 | 0 2 |
一个<年代up>6年代up> | 2<年代up>2年代up>= 2 + 2a | 2 - 2 |
一个<年代up>7年代up> | 2a + 2a<年代up>2年代up>= 2a + 2 + 2a = 2 + a | 2 1 |
例年代tr在g>
上記の表の3列目に示される行をも行列を自動生成するためには,下記のコドを利用します。
P = 3;M = 2;<年代p一个n年代tyle="color:#228B22">GF(9)使用原始多项式2 + 2x + x^2。年代p一个n>Prim_poly = [2 2 1];Field = gftuple([-1:p^m-2]',prim_poly,p);
関数gftuple
は,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">元の形式の変換と簡略化一个>で詳しく説明します。
表現の非一意性-年代tr在g>体は,複数の原始元をもます。2つの原始元が異なる最小多項式をもつ場合は、対応する元の行列は、異なる順序の行をもちます。2 つの原始元が同じ最小多項式を共有する場合は、体の元の行列は同じです。
メモ年代tr在g>
ガロア体関数の入出力が,“ある”原始多項式の選択に依存することがわかっている限り,どんな原始元でも利用することができます。通常は,与えられたスクリプトまたは関数内で,同じ原始多項式を利用するのが最適です。
元の表現が一意でない他の場合は,ガロア体の元が満たす式から生じます。たとえば,GF(9)の8の指数形式は,GF(9)で<年代up>8年代up>= 1 = a<年代up>0年代up>であるので,0の指数形式と同じです。別の例として,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">Gf(9)の元一个>の表の前に説明した置換により,多項式形式(0 0 1)が多項式形式[1]と同じであることが示されます。
既定の原始多項式
本ルボックスは,各拡大体に対する<年代p一个nclass="emphasis">“既定の”原始多項式を提供します。この多項式は,関数gfprimdf
を使って得ることができます。次のコマンド
Prim_poly = gfprimdf(m,p);%如果m和p已经定义
は,GF(p<年代up>米年代up>)に対する既定の最小多項式の標準の行ベクトル表現を生成します。
たとえば,下記のコマンドは,gf(9)に対する既定の原始多項式が,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">ガロア体のすべての元のリスト一个>で使われる<年代p一个nclass="emphasis">多項式“ではなく”,2 + x + x<年代up>2年代up>であることを示します。
poly1 = gfprimdf(2、3);
Poly1 = 2 1
既定の原始多項式を利用してGF<年代up>米年代up>)の元のリストを生成するには,以下のコマンドを使います。
Field = gftuple([-1:p^m-2]',m,p);
元の形式の変換と簡略化
最も簡単な多項式形式に変換-年代tr在g>関数gftuple
は,元の指数表現または多項表現を与えると,GF(p<年代up>米年代up>)の元の最も簡単な多項式表現を生成します。これは,他の関数で要求される<年代up>米年代up>)の元のリストの生成に役立ます。
gftuple
を利用するには,3の引数が必要です。GF (p<年代up>米年代up>)の元を表すもの,出力の計算時にMATLAB技術計算ソフトウェアが使用する原始多項式を示すもの,および素数pです。下記の表は,最初の2の引数がさまざまな形式であるときに,関数gftuple
がどのように動作するかを示します。
初めの2の入力の形式に依存するgftupleの動作年代tr在g>
元の指定方法 | 原始多項式を表す方法 | Gftupleが生成するもの |
---|---|---|
指数形式;C =任意の整数 | 整数m > | 一个<年代up>c年代up>の多項式形式,ここでAはGF(p<年代up>米年代up>)の“既定”の原始多項式の根です。<年代p一个nclass="emphasis"> |
例:Tp = gftuple(6,2,3);% c =6在这里 |
||
指数形式;C =任意の整数 | 原始多項式の係数のベクトル | 一个<年代up>c年代up>の多項式形式,ここで一个は“与えられた”原始多項式の多項式形式の根です。<年代p一个nclass="emphasis"> |
例:多项式= gfprimdf(2,3);Tp = gftuple(6,多项式,3);% c =6在这里 |
||
任意の次数の多項式形式 | 整数m > | 簡略化するためにGF<年代up>米年代up>)に<年代p一个nclass="emphasis">“既定”の原始多項式を使用する,次数< mの多項式形式 |
例:Tp = gftuple([0 0 0 0 0 0 1],2,3); |
||
任意の次数の多項式形式 | 原始多項式の係数のベクトル | 簡略化するためにGF<年代up>米年代up>)に<年代p一个nclass="emphasis">“与えられた”原始多項式を使用する,次数< mの多項式形式 |
例:多项式= gfprimdf(2,3);Tp = gftuple([0 0 0 0 0 0 1],多项式,3); |
上記の表の4の例は,すべて同じベクトルTp = [2,1]
を生成しますが,gftuple
に対する異なる入力は,表の行に対応します。各例は,a<年代up>6年代up>= 2+ aであるという事実を示します。ここで,一个はgf (3<年代up>2年代up>)に対する(既定の)原始多項式2 + x+ x<年代up>2年代up>の根です。
例年代tr在g>
この例は,gf (3<年代up>4年代up>)の2の多項式形式の元を乗算するために,gfconv
とgftuple
を組み合わせる方法を示します。最初に,gfconv
は,原始元を変数のように扱って,2の多項式を乗算します。これは高次の多項式を生成し,原始元が満たす多項式を使用して関数gftuple
により簡略化されます。最終結果は,最も簡単な多項式の積の形式です。
P = 3;M = 4;A = [1 2 0 1];B = [2 2 1 2];非简单= gfconv(a,b,p)<年代p一个n年代tyle="color:#228B22">% a乘以b,用的是高次年代p一个n>Simple = gftuple(非简单,m,p)<年代p一个n年代tyle="color:#228B22">的最高指数是m-1年代p一个n>
出力は以下のようになります。
不简单= 2 0 0 0 1 2简单= 2 1 0 1
例:ガロア体の元のリストの生成-年代tr在g>この例は,ガロア体のすべての元をリストする行列を生成する作業に,変換機能を適用します。体のすべての元をリストする行列は,gfadd
やgfmul
のような関数の入力引数です。下記の変数field1
とfield2
は,そのような関数が期待する形式です。
P = 5;<年代p一个n年代tyle="color:#228B22">或任何质数年代p一个n>M = 4;<年代p一个n年代tyle="color:#228B22">%或任何正整数年代p一个n>Field1 = gftuple([-1:p^m-2]',m,p);Prim_poly = gfprimdf(m,p);<年代p一个n年代tyle="color:#228B22">%或任何原始多项式年代p一个n>GF的% (p^m)年代p一个n>Field2 = gftuple([-1:p^m-2]',prim_poly,p);
最も簡単な指数形式への変換-年代tr在g>同じ関数gftuple
は,指数表現または多項式表現を与えられると,GF(p<年代up>米年代up>)の元の最も簡単な指数表現も生成します。この出力を得るには,以下の構文を使います。
[polyformat, expformat] = gftuple(…)
入力形式と出力polyformat
は,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">初めの2の入力の形式に依存するgftupleの動作一个>の表のとおりです。さらに,変数expformat
は,polyformat
で表現される元の最も簡単な指数形式を含みます。これは,指数が负
または0からp<年代up>米年代up>-2の間の数値であるという点で,<年代p一个nclass="emphasis">“最も簡単”なものです。
例年代tr在g>
前節で説明した元2 +一个の指数形式を復元するには,下記のコマンドを使います。この場合,polyformat
は冗長な情報を含み,expformat
は必要な結果を含みます。
[polyformat, expformat] = gftuple([2 1],2,3)
1 expformat = 6
この出力は,最初は表<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">Gf(9)の元一个>の情報と矛盾するように見えますが,実際はそうではありません。表は,異なる原始元を使っています。その原始元に2を加えると,下記の多項式形式および指数形式をもます。
Prim_poly = [2 2 1];[polyformat2, expformat2] = gftuple([2 1],prim_poly,3)
下記の出力は,表の一番下の行の情報を反映しています。
1 expformat2 = 7
ガロア体の演算
この節の概要-年代tr在g>関数gfadd
,gfsub
、gfmul
、gfdiv
を使用して,それぞれガロア体の元の加算,減算,乗算,除算を行うことができますこれらの関数のそれぞれは,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">素体一个>に対するモ,ドと<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">拡大体に対するモ,ド一个>をもます。
素体の演算-年代tr在g>GF(p)の演算は,演算模pと同じです。関数gfadd
,gfmul
,gfsub
,gfdiv
は,GF(p)の元を0からp-1の間の整数として表す2の引数を受け取ります。3番目の引数はpを指定します。
例:gf(5)の加算表年代tr在g>
下記のコ,ドは,gf(5)に対する加算表を構築します。一个
とb
が0 ~ 4の場合,元gfp_add (a + 1, + 1)
はgf(5)の和a + b
を表します。たとえば,2+4は1国防部ulo 5 なので、Gfp_add (3,5) = 1
です。
P = 5;行= 0:p-1;Table = ones(p,1)*row;Gfp_add = gfadd(表,表',p)
この例の出力は,次のようになります。
Gfp_add = 0 1 2 3 4 1 2 3 4 0 2 3 4 0 1 3 4 0 1 2 4 0 1 2 3
その他のp
の値は,異なる素体gf (p
)の表を作成します。gfadd
をgfmul
、gfsub
,またはgfdiv
で置き換えると,gf (p
)の対応する算術演算用の表が生成されます。
拡大体の演算-年代tr在g>同じ算術関数は,m > 1のときGF(p<年代up>米年代up>)の元を加算できますが,引数の形式は,上記の場合よりも複雑です。一般に,拡大体の算術演算は,素体の算術演算よりも複雑です。算術演算の機能に関しては,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">ガロア体の参考文献一个>の文献を参照してください。
拡大体での実行時に,関数gfadd
,gfmul
,gfsub
,gfdiv
は最初の2の引数を指数形式で使用して,GF(p<年代up>米年代up>)の元を表します。必須である3番目の引数は,<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">ガロア体のすべての元のリスト一个>のようにGF<年代up>米年代up>)のすべての元をリストします。結果は,指数形式です。
例:gf(9)の加算表年代tr在g>
下記のコドは,gf(9)に対する既定の原始多項式の根に対する指数形式を使って,gf (3 .<年代up>2年代up>)に対する加算表を構築します。一个
とb
が-1 ~ 7の間である場合,元gfpm_add (a + 2, + 2)
は,gf(9)の<年代up>一个年代up>と一<年代up>b年代up>の和を表します。たとえば,Gfpm_add (4,6) = 5
ですが,これは次の理由によります。
一个<年代up>2年代up>+一个<年代up>4年代up>=一个<年代up>5年代up>
行列场
の4行目と6行目を使用して,以下を確認することができます。
一个<年代up>2年代up>+一个<年代up>4年代up>= (1 + 2a) + (2 + 0a) = 3 + 2a = 0 + 2a = a<年代up>5年代up>模3。
P = 3;M = 2;<年代p一个n年代tyle="color:#228B22">%工作在GF(3^2)。年代p一个n>Field = gftuple([-1:p^m-2]',m,p);<年代p一个n年代tyle="color:#228B22">构造元素列表。年代p一个n>行= -1:p^m-2;Table = ones(p^m,1)*row;Gfpm_add = gfadd(表,表',字段)
出力は以下のようになります。
gfpm_add =负0 1 2 3 4 5 6 7 1 0 4 7 3 5负2 1 6 7 5 0 4 6负3 2 2 3 0 6 1 5 7负4 3 4 5 1 7 2 6 0负4负6 5 2 0 3 7 1 5 2负7 6 3 1 4 0 6 3负0 7 4 2 5 7 6 2 4负1 0 5 3
メモ年代tr在g>
他の原始多項式を使った場合は,表は異なります。これは,表の行と列の順序が GF(9) の元の自然な順序ではなく、特定の原始多項式の選択に基づくためです。
その他のp
と米
の値は,異なる拡大体gf (p m ^
)の表を作成します。gfadd
をgfmul
、gfsub
,またはgfdiv
で置き換えると,gf (p m ^
)の対応する算術演算用の表が生成されます。
素体上の多項式
この節の概要-年代tr在g>GF(p)上の多項式は,係数がGF(p)の元である多項式です。通信工具箱ソフトウェアには、以下を行うための関数が用意されています。
多項式の<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">表示一个>方法の変更
ガロア体の多項式の<一个href="//www.tatmou.com/jp/jp/help/comm/ug/error-detection-and-correction.html" class="intrnllnk">根一个>を求める
メモ年代tr在g>
本ルボックスのガロア体関数は,係数を変数の<年代p一个nclass="emphasis">“昇べき”順に並べたベクトルとして奇数pに対するGF(p)上の多項式を表します。これは,他の関数matlabが使用する順序とは逆です。
多項式の表示の変更-年代tr在g>係数を含む行ベクトルに対応する多項式を従来通りに書式化して表示するには,gfpretty
を使用します。多項式の次数よりも<年代p一个nclass="emphasis">“高い”指数をもすべてのゼロ係数項を除去して多項式を短縮するには,gftrunc
を使用します。次に例を示します。
gfpretty([1 20 394 10 0 0 29 3 0 0])
出力は以下のようになります。
polynom = 1 20 394 10 0 0 29 3 2 3 6 7 1 + 20 X + 394 X + 10 X + 29 X + 3 X
メモ年代tr在g>
固定幅フォントを利用しない場合は,表示内のスペ,スは正確でない場合があります。
多項式の演算-年代tr在g>関数gfadd
とgfsub
は,それぞれGF(p)上の多項式の加算と減算を行います。関数gfconv
は,GF(p)上の多項式を乗算します。関数gfdeconv
は,GF(p)内の多項式を除算し,商の多項式と剰余の多項式を生成します。たとえば,下記のコマンドは,体GF(3)上で2 + x + x<年代up>2年代up>と1+xを乗算すると,2 + 2x<年代up>2年代up>+ x<年代up>3.年代up>になることを示します。
A = gfconv([2 1 1],[1 1],3) [quot, remd] = gfdeconv(A,[2 1 1],3)
出力は以下のようになります。
A = 2 0 2 1 quot = 1 1 remd = 0
前述した関数gfadd
とgfsub
は,それぞれ多項式の加算と減算を行います。多項式を表すために係数のベクトルを使用するため、MATLAB は、2 つの多項式の加算と、2 つの行ベクトルの要素単位の加算を区別しません。
多項式の特性-年代tr在g>GF(p)上の多項式にいて,関数gfprimck
は,既約多項式および/または原始多項式かどうかの判定を行います。定義では,原始多項式である場合は既約です。しかし,その逆は必ずしも真ではありません。関数gfprimdf
とgfprimfd
は原始多項式を返します。
GF (p<年代up>米年代up>)の元を与えると,関数gfminpol
は,GF(p)上の最小多項式を計算します。
例年代tr在g>
たとえば,下記のコ,ドは,すべての最小多項式の非既約性を反映します。しかし,非原始元の最小多項式は,原始多項式ではありません。
P = 3;M = 4;<年代p一个n年代tyle="color:#228B22">此处使用默认基元多项式。年代p一个n>Prim_poly = gfminpol(1,m,p);Ckprim = gfprimck(prim_poly,p);<年代p一个n年代tyle="color:#228B22">% ckprim = 1,因为prim_poly表示一个原始多项式。年代p一个n>Notprimpoly = gfminpol(5,m,p);Cknotprim = gfprimck(非primpoly,p);<年代p一个n年代tyle="color:#228B22">% cknotprim = 0(不可约但非原语)年代p一个n>%,因为当p = 3时,^5不是基本元素。年代p一个n>Ckreducible = gfprimck([0 1 1],p);<年代p一个n年代tyle="color:#228B22">% ckreducible = -1,因为多项式是可约的。年代p一个n>
多項式の根-年代tr在g>GF(p)上の多項式にいて,関数gfroots
は,適切な拡大体<年代up>米年代up>)の多項式の根を求めます。拡大体GF<年代up>米年代up>)の次数mをMATLABに通知するためには,下記の表に示すように2つの方法があります。
Gfrootsの2番目の引数の形式年代tr在g>
2番目の引数 | 表現 |
---|---|
正の整数 | 多項式GF<年代up>米年代up>)の。米一个TLAB は既定の原始多項式を計算に使用します。 |
行ベクトル | GF (p<年代up>米年代up>)の原始多項式。米は,この原始多項式の次数です。 |
例:gf(9)の多項式の根年代tr在g>
下記のコ,ドは,GF(9)内の多項式1 + x<年代up>2年代up>+ x<年代up>3.年代up>の根を求め,それらが実際に根であることを確認します.GF(9)の元の指数形式が最初から最後まで利用されます。
P = 3;M = 2;Field = gftuple([-1:p^m-2]',m,p);<年代p一个n年代tyle="color:#228B22">GF(9)所有元素列表年代p一个n>此处使用默认基元多项式。年代p一个n>多项式= [1 0 1 1];<年代p一个n年代tyle="color:#228B22">% 1 + x²+ x³年代p一个n>rts = gfroots(多项式,m, p)<年代p一个n年代tyle="color:#228B22">以指数形式求根年代p一个n>检查每一个实际上是根。年代p一个n>为年代p一个n>Ii = 1:3根= rts(Ii);Rootsquared = gfmul(根,根,字段);Rootcubed = gfmul(根,rootsquared,字段);回答(2)= gfadd (gfadd (0 rootsquared字段),rootcubed,字段);<年代p一个n年代tyle="color:#228B22">回想一下,1实际上是的0次方。年代p一个n>如果answer = -Inf,则变量root表示年代p一个n>多项式的根。年代p一个n>结束年代p一个n>回答
出力は,a<年代up>0年代up>(1)<年代up>5年代up>,一个<年代up>7年代up>が根であることを示します。
root = 0 5 7 answer = -Inf -Inf -Inf
gfroots
が根の多項式形式や体のすべての元のリストを表示する方法にいては,<一个href="//www.tatmou.com/jp/help/comm/ref/gfroots.html">gfroots
のリファレンスペ,ジを参照してください。
その他のガロア体関数
通信工具箱ソフトウェアのその他のガロア体関数に関する情報は,オンラインリファレンスページを参照してください。
ガロア体の参考文献
[1]布拉胡特,理查德E.,错误控制代码的理论与实践,阅读,马萨诸塞州。, Addison-Wesley, 1983。
[2]朗,谢尔盖,代数,第三版,阅读,马萨诸塞州。艾迪生-韦斯利,1993年。
[3] Lin, Shu,和Daniel J. Costello, Jr.,错误控制编码:基础和应用,Englewood Cliffs, n.j., Prentice-Hall, 1983。
[4] van Lint, j.h.,《编码理论导论》,纽约,Springer-Verlag, 1982。