moerjielovecookie

Sawen_Blog

一个普通工科牲的博客网站
x
github
follow
email

DVB-Sシステム設計報告

DVB 標準#

Digital Video Broadcasting(デジタルビデオ放送)は、DVB-C(デジタルテレビケーブル伝送標準)、DVB-T(デジタルテレビ地上伝送標準)、DVB-S(デジタルテレビ衛星伝送標準)を含む完全なデジタルテレビソリューションであり、以下では主に DVB-S システムについて紹介します。

DVB-S はデジタル衛星放送標準であり、衛星伝送は広範なカバレッジと大容量のプログラムを提供する利点があります。信号は RS (188,204) と畳み込み符号の級連符号化を使用し、変調方式は QPSK です。

DVB-S チャンネル符号化および変調の基本原理#

原理ブロック図#

ETSI の DVB-S 標準に基づく原理ブロック図は以下の通りです。

1717241147381.png

衛星が提供する DTH サービスは特に電力制限の影響を受けるため、主な設計目的はノイズと干渉に対する耐性であり、スペクトル効率ではありません。スペクトル効率を過度に損なうことなく高いエネルギー効率を実現するために、システムは QPSK 変調と畳み込み符号および RS 符号の級連を使用する必要があります。

インターフェース#

2024after4202406012140085.png

チャンネル符号化#

TS ストリーム適応ユニット(adaptation)#

入力された TS ストリームは MPEG-2 形式に従って固定長でパッケージ化され、パケットの長さは 188、フレームヘッダーは同期ワード 47hex47_{hex} です。DVB-S 標準では、8 つの TS パケットが 1 つのスーパーフレームを構成し、スーパーフレーム内の 8 つの同期ヘッダーを反転させてb8hexb8_{hex}にし、残りの同期ヘッダーはそのままにします。また、自動的に空パケットを挿入し、データパケットの後に 16 個の 0 を挿入して、長さ 188 のデータパケットを長さ 204 のデータパケットに補完し、後続のチャンネル符号化モジュールとのクロックマッチングとインターフェース接続を確立します。

擾乱符号化ユニット(energy dispersal)#

ベースバンド信号には連続した「1」または「0」が多く含まれており、これによりベースバンド信号のスペクトルに多くの低周波成分が含まれ、信号のチャネル伝送や受信側でのクロック信号の抽出に不利になります。したがって、擾乱符号化を使用して TS ストリームを擾乱された擬似ランダム系列に変換します。DVB-S 標準のランダム化の原理図は以下の通りです。

2024after4202406012158761.png

擾乱された擬似ランダム二進数系列の生成多項式は以下の通りです。

1+x14+x151 + x^{14} + x^{15}

擾乱符号化は 8 つのデータパケットで構成されるスーパーフレーム単位で処理され、各ユニットの処理が開始されるときに、系列100101010000000”100101010000000“をレジスタにロードし、擾乱符号化処理を行います。データパケットの同期ワードは擾乱符号化処理を行いません。

RS 符号化#

外部符号には RS 符号化を使用し、これはランダムエラーとバーストエラーを同時に訂正する能力を持ち、バーストエラーの訂正がより効果的です。DVB-S で使用される符号化形式は、RS (239,255) を切り取って得られる RS (188,204) 符号であり、最大訂正長は 8 バイトで、符号化は同期ワード47hex47_{hex}またはb8hexb8_{hex}から始まります。

2024after4202406021124574.png

符号化原理の簡単な説明#

情報多項式を仮定すると、

m(x)=m187x187+m186x186++m1x1+m0m(x)=m_{187}x^{187}+m_{186}x^{186}+\cdots+m_1x^1+m_0

符号生成多項式は

g(x)=(x+a0)(x+a1)(x+a2)(x+a14)(x+a15)g(x)=(x+a^0)(x+a^1)(x+a^2)\cdots(x+a^{14})(x+a^{15})

ここでa=02hexa  = 02_{hex}とすると、生成多項式の展開式は

