SDR DVB-T2 -vastaanotin C++-muodossa

Software Defined Radio on tapa korvata metallityöt (joka on itse asiassa hyvä terveydelle) ohjelmoinnin päänsärkyllä. SDR:t ennustavat suurta tulevaisuutta ja tärkeimpänä eduna pidetään radioprotokollien toteutuksen rajoitusten poistamista. Esimerkkinä on OFDM (Orthogonal Frequency-division multiplexing) modulaatiomenetelmä, joka tuli mahdolliseksi vain SDR-menetelmällä. Mutta SDR:llä on myös yksi puhtaasti tekninen mahdollisuus - kyky hallita ja visualisoida signaali missä tahansa mielivaltaisessa kohdassa vähimmällä vaivalla.

Yksi mielenkiintoisista viestintästandardeista on maanpäällinen maanpäällinen televisio DVB-T2.
Minkä vuoksi? Tietysti voit yksinkertaisesti kytkeä television päälle nousematta, mutta siellä ei ole mitään katsottavaa, eikä tämä ole enää minun mielipiteeni, vaan lääketieteellinen tosiasia.

Vakavasti, DVB-T2 on suunniteltu erittäin laajalla toiminnallisuudella, mukaan lukien:

  • sisäsovellus
  • modulaatio QPSK:sta 256QAM:iin
  • kaistanleveys 1,7MHz - 8MHz

Minulla on kokemusta digitaalisen television vastaanottamisesta SDR-periaatteella. DVB-T-standardi on tunnetussa GNURadio-projektissa. DVB-T2-standardille on olemassa gr-dvbs2rx-lohko (kaikki samalle GNUradiolle), mutta se vaatii alustavan signaalin synkronoinnin ja se on inspiroiva (erityinen kiitos Ron Economosille).

Mitä meillä on.

On olemassa ETSI EN 302 755 -standardi, joka kuvaa lähetystä, mutta ei vastaanottoa.

Signaali on ilmassa näytteenottotaajuudella 9,14285714285714285714 MHz, moduloituna COFDM:llä 32768 kantoaallon kanssa, 8 MHz:n kaistalla.

On suositeltavaa vastaanottaa tällaisia ​​signaaleja kaksinkertaisella näytteenottotaajuudella (jotta ei menetä mitään) ja välitaajuudella enemmän kaistanleveyttä (superheterodyne-vastaanotto), jotta päästään eroon tasavirran (DC) siirtymästä ja paikallisoskillaattorin "vuodosta" (LO) vastaanottimen tuloon. Nämä ehdot täyttävät laitteet ovat liian kalliita pelkkään uteliaisuuteen.

SdrPlay 10Msps 10bitillä tai AirSpy, jolla on samanlaiset ominaisuudet, on paljon halvempaa. Tässä ei ole kysymys kaksinkertaisesta näytteenottotaajuudesta ja vastaanotto voidaan tehdä vain suoralla muunnolla (Zero IF). Siksi (taloudellisista syistä) siirrymme "puhtaan" SDR:n kannattajien puolelle minimaalisella laitteistomuunnolla.

Oli tarpeen ratkaista kaksi ongelmaa:

  1. Synkronointi. Selvitä tarkka vaihetarkka RF-poikkeama ja näytteenottotaajuuden poikkeama.
  2. Kirjoita DVB-T2-standardi taaksepäin.

Toinen tehtävä vaatii paljon enemmän koodia, mutta se voidaan ratkaista sitkeästi ja se voidaan helposti todentaa testisignaaleilla.

Testisignaalit ovat saatavilla BBC-palvelimella ftp://ftp.kw.bbc.co.uk/t2refs/ yksityiskohtaisten ohjeiden kera.

Ensimmäisen ongelman ratkaisu riippuu suuresti SDR-laitteen ominaisuuksista ja sen ohjausmahdollisuuksista. Suositeltujen taajuudensäätötoimintojen käyttäminen, kuten sanotaan, ei onnistunut, mutta antoi paljon kokemusta niiden lukemisesta. dokumentointia, ohjelmointia, tv-sarjojen katselua, filosofisten kysymysten ratkaisemista..., lyhyesti sanottuna, projektista ei ollut mahdollista luopua.

Usko "puhtaan SDR:ään" on vain vahvistunut.

Otamme signaalin sellaisenaan, interpoloimme sen melkein analogiseksi ja poistamme erillisen, mutta samanlaisen kuin todellinen.

Synkronoinnin lohkokaavio:

SDR DVB-T2 -vastaanotin C++-muodossa

