SDR DVB-T2 vastuvõtja C++-s

Programmeeritud raadio (SDR) on meetod, mis asendab metallist tööde tegemist (mis on põhimõtteliselt tervisele kasulik) programmimise peavaluga. SDR-le ennustatakse suurt tulevikku ja selle peamiseks eeliseks peetakse raadioprotokollide rakendamise piirangute kaotamist. Näiteks on OFDM (ortogonaalne sagedusjaotuse muutmine) modulaator, mis on võimalik ainult SDR meetodi kaudu. Kuid SDR-is on veel üks puhtalt inseneritehniline võimalus – signaali kontrollimise ja visualiseerimise võimalus igas soovitud punktis minimaalsete pingutustega.

Üks huvitavaid sidestandardeid on maapealne digitaaltelevisioon DVB-T2.
Miks? Muidugi, saab lihtsalt voodist tõusmata televiisori sisse lülitada, kuid seal pole absoluutselt midagi vaadatavat, ja see ei ole enam minu arvamus, vaid meditsiiniline fakt.

Tõsiselt rääkides on DVB-T2 loodud väga laiaulatuslike võimalustega, sealhulgas:

  • siseruumide kasutus
  • modulatsioon QPSK-st kuni 256QAM-ini
  • ribalaius 1,7MHz kuni 8MHz

Digitalse turule jõudmine SDR põhimõttel on teada. DVB-T standard on tuntud projektis GNURadio. DVB-T2 standardiks on gr-dvbs2rx plokk (sama GNURadio jaoks), kuid see nõuab signaali eelnevat sünkroniseerimist ja see inspireerib (eriti tänud Ron Economosele).

Mida me omame.

On olemas ETSI EN 302 755 standard, mis kirjeldab edastamist, kuid mitte vastuvõtmist.

Signaal on eetris sagedusel 9,14285714285714285714 MHz, COFDM modulaatoriga 32768 kandega, 8 MHz ribas.

Selliste signaalide vastuvõtmine soovitatakse kahekordse sageduse proovimisega (et mitte midagi kaotada) ja suurema vahepealse sagedusega (superheterodünaamiline vastuvõtt), et vabaneda alalisvoolu nihkest (DC) ja kohaliku generaatori (LO) 'lekke' sissepääsul vastuvõtjasse. Seadmed, mis vastavad nendele tingimustele, on liiga kallid lihtsalt uudishimu rahuldamiseks.

SdrPlay 10Msps 10bit või AirSpy sarnaste omadustega on märgatavalt odavam. Siin ei ole juttu kahekordse proovivõtu sagedusest ning vastuvõtt on võimalik ainult otsekonversiooniga (Zero IF). Seetõttu (finantskaalutlustel) liitume 'puhta' SDR pooldajatega, millel on minimaalne riistvara konversioon.

Olid vaja lahendada kaks ülesannet:

  1. Sünkroniseerimine. Selgitada välja raadiofrekventsile täpne kõrvalekalle faasi täpsusega ja proovivõtu sageduse kõrvalekalle.
  2. DVB-T2 standard kirjutada tagurpidi.

Teine ülesanne nõuab palju rohkem koodi, kuid on lahendatav kannatlikkuse abil ja kergesti kontrollitav testsignaalide kaudu.

Testsignaalid on saadaval BBC serveris ftp://ftp.kw.bbc.co.uk/t2refs/ koos üksikasjalike juhistega.

Esimese ülesande lahendus sõltub tugevalt SDR-i seadme omadustest ja juhtimisvõimalustest. Kasutada soovitatud sageduse juhtimisfunktsioone, nagu öeldakse, ei olnud edukas, kuid andis palju kogemusi tehnilise dokumentatsiooni lugemisel, programmeerimisel, seriaali vaatamisel, filosoofiliste küsimuste lahendamisel… lühidalt, projekti ei saanud kalduda kõrvale.

Usaldus 'pure SDR' suhtes on ainult tugevnenud.

Võtame signaali nii nagu see on, interpoleerime selle praktiliselt analoogiks ja saame välja diskreetse, kuid tõelisele sarnase signaali.

Sünkroonimise plokkdiagramm:

SDR DVB-T2 vastuvõtja C++-s

Siin on kõik nagu õpikust. Edasi on veidi keerulisem. Tuleb arvutada kõrvalekalded. On palju kirjandust ja teaduslikke artikleid, mis võrreldavad erinevate meetodite eeliseid ja puudusi. Klassikast on see 'Michael Speth, Stefan Fechtel, Gunnar Fock, Heinrich Meyr, Optimum Receiver Design for OFDM-Based Broadband Transmission – Part I and II'. Ainult ma pole kohanud ühtki inseneri, kes oskaks ja sooviks arvutada, seetõttu rakendati insenerilähenemist. Sama sünkroonimismeetodiga tehti katse signaalile häireid. Erinevate mõõdikute võrreldes tuntud kõrvalekalletega (need olen ise lisanud) valiti parimad, et saavutada tõhusust ja lihtsust. Vastuvõtu sageduse kõrvalekalle arvutatakse kaitseintervalli ja selle korduva osa võrreldes. Vastuvõtu sageduse faas ja proovivõtusagedus hinnatakse pilootsignaalide faasi kõrvalekalde alusel, ning seda kasutatakse ka lihtsas, lineaarses OFDM-signaali ekvalaiseris.

Ekvalaiseri omadused:

SDR DVB-T2 vastuvõtja C++-s

Ja kõik see töötab hästi, kui tead, millal algab DVB-T2 kaader. Selleks edastatakse signaali kaudu P1 eelneva sümbol. P1 sümboli tuvastamise ja dekodeerimise meetod on kirjeldatud tehnilistes spetsifikatsioonides ETSI TS 102 831 (seal on ka palju kasulikke soovitusi vastuvõtmiseks).

P1 signaali autokorreleerimine (kõrgeim punkt kaadri alguses):

SDR DVB-T2 vastuvõtja C++-s

Esimene pilt (enne liikuvat pilti on jäänud vaid kuus kuud…):

SDR DVB-T2 vastuvõtja C++-s

Ja just siin saame teada, mis on IQ tasakaalu, DC nihke ja LO lekkimine. Üldiselt on nende spetsiifiliste, otse muundamise korral tekkinud moonutuste kompenseerimine ellu viidud SDR seadme draiveris. Seetõttu kulus aega, et mõista: stabiilsest QAM64 tähist hävitamine on kompensatsioonifunktsioonide töö. Kõik tuli välja lülitada ja kirjutada oma lahendus.

Ja nüüd hakkas pilt liikuma:

SDR DVB-T2 vastuvõtja C++-s

QAM64 modulaator koos spetsiifilise tähistuse pöördega DVB-T2 standardis:

SDR DVB-T2 vastuvõtja C++-s

Lühidalt öeldes, see on tulemuseks, et hakkad hakkama hakkama hakkama hakkama hakkama hakkama hakkama hakkama hakkama. Standard määrab neli tüüpi segunemist:

  • bit interleaving (bitine segamine veergude keeramisega)
  • cell interleaving (rakenduste segamine kodeerimise plokis)
  • ajaotamine ajas (see on sama rühmades kodeerimise blokkides)
  • sageduse jaotamine (sageduste segamine OFDM sümbolis)

Tulemusena saame sellise signaali:

SDR DVB-T2 vastuvõtja C++-s

Kogu see on võitlus kodeeritud signaali häirimiskindluse eest.

Kokkuvõte

Nüüd näeme mitte ainult signaali ja selle kuju, vaid ka teenuseteavet.
Eetris on kaks multiplexi. Igas on kaks füüsilist kanalit (PLP).

Üks kummaline asi on esimeses multiplexis märgitud — esimene PLP on tähistatud kui «multiple», mis on loogiline, kuna see pole multiplexis üksi, aga teine PLP on tähistatud kui «single» ja see on küsimus.
Teine kummaline asi teises multiplexis on see, et kõik programmid on esimeses PLP-s, kuid teises PLP-s madalatel kiirusel on signaal tundmatu päritolu. Vähemalt VLC mängija, mis mõistab umbes viiskümmend videofaili formaati ja sama palju helifaili formaate, ei suuda seda tuvastada.

Projekt on siin leitav.

Projekt loodi selleks, et määrata dekodeerimise võimalust DVB-T2 kaudu SdrPlay abil (ja nüüd juba ka AirSpy), seega ei ole see isegi alfa-versioon.

P.S. Artikli kirjutamine oli keeruline, kuid õnnestus projektile lisada PlutoSDR.

Mõned ütlevad kohe, et USB2.0 väljundis on vaid 6Msps IQ signaali jaoks, aga vajatakse vähemalt 9,2Msps, kuid see on juba eraldi teema.

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster