SDR DVB-T2 přijímač v C++

Software Defined Radio je metoda, která nahrazuje práci s kovem (která je ve skutečnosti prospěšná pro vaše zdraví) bolestí hlavy z programování. SDR předpovídají velkou budoucnost a za hlavní výhodu je považováno odstranění omezení v implementaci rádiových protokolů. Příkladem je modulační metoda OFDM (Orthogonal frequency-division multiplexing), kterou umožňuje pouze metoda SDR. SDR má ale ještě jednu, čistě inženýrskou příležitost – schopnost ovládat a vizualizovat signál v libovolném bodě s nejmenším úsilím.

Jedním ze zajímavých komunikačních standardů je pozemní pozemní televize DVB-T2.
Proč? Televizi si samozřejmě můžete jednoduše zapnout bez vstávání, ale není tam absolutně na co koukat a to už není můj názor, ale lékařský fakt.

Vážně, DVB-T2 je navrženo s velmi širokými možnostmi, včetně:

  • vnitřní aplikace
  • modulace z QPSK na 256QAM
  • šířka pásma od 1,7 MHz do 8 MHz

Mám zkušenosti s příjmem digitální televize na principu SDR. Standard DVB-T je ve známém projektu GNURadio. Existuje blok gr-dvbs2rx pro standard DVB-T2 (vše pro stejné GNURadio), ale vyžaduje předběžnou synchronizaci signálu a je inspirativní (speciálně díky Ronu Economos).

Co máme.

Existuje norma ETSI EN 302 755, která podrobně popisuje vysílání, ale ne příjem.

Signál je ve vzduchu se vzorkovací frekvencí 9,14285714285714285714 MHz, modulovaný COFDM s 32768 nosnými, v pásmu 8 MHz.

Doporučuje se přijímat takové signály s dvojnásobnou vzorkovací frekvencí (aby se nic neztratilo) a na mezifrekvenci větší šířkou pásma (superheterodynní příjem), aby se zbavil stejnosměrného (DC) offsetu a „úniku“ lokálního oscilátoru. (LO) do vstupu přijímače. Zařízení, která splňují tyto podmínky, jsou příliš drahá pro pouhou zvědavost.

SdrPlay s 10Msps 10bit nebo AirSpy s podobnými vlastnostmi je mnohem levnější. O dvojnásobné vzorkovací frekvenci zde nemůže být řeč a příjem lze provádět pouze s přímou konverzí (Zero IF). Proto (z finančních důvodů) přecházíme na stranu vyznavačů „čistého“ SDR s minimem hardwarových konverzí.

Bylo nutné vyřešit dva problémy:

  1. Synchronizace. Zjistěte přesnou fázově přesnou odchylku RF a odchylku vzorkovací frekvence.
  2. Přepište normu DVB-T2 pozpátku.

Druhý úkol vyžaduje mnohem více kódu, ale lze jej vyřešit vytrvale a lze jej snadno ověřit pomocí testovacích signálů.

Testovací signály jsou k dispozici na serveru BBC ftp://ftp.kw.bbc.co.uk/t2refs/ s podrobnými pokyny.

Řešení prvního problému je velmi závislé na vlastnostech zařízení SDR a jeho řídicích schopnostech. Použití doporučených funkcí řízení frekvence, jak se říká, nebylo úspěšné, ale dalo spoustu zkušeností s jejich čtením. dokumentace, programování, sledování TV seriálů, řešení filozofických otázek..., zkrátka nebylo možné projekt opustit.

Víra v „čistou SDR“ jen zesílila.

Vezmeme signál takový, jaký je, interpolujeme jej téměř na analogový a vyjmeme diskrétní, ale podobný skutečnému.

Blokové schéma synchronizace:

SDR DVB-T2 přijímač v C++

