Main Content

HDL QPSK 送受信機

この例では、Simulink® で HDL コード生成とハードウェア実装用に最適化された QPSK 送受信機を実装する方法を示します。

この例で示すモデルは、直交位相シフト キーイング (QPSK) に基づいてデータを変調します。この例の目標は、リアルタイム システム用に情報を送信して復元できる HDL QPSK 通信システムをモデル化することです。受信機で、単一搬送波通信システムに欠かせないシンボル タイミング同期と搬送波の周波数および位相の同期を実装します。

システム仕様

この節では、この例で使用する送受信機の仕様について説明します。フレームの形式はパケット ベースです。各パケットに長さ 26 ビットのプリアンブルが含まれます。QPSK 変調器で同一のビットが同相と直交位相で変調されるように、13 ビットのバーカー シーケンスの各ビットを 2 回繰り返してプリアンブル シーケンスが生成されます。プリアンブル シーケンスの後に 2240 ビットのペイロード データが続きます。送信機はルート レイズド コサイン (RRC) パルス整形フィルターを使用して実行されます。ロールオフ係数は 0.5 であるため、帯域幅はシンボル レートの 1.5 倍、シンボルあたりのサンプル数は 4 (サンプル レートはシンボル レートの 4 倍) になります。RRC インパルス応答は隣接する 4 つのシンボルにまたがります。ビット レートはシンボル レートの 2 倍です。実効平均ビット レートは、ビット レートにフレーム効率を掛けて求められます。フレーム効率は (2240/(2240+26)) = 0.9885 です。

既定のシンボル レートは 1.92 Mbaud に設定されています。したがって、帯域幅は 1.92e6 の 1.5 倍で 2.88 MHz、サンプル レートは 1.92e6 の 4 倍で 7.68 Msps、ビット レートは 1.92e6 の 2 倍で 3.84 Mbps になります。このシステムでサポートされる実効平均ビット レートは、3.84e6 に 0.9885 を掛けて 3.7959 Mbps となります。これらの仕様はシンボル レートを変更すると変わります。

モデル アーキテクチャ

この節では、次のブロック線図に示す QPSK 送受信機の大まかなアーキテクチャについて説明します。QPSK 送信機は、シンボル レートの 2 倍のビット レートで入力をサンプリングします。Data Generator & Packetizer は、データ ビットを収集し、プリアンブル ビットを生成し、パケット ビットを形成します。HDL Data Scrambler は、各パケットのデータ ビットをスクランブルしてビット遷移を増やし、同じビットの実行シーケンスが長くならないようにします。QPSK Modulator は、パケット ビットを変調して QPSK シンボルを生成します。RRC Transmit Filter は、QPSK シンボルをアップサンプリングしてパルス整形し、シンボル レートの 4 倍のサンプル レートの Tx 波形を生成します。QPSK 受信機は、伝送速度で入力をサンプリングします。Digital AGC は、受信波形が目的の振幅レベルになるようにゲイン制御を実行します。RRC Receive Filter は、AGC の出力に対して整合フィルター処理を実行します。Frequency and Time Synchronizer は、同期処理を実行し、各パケットの QPSK シンボルを生成します。QPSK Demodulator は、QPSK シンボルを復調してパケット ビットを生成します。HDL Data Descrambler は、受信機からストリーミングされるパケットのデータ ビットをデスクランブルします。

ファイル構造

この例は、1 つの Simulink モデルと 3 つの MATLAB® ファイルで構成されます。

  • commhdlQPSKTxRx.slx — 最上位の Simulink モデル

  • commhdlQPSKTxRxParameters.m — 初期化に必要な QPSK Tx と QPSK Rx のパラメーターを生成

  • commhdlQPSKTxRxModelInit.m — モデル commhdlQPSKTxRx.slx を初期化

  • generateHelloworldMsgBits.m — "Hello world xxx" メッセージ ビットを生成。"xxx" は 000 から 100 までの値を参照

システム インターフェイス

次の図は、QPSK 送受信機システムの最上位モデルを示しています。

送信機の入力

  • dataIn — 入力データ。boolean スカラーとして指定します。

  • validIn"dataIn" を有効にするための制御信号。boolean スカラーとして指定します。

送信機の出力

  • dataOut — 出力送信波形。シンボル レートの 4 倍のサンプル レートの 16 ビット複素数データとして返されます。

  • validOut"dataOut" を有効にするための制御信号。boolean スカラーとして返されます。

  • txDiagBus — 診断出力を含むステータス信号。バス信号として返されます。

  • dataReady — 入力信号に対する準備状況を示す信号。boolean スカラーとして返されます。

