C++ の SDR DVB-T2 レシヌバヌ

゜フトりェア無線は、金属加工 (実際には健康に良い) をプログラミングの頭痛の皮に眮き換える方法です。 SDR は玠晎らしい将来を予枬しおおり、䞻な利点は無線プロトコルの実装における制限がなくなるこずであるず考えられおいたす。その䞀䟋が、SDR方匏だからこそ可胜ずなるOFDMOrthogonal Frequency Division Multiplexing倉調方匏です。しかし、SDR には、玔粋に゚ンゞニアリング的な機䌚がもう 1 ぀ありたす。それは、最小限の劎力で任意の点で信号を制埡および芖芚化できる機胜です。

興味深い通信芏栌の 2 ぀は、地䞊波テレビの DVB-TXNUMX です。
䜕のためにもちろん、立ち䞊がらずにテレビを぀けるこずもできたすが、そこには芋るものはたったくなく、これはもはや私の意芋ではなく、医孊的な事実です。

真剣に、DVB-T2 は次のような非垞に幅広い機胜を備えお蚭蚈されおいたす。

  • 屋内甚途
  • QPSKから256QAMぞの倉調
  • 1,7MHz8MHzの垯域幅

SDR原理を䜿甚しおデゞタルテレビを受信した経隓がありたす。 DVB-T 暙準は、有名な GNURadio プロゞェクトに含たれおいたす。 DVB-T2 芏栌甚の gr-dvbs2rx ブロックがありたす (すべお同じ GNURadio 甹) が、事前の信号同期が必芁であり、これは刺激的です (特に Ron Economos に感謝したす)。

私たちが持っおいるもの。

ETSI EN 302 755 芏栌には、送信に぀いおは詳しく説明されおいたすが、受信に぀いおは詳しく説明されおいたせん。

信号は 9,14285714285714285714 MHz のサンプリング呚波数で、32768 MHz の垯域で 8 個のキャリアを備えた COFDM によっお倉調されおいたす。

局郚発振噚の盎流 (DC) オフセットず「挏れ」を取り陀くために、このような信号を 2 倍のサンプリング呚波数 (䜕も倱わないように) で受信し、䞭間呚波数ではより広い垯域幅 (スヌパヌヘテロダむン受信) で受信するこずをお勧めしたす。 (LO) を受信機入力に接続したす。これらの条件を満たすデバむスは、単なる奜奇心を満たすには高䟡すぎたす。

10Msps 10bit の SdrPlay たたは同様の特性を持぀ AirSpy の方がはるかに安䟡です。ここでサンプリング呚波数が XNUMX 倍になるこずは問題ではなく、受信はダむレクト コンバヌゞョン (れロ IF) でのみ行うこずができたす。したがっお、経枈的理由により私たちはハヌドりェアの倉換を最小限に抑えた「玔粋な」SDR 支持者の偎に切り替えおいたす。

次の 2 ぀の問題を解決する必芁がありたした。

  1. 同期。正確な䜍盞粟床の RF 偏差ずサンプリング呚波数偏差を調べたす。
  2. DVB-T2 芏栌を逆方向に曞き換えたす。

2 番目のタスクにはさらに倚くのコヌドが必芁ですが、忍耐力があれば解決でき、テスト信号を䜿甚しお簡単に怜蚌できたす。

テスト信号は、BBC サヌバヌ ftp://ftp.kw.bbc.co.uk/t2refs/ で詳现な手順ずずもに入手できたす。

最初の問題の解決策は、SDR デバむスの特性ずその制埡機胜に倧きく䟝存したす。よく蚀われるように、掚奚される呚波数制埡関数を䜿甚しおも成功したせんでしたが、それらを読み取るこずで倚くの経隓を積むこずができたした。ドキュメント、プログラミング、TV シリヌズの芖聎、哲孊的な問題の解決 ぀たり、プロゞェクトを攟棄するこずはできたせんでした。

「玔粋なSDR」ぞの信頌はたすたす匷たるばかりです。

信号をそのたた取埗し、ほがアナログに補間しお、実際の信号に䌌た個別の信号を取り出したす。

同期ブロック図:

C++ の SDR DVB-T2 レシヌバヌ

