Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

HDL 最適化 RS 符号化器/復号化器ライブラリ ブロックの使用

この例では、HDL に最適化された RS (リード・ソロモン) 符号化器および復号化器の各ライブラリ ブロックを使用して IEEE® 802.16 規格 [1] 対応の符号化器および復号化器を実装する方法を示します。

はじめに

RS 符号は非バイナリのブロック符号です。$K$ 情報シンボルをシンボル長 $N$ のコードワードにマッピングする RS コードは、RS($N$, $K$) コードとして表記されます。コードのシンボルは $0$$2^M-1$ の間の整数で、有限体 GF($2^M$) の要素を示します。IEEE 802.16 Broadband Wireless Access 規格 [ 1] は、GF(256) で生成された RS(255,239) 符号の短縮、パンクチャ、および消去、つまり、$N=255$$K=239$、および $M=8$ です。RS 符号化器は $N-K=16$ パリティ シンボルを導入し、RS 復号化器はこれをシンボル誤りの検出と訂正に使用します。コードは、各コードワード内の $T=\textrm{floor}[(N-K)/2]=8$ 個のシンボル誤りまで訂正できます。

このモデルでは、シミュレーションと HDL コード生成に HDL 最適化 RS 符号化器および復号化器のライブラリ ブロックを使用する方法を示します。ここでは IEEE 802.16 規格の符号化と誤り訂正が実装されます。HDL 最適化された RS 符号化器および復号化器の各ブロックの詳細は、Integer-Input RS Encoder HDL OptimizedまたはInteger-Output RS Decoder HDL Optimizedを参照してください。このブロックで使用されているアルゴリズムの詳細は、[ 2 ] を参照してください。

この例のモデルを開くには、次のコマンドを実行します。

modelname = 'commrshdl';
open_system(modelname);

ソース

Source サブシステムでは RS 符号化器の情報シンボルを生成します。Source サブシステムを開くには、以下のコマンドを実行します。

systemname = [modelname '/Source'];
open_system(systemname);

IEEE 802.16 規格によって採用されているメッセージ (情報シンボル) の 1 つには次の 36 バイト ([ 1 ] の 827 ページで指定されているランダム化されたデータ) が含まれます。

  message = [D4 BA A1 12 F2 74 96 30 27 D4 88 9C 96 E3 A9 52 B3 15 AB FD
  92 53 07 32 C0 62 48 F0 19 22 E0 91 62 1A C1 00].

Source はメッセージの後に保護間隔を入れて繰り返し送信します。このモデルは、符号化するメッセージ内のシンボル数についての messagelength をもち、messagelength および保護間隔の長さを含む period のパラメーターをもちます。メッセージ間の保護間隔には、パリティ チェック シンボルをメッセージに追加する符号化器のレイテンシおよびチェン サーチを実行する復号化器のレイテンシが考慮されています。このモデルの initFcn コールバックでは、messagelength が 36、period が 236 に設定されています (これにより保護間隔が 200 シンボルの長さをもつことがわかります)。

messagelength および period の値は必要に応じて異なります。

最上位の RS Subsystem には HDL 最適化 RS 符号化器および復号化器の各ブロックが含まれています。RS Subsystem を開くには、以下のコマンドを実行します。

systemname = [modelname '/RS Subsystem'];
open_system(systemname);

$N$ および $K$ の値はモデルの InitFcn コールバックに設定され、HDL Optimized RS Encoder ブロックと HDL Optimized RS Decoder ブロックの構成に使用されます。$N$ および $K$ の値は、このモデルでは変更できません。

メッセージの長さが $K$ 個のシンボル未満の場合、RS 符号化器は短縮符号を推測します。この場合、入力メッセージを $239-36=203$ 個のゼロでパディングし、パディングしたメッセージを符号化して 16 個のパリティ チェック シンボルを追加します。次に、ブロックは追加されたゼロのシンボルを取り除き、$36+16=52$ 個のシンボル出力を作成します。

