Main Content

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

HDL QAM 送信機および受信機

この例では、HDL コード生成およびハードウェア実行用に 64-QAM 送受信機を実装する方法を説明します。

概要

HDL QAM 送信機および受信機」の例では、HDL コード生成をサポートする Simulink® ブロックを使用してデジタル通信送信機と受信機のベースバンド処理を実装する方法を説明します。

HDL QAM Tx サブシステムは、複素数値の 64-QAM 変調コンスタレーションを生成します。受信機サブシステムの動作のデモンストレーションのため、浮動小数点チャネル モデル Channel を使用して、減衰、チャネル ノイズ、搬送周波数オフセットおよび非整数遅延を付加します。HDL QAM Rx サブシステムは、租周波数再生、タイミング再生、フレーム同期とフレーム振幅および位相再生を使用して、チャネル障害を緩和するための実用的なデジタル受信機を実装します。その後、Text Message Decoding サブシステムによって受信データ パケットが復号化されて MATLAB® コマンド ウィンドウに出力されます。

例の構造

QAM 受信機モデルの最上位構造を次の図に示します。QAM Tx HDL サブシステムおよび QAM Rx HDL サブシステムは、HDL コード生成用に最適化されています。

QAM Tx HDL サブシステムの構造の詳細は次の図のとおりです。

QAM Tx HDL サブシステムには次のコンポーネントが含まれています。これらについては、HDL QAM 送信機の節で詳しく説明されています。

  • Data Generation & Packetization - シンボルにマップするビットをグループ化し、送信するパケットを生成

  • Symbol Mapping - Data Generation & Packetization サブシステムからのビット出力を QAM シンボルにマップ

  • Pulse Shaping - 送信前に内挿 RRC (ルート レイズド コサイン) フィルターを使用してシンボルのパルス整形とアップサンプリングを実行

Channel の構造は、次のとおりです。Channel サブシステムは、減衰と周波数オフセットが指定されている AWGN チャネルに類似しており、ソフトウェアで実行することを意図されています。そのため、ここでは、Phase/Frequency Offset ブロックなどのような HDL コード生成でサポートされていないブロックを使用することができます。Phase/Frequency Offset ブロックは固定小数点データ型をサポートしていません。そのため、Channel サブシステムの入力での double 型への変換もサポートしていません。信号は、Channel サブシステムから出力される前に固定小数点型に戻されます。非整数遅延と AWGN が送信信号に適用され、その信号が Gain ブロックで減衰されます。

QAM Rx HDL サブシステムの構造の詳細は次の図のとおりです。

QAM Rx HDL サブシステムには次のコンポーネントが含まれています。これらについては、HDL QAM 受信機の節で詳しく説明されています。

  • Automatic Gain Control (AGC) - 受信信号強度を正規化する

  • Coarse Frequency Offset Correction - 受信信号のおおよその周波数オフセットを推定して補正。このサブシステムには係数 2 でダウンサンプリングする受信 RRC フィルターも含まれる

  • Timing Recovery - 再生されたタイミング ストローブに従って入力信号をリサンプルし、適切なサンプリング時点においてシンボルを判定

  • Magnitude & Phase Recovery - パケット検出、位相と振幅の細かな補正を実行

  • Demodulate - 信号を復調し、シンボルをビットにデマップする

Text Message Decoding サブシステムの構造を次に示します。

このサブシステムはソフトウェアで実行されることが予測されるので、計算を速くするためにフレームベース信号を採用することをお勧めします。Text Message Decoding サブシステムには、8 つのサンプルベース boolean 入力信号 (dValid、packetStart および信号 bit1 から bit6) があります。サンプルベースの信号からフレームベースの信号への変換は dataframer MATLAB Function ブロックによって実装されます。復調されたビットは、dValid が高位に設定されている場合にのみ有効になります。dataframer ブロックは、dValid 信号を使用して遅延線を受信ビットで埋め、newPacket 信号を使用して、遅延線に格納されているデータを出力に転送して遅延線をリセットします。Descramble and Print サブシステムは、イネーブル信号が高位になるときのみ受信データを処理します。以上のことは、遅延線に 336 の復調された有効ビットが蓄積された場合または newPacket 信号が高位の場合に発生します。その結果、dataframer によって RxGo 信号が高位に設定されます。シミュレーションの実行中、Descramble and Print サブシステムは、文字列 "Hello world! ~64QAM test string~ ###" を MATLAB コマンド ウィンドウに出力します。ここで、'###' は '000'、'001'、'002'、...、'099' の繰り返しシーケンスです。また、50 パケットごとに、正常に受信された直近の 50 パケットにおけるデータのビット誤り率が MATLAB コマンド ウィンドウに表示されます。

