SDR DVB-T2 prijemnik u C++

Softverski definiran radio je metoda zamjene metalnih radova (koji su zapravo dobri za vaše zdravlje) glavoboljom programiranja. SDR-ovi predviđaju veliku budućnost, a glavnom se prednošću smatra uklanjanje ograničenja u implementaciji radio protokola. Primjer je OFDM (ortogonalno multipleksiranje s podjelom frekvencije) modulacijska metoda, koja je omogućena samo SDR metodom. Ali SDR ima još jednu, čisto inženjersku priliku - mogućnost kontrole i vizualizacije signala u bilo kojoj proizvoljnoj tački uz najmanje napora.

Jedan od zanimljivih komunikacionih standarda je zemaljska zemaljska televizija DVB-T2.
Za što? Naravno, možete jednostavno uključiti TV bez ustajanja, ali tu nema apsolutno ništa za gledati i to više nije moje mišljenje, već medicinska činjenica.

Ozbiljno, DVB-T2 je dizajniran sa veoma širokim mogućnostima, uključujući:

  • primjena u zatvorenom prostoru
  • modulacija od QPSK do 256QAM
  • propusni opseg od 1,7MHz do 8MHz

Imam iskustvo u prijemu digitalne televizije po principu SDR. DVB-T standard je u dobro poznatom projektu GNURadio. Postoji gr-dvbs2rx blok za DVB-T2 standard (sve za isti GNURadio), ali zahtijeva preliminarnu sinhronizaciju signala i inspirativno je (posebno hvala Ron Economosu).

Šta imamo.

Postoji ETSI EN 302 755 standard koji detaljno opisuje prijenos, ali ne i prijem.

Signal je u zraku sa frekvencijom uzorkovanja od 9,14285714285714285714 MHz, moduliran COFDM sa 32768 nosilaca, u opsegu od 8 MHZ.

Preporučljivo je primati takve signale sa duplo većom frekvencijom uzorkovanja (da se ništa ne izgubi) i na međufrekvenciji sa većim propusnim opsegom (superheterodinski prijem), kako bi se riješili pomaka istosmjerne struje (DC) i "curenja" lokalnog oscilatora (LO) na ulaz prijemnika. Uređaji koji zadovoljavaju ove uslove su preskupi za puku radoznalost.

SdrPlay sa 10Msps 10bit ili AirSpy sa sličnim karakteristikama je mnogo jeftiniji. Ovdje nema govora o dvostrukoj frekvenciji uzorkovanja i prijem se može obaviti samo direktnom konverzijom (Zero IF). Stoga (iz finansijskih razloga) prelazimo na stranu pristalica „čistog“ SDR-a uz minimalnu hardversku konverziju.

Bilo je potrebno riješiti dva problema:

  1. Sinhronizacija. Saznajte tačno fazno tačnu RF devijaciju i devijaciju frekvencije uzorkovanja.
  2. Prepišite DVB-T2 standard unatrag.

Drugi zadatak zahtijeva mnogo više koda, ali se može riješiti upornošću i lako se može provjeriti korištenjem test signala.

Test signali su dostupni na BBC serveru ftp://ftp.kw.bbc.co.uk/t2refs/ sa detaljnim uputstvima.

Rješenje prvog problema u velikoj mjeri ovisi o karakteristikama SDR uređaja i njegovim mogućnostima upravljanja. Korištenje preporučenih funkcija kontrole frekvencije, kako kažu, nije bilo uspješno, ali je dalo puno iskustva čitajući ih. dokumentacija, programiranje, gledanje TV serija, rješavanje filozofskih pitanja..., ukratko, nije bilo moguće odustati od projekta.

Vjera u “čisto SDR” samo je jačala.

Uzimamo signal kakav je, interpoliramo ga skoro do analognog i vadimo diskretni, ali sličan stvarnom.

Blok dijagram sinhronizacije:

SDR DVB-T2 prijemnik u C++

Ovdje je sve po udžbeniku. Sledeće je malo komplikovanije. Odstupanja treba izračunati. Postoji mnogo literature i istraživačkih članaka koji upoređuju prednosti i nedostatke različitih metoda. Od klasika - ovo je "Michael Speth, Stefan Fechtel, Gunnar Fock, Heinrich Meyr, optimalni dizajn prijemnika za OFDM-bazirani širokopojasni prijenos - dio I i II." Ali nisam sreo nijednog inženjera koji može i želi da broji, pa je korišten inženjerski pristup. Koristeći istu metodu sinhronizacije, u testni signal je uvedeno depodešavanje. Upoređujući različite metrike sa poznatim odstupanjima (on ih je sam uveo), odabrani su oni najbolji za performanse i lakoću implementacije. Odstupanje frekvencije prijema izračunava se poređenjem zaštitnog intervala i njegovog ponavljajućeg dijela. Faza frekvencije prijema i frekvencija uzorkovanja se procjenjuju iz fazne devijacije pilot signala i to se također koristi u jednostavnom, linearnom ekvilajzeru OFDM signala.

Karakteristike ekvilajzera:

SDR DVB-T2 prijemnik u C++

I sve ovo dobro funkcionira ako znate kada počinje DVB-T2 okvir. Da bi se to postiglo, simbol preambule P1 se prenosi u signalu. Metoda za otkrivanje i dekodiranje simbola P1 opisana je u Tehničkoj specifikaciji ETSI TS 102 831 (postoje i mnoge korisne preporuke za prijem).

Autokorelacija P1 signala (najviša tačka na početku kadra):

SDR DVB-T2 prijemnik u C++

Prva slika (još samo šest mjeseci do pokretne slike...):

SDR DVB-T2 prijemnik u C++

I tu saznajemo šta su IQ neravnoteža, DC offset i LO curenje. Po pravilu, kompenzacija za ova izobličenja specifična za direktnu konverziju implementirana je u upravljačkom programu SDR uređaja. Stoga je trebalo mnogo vremena da se shvati: izbacivanje zvijezda iz prijateljskog sazviježđa QAM64 je djelo kompenzacijskih funkcija. Morao sam sve isključiti i napisati svoj bicikl.

A onda se slika pomerila:

SDR DVB-T2 prijemnik u C++

QAM64 modulacija sa specifičnom rotacijom konstelacije u DVB-T2 standardu:

SDR DVB-T2 prijemnik u C++

Ukratko, ovo je rezultat vraćanja mljevenog mesa kroz mašinu za mljevenje mesa. Standard predviđa četiri vrste miješanja:

  • bit interleaving
  • preplitanje ćelija (miješanje ćelija u blok kodiranja)
  • vremensko preplitanje (takođe je u grupi blokova kodiranja)
  • preplitanje frekvencija (miješanje frekvencije u OFDM simbolu)

Kao rezultat, imamo sljedeći signal na ulazu:

SDR DVB-T2 prijemnik u C++

Sve ovo je borba za otpornost kodiranog signala na buku.

Rezultat

Sada možemo vidjeti ne samo sam signal i njegov oblik, već i servisne informacije.
Postoje dva multipleksa u zraku. Svaki ima dva fizička kanala (PLP).

U prvom multipleksu je uočena jedna neobičnost - prvi PLP je označen kao “višestruki”, što je logično, jer u multipleksu ima više od jednog, a drugi PLP je označen kao “single” i to je pitanje.
Još zanimljivija je druga neobičnost u drugom multipleksu - svi programi su u prvom PLP-u, ali u drugom PLP-u postoji signal nepoznate prirode pri maloj brzini. Barem VLC plejer, koji razume pedesetak video formata i isto toliko zvuka, to ne prepoznaje.

Sam projekat možete pronaći ovdje.

Projekat je kreiran sa ciljem da se utvrdi sama mogućnost dekodiranja DVB-T2 pomoću SdrPlay (a sada i AirSpy.), tako da ovo nije ni alfa verzija.

PS Dok sam s mukom pisao članak, uspio sam integrirati PlutoSDR u projekat.

Neko će odmah reći da postoji samo 6Msps za IQ signal na USB2.0 izlazu, ali vam treba najmanje 9,2Msps, ali ovo je posebna tema.

izvor: www.habr.com

Dodajte komentar