SDR DVB-T2 imtuvas C++

„Software Defined Radio“ yra būdas pakeisti metalo apdirbimą (kuris iš tikrųjų yra naudingas jūsų sveikatai) programavimo galvos skausmu. SDR pranašauja puikią ateitį, o pagrindiniu privalumu laikomas radijo protokolų įgyvendinimo apribojimų panaikinimas. Pavyzdys yra OFDM (Orthogonal Frequency-division multiplexing) moduliavimo metodas, kuris įmanomas tik naudojant SDR metodą. Tačiau SDR taip pat turi dar vieną grynai inžinerinę galimybę – galimybę su mažiausiomis pastangomis valdyti ir vizualizuoti signalą bet kuriame savavališkame taške.

Vienas iš įdomiausių ryšio standartų yra antžeminė televizija DVB-T2.
Kam? Aišku, televizorių galima tiesiog įsijungti ir neatsikėlus, bet ten visiškai nėra ką žiūrėti ir tai jau ne mano nuomonė, o medicininis faktas.

Kalbant rimtai, DVB-T2 sukurtas su labai plačiomis galimybėmis, įskaitant:

  • pritaikymas patalpose
  • moduliavimas iš QPSK į 256QAM
  • dažnių juostos plotis nuo 1,7 MHz iki 8 MHz

Turiu patirties priimant skaitmeninę televiziją SDR principu. DVB-T standartas yra gerai žinomame GNURadio projekte. DVB-T2 standartui yra gr-dvbs2rx blokas (visi tam pačiam GNURadio), bet tam reikia išankstinio signalo sinchronizavimo ir tai įkvepia (ypatinga padėka Ron Economos).

Ką mes turime.

Yra ETSI EN 302 755 standartas, kuriame išsamiai aprašomas siuntimas, bet ne priėmimas.

Signalas yra transliuojamas 9,14285714285714285714 MHz atrankos dažniu, moduliuojamas COFDM su 32768 nešikliais, 8 MHz dažnių juostoje.

Tokius signalus rekomenduojama priimti dvigubu diskretizavimo dažniu (kad nieko neprarastumėte) ir tarpiniu dažniu didesniu dažniu (superheterodino priėmimas), kad būtų išvengta nuolatinės srovės (DC) poslinkio ir vietinio generatoriaus „nutekėjimo“. (LO) į imtuvo įvestį. Šias sąlygas atitinkantys įrenginiai yra per brangūs vien smalsumui.

SdrPlay su 10Msps 10bit arba AirSpy su panašiomis charakteristikomis yra daug pigesnis. Čia nekalbama apie dvigubą diskretizavimo dažnį, o priėmimas gali būti atliekamas tik su tiesioginiu konvertavimu (Zero IF). Todėl (dėl finansinių priežasčių) pereiname į „grynojo“ SDR šalininkų pusę su minimaliu aparatinės įrangos konvertavimu.

Reikėjo išspręsti dvi problemas:

  1. Sinchronizavimas. Sužinokite tikslų fazės tikslumą RF nuokrypį ir mėginių ėmimo dažnio nuokrypį.
  2. Perrašykite DVB-T2 standartą atgal.

Antroji užduotis reikalauja daug daugiau kodo, tačiau ją galima išspręsti atkakliai ir lengvai patikrinti naudojant bandymo signalus.

Bandymo signalus galima rasti BBC serveryje ftp://ftp.kw.bbc.co.uk/t2refs/ su išsamiomis instrukcijomis.

Pirmosios problemos sprendimas labai priklauso nuo SDR įrenginio savybių ir jo valdymo galimybių. Naudotis rekomenduojamomis dažnio valdymo funkcijomis, kaip sakoma, nepasisekė, bet davė daug patirties jas skaitant. dokumentacija, programavimas, serialų žiūrėjimas, filosofinių klausimų sprendimas..., trumpai tariant, projekto atsisakyti nebuvo įmanoma.

Tikėjimas „grynu SDR“ tik stiprėjo.

Mes priimame signalą tokį, koks jis yra, interpoliuojame jį beveik iki analogo ir išimame atskirą, bet panašų į tikrąjį.

Sinchronizavimo blokinė schema:

SDR DVB-T2 imtuvas C++