HDL QAM 送信機 (HDL QAM Tx)

HDL Transmitter には、Data Generation & PacketizationSymbol Mapping および Pulse Shaping の各ブロックが含まれています。これらについて、以降の節で詳しく説明します。

1 - Data Generation & Packetization

Controller FSM (有限ステート マシン、Finite State Machine) と Data Source がプリアンブル ビットとデータ ビットを生成し、スクランブルを行って、パケットを作成します。各パケットは、84 ビットのバーカー符号プリアンブルと 252 ビットのスクランブルされたデータから構成されます。Group Bits ブロックは、Symbol Mapping で必要な場合は、入力データ ビット ストリームを入力サンプリング レートの 6 分の 1 の 6 ビット整数に変換します。

Data Source サブシステムには 2 サンプルのパイプライン遅延があります。さらに、データ ソースとビット ペアリング サブシステムの間にパイプライン遅延があります。そのため、有効な信号はデータ パスのパイプライン遅延に合うように遅延されます。Group Bits サブシステムは、係数 6 でサンプル レートを下げます。有効なコントロール パスで係数 6 のダウンサンプリングを行うことにより、有効なコントロール パスのサンプル レートが信号パスのサンプル レートと一致するようになります。

  • Controller FSM - Controller FSM は、MATLAB™ Function ブロックを使用して制御ステート マシンを実装します。FSM には 2 つの状態、Pack_PreambleAppend_Data があります。Pack_Preamble 状態は、load_preamble 信号をアサートし、reset_preamble および load_data 信号をアサート解除します。FSM は 84 クロック サイクルの間、この状態を維持します。これに続き、FSM は load_preamble 信号をリリースすると同時に、Append_Data 状態に移行し、load_data 信号と reset_preamble 信号をアサートします。FSM は 252 クロック サイクルの間、この状態を維持します。load_preamble および reset_preamble は boolean で、各パケット開始時のプリアンブルの読み込みを管理する Preamble Address Counter の制御に使用されます。load_data 信号は boolean で、パケットへのデータの読み込みを制御する Data Address Counter を有効にするために使用されます。

  • Data Source - Data Source サブシステムには 2 つの LUT があり、それぞれプリアンブル ビットとデータ ビットが格納されます。preamble lookup LUT は、Preamble Address Counter によって解決されます。このカウンターは、Controller FSM で生成される reset preamble 信号と load preamble 信号によって制御されます。data lookup LUT は、Data Address Counter によって解決されます。このカウンターは、Controller FSM で生成される load_data 信号によって有効になります。各パケット開始時に同じプリアンブルが挿入されるため、Preamble Address Counter には Controller FSM によって生成されるリセット信号があります。Data Address Counter では、データ アドレス シーケンスはかなり長く、各パケットに異なるデータ ビットが配置されるためパケットごとに異なります。そのため、このカウンターにはリセット信号がありません。さらに、データ LUT 用のカウンターを有効にするため、load data 入力を使用して、HDL Data Scrambler コンポーネントを有効にするタイミングを制御し、Preamble Data Mux によるプリアンブル ビットとデータ ビットの選択を制御します。

  • HDL Data Scrambler - HDL Data Scrambler について以下の図に示しています。これは、XOR ゲート (剰余 2 の加算用) およびレジスタを使用して、一から作成されています。有効にされたサブシステムを使用して、処理すべき新しい入力データがある場合にのみスクランブラーが有効になるようにしています。

  • Group Bits - Group Bits サブシステムの目的は、個別の 6 つのビットを、Symbol Mapping コンポーネントに必要な入力形式である 6 ビット符号なし整数出力へのグループ化です。多数の遅延を使用して Bit Concat ブロックの入力で 6 ビットを整列させ、このブロックで 6 ビットの符号なし出力に連結します。その後、この出力がダウンサンプリングされて、正しくグループ化されたビットが選択されます。

2 - Symbol Mapping

Symbol Mapping サブシステムは、Rectangular QAM Modulator Baseband ブロックを使用して整数入力値を対応する 64-QAM 複素数値シンボルにマップします。このブロックではグレイ マッピング方式を使用します。

3 - Pulse Shaping

Pulse Shaping サブシステムは、アップサンプリング係数が 4 の RRC Interpolation Filter ブロックを使用します。整合フィルターが受信機に実装されています。フィルターはパイプライン化 (「HDL Block Properties」を参照) されます。

HDL QAM 受信機 (HDL QAM Rx)

HDL Receiver には、AGCCoarse Frequency Offset CorrectionTiming RecoveryMagnitude & Phase Recovery および Demodulate の各ブロックが含まれています。これについては、以降の節で詳しく説明します。

1 - AGC

AGC は、Coarse Frequency Compensation の入力の振幅が 1 から -1 までの範囲に正規化されるようにします。

AGC の構造を次の図に示します。モデルでは、パイプライン レジスタが緑色で示されています。

2 - Coarse Frequency Offset Correction

Coarse Frequency Offset Correction サブシステムは、Luise-Reggiannini アルゴリズム [1] を使用して、周波数オフセットを推定して修正します。Frequency Offset Estimation サブシステムは、Root Raised Cosine Receive Filter の出力に基づいて推定を行い、その後、その推定に基づく周波数オフセットの修正を Root Raised Cosine Receive Filter への入力で適用します。これにより、受信信号帯域幅の必要な部分と受信フィルターの周波数応答とがより一層対応し、Root Raised Cosine Receive Filter の出力での修正に比べて SNR が改善されます。

推定と修正のアルゴリズムは閉ループ内での操作であるため、以前の周波数オフセットの推定値を繰り返し更新することにより、徐々に結果が導き出されます。推定値の平均化を実装するため、ループ ゲインが組み込まれています。このアーキテクチャは、[1] で説明されています。Root Raised Cosine Receive Filter がダウンサンプリング操作を実装するので、フィルターへの入力でレートが一致するようにするには、Repeat ブロックを使用してフィードバック信号をアップサンプリングする必要があります。

Coarse Frequency Offset Correction サブシステムの出力では時間の経過とともに変化する残留周波数オフセットがあるということに注意してください。そのように変化するのは、サブシステムへの入力における周波数オフセットが同じままであっても、そのオフセットについて新たな推定が行われるためです。残留オフセットの詳細な補正は、受信機の Magnitude and Phase Recovery サブシステムによって行われます。

  • Frequency Offset Estimation: Frequency Offset Estimation サブシステムは Luise-Regiannini アルゴリズム ([1] を参照) を実装します。第 4 強度の位相推定器 ([2] を参照) を実装するため、信号は最初は強度 4 に設定されます。この実装には、カスケード接続された 2 つの Product ブロックに加え、ハードウェア性能の向上のために付加されたパイプライン化が使用されます。Discrete FIR Filter は、すべてが 1 で構成される矩形重み付きフィルター ([1] を参照) を実装します。FIR Scale はフィルター ゲインを考慮して FIR 出力をスケーリングします。Complex To Magnitude-Angle HDL Optimized ブロックは、Luise-Reggiannini アルゴリズムで必要な関数 $angle$ を実装するために使用されます。このブロックはハードウェア フレンドリな CORDIC アルゴリズムを使用して位相を計算します。詳細については、DSP System Toolbox™ のComplex to Magnitude-Angle HDL Optimizedブロックを参照してください。Frequency Offset Estimation サブシステムから出力される前に、信号は Luise-Regiannini アルゴリズムで必要な場合はスケーリングされ、さらに、NCO の語長に合うようにスケーリングされます。

3 - タイミング再生

Timing Recovery サブシステムを次の図に示します。

Timing Recovery サブシステムは PLL ([3] の 8 章を参照) を実装し、受信信号のタイミングの誤差を補正します。Timing Recovery サブシステムは平均して、入力サンプル 2 つにつき出力サンプルを 1 つ生成します。

Interpolation Control Function ブロックは剰余 1 の減算カウンター ([3] の 8.4.3 章を参照) を実装し、Interpolation Filter の内挿の選択を容易にするための制御信号を生成します。この制御信号は Timing Error Detector (TED) も有効にし、正確なタイミングの時点でタイミング誤差を計算するようにします。Interpolation Control サブシステムは、Interpolation Filter のタイミング差 mu を更新し、最適なサンプリング時点で内挿を生成します。

