SDR DVB-T2 receiver на C++

Software Defined Radio (праграмна-вызначаная радыёсістэма) – гэта метад замены працы па метале (што, у прынцыпе, карысна для здароўя) на галаўны боль праграмавання. SDR прадракаюць вялікую будучыню і асноўнай добрай якасцю лічыцца зняцце абмежаванняў у рэалізацыі радыёпратаколаў. Прыкладам з'яўляецца метад мадуляцыі OFDM (Orthogonal frequency-division multiplexing), якая стала магчыма толькі метадам SDR. Але ёсць у SDR і яшчэ адна, чыста інжынерная магчымасць, – гэта магчымасць кантраляваць і візуалізаваць сігнал у любой адвольнай кропцы з найменшымі намаганнямі.

Адным з цікавых стандартаў сувязі з'яўляецца наземнае эфірнае тэлебачанне DVB-T2.
Навошта? Вядома, можна проста не ўстаючы ўключыць тэлевізар, але глядзець там абсалютна няма чаго і гэта ўжо не маё меркаванне, а медыцынскі факт.

Калі сур'ёзна, DVB-T2 распрацаваны з вельмі шырокімі магчымасцямі, у тым ліку:

  • indoor прымяненне
  • мадуляцыя ад QPSK да 256QAM
  • паласа прапускання ад 1,7MHz да 8MHz

Вопыт прыёму лічбавага тэлебачання па прынцыпе SDR ёсць. Стандарт DVB-T ёсць у вядомым праекце GNURadio. Ёсць блок gr-dvbs2rx для стандарту DVB-T2 (усё для таго ж GNURadio), але які патрабуе папярэдняй сінхранізацыі сігналу і ён натхняе (асобнае thanks to Ron Economos).

Што мы маем.

Ёсць стандарт ETSI EN 302, падрабязна які апісвае перадачу, але не прыём.

Сігнал у эфіры c частатой сэмплявання 9,14285714285714285714 MHz, які мадулюецца COFDM з 32768 апорнымі, у паласе 8 MHZ.

Прымаць такія сігналы рэкамендуецца з падвоенай частатой семплирования (каб нічога не страціць) і на прамежкавай частаце больш паласы прапускання (супергетэрадзіна прыём), для збавення ад зрушэння па сталаму току (DC) і «працякання» мясцовага генератара (LO) на ўваход прымача. Прылады, якія задавальняюць гэтым умовам, занадта дарогі для простай цікаўнасці.

SdrPlay з 10Msps 10bit ці AirSpy са падобнымі характарыстыкамі на парадак танней. Тут няма гаворкі аб падвоенай частаце сэмпліравання і прыём можна весці толькі з прамым пераўтварэннем (Zero IF). Таму (па фінансавых меркаваннях) пераходзім на бок адэптаў "чыстага" SDR з мінімумам апаратнага пераўтварэння.

Неабходна было вырашыць дзве задачы:

  1. Сінхранізацыя. Даведацца дакладнае адхіленне радыёчастаты з дакладнасцю да фазы і адхіленне частаты сэмпліравання.
  2. Перапісаць стандарт DVB-T2 задам на перад.

Другая задача патрабуе шмат больш кода, але развязальная ўседлівасцю і лёгка правяраецца па тэставых сігналах.

Тэставыя сігналы даступныя на серверы BBC ftp://ftp.kw.bbc.co.uk/t2refs/ з падрабязнай інструкцыяй.

Рашэнне першай задачы моцна залежыць ад характарыстык прылады SDR і магчымасцяў кіравання. Выкарыстоўваць рэкамендуемыя функцыі кіравання частатой, як гаворыцца, не ўвянчалася поспехам, але дало шмат досведу чытання тых. дакументацыі, праграмавання, прагляду серыялаў, вырашэнне філасофскіх пытанняў…, карацей кажучы, закінуць праект не ўдалося.

Вера ў "pure SDR" толькі адужэла.

Прымаем сігнал як ёсць, інтэрпалюем яго практычна да аналогу і вымаем ужо дыскрэтны, але падобны на сапраўдны.

Блок-схема сінхранізацыі:

SDR DVB-T2 receiver на C++

