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

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

modelname = 'commrshdl';
open_system(modelname);

Source サブシステム

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

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

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

  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 コールバックでは、messagelength36 に設定され、period708 に設定されています。これは、ガード インターバルが 672 シンボルの長さをもつことを表します。連続した 2 つの入力メッセージから正しい出力を得るには、メッセージ間のガード インターバルがブロック レイテンシとマスク パラメーター [メッセージ長] の和より大きくなければなりません。

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 符号化器と 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 で符号化されたメッセージにノイズを追加します。このサブシステムを開くには、次のコマンドを実行します。

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

ErrorGen サブシステムは、"Noise Locations" 定数で指定されている位置のコードワードにノイズを追加するロジックを実装します。位置は必要に応じて変更できます。この例では、F2、07、1A、および 9C のシンボルに対応する 5 番目、23 番目、34 番目、および 12 番目のコードワードにノイズが追加されます。MATLAB® Function ブロックでは、各パケットに対しこれらの 4 回のインスタンスのときにのみ logical 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.