Zde je vše podle učebnice. Další je trochu složitější. Je třeba počítat odchylky. Existuje mnoho literatury a výzkumných článků, které porovnávají výhody a nevýhody různých metod. Od klasiků – to je „Michael Speth, Stefan Fechtel, Gunnar Fock, Heinrich Meyr, optimální design přijímače pro širokopásmový přenos na bázi OFDM – část I a II.“ Ale nepotkal jsem jediného inženýra, který by uměl a chtěl počítat, takže byl použit inženýrský přístup. Stejným způsobem synchronizace bylo do testovacího signálu zavedeno rozladění. Porovnáním různých metrik se známými odchylkami (sám je představil) byly vybrány ty nejlepší pro výkon a snadnost implementace. Odchylka přijímacího kmitočtu se vypočítá porovnáním ochranného intervalu a jeho opakující se části. Fáze přijímací frekvence a vzorkovací frekvence se odhadují z fázové odchylky pilotních signálů a toho se také používá v jednoduchém lineárním ekvalizéru OFDM signálu.

Charakteristika ekvalizéru:

SDR DVB-T2 přijímač v C++

A to vše funguje dobře, pokud víte, kdy začíná rámec DVB-T2. K tomu je v signálu vysílán symbol P1 preambule. Způsob detekce a dekódování P1 symbolu je popsán v technické specifikaci ETSI TS 102 831 (existuje také mnoho užitečných doporučení pro příjem).

Autokorelace signálu P1 (nejvyšší bod na začátku snímku):

SDR DVB-T2 přijímač v C++

První obrázek (do pohyblivého obrázku zbývá jen šest měsíců...):

SDR DVB-T2 přijímač v C++

A zde se dozvídáme, co je nerovnováha IQ, DC offset a LO únik. Kompenzace těchto zkreslení specifických pro přímou konverzi je zpravidla implementována v ovladači zařízení SDR. Proto trvalo dlouho, než jsme pochopili: vyřazení hvězd z přátelské konstelace QAM64 je dílem kompenzačních funkcí. Musel jsem všechno vypnout a napsat kolo.

A pak se obrázek pohnul:

SDR DVB-T2 přijímač v C++

Modulace QAM64 se specifickou rotací konstelací ve standardu DVB-T2:

SDR DVB-T2 přijímač v C++

To je ve zkratce výsledek průchodu mletého masa zpět přes mlýnek na maso. Norma poskytuje čtyři typy míchání:

  • bitové prokládání
  • prokládání buněk (směšování buněk v kódovacím bloku)
  • časové prokládání (je také ve skupině kódovacích bloků)
  • frekvenční prokládání (směšování frekvencí v symbolu OFDM)

Výsledkem je, že na vstupu máme následující signál:

SDR DVB-T2 přijímač v C++

To vše je boj o odolnost kódovaného signálu proti šumu.

Celkový

Nyní vidíme nejen samotný signál a jeho tvar, ale také servisní informace.
Ve vysílání jsou dva multiplexy. Každý má dva fyzické kanály (PLP).

Jedna zvláštnost byla zaznamenána v prvním multiplexu - první PLP je označena jako „multiple“, což je logické, protože v multiplexu je více než jedna, a druhá PLP je označena jako „single“ a to je otázka.
Ještě zajímavější je druhá podivnost ve druhém multiplexu - všechny programy jsou v prvním PLP, ale ve druhém PLP je signál neznámého charakteru nízkou rychlostí. Minimálně VLC player, který si rozumí s asi padesátkou video formátů a stejným množstvím zvuku, to nepozná.

Samotný projekt naleznete zde.

Projekt byl vytvořen s cílem určit samotnou možnost dekódování DVB-T2 pomocí SdrPlay (a nyní AirSpy.), takže se ani nejedná o alfa verzi.

PS Zatímco jsem s obtížemi psal článek, podařilo se mi do projektu integrovat PlutoSDR.

Někdo si hned řekne, že pro IQ signál na výstupu USB6 je jen 2.0Msps, ale potřebujete minimálně 9,2Msps, ale to je samostatné téma.

Zdroj: www.habr.com

Přidat komentář