g(x)=x16+59x15+13x14+104x13+189x12+68x11+209x10+30x9+8x8+163x7+65x6+41x5+229x4+98x3+50x2+36x+59g(x)=x^{16}+59x^{15}+13x^{14}+104x^{13}+189x^{12}+68x^{11}+209x^{10}\\\\+30x^{9}+8x^8+163x^7+65x^6+41x^5+229x^4+98x^3+50x^2+36x+59

x16m(x)x^{16}\cdot m(x)g(x)g(x)で割った余りはxxの 15 次多項式であり、その 16 個の係数が生成された 16 個のチェックバイトとなり、これを長さ 188 のデータパケットに追加することでRS(188,204)RS(188,204)の符号化が完了します。

畳み込みインターリーブ#

デジタル信号伝送プロセスでは、一連のデータエラーを引き起こす突発的な干渉が発生し、RS 符号の訂正範囲を超える可能性があります。畳み込みインターリーブは、エラーのある文字を分散させ、チャネルをほぼ無記憶チャネルに変えることができます。DVB-S では、インターリーブ深度 12 の畳み込みインターリーブが採用されています。インターリーブとデインターリーブのブロック図は以下の通りです。

2024after4202406021621696.png

畳み込み符号化#

内部符号には(2,1,7)(2,1,7)型の畳み込み符号を使用し、符号化効率はkn=12\frac{k}{n}=\frac{1}{2}で、6 つのシフトレジスタと 2 つのモジュロ 2 加算器で構成され、1 ビット信号から 2 ビットの符号化信号が生成され、制約長は 7 です。

2024after4202406021629604.png

チャネル品質が良好な場合、符号化信号を削減してチャネル利用率を向上させることができます。

Matlab シミュレーション#

TS ストリーム適応および擾乱符号化モジュール#

2024after4202406052140904.png

CLKdivide#

1 つの HDTV 信号のビットレートは8Mbps8Mbpsであるため、バイナリ信号のレートは8Mbps8Mbpsで、入力データはuint8uint8型であるため、入力信号のレートは1M1Mです。したがって、CLKdivide モジュールは200MHz200MHzのクロックを1MHz1MHz8MHz8MHzに分周します。

sigSource#

このモジュールは入力 TS ストリーム信号を生成し、RS 符号化の開始、終了、および有効信号を生成します。188 バイト長のデータパケットを出力するたびに TS ストリームの出力を一時停止して空パケットを挿入する必要があるため、有効システムを使用し、188 回カウントした後に有効を低下させて空パケットを挿入します。

1717680505998.png

HeaderProcess#

このモジュールは入力 TS ストリームのレート変換とスーパーフレームのグループ化を行い、8 つのデータパケットを 1 つのスーパーフレームに組み合わせ、最初の同期ワードを反転させ、0x470x47から0xb80xb8に変換し、sigSource の信号を有効にします。同時に、擾乱符号化モジュールの制御信号を生成します。

1717595838765.png

最初の Multiport Switch は空パケットを挿入するために使用され、2 番目の Multiport Switch はスーパーフレームの最初の同期ワードを反転させるために使用されます。

myScrambler#

擾乱符号化の生成多項式に基づいて設計されています。HeaderProcess が生成した擾乱符号化の有効信号は、入力同期ワードのときにちょうど低下し、擾乱符号化処理は行われません。擾乱リセット信号は 1 つのスーパーフレームを入力した後に初期系列”100101010000000“を再度ロードします。

1717596010781.png

シミュレーションデータ#

1717596346825.png

RS 符号化モジュール#

1717660503082.png

HDL Coder 内のモジュールを使用し、クロックレートが200MHz200 MHzであるため、RS 符号化が符号元レートRBR_Bに従って行われることを保証するためにトリガーモジュールを追加する必要があります。

畳み込みインターリーブ#

1717678715013.png

同様にトリガーモジュールを追加し、インターリーブの速度が符号元レートRBR_Bであることを保証します。

uint8 から binary モジュール#

1717679814804.png

まず、入力データをビットごとに AND 演算し、各ビットのデータを取り出して Multiport Switch でビットごとに出力し、カウンターの有効レートは符号元レート $R_B$ の 8 倍です。

畳み込み符号化#

1717680106902.png

