SDR DVB-T2 modtager i C++

Software Defined Radio er en metode til at erstatte metalarbejde (som faktisk er godt for dit helbred) med hovedpine ved programmering. SDR'er forudsiger en stor fremtid, og den største fordel anses for at være fjernelse af restriktioner i implementeringen af ​​radioprotokoller. Et eksempel er OFDM (Orthogonal frequency-division multiplexing) modulationsmetoden, som kun er muliggjort af SDR-metoden. Men SDR har også endnu en, rent ingeniørmæssig mulighed - evnen til at kontrollere og visualisere et signal på ethvert vilkårligt punkt med den mindste indsats.

En af de interessante kommunikationsstandarder er jordbaseret terrestrisk tv DVB-T2.
For hvad? Selvfølgelig kan du bare tænde for tv'et uden at rejse dig, men der er absolut intet at se der, og det er ikke længere min mening, men en medicinsk kendsgerning.

Seriøst, DVB-T2 er designet med meget brede muligheder, herunder:

  • indendørs anvendelse
  • modulering fra QPSK til 256QAM
  • båndbredde fra 1,7MHz til 8MHz

Jeg har erfaring med at modtage digitalt tv efter SDR-princippet. DVB-T-standarden er i det velkendte GNURadio-projekt. Der er en gr-dvbs2rx-blok til DVB-T2-standarden (alle til den samme GNURadio), men den kræver foreløbig signalsynkronisering, og den er inspirerende (særlig tak til Ron Economos).

hvad vi har.

Der er en ETSI EN 302 755-standard, der beskriver transmission, men ikke modtagelse.

Signalet er i luften med en samplingsfrekvens på 9,14285714285714285714 MHz, moduleret af COFDM med 32768 bærebølger, i et bånd på 8 MHz.

Det anbefales at modtage sådanne signaler med dobbelt samplingsfrekvens (for ikke at miste noget) og ved mellemfrekvensen mere båndbredde (superheterodynmodtagelse), for at slippe af med jævnstrøm (DC) offset og "lækage" af lokaloscillatoren (LO) til modtagerindgangen. Enheder, der opfylder disse betingelser, er for dyre til ren nysgerrighed.

SdrPlay med 10Msps 10bit eller AirSpy med lignende egenskaber er meget billigere. Her er der ikke tale om dobbelt samplingfrekvens og modtagelse kan kun ske med direkte konvertering (Nul IF). Derfor (af økonomiske årsager) skifter vi til siden af ​​tilhængerne af "ren" SDR med et minimum af hardwarekonvertering.

Det var nødvendigt at løse to problemer:

  1. Synkronisering. Find ud af den nøjagtige fasenøjagtige RF-afvigelse og samplingsfrekvensafvigelse.
  2. Omskriv DVB-T2-standarden baglæns.

Den anden opgave kræver meget mere kode, men kan løses med vedholdenhed og kan nemt verificeres ved hjælp af testsignaler.

Testsignaler er tilgængelige på BBC-serveren ftp://ftp.kw.bbc.co.uk/t2refs/ med detaljerede instruktioner.

Løsningen på det første problem er meget afhængig af SDR-enhedens egenskaber og dens kontrolmuligheder. Brugen af ​​de anbefalede frekvenskontrolfunktioner, som de siger, var ikke vellykket, men gav en masse erfaring med at læse dem. dokumentation, programmering, se tv-serier, løsning af filosofiske spørgsmål... kort sagt, det var ikke muligt at opgive projektet.

Troen på "ren SDR" er kun blevet stærkere.

Vi tager signalet som det er, interpolerer det næsten til en analog og udtager et diskret, men ligner det rigtige.

Synkroniseringsblokdiagram:

SDR DVB-T2 modtager i C++