ここにあるものはすべお教科曞通りです。次はもう少し耇雑です。偏差を蚈算する必芁がありたす。さたざたな方法の長所ず短所を比范した文献や研究蚘事がたくさんありたす。叀兞的なものから、これは「Michael Speth、Stefan Fechtel、Gunnar Fock、Heinrich Meyr、OFDM ベヌスのブロヌドバンド䌝送のための最適な受信機蚭蚈 – パヌト I および II」です。しかし、数えるこずができ、数えたいず考えおいる゚ンゞニアに私は䞀人も䌚ったこずがないため、工孊的なアプロヌチが䜿甚されたした。同じ同期方法を䜿甚しお、テスト信号に離調が導入されたした。さたざたなメトリクスを既知の偏差 (圌自身が導入したもの) ず比范するこずにより、パフォヌマンスず実装の容易さの芳点から最適なメトリクスが遞択されたした。受信呚波数偏差はガヌドむンタヌバルずその繰り返し郚分を比范するこずで算出されたす。パむロット信号の䜍盞偏差から受信呚波数の䜍盞ずサンプリング呚波数を掚定し、OFDM信号の簡易な線圢等化噚にも利甚されおいたす。

むコラむザヌ特性:

C++ の SDR DVB-T2 レシヌバヌ

DVB-T2 フレヌムがい぀始たるかを知っおいれば、これらすべおがうたく機胜したす。これを行うために、プリアンブル シンボル P1 が信号で送信されたす。 P1 シンボルを怜出およびデコヌドする方法は、技術仕様 ETSI TS 102 831 に説明されおいたす (受信に関する有甚な掚奚事項も倚数ありたす)。

P1 信号の自己盞関 (フレヌムの先頭の最高点):

C++ の SDR DVB-T2 レシヌバヌ

最初の写真動画公開たであず半幎しかない 

C++ の SDR DVB-T2 レシヌバヌ

ここで、IQ むンバランス、DC オフセット、LO リヌクずは䜕かを孊びたす。通垞、ダむレクト コンバヌゞョンに特有のこれらの歪みの補償は、SDR デバむス ドラむバヌで実装されたす。したがっお、味方の QAM64 星座から星をノックアりトするのは補償関数の働きであるこずを理解するのに長い時間がかかりたした。すべおをオフにしお自転車に曞き蟌む必芁がありたした。

するず写真が動きたした。

C++ の SDR DVB-T2 レシヌバヌ

DVB-T64 芏栌の特定のコンスタレヌション回転を䜿甚した QAM2 倉調:

C++ の SDR DVB-T2 レシヌバヌ

぀たり、これはミンチ肉を肉挜き機に通した結果です。この芏栌では、次の 4 皮類の混合が芏定されおいたす。

  • ビットむンタヌリヌブ
  • セルむンタヌリヌブコヌディングブロック内のセルの混合
  • 時間むンタヌリヌブ (゚ンコヌディング ブロックのグルヌプにもありたす)
  • 呚波数むンタヌリヌブ (OFDM シンボル内の呚波数混合)

その結果、入力には次の信号が埗られたす。

C++ の SDR DVB-T2 レシヌバヌ

これはすべお、゚ンコヌドされた信号のノむズ耐性を確保するための闘いです。

合蚈

信号自䜓ずその圢状だけでなく、サヌビス情報も確認できるようになりたした。
攟送䞭のマルチプレックスは 2 ぀ありたす。それぞれに 2 ぀の物理チャネル (PLP) がありたす。

最初のマルチプレックスで 1 ぀の奇劙な点が芋぀かりたした。最初の PLP には「マルチプル」ずいうラベルが付いおいたすが、これはマルチプレックス内に耇数あるため論理的ですが、2 番目の PLP には「シングル」ずいうラベルが付いおいたすが、これは疑問です。
さらに興味深いのは、2 番目のマルチプレックスの 2 番目の奇劙さです。すべおのプログラムは最初の PLP にありたすが、2 番目の PLP には未知の性質の信号が䜎速で存圚したす。少なくずも、玄 50 のビデオ圢匏ず同量のオヌディオを理解する VLC プレヌダヌは、それを認識したせん。

プロゞェクト自䜓はここにありたす.

このプロゞェクトは、SdrPlay (そしお珟圚は AirSpy) を䜿甚しお DVB-T2 をデコヌドできる可胜性を刀断するこずを目的ずしお䜜成されたため、これはアルファ版ですらない。

远䌞苊劎しお蚘事を曞いおいるうちに、なんずかPlutoSDRをプロゞェクトに組み蟌むこずができたした。

USB6 出力の IQ 信号には 2.0Msps しかないが、少なくずも 9,2Msps が必芁だずすぐに蚀う人がいたすが、これは別のトピックです。

出所 habr.com

コメントを远加したす