SDR DVB-T2-mottagare i C++

Software Defined Radio (programmerad radioteknik) Ă€r en metod för att ersĂ€tta metallbearbetning (vilket i grund och botten Ă€r bra för hĂ€lsan) med huvudvĂ€rk i programmering. SDR förutspĂ„s en stor framtid, och dess frĂ€msta fördel anses vara borttagandet av begrĂ€nsningar i genomförandet av radioprotocols. Ett exempel Ă€r moduleringsmetoden OFDM (Orthogonal frequency-division multiplexing), som endast blev möjlig genom SDR-metoden. Men SDR har ocksĂ„ en annan, rent ingenjörsmĂ€ssig möjlighet — nĂ€mligen att kontrollera och visualisera signalen pĂ„ valfri punkt med minsta möjliga anstrĂ€ngning.

En av de intressanta kommunikationsstandarderna Àr markbaserad DVB-T2.
Varför? SjÀlvklart kan man bara slÄ pÄ TV:n utan att resa sig, men det finns absolut ingenting att titta pÄ dÀr, och det Àr inte bara min Äsikt, utan en medicinsk fakta.

För att vara seriös Àr DVB-T2 utvecklad med mycket breda möjligheter, inklusive:

  • inomhusanvĂ€ndning
  • modulering frĂ„n QPSK till 256QAM
  • bandbredd frĂ„n 1,7MHz till 8MHz

Det finns erfarenhet av att ta emot digital-TV med SDR-principen. DVB-T-standarden finns i det vÀlkÀnda projektet GNURadio. Det finns en block gr-dvbs2rx för DVB-T2-standarden (alla för samma GNURadio), men som krÀver föregÄende signal-synkronisering, och den inspirerar (ett sÀrskilt tack till Ron Economos).

Vad har vi?

Det finns standarden ETSI EN 302 755 som beskriver sÀndning ingÄende, men inte mottagning.

Signalen i luften har en samplingsfrekvens pÄ 9,14285714285714285714 MHz, modulerad COFDM med 32768 bÀrvÄgor inom ett band pÄ 8 MHZ.

Det rekommenderas att ta emot sÄdana signaler med dubbla samplingsfrekvenser (för att inte missa nÄgot) och pÄ en mellanliggande frekvens över bandbredden (superheterodyn mottagning), för att eliminera DC-offset och "lÀckage" frÄn den lokala oscillatorn (LO) vid mottagarens ingÄng. Enheter som uppfyller dessa krav Àr för dyra för simple nyfikenhet.

SdrPlay med 10Msps 10bit eller AirSpy med liknande specifikationer Àr betydligt billigare. HÀr talas det inte om dubbla samplingsfrekvenser och mottagning kan endast ske med direktkonvertering (Zero IF). DÀrför (av ekonomiska skÀl) gÄr vi över till sidan av anhÀngarna av "ren" SDR med minimalt hÄrdvaruomvandling.

Det var nödvÀndigt att lösa tvÄ uppgifter:

  1. Synkronisering. Att faststÀlla den exakta avvikelsen av radiofrekvensen med fasnoggrannhet och avvikelsen av samplingsfrekvensen.
  2. Skriv om DVB-T2-standarden baklÀnges.

Den andra uppgiften krÀver mycket mer kod, men den kan lösas med uthÄllighet och kontrolleras enkelt med test-signaler.

Test-signaler finns tillgÀngliga pÄ servern BBC ftp://ftp.kw.bbc.co.uk/t2refs/ med detaljerade instruktioner.

Lösningen pĂ„ den första uppgiften beror starkt pĂ„ egenskaperna hos SDR-enheten och styrmöjligheterna. Att anvĂ€nda de rekommenderade frekvenskontrollfunktionerna, som det heter, har inte varit framgĂ„ngsrikt, men det har gett mycket erfarenhet av att lĂ€sa teknisk dokumentation, programmering, titta pĂ„ serier, lösa filosofiska frĂ„gor
 kort sagt, projektet har inte blivit nedlagt.

Trots allt har tron pÄ "pure SDR" bara stÀrkts.

Vi tar emot signalen som den Àr, interpolerar den praktiskt taget till en analog och extraherar redan en diskret men liknande signal.

Synchroniseringsdiagram:

SDR DVB-T2-mottagare i C++

