Marrës SDR DVB-T2 në C++

Radio Defined Software është një metodë për të zëvendësuar punën e metalit (që në fakt është e mirë për shëndetin tuaj) me dhimbjen e kokës së programimit. SDR-të parashikojnë një të ardhme të madhe dhe përparësia kryesore konsiderohet të jetë heqja e kufizimeve në zbatimin e protokolleve radio. Një shembull është metoda e modulimit OFDM (Orthogonal frequency-division multiplexing), e cila mundësohet vetëm me metodën SDR. Por SDR ka gjithashtu një mundësi tjetër, thjesht inxhinierike - aftësinë për të kontrolluar dhe vizualizuar një sinjal në çdo pikë arbitrare me përpjekjen më të vogël.

Një nga standardet interesante të komunikimit është televizioni tokësor tokësor DVB-T2.
Per cfare? Sigurisht, thjesht mund të ndizni televizorin pa u ngritur, por nuk ka absolutisht asgjë për të parë atje dhe ky nuk është më mendimi im, por një fakt mjekësor.

Seriozisht, DVB-T2 është projektuar me aftësi shumë të gjera, duke përfshirë:

  • aplikimi i brendshëm
  • modulimi nga QPSK në 256QAM
  • gjerësia e brezit nga 1,7 MHz në 8 MHz

Unë kam përvojë në marrjen e televizionit dixhital duke përdorur parimin SDR. Standardi DVB-T është në projektin e njohur GNURadio. Ekziston një bllok gr-dvbs2rx për standardin DVB-T2 (të gjitha për të njëjtin GNURadio), por kërkon sinkronizim paraprak të sinjalit dhe është frymëzues (falë Ron Economos special).

Ajo që kemi.

Ekziston një standard ETSI EN 302 755 që detajon transmetimin, por jo marrjen.

Sinjali është në ajër me një frekuencë kampionimi prej 9,14285714285714285714 MHz, i moduluar nga COFDM me 32768 bartës, në një brez prej 8 MHZ.

Rekomandohet të merrni sinjale të tilla me frekuencë të dyfishtë të marrjes së mostrave (në mënyrë që të mos humbni asgjë) dhe në frekuencën e ndërmjetme më shumë gjerësi bande (marrje superheterodine), për të hequr qafe kompensimin e rrymës direkte (DC) dhe "rrjedhjen" e oshilatorit lokal. (LO) në hyrjen e marrësit. Pajisjet që plotësojnë këto kushte janë shumë të shtrenjta për kuriozitet të thjeshtë.

SdrPlay me 10Msps 10bit ose AirSpy me karakteristika të ngjashme është shumë më i lirë. Këtu nuk bëhet fjalë për dyfishin e frekuencës së kampionimit dhe marrja mund të bëhet vetëm me konvertim të drejtpërdrejtë (Zero IF). Prandaj (për arsye financiare) ne po kalojmë në anën e adhuruesve të SDR "të pastër" me një minimum të konvertimit të harduerit.

Ishte e nevojshme të zgjidheshin dy probleme:

  1. Sinkronizimi. Zbuloni devijimin e saktë të fazës së RF dhe devijimin e frekuencës së kampionimit.
  2. Rishkruajeni standardin DVB-T2 mbrapsht.

Detyra e dytë kërkon shumë më tepër kod, por mund të zgjidhet me këmbëngulje dhe mund të verifikohet lehtësisht duke përdorur sinjalet e testimit.

Sinjalet e testimit janë të disponueshme në serverin BBC ftp://ftp.kw.bbc.co.uk/t2refs/ me udhëzime të hollësishme.

Zgjidhja e problemit të parë varet shumë nga karakteristikat e pajisjes SDR dhe aftësitë e saj të kontrollit. Përdorimi i funksioneve të rekomanduara të kontrollit të frekuencës, siç thonë ata, nuk ishte i suksesshëm, por dha shumë përvojë në leximin e tyre. dokumentacioni, programimi, shikimi i serialeve, zgjidhja e pyetjeve filozofike..., me pak fjalë, nuk ishte e mundur të braktisej projekti.

Besimi në "SDR e pastër" është bërë më i fortë.

Ne e marrim sinjalin ashtu siç është, e interpolojmë pothuajse në një analog dhe nxjerrim një diskrete, por të ngjashme me atë reale.

Diagrami i bllokut të sinkronizimit:

Marrës SDR DVB-T2 në C++

