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