Kaikki täällä on oppikirjan mukaan. Seuraava on hieman monimutkaisempi. Poikkeamat on laskettava. Eri menetelmien etuja ja haittoja vertailevaa kirjallisuutta ja tutkimusartikkeleita on paljon. Klassikoista - tämä on "Michael Speth, Stefan Fechtel, Gunnar Fock, Heinrich Meyr, optimaalinen vastaanotinsuunnittelu OFDM-pohjaiseen laajakaistalähetykseen – osa I ja II." Mutta en ole tavannut ainuttakaan insinööriä, joka osaisi ja haluaisi laskea, joten käytettiin insinöörilähestymistapaa. Samaa synkronointimenetelmää käyttäen viritettiin testisignaaliin. Vertaamalla eri mittareita tunnettuihin poikkeamiin (hän ​​esitteli ne itse), valittiin parhaat suorituskyvyn ja toteutuksen helppouden vuoksi. Vastaanottotaajuuden poikkeama lasketaan vertaamalla suojaväliä ja sen toistuvaa osaa. Vastaanottotaajuuden vaihe ja näytteenottotaajuus arvioidaan pilottisignaalien vaihepoikkeaman perusteella ja tätä käytetään myös OFDM-signaalin yksinkertaisessa lineaarisessa taajuuskorjaimessa.

Taajuuskorjaimen ominaisuus:

SDR DVB-T2 -vastaanotin C++-muodossa

Ja kaikki tämä toimii hyvin, jos tiedät, milloin DVB-T2-kehys alkaa. Tätä varten signaalissa lähetetään alustussymboli P1. Menetelmä P1-symbolin havaitsemiseksi ja dekoodaamiseksi on kuvattu teknisessä spesifikaatiossa ETSI TS 102 831 (sisältää myös monia hyödyllisiä vastaanottosuosituksia).

P1-signaalin autokorrelaatio (korkein piste kehyksen alussa):

SDR DVB-T2 -vastaanotin C++-muodossa

Ensimmäinen kuva (vain kuusi kuukautta jäljellä liikkuvaan kuvaan...):

SDR DVB-T2 -vastaanotin C++-muodossa

Ja tästä opimme, mitä IQ-epätasapaino, DC-offset ja LO-vuoto ovat. Yleensä näiden suoralle muunnokselle ominaisten vääristymien kompensointi toteutetaan SDR-laiteohjaimessa. Siksi kesti kauan ymmärtää: tähtien pudottaminen ystävällisestä QAM64-tähdistöstä on kompensointitoimintojen työtä. Minun piti sammuttaa kaikki ja kirjoittaa pyöräni.

Ja sitten kuva siirtyi:

SDR DVB-T2 -vastaanotin C++-muodossa

QAM64-modulaatio tietyllä konstellaatiokierrolla DVB-T2-standardissa:

SDR DVB-T2 -vastaanotin C++-muodossa

Lyhyesti sanottuna tämä on seurausta jauhelihan ohjaamisesta takaisin lihamyllyn läpi. Standardi sisältää neljä sekoitustyyppiä:

  • hieman lomitettu
  • solujen lomittelu (solujen sekoittaminen koodauslohkossa)
  • aikalomitus (se on myös koodauslohkojen ryhmässä)
  • taajuuden lomitus (taajuuden sekoitus OFDM-symbolissa)

Tämän seurauksena meillä on seuraava signaali tulossa:

SDR DVB-T2 -vastaanotin C++-muodossa

Kaikki tämä on taistelua koodatun signaalin kohinansietokyvystä.

Koko

Nyt voimme nähdä paitsi itse signaalin ja sen muodon myös palvelutiedot.
Ilmassa on kaksi multipleksiä. Jokaisella on kaksi fyysistä kanavaa (PLP).

Ensimmäisessä multipleksissä havaittiin yksi omituisuus - ensimmäinen PLP on merkitty "multiple", mikä on loogista, koska multipleksissä on enemmän kuin yksi, ja toinen PLP on merkitty "single" ja tämä on kysymys.
Vielä mielenkiintoisempi on toinen omituisuus toisessa multipleksissä - kaikki ohjelmat ovat ensimmäisessä PLP:ssä, mutta toisessa PLP:ssä on luonteeltaan tuntematon signaali alhaisella nopeudella. VLC-soitin, joka ymmärtää noin viisikymmentä videomuotoa ja saman määrän ääntä, ei ainakaan tunnista sitä.

Itse projekti löytyy täältä.

Projekti luotiin tavoitteena määrittää DVB-T2:n dekoodaus SdrPlayn (ja nyt AirSpy:n) avulla, joten tämä ei ole edes alfaversio.

PS Kun kirjoitin artikkelia vaikeuksilla, onnistuin integroimaan PlutoSDR:n projektiin.

Joku sanoo heti, että USB6-lähdössä on vain 2.0 Msps IQ-signaalille, mutta tarvitset vähintään 9,2 Msps, mutta tämä on erillinen aihe.

Lähde: will.com

Lisää kommentti