Čia viskas pagal vadovėlį. Kitas yra šiek tiek sudėtingesnis. Reikia apskaičiuoti nuokrypius. Yra daug literatūros ir mokslinių straipsnių, kuriuose lyginami skirtingų metodų privalumai ir trūkumai. Iš klasikos – tai „Michael Speth, Stefan Fechtel, Gunnar Fock, Heinrich Meyr, optimalus imtuvo dizainas OFDM pagrindu veikiančiam plačiajuosčiui perdavimui – I ir II dalys“. Bet nesutikau nei vieno inžinieriaus, kuris mokėtų ir norėtų skaičiuoti, todėl buvo naudojamas inžinerinis požiūris. Naudojant tą patį sinchronizavimo metodą, bandymo signalo derinimas buvo įvestas. Palyginus skirtingas metrikas su žinomais nuokrypiais (jis pats juos pristatė), buvo atrinktos geriausios dėl našumo ir įgyvendinimo paprastumo. Priėmimo dažnio nuokrypis apskaičiuojamas lyginant apsauginį intervalą ir jo pasikartojančią dalį. Priėmimo dažnio fazė ir diskretizavimo dažnis apskaičiuojami pagal pilotinių signalų fazės nuokrypį ir taip pat naudojamas paprastame, tiesiniame OFDM signalo ekvalaizeryje.

Ekvalaizerio charakteristika:

SDR DVB-T2 imtuvas C++

Ir visa tai veikia gerai, jei žinote, kada paleidžiamas DVB-T2 kadras. Tam signale perduodamas preambulės simbolis P1. P1 simbolio aptikimo ir iškodavimo metodas aprašytas techninėje specifikacijoje ETSI TS 102 831 (taip pat yra daug naudingų rekomendacijų dėl priėmimo).

P1 signalo autokoreliacija (aukščiausias taškas kadro pradžioje):

SDR DVB-T2 imtuvas C++

Pirma nuotrauka (iki judančio vaizdo liko tik šeši mėnesiai...):

SDR DVB-T2 imtuvas C++

Čia mes sužinome, kas yra IQ disbalansas, nuolatinės srovės poslinkis ir LO nuotėkis. Paprastai šių tiesioginiam konvertavimui būdingų iškraipymų kompensavimas įgyvendinamas SDR įrenginio tvarkyklėje. Todėl prireikė nemažai laiko suprasti: žvaigždžių išmušimas iš draugiško QAM64 žvaigždyno yra kompensavimo funkcijų darbas. Teko viską išjungti ir parašyti dviratį.

Ir tada vaizdas persikėlė:

SDR DVB-T2 imtuvas C++

QAM64 moduliavimas su specifiniu žvaigždyno pasukimu DVB-T2 standarte:

SDR DVB-T2 imtuvas C++

Trumpai tariant, tai yra faršo grąžinimo per mėsmalę rezultatas. Standartas numato keturis maišymo tipus:

  • šiek tiek persipynęs
  • ląstelių persipynimas (ląstelių maišymas kodavimo bloke)
  • laiko persipynimas (jis taip pat yra kodavimo blokų grupėje)
  • dažnių persipynimas (dažnių maišymas OFDM simboliu)

Dėl to įėjime turime tokį signalą:

SDR DVB-T2 imtuvas C++

Visa tai yra kova už koduoto signalo atsparumą triukšmui.

Visas

Dabar matome ne tik patį signalą ir jo formą, bet ir paslaugų informaciją.
Eteryje yra du multipleksai. Kiekvienas iš jų turi du fizinius kanalus (PLP).

Pirmame multiplekse buvo pastebėta viena keistenybė - pirmasis PLP yra pažymėtas „daugelis“, o tai yra logiška, nes multiplekso yra daugiau nei vienas, o antrasis PLP yra pažymėtas „vienas“ ir tai yra klausimas.
Dar įdomiau yra antra keistenybė antrajame multiplekse – visos programos yra pirmame PLP, tačiau antrajame PLP yra nežinomo pobūdžio signalas mažu greičiu. Bent jau VLC grotuvas, suprantantis apie penkiasdešimt vaizdo formatų ir tiek pat garso, jo neatpažįsta.

Pačią projektą galite rasti čia.

Projektas buvo sukurtas siekiant nustatyti pačią DVB-T2 dekodavimo galimybę naudojant SdrPlay (o dabar ir AirSpy.), todėl tai net nėra alfa versija.

PS Sunkiai rašydamas straipsnį, pavyko integruoti PlutoSDR į projektą.

Kažkas iš karto pasakys, kad prie USB6 išvesties IQ signalui yra tik 2.0Msps, bet reikia bent 9,2Msps, bet tai jau atskira tema.

Šaltinis: www.habr.com

Добавить комментарий