送信機は、入力ビットを受け入れる準備ができると、"dataReady" 信号を有効にしてそれを示します。送信機は、そのパケットに対応するすべてのデータ ビットを受け入れてからパケットを構成します。そのパケットに対応するすべてのデータ ビットが受信されないと、送信機はダミー パケットを生成します。ダミー パケットのバーカー シーケンスはプリアンブルに使用されず、データ ビットが内部でランダムに生成されます。入力ビット レートが実効ビット レート以下である間は、入力が "dataReady" からのバック プレシャーを受け取らないように、"dataReady" 信号は High のままになります。

受信機の入力

  • dataIn — 入力データ。送信機出力と同じサンプル レートの 16 ビット複素数データとして指定します。

  • validIn"dataIn" を有効にするための制御信号。boolean スカラーとして指定します。

受信機の出力

  • dataOut — 復号化された出力データ ビット。boolean スカラーとして返されます。

  • ctrlOut — start、end、valid の信号を含むバス信号。バス信号として返されます。

  • rxDiagBus — 診断出力を含むステータス信号。バス信号として返されます。

送信機の構造

次の図は、QPSK Tx サブシステムの最上位モデルを示しています。

Bit Packetizer

Bit Packetizer サブシステムは、Packet Controller MATLAB Function、Bits Store サブシステム、および Multiplexer サブシステムで構成されます。プリアンブル シーケンスは、Preamble Bits Store サブシステム内のルックアップ テーブル (LUT) に格納されます。データ ビットは、Bits Store サブシステムにストリーミングされ、Data Bits Store サブシステム内の RAM に格納されます。Packet Controller MATLAB Function は、各パケットのプリアンブル シーケンスと RAM に格納された後続のデータ ビットを読み取ります。Multiplexer サブシステムは、プリアンブル ビットとデータ ビットを効率化します。

Data Bits Store サブシステムは、2 つのパケットを格納できる RAM で構成されます。この RAM により、離散の有効な入力で送信機が動作する柔軟性が提供されます。Packet Controller MATLAB Function は、RAM に少なくとも 1 つのパケットのデータ ビットが格納されている場合にのみ RAM からデータを読み取ります。RAM がオーバーフローしないように読み取りと書き込みのロジックが設計されています。RAM に少なくとも 1 つのパケットのデータ ビットが格納されていない場合、送信機はダミー パケットを生成します。プリアンブル検出で検出されないように、ダミー パケットのバーカー シーケンスはプリアンブルに使用されません。

HDL Data Scrambler

HDL Data Scrambler サブシステムは、Bits Generator サブシステムによって生成される制御信号を使用して各パケットのデータ ビットをスクランブルします。

QPSK Modulator

QPSK Modulator サブシステムは、QPSK Modulator Baseband (Communications Toolbox)ブロックを使用して、プリアンブル ビットとデータ ビットを変調することで QPSK シンボルを生成します。次の表に示すグレイ マッピングが使用されます。

    Bits         Mapping     
    ____    _________________

     00     0.70711+0.70711i 
     01     -0.70711+0.70711i
     11     -0.70711-0.70711i
     10     0.70711-0.70711i 

RRC Transmit Filter

RRC Transmit Filter サブシステムは、入力を 4 倍にアップサンプリングし、Discrete FIR Filter (DSP HDL Toolbox)ブロックと RRC インパルス応答を使用して送信機の波形をパルス整形します。QPSK 受信機の受信フィルターで、この送信フィルターに対する整合フィルターが形成されます。

受信機の構造

次の図は、QPSK Rx サブシステムの最上位モデルを示しています。

Automatic Gain Control

シンボル同期装置とキャリア同期装置の位相同期回路 (PLL) の性能には入力信号の振幅が影響するため、それらの前に Automatic Gain Control サブシステムを配置しています。振幅の二乗の出力を AGC の基準と比較して振幅の誤差が生成されます。この誤差にループ ゲインを乗算して積分器を通過させることで、必要なゲインが計算されます。結果のゲインに AGC の入力を乗算して AGC の出力が生成されます。詳細については、[1] の 9.5 章を参照してください。

RRC Receive Filter

RRC Receive Filter は、送信機でパルス整形に使用されたフィルターの整合フィルター係数をもつDiscrete FIR Filter (DSP HDL Toolbox)ブロックです。RRC 整合フィルター処理により、波形のアイ ダイアグラムのアイパターン開口が最大になる時点においてゼロ ISI 特性となる RC パルス整形波形が生成されます。また、整合フィルター処理の過程で、フィルター出力の信号のノイズ パワーに対する割合 (SNR) が最大化されます。

Frequency and Time Synchronizer

Frequency and Time Synchronizer サブシステムは、シンボル同期、大まかな周波数補正、搬送波同期、およびパケット同期用のプリアンブル検出を実行します。また、搬送波同期で補正されずに残る位相不確定性を推定して解決します。