IEEE 802.16 規格に採用されている体生成多項式は $p(x)=x^8+x^4+x^3+x^2+1$ です。それに応じて、RS 符号化器と復号化器の両方に対し [Source of primitive polynomial][Property] として、[Primitive polynomial] を [1 0 0 0 1 1 1 0 1] として、[Source of B which is the starting power for roots of the primitive polynomial][Property] として、[B value][0] としてそれぞれ設定します。IEEE 802.16 規格で使用されるコード生成多項式は $g(x)=(x+\lambda^0)(x+\lambda^1)(x+\lambda^2)\ldots (x+\lambda^{2T-1})$ で、ここで $\lambda=02_{\textrm{hex}}$ です。

$M$ およびコードワード長 $N$ に関する制限事項の詳細については、Integer-Input RS Encoderブロックのリファレンス ページを参照してください。ErrorGen サブシステムは RS で符号化されたメッセージにノイズを追加しますErrorGen サブシステムを開くには、以下のコマンドを実行します。

systemname = [modelname '/RS Subsystem/ErrorGen'];
open_system(systemname);

ErrorGen サブシステムは Noise Locations の定数値で指定されている位置のコードワードにノイズを追加するロジックを実装します。位置は必要に応じて変更できます。この例では、ノイズはシンボル F2、07、1A および 9C に対応して 5 番目、23 番目、34 番目および 12 番目のコードワードに追加されます。MATLAB® Function ブロックでは、各パケットに対しこれらの 4 回のインスタンスのときにのみ論理値 true を出力し、元のシンボルとノイズの間のビット単位 XOR 演算をアクティブにします。

出力信号

次のコマンドを使用してモデルを実行します。

sim(modelname);

信号の表示

ロジック アナライザーを使用して、複数の信号を 1 つのウィンドウに表示させることができます。これにより、遷移を観察しやすくなります。このモデルの信号は、さまざまな段階、具体的には符号化の前、符号化の後、ノイズ追加の後および復号化の後にストリーミングされます。モデルの青色のアイコンはストリーミングされた信号を示します。モデルのツールストリップからロジック アナライザーを起動します。

結果の解析

ロジック アナライザーの出力では、inputdata の信号は RS 符号化器ブロックの入力を表し、これは IEEE 802.16 36 仕様で指定されている 36 バイトのメッセージです。符号化されたデータは RS 符号化器ブロックの出力を示します。IEEE 802.16 仕様では、パリティ バイトのパンクチャを実行し、16 バイトのうち最初の 4 バイトのみを保持します。このデモでは、パリティの 16 バイトすべてが使用され、パリティの最初の 4 バイトが 49、31、40 および BF で IEEE 802.16 仕様に一致します。

errdata 信号は指定されたノイズの位置でノイズが追加された符号化データを表します。これらのノイズの位置は、inserterr 信号では 1s と記されます。

復号化され訂正された RS 復号化ブロックからのメッセージは outputdata 信号で示されます。RS 復号化器ブロックでは約 3 期間の長さのレイテンシが発生します。outputdata を観察してノイズに起因する誤りが訂正されていることを確認します。

HDL コードとテスト ベンチの生成

この例の HDL コードをチェックして生成するには、HDL Coder™ ライセンスが必要です。

生成されたファイル用に一意の一時ディレクトリ名を取得します。

    workingdir = tempname;

モデルに HDL コード生成に関して問題があるかどうかを確認するために、以下のコマンドを実行できます。

    checkhdl('commrshdl/RS Subsystem','TargetDirectory',workingdir);

以下のコマンドを入力して、HDL コードを生成します。

    makehdl('commrshdl/RS Subsystem','TargetDirectory',workingdir);

以下のコマンドを入力して、テスト ベンチを生成します。

    makehdltb('commrshdl/RS Subsystem','TargetDirectory',workingdir);

ModelSim の出力

生成した .do ファイル スクリプトをテスト ベンチに対して実行した後の ModelSim® HDL シミュレーターを以下の図に示します。以前にプロットしたように、ModelSim 結果と Simulink® 結果を比較します。

参考文献

1.IEEE 802.16: IEEE Standard for Air Interface for Broadband Wireless Access Systems(Revision of IEEE Std 802.16-2009). IEEE-SA.8 June 2012.

2.George C. Clark Jr, J. Bibb Cain, Error-Correction Coding for Digital Communications, New York: Springer, 1981.