SDR DVB-T2 приемник на C++

Програмно определяемото радио (Software Defined Radio) е метод за замяна на металообработката (което, в принцип, е полезно за здравето) с главоболие от програмиране. SDR предсказват голямо бъдеще и основното им предимство е премахването на ограниченията в реализирането на радиопротоколи. Пример за това е методът на модулация OFDM (ортогонална мултиплексния по честота), който стана възможен само чрез SDR. Но в SDR има и още едно, чисто инженерно предимство — възможността да контролирате и визуализирате сигнала в произволна точка с минимални усилия.

Един от интересните комуникационни стандарти е наземното ефирно телевизионно DVB-T2.
Защо? Разбира се, може просто да включите телевизора, без да ставате, но там няма абсолютно нищо за гледане и това вече не е мое мнение, а медицински факт.

Ако говорим сериозно, DVB-T2 е разработен с много широки възможности, включително:

  • вътрешно приложение
  • модулация от QPSK до 256QAM
  • широчина на канала от 1,7MHz до 8MHz

Има опит в приема на цифрово телевизионно предаване на принципа на SDR. Стандартът DVB-T е наличен в известния проект GNURadio. Има блок gr-dvbs2rx за стандарта DVB-T2 (все за същото GNURadio), но изисква предварителна синхронизация на сигнала и вдъхновява (отделно благодаря на Рон Економос).

Какво имаме.

Има стандарт ETSI EN 302 755, който подробно описва предаването, но не и приема.

Сигналът в ефира е с честота на семплиране 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 и възможностите за управление. Използването на препоръчаните функции за управление на честотите, както се казва, не донесе успех, но предостави много опит в четенето на техническа документация, програмирането, гледането на сериали, решаването на философски въпроси… по-кратко, не успяхме да зарежем проекта.

Вярата в „чистия SDR“ само укрепна.

Приемаме сигнала такъв, какъвто е, интерполираме го практически до аналог и изваждаме вече дискретен, но подобен на истински.

Блок-схема на синхронизация:

SDR DVB-T2 приемник на C++

Тук всичко е по учебника. По-нататък е малко по-сложно. Необходимо е да се изчислят отклоненията. Има много литература и изследователски статии, сравняващи предимствата и недостатъците на различните методи. От класиката - това е „Michael Speth, Stefan Fechtel, Gunnar Fock, Heinrich Meyr, Optimum Receiver Design for OFDM-Based Broadband Transmission – Part I и II“. Само че не срещах инженери, които да умеят и да искат да смятат, затова бе приложен инженерният подход. Същият метод за синхронизация доведе до отклонения в тестовия сигнал. Чрез сравняване на различни метрики с известни отклонения (аз самият внасях) бяха избрани най-добрите за производителност и простота на изпълнение. Отклонението на приема на честотата се изчислява чрез сравнение на защитния интервал и неговата повтаряща се част. Фазата на приема на честотата и честотата на семплиране се оценяват по отклонението на фазите на пилотните сигнали и същото се използва в прост, линейен еквалайзер на OFDM сигнала.

Характеристика на еквалайзера:

SDR DVB-T2 приемник на C++

И всичко това работи добре, ако знаеш кога започва кадърът DVB-T2. За това в сигнала се предава символ на преамбюла P1. Методът за детектиране и декодиране на символа P1 е описан в техническата спецификация ETSI TS 102 831 (там има много полезни препоръки за приемането).

Автокорелация на сигнала P1 (най-горната точка - начало на кадъра):

SDR DVB-T2 приемник на C++

Първото изображение (остана само шест месеца до движещото се изображение…):

SDR DVB-T2 приемник на C++

И точно тук ще разберем какво представлява IQ imbalance, DC offset и утечка LO. Обикновено компенсацията на тези специфични за директното преобразуване изкривявания е реализирана в драйвера на SDR устройството. Затова отне много време да се разбере: изваждането на звездичките от дружното съзвездие QAM64 е работа на функциите за компеснация. Пришото се наложи всичко да се изключи и да се пише свой велосипед.

И ето, изображението започна да се движи:

SDR DVB-T2 приемник на C++

Модулация QAM64 със специфичен завой на съзвездието в стандарта DVB-T2:

SDR DVB-T2 приемник на C++

Ако накратко, това е резултат от пропускането на каймата обратно през меленето. Стандартът предвижда четири вида разбъркване:

  • bit interleaving (битово разбъркване със завиване на колоните)
  • cell interleaving (разбъркване на клетките в блока на кодиране)
  • time interleaving (също в групата на блоковете за кодиране)
  • frequency interleaving (разбъркване на честотите в OFDM символа)

В резултат на входа имаме такъв сигнал:

SDR DVB-T2 приемник на C++

Всичко това е борба за устойчивост на кодирания сигнал.

Резюме

Сега можем да видим не само самия сигнал и формата му, но и служебната информация.
В ефир има два мултиплекса. Във всеки два физически канала (PLP).

Една странност, забелязана в първия мултиплекс — първият PLP има етикет «multiple», което е логично, тъй като в мултиплекса не е сам, а вторият PLP има етикет «single» и това е въпрос.
Още по-интересна е втората странност във втория мултиплекс — всички програми са в първия PLP, а във втория PLP на тихо сглобяване присъства сигнал с неясен произход. Поне VLC плейърът, който разбира около петдесет видео формати и толкова много аудио, не го разпознава.

Самият проект може да бъде намерен тук.

Проектът е създаден с целта да определи самата възможност за декодиране на DVB-T2 с помощта на SdrPlay (а сега и AirSpy), затова това дори не е алфа-версия.

P.S. Докато статията се пишеше с труд, успях да включа в проекта PlutoSDR.

Някой веднага ще каже, че там има само 6Msps за IQ сигнала на изхода на USB2.0, а е нужно най-малко 9,2Msps, но това вече е отделна тема.

Източник: habr.com

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster