SDR DVB-T2 ûntfanger yn C ++

Software Defined Radio is in metoade om metaalwurk (dat eins goed is foar jo sûnens) te ferfangen mei de hoofdpijn fan programmearring. SDR's foarsizze in grutte takomst en it wichtichste foardiel wurdt beskôge as it fuortheljen fan beheiningen yn 'e ymplemintaasje fan radioprotokollen. In foarbyld is de OFDM (Orthogonal frequency-division multiplexing) modulaasjemetoade, dy't allinich mooglik makke wurdt troch de SDR-metoade. Mar SDR hat ek noch ien, suver technyske kâns - de mooglikheid om in sinjaal op elk willekeurig punt te kontrolearjen en te visualisearjen mei de minste ynspanning.

Ien fan de nijsgjirrige kommunikaasje noarmen is ierdske ierdske televyzje DVB-T2.
Foar wat? Fansels kinne jo gewoan de tv oansette sûnder oerein te kommen, mar d'r is hielendal neat te sjen en dit is net mear myn miening, mar in medysk feit.

Serieus, DVB-T2 is ûntworpen mei heul brede mooglikheden, ynklusyf:

  • indoor applikaasje
  • modulaasje fan QPSK nei 256QAM
  • bânbreedte út 1,7MHz to 8MHz

Ik haw ûnderfining yn it ûntfangen fan digitale televyzje mei it SDR-prinsipe. De DVB-T-standert is yn it bekende GNURadio-projekt. Der is in gr-dvbs2rx blok foar de DVB-T2 standert (allegear foar deselde GNURadio), mar it fereasket foarriedige sinjaal syngronisaasje en it is ynspirearjend (spesjaal tank oan Ron Economos).

Wat wy hawwe.

D'r is in ETSI EN 302 755-standert dy't oerdracht detaillearret, mar net ûntfangst.

It sinjaal is yn 'e loft mei in samplingfrekwinsje fan 9,14285714285714285714 MHz, modulearre troch COFDM mei 32768 dragers, yn in band fan 8 MHZ.

It is oan te rieden om sokke sinjalen te ûntfangen mei dûbel de samplingfrekwinsje (om neat te ferliezen) en op 'e tuskenfrekwinsje mear bânbreedte (superheterodyne-ûntfangst), om ôf te kommen fan direkte stroom (DC) offset en "lekkage" fan 'e lokale oscillator (LO) nei de ûntfanger ynfier. Apparaten dy't oan dizze betingsten foldwaan binne te djoer foar gewoan nijsgjirrigens.

SdrPlay mei 10Msps 10bit of AirSpy mei ferlykbere skaaimerken is folle goedkeaper. Der is gjin sprake fan dûbele de sampling frekwinsje hjir en ûntfangst kin allinnich dien wurde mei direkte konverzje (Nul IF). Dêrom (foar finansjele redenen) wikselje wy nei de kant fan 'e oanhingers fan "suvere" SDR mei in minimum fan hardwarekonverzje.

It wie nedich om twa problemen op te lossen:

  1. Syngronisaasje. Fyn de krekte faze-krekte RF-ôfwiking en samplingfrekwinsje-ôfwiking út.
  2. Skriuw de DVB-T2 standert efterút.

De twadde taak fereasket in protte mear koade, mar kin oplost wurde mei trochsettingsfermogen en kin maklik ferifiearre mei help test sinjalen.

Testsinjalen binne beskikber op de BBC-tsjinner ftp://ftp.kw.bbc.co.uk/t2refs/ mei detaillearre ynstruksjes.

De oplossing foar it earste probleem is tige ôfhinklik fan 'e skaaimerken fan it SDR-apparaat en syn kontrôlemooglikheden. It brûken fan de rekommandearre frekwinsje kontrôle funksjes, sa't se sizze, wie net suksesfol, mar joech in soad ûnderfining in lêzen dy. dokumintaasje, programmearring, tv-searjes sjen, filosofyske fragen oplosse... koartsein, it wie net mooglik om it projekt te ferlitten.

Leauwe yn "suvere SDR" is allinnich mar sterker wurden.

Wy akseptearje it sinjaal sa't it is, ynterpolearje it hast nei in analoog en nimme in diskrete út, mar fergelykber mei de echte.

Syngronisaasje blokdiagram:

SDR DVB-T2 ûntfanger yn C ++

Alles is hjir neffens it learboek. Folgjende is in bytsje yngewikkelder. Ofwikingen moatte wurde berekkene. D'r is in protte literatuer en ûndersyksartikels dy't de foardielen en neidielen fan ferskate metoaden fergelykje. Fan 'e klassikers - dit is "Michael Speth, Stefan Fechtel, Gunnar Fock, Heinrich Meyr, Optimum Untfangerûntwerp foar OFDM-basearre breedbântransmission - Diel I en II." Mar ik haw noch gjin inkelde yngenieur moete dy't telle kin en wol, dus waard in yngenieursoanpak brûkt. Mei deselde syngronisaasjemetoade waard detuning ynfierd yn it testsinjaal. Troch ferskate metriken te fergelykjen mei bekende ôfwikingen (hy yntrodusearre se sels), waarden de bêste selektearre foar prestaasjes en maklike ymplemintaasje. De ôfwiking fan de ûntfangstfrekwinsje wurdt berekkene troch it fergelykjen fan it wachtynterval en it werheljende diel dêrfan. De faze fan de ûntfangende frekwinsje en de sampling frekwinsje wurde rûsd út de faze ôfwiking fan de pilot sinjalen en dit wurdt ek brûkt yn in ienfâldige, lineêre lykmakker fan in OFDM sinjaal.

Equalizer karakteristyk:

SDR DVB-T2 ûntfanger yn C ++

En dit alles wurket goed as jo witte wannear't it DVB-T2-frame begjint. Om dit te dwaan, wurdt it oanhefsymboal P1 yn it sinjaal oerbrocht. De metoade foar it opspoaren en dekodearjen fan it P1-symboal wurdt beskreaun yn Technyske spesifikaasje ETSI TS 102 831 (d'r binne ek in protte nuttige oanbefellings foar ûntfangst).

Autokorrelaasje fan it P1-sinjaal (it heechste punt oan it begjin fan it frame):

SDR DVB-T2 ûntfanger yn C ++

Earste foto (noch seis moanne oant it bewegende byld ...):

SDR DVB-T2 ûntfanger yn C ++

En dit is wêr't wy leare wat IQ-ûnbalâns, DC-offset en LO-lekkage binne. Yn 'e regel wurdt kompensaasje foar dizze fersteuringen spesifyk foar direkte konverzje útfierd yn' e SDR-apparaatbestjoerder. Dêrom duorre it lang om te begripen: stjerren út it freonlike konstellaasje QAM64 útslaan is it wurk fan 'e kompensaasjefunksjes. Ik moast alles útsette en myn fyts skriuwe.

En doe ferhuze de foto:

SDR DVB-T2 ûntfanger yn C ++

QAM64-modulaasje mei spesifike konstellaasjerotaasje yn 'e DVB-T2-standert:

SDR DVB-T2 ûntfanger yn C ++

Koartsein, dit is it gefolch fan it weromjaan fan it gehakt troch de fleisminder. De standert soarget foar fjouwer soarten mingen:

  • bytsje ynterleaving
  • sel ynterleaving (sellen mingje yn in kodearringblok)
  • tiid ynterleaving (it is ek yn 'e groep fan kodearring blokken)
  • frekwinsje ynterleaving (frekwinsje mingen yn in OFDM symboal)

As gefolch hawwe wy it folgjende sinjaal by de ynfier:

SDR DVB-T2 ûntfanger yn C ++

Dit alles is in striid foar lûdsimmuniteit fan it kodearre sinjaal.

It resultaat

No kinne wy ​​​​net allinich it sinjaal sels en har foarm sjen, mar ek tsjinstynformaasje.
D'r binne twa multipleksen op 'e loft. Elk hat twa fysike kanalen (PLP).

Ien nuverheid waard opmurken yn 'e earste multiplex - de earste PLP wurdt bestimpele as "meardere", wat logysk is, om't d'r mear as ien is yn 'e multiplex, en de twadde PLP wurdt markearre "single" en dit is in fraach.
Noch nijsgjirriger is de twadde oddity yn 'e twadde multiplex - alle programma's binne yn' e earste PLP, mar yn 'e twadde PLP is d'r in sinjaal fan in ûnbekende aard op in lege snelheid. Teminsten de VLC-spiler, dy't sa'n fyftich fideoformaten en deselde hoemannichte audio begrypt, herkent it net.

It projekt sels is hjir te finen.

It projekt waard makke mei it doel om de mooglikheid te bepalen om DVB-T2 te dekodearjen mei SdrPlay (en no AirSpy.), Dus dit is net iens in alfa-ferzje.

PS Wylst ik it artikel mei muoite skreau, koe ik PlutoSDR yn it projekt yntegrearje.

Immen sil fuortendaliks sizze dat d'r mar 6Msps is foar it IQ-sinjaal by de USB2.0-útfier, mar jo moatte op syn minst 9,2Msps, mar dit is in apart ûnderwerp.

Boarne: www.habr.com

Add a comment