HĂ€r Ă€r allt enligt lĂ€roboken. NĂ€sta steg Ă€r lite mer komplicerat. Det Ă€r nödvĂ€ndigt att berĂ€kna avvikelser. Det finns mycket litteratur och forskningsartiklar som jĂ€mför fördelar och nackdelar med olika metoder. Klassiska exempel inkluderar 'Michael Speth, Stefan Fechtel, Gunnar Fock, Heinrich Meyr, Optimum Receiver Design for OFDM-Based Broadband Transmission – Del I och II'. Men jag har inte trĂ€ffat en enda ingenjör som kan och vill göra berĂ€kningar, sĂ„ en ingenjörsmetod tillĂ€mpades. Genom samma synkroniseringsmetod infördes störningar i test-signalen. Genom att jĂ€mföra olika metrik med kĂ€nda avvikelser (de sjĂ€lva infördes) valdes de bĂ€sta för prestanda och enkelhet i implementeringen. Avvikelsen för mottagningsfrekvens berĂ€knas genom att jĂ€mföra integrationsintervallet och dess upprepande del. Fas av mottagningsfrekvens och samplingsfrekvens bedöms utifrĂ„n avvikelsen i pilot-signaler och anvĂ€nds Ă€ven i en enkel, linjĂ€r equalizer för OFDM-signalen.

Egenskaper för equalizern:

SDR DVB-T2-mottagare i C++

Och allt detta fungerar bra om man vet nÀr ett DVB-T2-ram börjar. För detta överförs en preambel-symbol P1 i signalen. Metoden för att detektera och dekoda symbolen P1 beskrivs i den tekniska specifikationen ETSI TS 102 831 (dÀr finns ocksÄ mÄnga anvÀndbara rekommendationer för mottagning).

Autokorrelation av signalen P1 (den övre punkten markerar början av ramen):

SDR DVB-T2-mottagare i C++

Den första bilden (det Ă€r bara sex mĂ„nader kvar till den rörliga bilden
):

SDR DVB-T2-mottagare i C++

Och hÀr lÀr vi oss vad IQ-obalans, DC-offset och LO-lÀckage Àr. Som regel Àr kompensationen för dessa specifika distorsioner av direkt omvandling implementerad i SDR-enhetens drivrutin. Det tog dÀrför lÄng tid att förstÄ att borttagandet av stjÀrnor frÄn den vÀnliga konstellationen QAM64 Àr resultatet av kompensationsfunktioner. Allt fick stÀngas av, och jag fick skriva min egen lösning.

Och bilden började röra pÄ sig:

SDR DVB-T2-mottagare i C++

QAM64-modulering med specifisk rotation av konstellationen enligt standarden DVB-T2:

SDR DVB-T2-mottagare i C++

Kort sagt, detta Àr resultatet av att pressa köttfÀrsen tillbaka genom köttkvarnen. Standarden förutsÀtter fyra typer av blandning:

  • bit interleaving (bitblandning med vridning av kolumner)
  • cell interleaving (blandning av celler i kodningsblocket)
  • time interleaving (Ă€ven kĂ€nt i gruppen av kodningsblock)
  • frequency interleaving (blandning av frekvenser i OFDM-symbolen)

I slutÀndan fÄr vi en sÄdan signal vid ingÄngen:

SDR DVB-T2-mottagare i C++

Allt detta Àr en kamp för motstÄndskraften hos den kodade signalen.

Resultat

Nu kan vi se inte bara sjÀlva signalen och dess form, utan Àven administrationsinformationen.
TvÄ multiplex finns i sÀndningen. I varje finns tvÄ fysiska kanaler (PLP).

En konstighet har observerats i den första multiplexen – den första PLP har en mĂ€rkning "multiple", vilket Ă€r logiskt eftersom den inte Ă€r ensam i multiplexen, medan den andra PLP har en mĂ€rkning "single" och det Ă€r en frĂ„ga.
Ännu intressantare Ă€r den andra konstigheten i den andra multiplexen – alla program finns i den första PLP, medan den andra PLP vid lĂ„g hastighet har en signal av okĂ€nt ursprung. Åtminstone kĂ€nner VLC-spelaren, som förstĂ„r runt femtio videoformat och lika mĂ„nga ljudformat, inte igen den.

SjÀlva projektet kan hittas hÀr.

Projektet skapades för att faststÀlla möjligheten att avkoda DVB-T2 med hjÀlp av SdrPlay (och nu Àven AirSpy), sÄ detta Àr inte ens en alfa-version.

P.S. Medan artikeln skrevs med svÄrighet, lyckades jag koppla PlutoSDR till projektet.

NÄgon kanske snabbt sÀger att det bara finns 6Msps för IQ-signalen pÄ USB2.0-utgÄngen, men minst 9,2Msps behövs, men det Àr redan ett separat Àmne.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster