DVB 標準#
Digital Video Broadcasting(デジタルビデオ放送)は、DVB-C(デジタルテレビケーブル伝送標準)、DVB-T(デジタルテレビ地上伝送標準)、DVB-S(デジタルテレビ衛星伝送標準)を含む完全なデジタルテレビソリューションであり、以下では主に DVB-S システムについて紹介します。
DVB-S はデジタル衛星放送標準であり、衛星伝送は広範なカバレッジと大容量のプログラムを持つ利点があります。信号はと畳み込み符号の級聯符号化を使用し、変調方式は QPSK です。
DVB-S チャネル符号化および変調の基本原理#
原理ブロック図#
ETSI の DVB-S 標準に基づく原理ブロック図は以下の通りです。
衛星が提供する DTH サービスは特に電力制限の影響を受けるため、主な設計目的はノイズと干渉に対する耐性であり、スペクトル効率ではありません。スペクトル効率を過度に損なうことなく高いエネルギー効率を実現するために、システムは QPSK 変調と畳み込み符号および RS 符号の級聯を使用する必要があります。
インターフェース#
チャネル符号化#
TS ストリーム適応ユニット(adaptation)#
入力された TS ストリームは MPEG-2 形式に従って固定長でパッケージ化され、パケットの長さは 188、フレームヘッダーは同期ワード です。DVB-S 標準では、8 つの TS パケットが 1 つのスーパーフレームを構成し、スーパーフレーム内の 8 つの同期ヘッダーを反転させてにし、残りの同期ヘッダーはそのままにします。また、自動的に空パケットを挿入し、データパケットの後に 16 個の 0 を挿入して、長さ 188 のデータパケットを長さ 204 のデータパケットに補充し、後続のチャネル符号化モジュールとのクロックマッチングとインターフェース接続を確立します。
擾乱符号ユニット(energy dispersal)#
ベースバンド信号には多くの連続した「1」または「0」が含まれており、これによりベースバンド信号のスペクトルに多くの低周波成分が含まれ、信号のチャネル伝送や受信側でのクロック信号の抽出に不利です。したがって、擾乱符号を使用して TS ストリームを擾乱された擬似ランダム系列に変換します。DVB-S 標準におけるランダム化の原理図は以下の通りです。
擾乱された擬似ランダム二進数系列の生成多項式は以下の通りです:
擾乱符号は 8 つのデータパケットで構成されるスーパーフレームを単位として処理し、各ユニットの処理を開始する際に、系列をレジスタにロードし、擾乱処理を行います。データパケットの同期ワードは擾乱処理を行いません。
RS 符号化#
外部符号には RS 符号が使用され、これは同時にランダムエラーとバーストエラーを修正する能力を持ち、バーストエラーの修正がより効果的です。DVB-S で使用される符号化形式は RS (239,255) を切り取って得られた RS (188,204) 符号であり、最大修正可能な長さは 8 バイトで、符号化は同期ワードまたはから開始されます。
符号化原理の簡単な説明#
情報多項式を仮定すると、
符号生成多項式は
ここで_a_ = 02_hex_であるため、生成多項式の展開式は
をで割った余りは x の 15 次多項式であり、その 16 個の係数が生成された 16 個のチェックバイトであり、これを長さ 188 のデータパケットに追加することで RS (188,204) の符号化が完了します。
畳み込みインターリーブ#
デジタル信号伝送プロセスでは、一連のデータエラーを引き起こす突発的な干渉が発生する可能性があり、RS 符号の修正範囲を超える可能性があります。畳み込みインターリーブはエラーの文字を分散させ、チャネルをほぼ無記憶チャネルにします。DVB-S では、深さ 12 の畳み込みインターリーブが採用されています。インターリーブとデインターリーブのブロック図は以下の通りです。
畳み込み符号化#
内部符号には (2,1,7) 型の畳み込み符号が使用され、符号化効率はであり、6 つのシフトレジスタと 2 つのモジュロ 2 加算器で構成され、1 ビット信号が 2 ビットの符号化信号を生成し、制約長は 7 です。
チャネル品質が良好な場合、符号化信号の冗長性を削減して、チャネル利用率を向上させることができます。
Matlab シミュレーション#
TS ストリーム適応および擾乱符号モジュール#
CLKdivide#
1 つの HDTV 信号のビットレートは $8Mbps$ であるため、二進数信号の速度はで、入力データは型であるため、入力信号の速度はです。したがって、CLKdivide モジュールはのクロックをとに分周します。
sigSource#
このモジュールは入力 TS ストリーム信号を生成し、RS 符号化の開始、終了、およびイネーブル信号を生成します。188 バイト長のデータパケットを出力した後に TS ストリームを一時停止して空パケットを挿入する必要があるため、イネーブルシステムを使用し、188 回カウントした後にイネーブルを低下させて空パケットを挿入します。
HeaderProcess#
このモジュールは入力 TS ストリームの速度変換とスーパーフレームのグループ化を行い、8 つのデータパケットを 1 つのスーパーフレームに組み合わせ、最初の同期ワードを反転させ、$0x47$ から $0xb8$ に変換し、sigSource の信号をイネーブルします。同時に、擾乱符号モジュールの制御信号を生成します。
最初の Multiport Switch は空パケットを挿入するために使用され、2 番目の Multiport Switch はスーパーフレームの最初の同期ワードを反転させるために使用されます。
myScrambler#
擾乱符号の生成多項式に基づいて設計されています。HeaderProcess で生成された擾乱イネーブル信号は、入力同期ワード時にちょうど低下し、擾乱処理は行われません。擾乱リセット信号は 1 つのスーパーフレームを入力した後に初期系列を再ロードします。
シミュレーションデータ#
RS 符号化モジュール#
HDL Coder のモジュールを使用し、クロック速度がであるため、RS 符号化が符号化速度 $R_B$ に従って行われることを保証するためにトリガーモジュールを追加する必要があります。
畳み込みインターリーブ#
同様にトリガーモジュールを追加し、インターリーブの速度を符号化速度にします。
uint8 から binary モジュール#
まず、入力データをビットごとに AND 演算し、各ビットのデータを取り出して Multiport Switch を使用して逐次出力し、カウンタのイネーブル速度は符号化速度 $R_B$ の 8 倍です。
畳み込み符号化#
冗長性を削減しない場合、符号化効率はです。冗長性を削減することもでき、の符号化効率を得ることができます。一定の帯域幅内で、符号化効率が大きいほど伝送効率が高くなり、同時に誤り訂正能力が低下します。
Vivado 実装#
Vivado のコードの大部分は HDL Coder によって生成され、または Matlab によって生成された係数ファイルを Vivado の IP コアにインポートします。
DataSource_Scrambler#
直接 HDL コードを生成する場合、DataSource_Scrambler モジュール内の sigSource モジュールはの周波数でセットアップ時間のマージンがタイミングを満たさないため、HDL を生成する前に以下の設定を行います:
出力端に 1 段のパイプラインを追加した後、合成配線後のタイミングが通過します。同時に、このモジュールの出力信号のすべてに遅延モジュールを追加してパイプラインを構成します。
擾乱符号モジュール#
8 つのデータパケットを入力した後、擾乱内部の D フリップフロップの初期値がリセットされ、反転された同期ワードは擾乱処理されません。
データ整列#
シミュレーション中に、同期ワード $0xb8$ と RS 符号化のイネーブル信号が整列していないことが判明したため、以下のモジュールを追加します:
出力のイネーブル信号を 1 データ周期遅らせることで、信号の同期を保証します。
RS 符号化#
modelsim のデータを matlab にインポートしてデコードすると、188 個のデータパケットが完全に解読されたことがわかります。
アップサンプリングコサインロールオフフィルター#
Matlab フィルタ設計#
DVB-S 標準の要求に従い、コサインロールオフ係数はであり、Matlab の filterDesigner ツールを使用してフィルタ係数を設計します。
FPGA ではフィルタ係数を定点化処理する必要があります。
係数を 32 ビット量子化した後の振幅応答は以下の通りです:
係数を 16 ビット量子化した後の振幅応答は以下の通りです:
16 ビット量子化の振幅応答は 32 ビット量子化の応答とほぼ同じであり、スペースを節約するために 16 ビット量子化を使用します。
量子化が終了したら、ターゲット→Xilinx 係数ファイルをクリックして coe ファイルを生成します。
Vivado Fir フィルタ設計#
Source を COE FIle として選択します。
入力サンプリング周波数はクロック周波数と等しく、オーバーサンプリングは行いません。
Implementation で係数タイプを符号付き数に選択し、ビット幅を 16 に設定します。
入力信号は正負 1 であるため、入力のビット幅は 2 であり、最初のビットは符号ビットです。出力モードは全精度に設定します。
波形#
XDMA を使用したデータの入力および出力収集#
構造ブロック図は上記の通りです。
プロジェクトの全体構造は上記の通りで、データは XDMA の M_AXIS_H2C インターフェースを介して書き込まれます。データの書き込みビット幅は 128 ビットであり、プロジェクト内の信号処理部分の入力ビット幅は 8 ビットであるため、AXISDataWidthConverter モジュールを追加してビット幅を 16BYTE から 1BYTE に変換し、FIFO に書き込みます。AXIGPIO モジュールを使用して FIFO の almost full 信号を読み取り、FIFO が満杯になると almost full が高くなり、データの書き込みを停止します。DVB-S で生成された QPSK 信号を読み取る際、アップサンプリングコサインロールオフフィルタと変調を経て信号のビット幅が大きくなっているため、複雑さを低減するために変調信号の高位を 128 ビットにゼロパディングしてから M_AXIS_C2H インターフェースを介してホストに出力します。