SDR DVB-T2 ricevilo en C++

Software Defined Radio estas metodo por anstataŭigi metallaboron (kiu efektive estas bona por via sano) per la kapdoloro de programado. SDR-oj antaŭdiras grandan estontecon kaj la ĉefa avantaĝo estas konsiderata kiel la forigo de restriktoj en la efektivigo de radioprotokoloj. Ekzemplo estas la modula metodo OFDM (Orthogonal frequency-division multiplexing), kiu fariĝas ebla nur per la SDR-metodo. Sed SDR ankaŭ havas unu plian, pure inĝenieran ŝancon - la kapablon kontroli kaj bildigi signalon ĉe iu ajn arbitra punkto kun la plej malgranda peno.

Unu el la interesaj komunikaj normoj estas tera surtera televido DVB-T2.
Por kio? Kompreneble, oni povas simple ŝalti la televidilon sen leviĝi, sed tie estas absolute nenio por spekti kaj ĉi tio ne plu estas mia opinio, sed medicina fakto.

Serioze, DVB-T2 estas desegnita kun tre larĝaj kapabloj, inkluzive de:

  • interna apliko
  • modulado de QPSK ĝis 256QAM
  • bendolarĝo de 1,7MHz ĝis 8MHz

Mi havas sperton pri ricevado de cifereca televido uzante la SDR-principon. La DVB-T-normo estas en la konata projekto GNURadio. Estas bloko gr-dvbs2rx por la normo DVB-T2 (ĉio por la sama GNURadio), sed ĝi postulas antaŭan sinkronigon de signalo kaj ĝi estas inspira (speciala danko al Ron Economos).

Kion ni havas.

Estas ETSI EN 302 755 normo kiu detaligas dissendon, sed ne ricevon.

La signalo estas en aero kun specimena frekvenco de 9,14285714285714285714 MHz, modulita de COFDM kun 32768 portantoj, en bando de 8 MHZ.

Oni rekomendas ricevi tiajn signalojn kun duobla la specimena frekvenco (por ne perdi ion ajn) kaj ĉe la meza frekvenco pli da bendolarĝo (superheterodina ricevo), por forigi rektan kurenton (DC) ofseton kaj "fuĝon" de la loka oscilatoro. (LO) al la ricevilo-enigo. Aparatoj kiuj kontentigas ĉi tiujn kondiĉojn estas tro multekostaj por nura scivolemo.

SdrPlay kun 10Msps 10bit aŭ AirSpy kun similaj trajtoj estas multe pli malmultekostaj. Ne temas pri duoblo de la specimena frekvenco ĉi tie kaj ricevo povas esti farita nur per rekta konvertiĝo (Nul IF). Tial (pro financaj kialoj) ni ŝanĝas al la flanko de la adeptoj de "pura" SDR kun minimuma aparatara konvertiĝo.

Estis necese solvi du problemojn:

  1. Sinkronigo. Eltrovu la precizan faz-precizan RF-devio kaj specimena frekvenco-devio.
  2. Reverku la DVB-T2-normon malantaŭen.

La dua tasko postulas multe pli da kodo, sed povas esti solvita kun persistemo kaj povas esti facile kontrolita per testaj signaloj.

Testsignaloj estas haveblaj sur la BBC-servilo ftp://ftp.kw.bbc.co.uk/t2refs/ kun detalaj instrukcioj.

La solvo al la unua problemo estas tre dependa de la karakterizaĵoj de la SDR-aparato kaj ĝiaj kontrolkapabloj. Uzi la rekomenditajn funkciojn de kontrolo de frekvenco, kiel oni diras, ne sukcesis, sed donis multe da sperto legante tiujn. dokumentado, programado, spektado de televidserioj, solvado de filozofiaj demandoj..., resume, ne eblis forlasi la projekton.

Fido al "pura SDR" nur plifortiĝis.

Ni prenas la signalon tia, kia ĝi estas, interpolas ĝin preskaŭ al analogo kaj elprenas diskretan, sed similan al la reala.

Sinkroniga blokdiagramo:

SDR DVB-T2 ricevilo en C++