削減を行わない場合、符号化効率は12\frac{1}{2}です。削減を行うこともでき、23345678\frac{2}{3}、\frac{3}{4}、\frac{5}{6}、\frac{7}{8}の符号化効率を得ることができます。一定の帯域幅内では、符号化効率が大きいほど伝送効率が高くなり、同時に訂正能力が低下します。

Vivado 実装#

Vivado のコードの大部分は HDL Coder によって生成されるか、Matlab によって生成された係数ファイルを Vivado の IP コアにインポートします。

2024after4202407102025567.svg

1717682059758.png

DataSource_Scrambler#

HDL コードを直接生成する場合、DataSource_Scrambler モジュール内の sigSource モジュールは200MHz200 MHzの周波数でのセットアップ時間の余裕がタイミングを満たさないため、HDL を生成する前に以下の設定を行います。

2024after4202406062201977.png

出力端に 1 段のパイプラインを追加した後、合成配線後のタイミングが通過します。同時に、このモジュールの出力信号のすべてに遅延モジュールを追加してパイプラインを構成します。

擾乱符号化モジュール#

1717850077215.png

8 つのデータパケットを入力した後、擾乱符号化内部の D フリップフロップの初期値がリセットされ、反転された同期ワード0xb80xb8は擾乱符号化処理を受けませんでした。

データ整列#

シミュレーション中に、同期ワード0xb80xb8と RS 符号化の有効信号が整列していないことが判明したため、以下のモジュールを追加します。

1717914876682.png

出力の有効信号を 1 データ周期遅らせることで、信号の同期を保証します。

RS 符号化#

modelsim のデータを matlab にインポートしてデコードすると、188 個のデータパケットが完全に解読されたことがわかります。

1717915096882.png

上昇コサインロールオフフィルター#

Matlab フィルター設計#

DVB-S 標準の要求に基づき、上昇コサインロールオフ係数は0.350.35であり、Matlab の filterDesigner ツールを使用してフィルター係数を設計します。

1717726664610.png

FPGA ではフィルター係数を定点化処理する必要があります。

係数を 32 ビット量子化した後の振幅応答は以下の通りです。

1717726986681.png

係数を 16 ビット量子化した後の振幅応答は以下の通りです。

1721734678137.png

16 ビット量子化の振幅応答は 32 ビット量子化の応答とほぼ同じであり、スペースを節約するために 16 ビット量子化を使用します。

量子化が終了したら、ターゲット→Xilinx 係数ファイルをクリックして coe ファイルを生成します。

1717727667745.png

Vivado Fir フィルター設計#

Source を COE ファイルとして選択します。

2024after4202406071040715.png

入力のサンプリング周波数はクロック周波数と等しく、オーバーサンプリングは行いません。

2024after4202406071042659.png

Implementation で係数タイプを符号付き数に選択し、ビット幅を1616に設定します。

2024after4202406071044904.png

入力信号は正負 1 なので、入力のビット幅は 2 で、最初のビットは符号ビットです。出力モードは全精度に設定します。

1717728524290.png

波形#

1717728686099.png

XDMA を使用したデータの入力および出力収集#

2024after4202407102121277.png

2024after4202407102121462.png

構造ブロック図は上記の通りです。

プロジェクトの全体構造は上記の通りで、データは XDMA の M_AXIS_H2C インターフェースを介して書き込まれます。書き込むデータのビット幅は128bit128bitであり、プロジェクト内の信号処理部分の入力ビット幅は 8bit であるため、AXISDataWidthConverter モジュールを追加してビット幅を 16BYTE から 1BYTE に変換し、FIFO に書き込み、AXIGPIO モジュールを使用して FIFO の almost full 信号を読み取ります。FIFO が満杯になると、almost full が高くなり、データの書き込みを停止します。DVB-S で生成された QPSK 信号を読み取ると、上昇コサインロールオフフィルターと変調を経て信号のビット幅が大きくなっているため、複雑さを減らすために変調信号の高位を 0 で埋めて 128bit にし、M_AXIS_C2H インターフェースを介してホストマシンに出力します。

デバッグプロセスは以下を参照してください。

link_to_page

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。