Symbol Synchronizer サブシステムは PLL ベースの実装です。[1] の 8.5 章で説明されているように、最適な時点 (アイパターン開口が最大になる時点) でサンプルを生成します。このサブシステムは 4 つの入力サンプルごとに 1 つの出力サンプルを生成します。Interpolation Filter サブシステムは、[1] の 8.4.2 章で説明されているハードウェア リソース効率に優れた Farrow 構造をもつ区分的な放物線内挿器を実装します。Farrow の係数は表 8.4.1 (係数の自由パラメーター $\alpha$ は 0.5) に示されています。このフィルターは入力波形に非整数遅延を導入します。Gardner TED サブシステムは、ガードナー法によるタイミング誤差検出器を実装します。タイミング誤差検出器については、[1] の 8.4.1 章で説明されています。ループ フィルターでタイミング誤差がフィルター処理され、そのタイミング誤差が Interpolation Control MATLAB Function ブロックに渡されます。このブロックは、[1] の 8.4.3 章で説明されている剰余 1 の減算カウンターを実装することで、ループ フィルターでフィルター処理されたタイミング誤差に基づいて非整数遅延を計算し、最適なサンプリング時点で内挿を生成します。Rate Handle サブシステムは、ストローブで示される必要な内挿を選択します。このサンプルは、シンボル同期前のアイ ダイアグラムのアイパターン開口が最大になる時点に対応します。

Coarse Frequency Compensator サブシステムは、Raise Power to 4 サブシステムで入力シーケンスを 4 のべき乗にします。これによって、入力シーケンスの QPSK 位相マッピングの依存関係は排除されますが、推定範囲が 4 分の 1 になります。このシーケンスが Coarse Frequency Estimator サブシステムにストリーミングされます。Coarse Frequency Estimator サブシステムから取得される推定は、4 のべき乗になっているため、係数 4 を削除して正規化された大まかな周波数推定を得るために 4 で除算されます。この推定で駆動されるNCO (DSP HDL Toolbox)ブロックにより、周波数オフセットを補正するための入力シーケンスで共役と乗算を行った複素指数位相が生成されます。

Coarse Frequency Estimator サブシステムは、差分で入力シーケンスを検出し、入力の複素周波数オフセット推定を抽出します。この推定が Integrator サブシステムで 2^15 の連続する推定で平均化され、最終的な複素推定が得られます。Extract Frequency サブシステムで、Complex to Magnitude-Angle (DSP HDL Toolbox)ブロックによって複素推定から周波数が抽出されます。

周波数推定器で推定されるのは、正規化周波数 (シンボル レートを基準とします) の範囲で -0.125 ~ 0.125 になります。これは、1.92 Mbaud のシンボル レートでは、周波数オフセット範囲 -240 KHz ~ 240 KHz に対応します。推定の精度については、大まかな周波数オフセット補正後の残留周波数オフセットが正規化周波数の範囲 -0.0016 ~ 0.0016 に収まるようになります。これは、1.92 Mbaud のシンボル レートでは、Carrier Synchronizer の PLL が周波数オフセット範囲 -3 KHz ~ 3 KHz に収束することに対応します。

Carrier Synchronizer サブシステムは、操作点が 45 度の正弦波位相誤差検出器をもつ TYPE II PLL です。位相誤差検出器については [1] の 7.2.2 章、設計方程式については付録 C で説明されています。操作点がゼロの正弦波位相誤差検出器をもつ TYPE II PLL の詳しい解析については、[2] の 4 章で説明されています。位相検出器の実数部と虚数部の符号関数は、4 象限のすべての角度を第 1 象限の角度 (0 ~ 90 度) に変換します。これにより、第 2 象限 (90 ~ 180 度) の 90 度、第 3 象限 (-180 ~ -90 度) の 180 度、および第 4 象限 (-90 ~ 0 度) の 270 度の角度について不確定性が生じます。位相誤差は、位相検出器の操作点 (45 度) からの偏差として計算されます。Loop Filter サブシステムの比例積分器フィルターで位相誤差がフィルター処理されます。ループ フィルターで正規化ループ帯域幅 (サンプル レートで正規化) とループ減衰係数が設定されます。既定の正規化ループ帯域幅は 0.005、既定の減衰係数は 0.7071 に設定されています。フィルター処理された誤差が位相インクリメントのソースとして Direct Digital Synthesis サブシステムに与えられます。このサブシステムでは、複素指数位相の生成にNCO (DSP HDL Toolbox)ブロックを使用します。この複素指数位相を使用して入力の周波数と位相が補正されます。直接デジタル合成の詳しい解析については、[1] の 9.2.2 章で説明されています。