Тут усё па падручніку. Далей крыху больш складана. Неабходна вылічыць адхіленні. Ёсць шмат літаратуры і даследчых артыкулаў, якія параўноўваюць добрыя якасці і недахопы розных метадаў. З класікі гэта Michael Speth, Stefan Fechtel, Gunnar Fock, Heinrich Meyr, Optimum Receiver Design для OFDM-Based Broadband Transmission Part I and II. Толькі я не сустракаў ніводнага інжынера, які ўмее і жадае лічыць, таму быў ужыты інжынерны падыход. Тым жа метадам сінхранізацыі былі ўнесены расстройствы ў тэставы сігнал. Шляхам параўнання розных метрык з вядомымі адхіленнямі (сам жа ўносіў) выбраны лепшыя для прадукцыйнасці і прастаты рэалізацыі. Адхіленне частаты прыёму вылічаецца параўнаннем ахоўнага інтэрвалу і яго паўтаральнай часткі. Фаза частаты прыёму і частата сэмплявання ацэньваецца па адхіленні фаз пілот сігналаў і яно ж выкарыстоўваецца ў простым, лінейным эквалайзеры OFDM сігналу.

Характарыстыка эквалайзера:

SDR DVB-T2 receiver на C++

І ўсё гэта добра працуе, калі ведаць, калі пачынаецца кадр DVB-T2. Для гэтага ў сігнале перадаецца сімвал прэамбулы P1. Спосаб дэтэктавання і дэкадаванні знака P1 апісаны ў Technical Specification ETSI TS 102 (там жа шмат карысных рэкамендацый па прыёме).

Аўтакарэляцыя сігналу P1 (самая верхняя кропка пачатак кадра):

SDR DVB-T2 receiver на C++

Першы малюнак (да выявы, якая рухаецца, засталося ўсяго шэсць месяцаў…):

SDR DVB-T2 receiver на C++

І менавіта тут мы даведаемся, што такое IQ imbalance, DC offset і ўцечка LO. Як правіла, кампенсаванне гэтых спецыфічных для прамога пераўтварэння скажэнняў, рэалізаваная ў драйверы SDR прылады. Таму сышло шмат часу, каб зразумець: выбіванне зорачак з дружнага сузор'я QAM64 – гэта праца функцый кампенсацыі. Прыйшлося ўсё адключыць і пісаць свой ровар.

І вось карцінка заварушылася:

SDR DVB-T2 receiver на C++

Мадуляцыя QAM64 са спецыфічным паваротам сузор'я ў стандарце DVB-T2:

SDR DVB-T2 receiver на C++

Калі коратка, то гэта вынік прапускання фаршу зваротна, праз мясасечку. Стандарт прадугледжвае чатыры віды мяшання:

  • bit interleaving (бітавае перамешванне з закручваннем слупкоў)
  • cell interleaving (перамешванне ячэек у блоку кадавання)
  • time interleaving (яно ж у групе блокаў кадавання)
  • frequency interleaving (перамешванне частот у OFDM сімвале)

У выніку на ўваходзе маем вось такі сігнал:

SDR DVB-T2 receiver на C++

Усё гэта барацьба за перашкодаўстойлівасць кадаванага сігналу.

Вынік

Цяпер мы можам бачыць не толькі сам сігнал і яго форму, але і службовую інфармацыю.
У эфіры два мультыплекса. У кожным два фізічных канала (PLP).

Адно дзівацтва заўважана ў першым мультыплексе – першы PLP мае пазнаку "multiple", што лагічна, бо ён у мультыплексе не адзін, а другі PLP мае пазнаку "single" і гэта пытанне.
Яшчэ цікавей другое дзівацтва ў другім мультыплексе – усе праграмы ў першым PLP, а ў другім PLP на ціхай хуткасці прысутнічае сігнал невядомай прыроды. Прынамсі, плэер VLC, які разумее каля паўсотні відэа фарматаў і гэтулькі ж аўдыё, яго не распазнае.

Сам праект можна знайсці тут.

Праект ствараўся з мэтай вызначыць саму магчымасць дэкадаваць DVB-T2 з дапамогай SdrPlay (а зараз ужо і AirSpy.), таму гэтая нават не альфа-версія.

PS Пакуль з працай пісалася артыкул, атрымалася прыкруціць у праект PlutoSDR.

Хтосьці адразу скажа, што тамака толькі 6Msps для IQ сігналу на вынахадзе USB2.0, а трэба не меней 9,2Msps, але гэта ўжо асобная тэма.

Крыніца: habr.com

Дадаць каментар