SDR DVB-T2 sprejemnik v C++

Programsko definiran radio je metoda zamenjave kovinskega dela (ki je dejansko dobro za vaše zdravje) z glavobolom programiranja. SDR napovedujejo veliko prihodnost in kot glavno prednost štejejo odpravo omejitev pri izvajanju radijskih protokolov. Primer je modulacijska metoda OFDM (Orthogonal frequency-division multiplexing), ki jo omogoča le metoda SDR. Toda SDR ima še eno, povsem inženirsko priložnost - možnost nadzora in vizualizacije signala na kateri koli poljubni točki z najmanj truda.

Eden izmed zanimivih komunikacijskih standardov je prizemna prizemna televizija DVB-T2.
Za kaj? Seveda lahko preprosto prižgeš TV, ne da bi vstal, ampak tam ni čisto nič za gledati in to ni več moje mnenje, ampak medicinsko dejstvo.

Resno, DVB-T2 je zasnovan z zelo širokimi zmogljivostmi, vključno z:

  • uporaba v zaprtih prostorih
  • modulacija iz QPSK v 256QAM
  • pasovna širina od 1,7MHz do 8MHz

Imam izkušnje s sprejemom digitalne televizije po principu SDR. Standard DVB-T je v znanem projektu GNURadio. Obstaja blok gr-dvbs2rx za standard DVB-T2 (vse za isti GNURadio), vendar zahteva predhodno sinhronizacijo signala in je navdihujoč (posebna hvala Ronu Economosu).

Kar imamo.

Obstaja standard ETSI EN 302 755, ki podrobno opisuje prenos, ne pa tudi sprejema.

Signal je v etru s frekvenco vzorčenja 9,14285714285714285714 MHz, moduliran s COFDM s 32768 nosilci, v pasu 8 MHZ.

Takšne signale je priporočljivo sprejemati z dvojno frekvenco vzorčenja (da ne izgubimo ničesar) in pri vmesni frekvenci z večjo pasovno širino (superheterodinski sprejem), da se znebimo odmika enosmernega toka (DC) in "puščanja" lokalnega oscilatorja. (LO) na vhod sprejemnika. Naprave, ki izpolnjujejo te pogoje, so predrage za zgolj radovednost.

SdrPlay z 10Msps 10bit ali AirSpy s podobnimi lastnostmi je veliko cenejši. Tu ne gre za dvojno frekvenco vzorčenja in sprejem je mogoč samo z neposredno pretvorbo (Zero IF). Zato (iz finančnih razlogov) prehajamo na stran privržencev »čistega« SDR z minimalno predelavo strojne opreme.

Treba je bilo rešiti dva problema:

  1. Sinhronizacija. Ugotovite natančno fazno natančno odstopanje RF in odstopanje frekvence vzorčenja.
  2. Prepišite standard DVB-T2 nazaj.

Druga naloga zahteva veliko več kode, vendar jo je mogoče rešiti z vztrajnostjo in jo je mogoče enostavno preveriti s testnimi signali.

Testni signali so na voljo na strežniku BBC ftp://ftp.kw.bbc.co.uk/t2refs/ s podrobnimi navodili.

Rešitev prvega problema je močno odvisna od lastnosti SDR naprave in njenih krmilnih zmožnosti. Uporaba priporočenih funkcij nadzora frekvence, kot pravijo, ni bila uspešna, vendar je branje teh dalo veliko izkušenj. dokumentacija, programiranje, gledanje serij, reševanje filozofskih vprašanj ..., skratka, projekta ni bilo mogoče opustiti.

Vera v »čisto SDR« se je samo še okrepila.

Signal vzamemo takšnega, kot je, ga interpoliramo skoraj do analognega in vzamemo diskretnega, vendar podobnega pravemu.

Blokovni diagram sinhronizacije:

SDR DVB-T2 sprejemnik v C++

Tukaj je vse po učbeniku. Naslednje je malo bolj zapleteno. Odstopanja je treba izračunati. Obstaja veliko literature in raziskovalnih člankov, ki primerjajo prednosti in slabosti različnih metod. Od klasike - to je "Michael Speth, Stefan Fechtel, Gunnar Fock, Heinrich Meyr, Optimalna zasnova sprejemnika za širokopasovni prenos na osnovi OFDM - I. in II. del." Nisem pa srečal niti enega inženirja, ki bi znal in hotel računati, zato je bil uporabljen inženirski pristop. Z isto sinhronizacijsko metodo smo v testni signal vnesli razglasitev. S primerjavo različnih metrik z znanimi odstopanji (uvedel jih je sam) so bile izbrane najboljše glede na zmogljivost in enostavnost implementacije. Odklon sprejemne frekvence se izračuna s primerjavo zaščitnega intervala in njegovega ponavljajočega se dela. Faza sprejemne frekvence in frekvenca vzorčenja sta ocenjeni iz faznega odstopanja pilotnih signalov in to se uporablja tudi v preprostem, linearnem izenačevalniku signala OFDM.

Lastnosti izenačevalnika:

SDR DVB-T2 sprejemnik v C++

In vse to deluje dobro, če veste, kdaj se začne okvir DVB-T2. Za to se v signalu prenese simbol preambule P1. Metoda zaznavanja in dekodiranja simbola P1 je opisana v tehnični specifikaciji ETSI TS 102 831 (tam je tudi veliko uporabnih priporočil za sprejem).

Avtokorelacija signala P1 (najvišja točka na začetku slike):

SDR DVB-T2 sprejemnik v C++

Prva slika (samo še šest mesecev do gibljive slike...):

SDR DVB-T2 sprejemnik v C++

In tukaj izvemo, kaj so neravnovesje IQ, DC offset in LO leakage. Praviloma je kompenzacija za ta popačenja, značilna za neposredno pretvorbo, izvedena v gonilniku naprave SDR. Zato je trajalo dolgo, da smo razumeli: izločanje zvezd iz prijazne konstelacije QAM64 je delo kompenzacijskih funkcij. Moral sem vse ugasniti in napisati svoje kolo.

In potem se je slika premaknila:

SDR DVB-T2 sprejemnik v C++

QAM64 modulacija s specifično rotacijo konstelacije v standardu DVB-T2:

SDR DVB-T2 sprejemnik v C++

Skratka, to je rezultat vrnitve mletega mesa skozi mlinček za meso. Standard predvideva štiri vrste mešanja:

  • prepletanje bitov
  • prepletanje celic (mešanje celic v kodirnem bloku)
  • časovno prepletanje (je tudi v skupini kodirnih blokov)
  • frekvenčno prepletanje (mešanje frekvenc v simbolu OFDM)

Posledično imamo na vhodu naslednji signal:

SDR DVB-T2 sprejemnik v C++

Vse to je boj za odpornost proti hrupu kodiranega signala.

Skupaj

Zdaj lahko vidimo ne le sam signal in njegovo obliko, temveč tudi servisne informacije.
Na sporedu sta dva multipleksa. Vsak ima dva fizična kanala (PLP).

Pri prvem multipleksu je bila opažena ena nenavadnost - prvi PLP ima oznako "multiple", kar je logično, saj jih je v multipleksu več, drugi PLP pa ima oznako "single" in to je vprašanje.
Še bolj zanimiva je druga nenavadnost v drugem multipleksu - vsi programi so v prvem PLP, v drugem PLP pa je signal neznane narave pri nizki hitrosti. Vsaj predvajalnik VLC, ki razume približno petdeset video formatov in prav toliko zvoka, ga ne prepozna.

Sam projekt najdete tukaj.

Projekt je bil ustvarjen z namenom ugotoviti samo možnost dekodiranja DVB-T2 s pomočjo SdrPlay (in zdaj AirSpy.), tako da to niti ni alfa verzija.

PS Medtem ko sem s težavo pisal članek, mi je PlutoSDR uspelo integrirati v projekt.

Nekdo bo takoj rekel, da je za signal IQ na izhodu USB6 samo 2.0Msps, potrebujete pa vsaj 9,2Msps, vendar je to posebna tema.

Vir: www.habr.com

Dodaj komentar