SDR DVB-T2 receiver sa C++

Ang Software Defined Radio ay isang paraan ng pagpapalit ng gawaing metal (na talagang mabuti para sa iyong kalusugan) ng sakit ng ulo ng programming. Ang mga SDR ay hinuhulaan ang isang magandang hinaharap at ang pangunahing bentahe ay itinuturing na ang pag-alis ng mga paghihigpit sa pagpapatupad ng mga protocol ng radyo. Ang isang halimbawa ay ang OFDM (Orthogonal frequency-division multiplexing) na paraan ng modulasyon, na ginawang posible lamang sa pamamagitan ng pamamaraang SDR. Ngunit ang SDR ay mayroon ding isa pa, puro pagkakataon sa pag-inhinyero - ang kakayahang kontrolin at mailarawan ang isang signal sa anumang arbitrary na punto na may pinakamababang pagsisikap.

Ang isa sa mga kagiliw-giliw na pamantayan ng komunikasyon ay ang terrestrial terrestrial na telebisyon na DVB-T2.
Para saan? Siyempre, maaari mo lamang i-on ang TV nang hindi bumabangon, ngunit talagang walang mapapanood doon at hindi na ito ang aking opinyon, ngunit isang medikal na katotohanan.

Seryoso, ang DVB-T2 ay dinisenyo na may napakalawak na kakayahan, kabilang ang:

  • panloob na aplikasyon
  • modulasyon mula QPSK hanggang 256QAM
  • bandwidth mula 1,7MHz hanggang 8MHz

Mayroon akong karanasan sa pagtanggap ng digital na telebisyon gamit ang prinsipyo ng SDR. Ang pamantayan ng DVB-T ay nasa kilalang proyektong GNURadio. Mayroong gr-dvbs2rx block para sa DVB-T2 standard (lahat para sa parehong GNURadio), ngunit nangangailangan ito ng paunang pag-synchronize ng signal at ito ay nagbibigay inspirasyon (espesyal na pasasalamat kay Ron Economos).

Kung anong meron tayo.

Mayroong pamantayang ETSI EN 302 755 na nagdedetalye ng paghahatid, ngunit hindi sa pagtanggap.

Ang signal ay nasa hangin na may dalas ng sampling na 9,14285714285714285714 MHz, na binago ng COFDM na may 32768 carrier, sa isang banda na 8 MHZ.

Inirerekomenda na makatanggap ng mga naturang signal na may dobleng dalas ng sampling (upang hindi mawalan ng anuman) at sa intermediate frequency mas maraming bandwidth (superheterodyne reception), upang maalis ang direktang kasalukuyang (DC) offset at "leakage" ng lokal na oscillator (LO) sa input ng receiver. Ang mga device na nakakatugon sa mga kundisyong ito ay masyadong mahal para sa kuryusidad lamang.

Ang SdrPlay na may 10Msps 10bit o AirSpy na may katulad na katangian ay mas mura. Walang tanong na doble ang dalas ng sampling dito at ang pagtanggap ay maaari lamang gawin sa direktang conversion (Zero IF). Samakatuwid (para sa mga pinansiyal na dahilan) kami ay lumilipat sa panig ng mga sumusunod sa "purong" SDR na may pinakamababang conversion ng hardware.

Ito ay kinakailangan upang malutas ang dalawang problema:

  1. Pag-synchronize. Alamin ang eksaktong phase-accurate na RF deviation at sampling frequency deviation.
  2. Isulat muli ang pamantayan ng DVB-T2 pabalik.

Ang pangalawang gawain ay nangangailangan ng mas maraming code, ngunit maaaring malutas nang may tiyaga at madaling ma-verify gamit ang mga signal ng pagsubok.

Available ang mga test signal sa BBC server ftp://ftp.kw.bbc.co.uk/t2refs/ na may mga detalyadong tagubilin.

Ang solusyon sa unang problema ay lubos na nakadepende sa mga katangian ng SDR device at sa mga kakayahan sa pagkontrol nito. Ang paggamit ng inirerekumendang frequency control function, gaya ng sinasabi nila, ay hindi matagumpay, ngunit nagbigay ng maraming karanasan sa pagbabasa ng mga iyon. dokumentasyon, programming, panonood ng mga serye sa TV, paglutas ng mga pilosopikal na tanong..., sa madaling salita, hindi posibleng talikuran ang proyekto.

Ang pananampalataya sa "purong SDR" ay lumakas lamang.

Kinukuha namin ang signal bilang ito, i-interpolate ito halos sa isang analogue at kumuha ng isang discrete, ngunit katulad ng tunay.

Pag-synchronize ng block diagram:

SDR DVB-T2 receiver sa C++