Ĉio ĉi tie estas laŭ la lernolibro. Poste estas iom pli komplika. Devojoj devas esti kalkulitaj. Estas multe da literaturo kaj esplorartikoloj komparantaj la avantaĝojn kaj malavantaĝojn de malsamaj metodoj. El la klasikaĵoj - ĉi tio estas "Michael Speth, Stefan Fechtel, Gunnar Fock, Heinrich Meyr, Optimuma Ricevilo-Dezajno por OFDM-Based Broadband Transmission - Parto I kaj II." Sed mi ne renkontis eĉ unu inĝenieron, kiu povas kaj volas kalkuli, do oni uzis inĝenieran aliron. Uzante la saman sinkronigan metodon, malagordado estis enkondukita en la testsignalon. Komparante malsamajn metrikojn kun konataj devioj (li mem prezentis ilin), la plej bonaj estis elektitaj por efikeco kaj facileco de efektivigo. La ricevfrekvencdevio estas kalkulita komparante la gardintervalon kaj ĝian ripetan parton. La fazo de la riceva frekvenco kaj la prova frekvenco estas taksitaj de la fazdevio de la pilotsignaloj kaj tio ankaŭ estas uzita en simpla, linia egaligilo de OFDM-signalo.

Karakterizaĵo de egaligilo:

SDR DVB-T2 ricevilo en C++

Kaj ĉio ĉi funkcias bone, se vi scias, kiam komenciĝas la kadro DVB-T2. Por fari tion, la preambula simbolo P1 estas elsendita en la signalo. La metodo por detekti kaj malkodi la simbolon P1 estas priskribita en Teknika Specifo ETSI TS 102 831 (ekzistas ankaŭ multaj utilaj rekomendoj por ricevo).

Aŭtokorelacio de la P1-signalo (la plej alta punkto komence de la kadro):

SDR DVB-T2 ricevilo en C++

Unua bildo (nur ses monatoj restas ĝis la kortuŝa bildo...):

SDR DVB-T2 ricevilo en C++

Kaj ĉi tie ni lernas, kio estas IQ-malekvilibro, DC-offset kaj LO-fuĝo. Kiel regulo, kompenso por ĉi tiuj misprezentoj specifa por rekta konvertiĝo estas efektivigita en la SDR-aparatoŝoforo. Sekve, necesis longa tempo por kompreni: elfrapi stelojn de la amika QAM64-konstelacio estas la laboro de la kompensaj funkcioj. Mi devis malŝalti ĉion kaj skribi mian biciklon.

Kaj tiam la bildo moviĝis:

SDR DVB-T2 ricevilo en C++

QAM64-modulado kun specifa konstelaciorotacio en la DVB-T2-normo:

SDR DVB-T2 ricevilo en C++

Resume, ĉi tio estas la rezulto de repaso de la pikita viando tra la viandmuelilo. La normo provizas kvar specojn de miksado:

  • iom interplekti
  • ĉelinterplektado (miksado de ĉeloj en kodbloko)
  • tempointerplektado (ĝi estas ankaŭ en la grupo de kodigaj blokoj)
  • frekvencinterplektado (frekvencmiksado en OFDM-simbolo)

Kiel rezulto, ni havas la sekvan signalon ĉe la enigo:

SDR DVB-T2 ricevilo en C++

Ĉio ĉi estas lukto por brua imuneco de la kodita signalo.

La rezulto

Nun ni povas vidi ne nur la signalon mem kaj ĝian formon, sed ankaŭ servajn informojn.
Estas du plurkinejoj en aero. Ĉiu havas du fizikajn kanalojn (PLP).

Unu strangaĵo estis rimarkita en la unua multipleks - la unua PLP estas etikedita "multobla", kio estas logika, ĉar estas pli ol unu en la multiplex, kaj la dua PLP estas etikedita "ununura" kaj ĉi tio estas demando.
Eĉ pli interesa estas la dua strangaĵo en la dua multiplekso - ĉiuj programoj estas en la unua PLP, sed en la dua PLP estas signalo de nekonata naturo je malalta rapido. Almenaŭ la VLC-ludilo, kiu komprenas ĉirkaŭ kvindek videoformatojn kaj la saman kvanton da audio, ne rekonas ĝin.

La projekto mem troveblas ĉi tie.

La projekto estis kreita kun la celo determini la eblon mem malkodi DVB-T2 per SdrPlay (kaj nun AirSpy.), do ĉi tio eĉ ne estas alfa-versio.

PS Dum mi malfacile skribis la artikolon, mi sukcesis integri PlutoSDR en la projekton.

Iu tuj diros, ke estas nur 6Msps por la IQ-signalo ĉe la eligo USB2.0, sed vi bezonas almenaŭ 9,2Msps, sed ĉi tio estas aparta temo.

fonto: www.habr.com

Aldoni komenton