Gjithçka këtu është sipas tekstit shkollor. Tjetra është pak më e ndërlikuar. Devijimet duhet të llogariten. Ka shumë literaturë dhe artikuj kërkimor që krahasojnë avantazhet dhe disavantazhet e metodave të ndryshme. Nga klasikët - ky është "Michael Speth, Stefan Fechtel, Gunnar Fock, Heinrich Meyr, Dizajni optimal i Marrësit për Transmetimin me brez të gjerë të bazuar në OFDM - Pjesa I dhe II". Por unë nuk kam takuar një inxhinier të vetëm që mund dhe dëshiron të numërojë, kështu që u përdor një qasje inxhinierike. Duke përdorur të njëjtën metodë sinkronizimi, çmontimi u fut në sinjalin e provës. Duke krahasuar metrika të ndryshme me devijimet e njohura (ai i prezantoi vetë), u zgjodhën më të mirat për performancën dhe lehtësinë e zbatimit. Devijimi i frekuencës së marrjes llogaritet duke krahasuar intervalin mbrojtës dhe pjesën e tij përsëritëse. Faza e frekuencës së marrjes dhe frekuenca e kampionimit vlerësohen nga devijimi fazor i sinjaleve pilot dhe kjo përdoret gjithashtu në një barazues të thjeshtë, linear të një sinjali OFDM.

Karakteristika e barazuesit:

Marrës SDR DVB-T2 në C++

Dhe e gjithë kjo funksionon mirë nëse e dini se kur fillon korniza DVB-T2. Për ta bërë këtë, simboli i preambulës P1 transmetohet në sinjal. Metoda për zbulimin dhe dekodimin e simbolit P1 përshkruhet në Specifikimin Teknik ETSI TS 102 831 (ka gjithashtu shumë rekomandime të dobishme për marrjen).

Autokorrelacioni i sinjalit P1 (pika më e lartë në fillim të kornizës):

Marrës SDR DVB-T2 në C++

Fotografia e parë (vetëm gjashtë muaj deri në imazhin lëvizës...):

Marrës SDR DVB-T2 në C++

Dhe këtu mësojmë se çfarë janë çekuilibri i IQ, kompensimi DC dhe rrjedhja LO. Si rregull, kompensimi për këto shtrembërime specifike për konvertimin e drejtpërdrejtë zbatohet në drejtuesin e pajisjes SDR. Prandaj, u desh shumë kohë për të kuptuar: rrëzimi i yjeve nga plejada miqësore QAM64 është punë e funksioneve të kompensimit. Më duhej të fikja gjithçka dhe të shkruaja biçikletën time.

Dhe më pas fotografia u zhvendos:

Marrës SDR DVB-T2 në C++

Modulimi QAM64 me rrotullim specifik konstelacioni në standardin DVB-T2:

Marrës SDR DVB-T2 në C++

Me pak fjalë, ky është rezultati i kalimit të mishit të grirë përsëri në mulli të mishit. Standardi parashikon katër lloje të përzierjes:

  • pak ndërthurur
  • ndërthurja e qelizave (përzierja e qelizave në një bllok kodues)
  • ndërthurja e kohës (është gjithashtu në grupin e blloqeve të kodimit)
  • ndërthurja e frekuencës (përzierja e frekuencës në një simbol OFDM)

Si rezultat, ne kemi sinjalin e mëposhtëm në hyrje:

Marrës SDR DVB-T2 në C++

E gjithë kjo është një luftë për imunitetin ndaj zhurmës së sinjalit të koduar.

Total

Tani mund të shohim jo vetëm vetë sinjalin dhe formën e tij, por edhe informacionin e shërbimit.
Ka dy multiplekse në ajër. Secili ka dy kanale fizike (PLP).

Një e çuditshme është vërejtur në multipleksin e parë - PLP e parë është etiketuar "shumëfish", që është logjike, pasi ka më shumë se një në multipleks, dhe PLP e dytë është etiketuar "e vetme" dhe kjo është një pyetje.
Edhe më interesante është çudia e dytë në multipleksin e dytë - të gjitha programet janë në PLP-në e parë, por në PLP-në e dytë ka një sinjal të një natyre të panjohur me një shpejtësi të ulët. Të paktën luajtësi VLC, i cili kupton rreth pesëdhjetë formate video dhe të njëjtën sasi audio, nuk e njeh atë.

Vetë projekti mund të gjendet këtu.

Projekti u krijua me qëllimin e përcaktimit të vetë mundësisë së deshifrimit të DVB-T2 duke përdorur SdrPlay (dhe tani AirSpy.), kështu që ky nuk është as një version alfa.

PS Ndërsa po shkruaja artikullin me vështirësi, arrita të integroja PlutoSDR në projekt.

Dikush do të thotë menjëherë se ka vetëm 6Msps për sinjalin IQ në daljen USB2.0, por ju duhet të paktën 9,2Msps, por kjo është një temë më vete.

Burimi: www.habr.com

Shto një koment