Preamble Detector サブシステムは、バーカー シーケンスを使用して入力の連続相関を実行します。この相関は、反転したバーカー シーケンスをDiscrete FIR Filter (DSP HDL Toolbox)ブロックの係数とする畳み込みとして実装されます。相関後の出力の振幅は、Correlator サブシステム内のComplex to Magnitude-Angle (DSP HDL Toolbox)ブロックを使用して求められます。相関の振幅がしきい値と比較されます。Peak Search サブシステムは、しきい値を超えた最大相関ピークの検索を 1 フレーム時間ごとに開始し、タイミング オフセットを記録します。Timing Adjust サブシステムは、パケットのタイミングをタイミング オフセットに基づいて同期し、パケット同期済みのサンプルであることを後続のサブシステムに示す "syncPulse" 信号を生成します。

Phase Ambiguity Estimation and Correction サブシステムは、[1] の 7.7.1 章で説明されているユニーク ワード方式に基づいて位相不確定性の解決を行います。この方式では、プリアンブル シーケンスをリファレンス配列として使用します。入力のプリアンブル シーケンスでリファレンス配列の共役と乗算を行い、残留位相を位相不確定性の推定として抽出します。この推定を使用して、コンスタレーションを不確定性と反対方向に回転させることで不確定性を補正します。

Packet Controller サブシステムは、パケット境界の制御信号を生成します。

QPSK Demodulator

QPSK Demodulator サブシステムは、QPSK Demodulator Baseband (Communications Toolbox)ブロックを使用して、パケット同期済みのシンボルを復調することでビットを生成します。

HDL Data Descrambler

HDL Data Descrambler サブシステムは、復調されたビットをデスクランブルしてユーザー ビットを生成します。このサブシステムは送信機側で使用されるスクランブラと同じです。

モデルの実行

commhdlQPSKTxRx.slx モデルを実行してシミュレートします。Input Data サブシステム マスクでカスタム データを設定し、Channel サブシステム マスクでチャネル構成を設定できます。QPSKTxRxVerification.m スクリプトに、commhdlQPSKTxRx.slx モデルを検証する手続きが記述されています。この検証スクリプトは、スクリプト内で基準波形を生成してから、基準波形を送信機出力と比較し、送信されたビットを受信機の復号化されたユーザー ビットと比較します。

検証と結果

sim commhdlQPSKTxRx を実行してモデルを実行します。

>> sim commhdlQPSKTxRx;

Simulation completed
Running the verification script

QPSK Tx:
Maximum absolute symbol error: Real:1.4496e-05 Imaginary:1.4496e-05

Maximum absolute RRC output error: Real:7.8708e-05 Imaginary:7.8708e-05

QPSK Rx:
Initial frames not compared : 29

Number of packets missed = 0 out of 30

Number of packets false detected = 0 out of 30

Number of bits errored = 0 out of 67200

HDL コード生成

モデル全体にパイプライン レジスタ (シアンで表示) が追加されており、送信機と受信機のサブシステムに長いクリティカル パスがないことを確認できます。

この例で参照している HDL コードをチェックして生成するには、HDL Coder™ 製品が必要です。

送信機と受信機のサブシステムの HDL コードを生成するには、モデルを更新し、次のコマンドを使用します。

  makehdl('commhdlQPSKTxRx/QPSK Tx')  and   makehdl('commhdlQPSKTxRx/QPSK Rx')

テスト ベンチを生成するには、次のコマンドを使用します。

  makehdltb('commhdlQPSKTxRx/QPSK Tx')  and   makehdltb('commhdlQPSKTxRx/QPSK Rx')

テスト ベンチの生成時間はシミュレーション時間に依存します。

結果の HDL コードは、Xilinx® Zynq®-7000 ZC706 評価ボード用に合成されたものです。配置配線後のリソース使用状況を次の表に示します。最大動作周波数は、送信機が 276 MHz、受信機が 194 MHz です。

       Resources       Tx Usage    Rx Usage
    _______________    ________    ________

    Slice Registers      321        10441  
    Slice LUT            160        7490   
    RAMB36               0          10     
    RAMB18               1          0      
    DSP48                18         110    

その他の調査

次の表に示す変数を commhdlQPSKTxRx.slx モデルの Channel サブシステム マスクで調整することで、チャネル条件を変更してモデルを実行できます。

        Variable Name                                               Description                                      
    ______________________    _______________________________________________________________________________________

    dataBits                  Data bits to the transmitter                                                           
    Rsym                      Symbol rate specified in symbols per second                                            
    fractionalTimingOffset    Normalized timing phase offset specified in the range >= 0 and < 1                     
    timingFrequencyOffset     Timing frequency offset specified in PPM                                               
    EbN0dB                    Energy per information bit to single sided noise power spectral density specified in dB
    CFO                       Carrier frequency offset specified in Hz                                               
    CPO                       Carrier phase offset specified in degrees                                              

参照

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

2.Floyd M.Gardner, Phaselock Techniques, Third Edition, John Wiley & Sons, Inc., 2005

参考

ブロック