Alt her er ifølge lærebogen. Det næste er lidt mere kompliceret. Afvigelser skal beregnes. Der er en masse litteratur og forskningsartikler, der sammenligner fordele og ulemper ved forskellige metoder. Fra klassikerne - dette er "Michael Speth, Stefan Fechtel, Gunnar Fock, Heinrich Meyr, Optimum Receiver Design for OFDM-based Broadband Transmission - Part I and II." Men jeg har ikke mødt en eneste ingeniør, der kan og vil tælle, så der blev brugt en ingeniørtilgang. Ved at bruge den samme synkroniseringsmetode blev afstemning indført i testsignalet. Ved at sammenligne forskellige målinger med kendte afvigelser (han introducerede dem selv), blev de bedste udvalgt for ydeevne og nem implementering. Modtagelsesfrekvensafvigelsen beregnes ved at sammenligne vagtintervallet og dets gentagelsesdel. Fasen af ​​modtagefrekvensen og samplingsfrekvensen estimeres ud fra pilotsignalernes faseafvigelse, og dette bruges også i en simpel, lineær equalizer af et OFDM-signal.

Equalizer karakteristika:

SDR DVB-T2 modtager i C++

Og alt dette fungerer godt, hvis du ved, hvornår DVB-T2-rammen starter. For at gøre dette transmitteres præambelsymbolet P1 i signalet. Metoden til at detektere og afkode P1-symbolet er beskrevet i teknisk specifikation ETSI TS 102 831 (der er også mange nyttige anbefalinger til modtagelse).

Autokorrelation af P1-signalet (det højeste punkt i begyndelsen af ​​billedet):

SDR DVB-T2 modtager i C++

Første billede (kun seks måneder tilbage til det levende billede...):

SDR DVB-T2 modtager i C++

Og det er her, vi lærer, hvad IQ-ubalance, DC-offset og LO-lækage er. Som regel implementeres kompensation for disse forvrængninger, der er specifikke for direkte konvertering, i SDR-enhedsdriveren. Derfor tog det lang tid at forstå: At slå stjerner fra den venlige QAM64-konstellation ud er kompensationsfunktionernes arbejde. Jeg var nødt til at slukke alt og skrive min cykel.

Og så flyttede billedet sig:

SDR DVB-T2 modtager i C++

QAM64-modulation med specifik konstellationsrotation i DVB-T2-standarden:

SDR DVB-T2 modtager i C++

Kort sagt er dette resultatet af at føre det hakkede kød tilbage gennem kødkværnen. Standarden giver mulighed for fire typer blanding:

  • lidt interleaving
  • celle interleaving (blanding af celler i en kodende blok)
  • tidsinterleaving (det er også i gruppen af ​​kodningsblokke)
  • frekvensinterleaving (frekvensblanding i et OFDM-symbol)

Som et resultat har vi følgende signal ved indgangen:

SDR DVB-T2 modtager i C++

Alt dette er en kamp for støjimmunitet af det kodede signal.

Total

Nu kan vi ikke kun se selve signalet og dets form, men også serviceinformation.
Der er to multiplekser i luften. Hver har to fysiske kanaler (PLP).

En mærkelighed blev bemærket i den første multiplex - den første PLP er mærket "multiple", hvilket er logisk, da der er mere end én i multiplexen, og den anden PLP er mærket "enkelt", og dette er et spørgsmål.
Endnu mere interessant er den anden mærkværdighed i den anden multiplex - alle programmerne er i den første PLP, men i den anden PLP er der et signal af ukendt karakter ved lav hastighed. VLC-afspilleren, som forstår omkring halvtreds videoformater og samme mængde lyd, genkender det i hvert fald ikke.

Selve projektet kan findes her.

Projektet blev skabt med det formål at bestemme selve muligheden for at afkode DVB-T2 ved hjælp af SdrPlay (og nu AirSpy.), så dette er ikke engang en alfaversion.

PS Mens jeg skrev artiklen med besvær, lykkedes det mig at integrere PlutoSDR i projektet.

Nogen vil straks sige, at der kun er 6Msps til IQ-signalet ved USB2.0-udgangen, men du skal have mindst 9,2Msps, men dette er et separat emne.

Kilde: www.habr.com

Tilføj en kommentar