内挿フィルターは、$\alpha=0.5$ をもつ Farrow パラボリック フィルターです ([3] の 8.4.2 章を参照)。このフィルターでは 0.5 の $\alpha$ が使用されているため、すべてのフィルター係数は 1、-1/2、3/2 のいずれかになり、内挿構造は大幅に簡素化されます。内挿に基づき、ゼロクロッシングの Timing Error Detector ([3] の 8.4.1 章を参照) によってタイミング誤差が生成されます。

タイミング誤差を補正するため、内挿フィルターによって信号で非整数遅延が発生するようにします。この非整数遅延は mu 入力信号によって制御します。タイミング誤差 (遅延) がシンボルの境界に達すると、出力の内挿が 1 つ超過/不足してしまいます。この内挿の超過または不足に対処するため、タイミング誤差検出器にはビット スタッフィングまたはスキッピングが実装されます。

ビット スタッフィングとスキッピングについての詳細は、[3] の 8.4.4 章を参照してください。タイミング再生ループは通常、入力サンプル 2 つにつき 1 出力サンプルの割合で生成します。また、入力サンプルレートで実行されるタイミング ストローブ (validOut 信号) も出力します。通常の場合、ストローブの値は 1 と 0 が交互に並んだシーケンスです。しかし、これが起きるのは送信機と受信機間の相対遅延になにかしらの 1 シンボル周期の分数部が含まれ、かつ (シンボル間の) 遅延の整数部が一定である場合のみです。相対遅延の整数部が変化すると、ストローブ値に 0 または 1 が 2 回連続で出力されてしまう場合があります。

4 - 振幅と位相の再生

Magnitude & Phase Recovery サブシステムは、パケット同期、および細かな周波数再生と振幅再生を実施します。

  • パケット同期: Preamble Matched Filter サブシステムは、プリアンブルの時間反転複素共役をフィルターの重みとして使用します。Preamble Matched Filter サブシステムの出力の係数は Modulus サブシステムを使用して計算されます。その後、Modulus サブシステムの出力がしきい値と比較されて、パケットの先頭のプリアンブルが検出されます。この MATLAB Function ブロックは、信号 isPreamble を生成します。この信号は各パケットのプリアンブルの間は高位に保持されます。また、MATLAB function ブロックは dvalid 信号も生成します。この信号はプリアンブルが検出されたときはパケットの存続期間中高い値に設定されます。

  • Fine Grained Magnitude and Phase Recovery: 1-Tap DLMS (遅延最小平均二乗) フィルター サブシステムは、プリアンブルに適応し、Desired Signal Source によって生成される基準信号を使用するというものであり、位相誤差と振幅誤差の両方を補正します。isPreamble 信号は、MATLAB Function ブロックで生成され、パケットが検出された後、14 個のプリアンブル シンボルの期間は高位に維持されます。この信号を使用して、必要な信号ソースを有効にし、1-Tap DLMSAdapt 入力を有効にします。isPreamble 信号が低位の場合、1-Tap DLMS の重みが保持され、Desired Signal Source がリセットされます。ここで遅延 LMS (DLMS)[4] アルゴリズムを使用することにより、より一層のパイプライン処理の導入が可能です。その結果、フィルターのクリティカル パスが減り、ハードウェアでの実装後の実現可能な最大クロック レートが高まります。

Desired Signal Source サブシステムの内部構造を次に示します。data lookup LUT にはプリアンブル シンボルが含まれています。

1-Tap DLMS サブシステムの内部構造を次に示します。

5 - 復調

Demodulate サブシステムは、各 64-QAM 入力シンボルをビットにマップして、入力シンボルごとに 6 ビットを出力します。Rectangular QAM Demodulator Baseband ブロックの HDL コードを生成するため、シンボル間の最大距離は 2 に設定しなければなりません。これは、送信機で生成されるシンボル間の距離の 8 倍です。したがって、それに応じて Demodulate サブシステムへのシンボル入力がスケールアップされなければなりません。この操作は、Shift Arithmetic ブロックを使用して行います。このブロックで、バイナリ ポイントを 3 ビット分だけ左にシフトして、必要な 8 の倍数にします。