Ang lahat dito ay ayon sa aklat-aralin. Ang susunod ay medyo mas kumplikado. Kailangang kalkulahin ang mga paglihis. Maraming panitikan at mga artikulo sa pananaliksik na naghahambing ng mga pakinabang at disadvantage ng iba't ibang pamamaraan. Mula sa mga classic - ito ay "Michael Speth, Stefan Fechtel, Gunnar Fock, Heinrich Meyr, Optimum Receiver Design para sa OFDM-Based Broadband Transmission - Part I at II." Ngunit wala akong nakilalang isang inhinyero na marunong at gustong magbilang, kaya ginamit ang isang engineering approach. Gamit ang parehong paraan ng pag-synchronize, ang detuning ay ipinakilala sa test signal. Sa pamamagitan ng paghahambing ng iba't ibang sukatan sa mga kilalang paglihis (siya mismo ang nagpakilala sa mga ito), ang pinakamahusay na mga sukatan ay pinili para sa pagganap at kadalian ng pagpapatupad. Ang paglihis ng dalas ng pagtanggap ay kinakalkula sa pamamagitan ng paghahambing ng pagitan ng bantay at ang paulit-ulit na bahagi nito. Ang bahagi ng frequency ng pagtanggap at ang dalas ng sampling ay tinatantya mula sa phase deviation ng mga pilot signal at ito ay ginagamit din sa isang simple, linear equalizer ng isang OFDM signal.

Katangian ng equalizer:

SDR DVB-T2 receiver sa C++

At lahat ng ito ay mahusay na gumagana kung alam mo kung kailan magsisimula ang DVB-T2 frame. Upang gawin ito, ang simbolo ng preamble na P1 ay ipinadala sa signal. Ang pamamaraan para sa pag-detect at pag-decode ng simbolo ng P1 ay inilarawan sa Teknikal na Pagtutukoy ETSI TS 102 831 (mayroon ding maraming kapaki-pakinabang na rekomendasyon para sa pagtanggap).

Autocorrelation ng P1 signal (ang pinakamataas na punto sa simula ng frame):

SDR DVB-T2 receiver sa C++

Unang larawan (anim na buwan na lang ang natitira hanggang sa gumagalaw na larawan...):

SDR DVB-T2 receiver sa C++

At dito natin malalaman kung ano ang IQ imbalance, DC offset at LO leakage. Bilang panuntunan, ang kabayaran para sa mga pagbaluktot na ito na partikular sa direktang conversion ay ipinapatupad sa driver ng SDR device. Samakatuwid, tumagal ng mahabang panahon upang maunawaan: ang pag-knock out ng mga bituin mula sa magiliw na konstelasyon ng QAM64 ay ang gawain ng mga function ng kompensasyon. Kinailangan kong patayin ang lahat at isulat ang aking bisikleta.

At pagkatapos ay lumipat ang larawan:

SDR DVB-T2 receiver sa C++

QAM64 modulasyon na may partikular na pag-ikot ng konstelasyon sa pamantayan ng DVB-T2:

SDR DVB-T2 receiver sa C++

Sa madaling salita, ito ang resulta ng pagpasa ng minced meat pabalik sa gilingan ng karne. Ang pamantayan ay nagbibigay para sa apat na uri ng paghahalo:

  • medyo interleaving
  • cell interleaving (paghahalo ng mga cell sa isang coding block)
  • time interleaving (ito ay nasa pangkat din ng mga encoding blocks)
  • frequency interleaving (paghahalo ng frequency sa isang simbolo ng OFDM)

Bilang resulta, mayroon kaming sumusunod na signal sa input:

SDR DVB-T2 receiver sa C++

Ang lahat ng ito ay isang pakikibaka para sa kaligtasan sa ingay ng naka-encode na signal.

Kabuuan

Ngayon ay makikita natin hindi lamang ang signal mismo at ang hugis nito, kundi pati na rin ang impormasyon ng serbisyo.
Mayroong dalawang multiplex sa hangin. Ang bawat isa ay may dalawang pisikal na channel (PLP).

Isang kakaiba ang napansin sa unang multiplex - ang unang PLP ay may label na "multiple", na lohikal, dahil mayroong higit sa isa sa multiplex, at ang pangalawang PLP ay may label na "single" at ito ay isang tanong.
Ang mas kawili-wiling ay ang pangalawang kakaiba sa pangalawang multiplex - lahat ng mga programa ay nasa unang PLP, ngunit sa pangalawang PLP mayroong isang senyas ng isang hindi kilalang kalikasan sa isang mababang bilis. Hindi bababa sa VLC player, na nauunawaan ang tungkol sa limampung mga format ng video at ang parehong dami ng audio, ay hindi nakikilala ito.

Ang proyekto mismo ay matatagpuan dito.

Ang proyekto ay nilikha na may layuning matukoy ang mismong posibilidad ng pag-decode ng DVB-T2 gamit ang SdrPlay (at ngayon ay AirSpy.), kaya hindi ito kahit isang alpha na bersyon.

PS Habang nahihirapan akong nagsusulat ng artikulo, nagawa kong isama ang PlutoSDR sa proyekto.

May magsasabi kaagad na mayroon lamang 6Msps para sa signal ng IQ sa output ng USB2.0, ngunit kailangan mo ng hindi bababa sa 9,2Msps, ngunit ito ay isang hiwalay na paksa.

Pinagmulan: www.habr.com

Magdagdag ng komento