結果と表示

シミュレーション中、正常に受信されたパケットが MATLAB コマンド ウィンドウに表示されます。また、50 パケットごとに、正常に受信された直近の 50 パケットにおけるデータのビット誤り率が MATLAB コマンド ウィンドウに表示されます。

シミュレーションの実行後、異なる 6 点の図が表示され、受信機性能の各側面が示されます。以下にこれを示し、各プロットについて説明します。最初の 5 つのプロットは、Automatic Gain Control周波数オフセット推定タイミング再生の位置推定、Timing Recovery サブシステムの出力と Magnitude & Phase Recover サブシステムの出力におけるコンスタレーションの実数部について、シミュレーション期間中の適応の様子を示しています。最後のプロットは、なんらかの適応が行われた後の Magnitude & Phase Recovery サブシステムの出力におけるコンスタレーション ダイアグラムを示しています。

  • AGC ゲインのプロット

次のプロットは、出力が正規化されるまでの時間経過に伴う Automatic Gain Control サブシステムの適応の様子を示しています。AGC の適応までの時間と、ゲインが比較的安定したレベルに達した後のリップル数とでバランスをとらなければなりません。AGC ループ ゲインを大きくすると適応にかかる時間は短くなりますが、適応の後の振幅が大きくなります。ループ ゲインを小さくすると AGC はゆっくりと適応していき、適応後のレベルは平滑化されますが、適応にかかる時間が長くなります。

  • 周波数オフセット推定のプロット

次のプロットは、租周波数オフセットがシステムにより組み込まれた周波数オフセット (青色の水平線) に徐々に適応していく様子を示しています。推定値が実際の周波数オフセットに近づいていますが、まだ残留誤差があり、後にシステムにおいて解決しなければなりません。

  • タイミング再生位置のプロット

次のプロットは、Interpolation Filter に対する mu 入力を示しています。シミュレーション中はチャネル遅延が変化しないため、mu は時間が経つにつれて定常状態 (いくつかのリップルあり) に収束していくということに注意してください。

  • タイミング再生出力の実数部のプロット

次のプロットは、Timing Recovery サブシステムの出力の実数部が 64QAM で想定されている 8 つの個別の振幅レベルへと収束し始めている様子を示しています。ただし、この段階では、祖周波数再生後に残る残留周波数オフセットがまだ受信機で修正されていないので、いくつかの時点では、比較的はっきりと観測できる個々の振幅レベルにおいて、他の場所に比べて信号の品質にばらつきがあります。この時点では、まだ受信機でコンスタレーションが若干回転します。

  • シンボル推定値の実数部のプロット

次のプロットは、Magnitude & Phase Recovery サブシステムの出力の実数部が時間の経過に伴って適応していく様子を示しています。上記のプロットとは異なり、この図は詳細な周波数再生の後に生成されているため、コンスタレーションは回転しません。ブロックからの出力が有効でないため最初はサンプルがなく、その後、8 つの明確な振幅レベルが示されます。これらは、64-QAM コンスタレーションの 8 つの実際の振幅レベルを表しています。

  • 再生されたコンスタレーション プロット

次のプロットは、システムにおけるチャネルへの適応時間経過後の Magnitude & Phase Recovery サブシステムの出力時のコンスタレーションを示しています。チャネル ノイズが減ると各コンスタレーション点のサイズが小さくなり、チャネル ノイズが増えると個々のコンスタレーション点が収束し始めます。システムで周波数オフセットに対する修正が正常に行われなかった場合、ここでコンスタレーションの回転が観測されます。

参考文献

1.M. Luise and R. Reggiannini, "Carrier frequency recovery in all-digital modems for burst-mode transmissions," IEEE Trans.Communications, pp. 1169-1178, 1995.

2.Moeneclaey, M. and De Jonghe, G. "ML-oriented NDA carrier synchronization for general rotationally symmetric signal constellations", IEEE Trans. Communications, pp.2531-2533, 1994.

3.Michael Rice, "Digital Communications - A Discrete-Time Approach", Prentice Hall, April 2008.

4.G. Long , F. Ling and J. G. Proakis "The LMS algorithm with delayed coefficient adaptation", IEEE Trans. on Acoustics, Speech and Signal Processing, pp.1397-1405, 1989.