SDR DVB-T2 ресивер во C++

Радио дефинирано со софтвер е метод за замена на металната работа (што всушност е добро за вашето здравје) со главоболката од програмирањето. SDR предвидуваат голема иднина, а главната предност се смета за отстранување на ограничувањата во имплементацијата на радио протоколите. Пример е методот на модулација OFDM (Ортогонална фреквентна поделба мултиплексирање), кој стана возможен само со методот SDR. Но, SDR има уште една, чисто инженерска можност - способност да контролира и визуелизира сигнал во која било произволна точка со најмал напор.

Еден од интересните комуникациски стандарди е копнената копнена телевизија DVB-T2.
За што? Се разбира, можете едноставно да го вклучите телевизорот без да станете, но таму нема апсолутно ништо за гледање и ова веќе не е мое мислење, туку медицински факт.

Сериозно, DVB-T2 е дизајниран со многу широки можности, вклучувајќи:

  • апликација во затворен простор
  • модулација од QPSK до 256QAM
  • пропусен опсег од 1,7 MHz до 8 MHz

Имам искуство во примање дигитална телевизија користејќи го принципот SDR. Стандардот DVB-T е во добро познатиот проект GNURadio. Постои блок gr-dvbs2rx за стандардот DVB-T2 (сите за истиот GNURadio), но бара прелиминарна синхронизација на сигналот и е инспиративен (посебна благодарност до Ron Economos).

Она што го имаме.

Постои стандард ETSI EN 302 755 кој го детализира преносот, но не и приемот.

Сигналот е на воздух со фреквенција на земање примероци од 9,14285714285714285714 MHz, модулиран од COFDM со 32768 носители, во опсег од 8 MHZ.

Се препорачува да се примаат такви сигнали со двојна фреквенција на земање примероци (за да не се изгуби ништо) и на средна фреквенција поголема пропусност (суперхетеродински прием), за да се ослободиме од поместувањето на директната струја (DC) и „истекувањето“ на локалниот осцилатор (LO) до влезот на ресиверот. Уредите што ги задоволуваат овие услови се премногу скапи за обична љубопитност.

SdrPlay со 10Msps 10bit или AirSpy со слични карактеристики е многу поевтин. Овде не станува збор за двојна фреквенција на земање примероци и приемот може да се направи само со директна конверзија (Zero IF). Затоа (од финансиски причини) се префрламе на страната на приврзаниците на „чистиот“ SDR со минимум хардверска конверзија.

Беше неопходно да се решат два проблема:

  1. Синхронизација. Дознајте ја точната фаза на отстапување на RF и отстапувањето на фреквенцијата на земање примероци.
  2. Препишете го стандардот DVB-T2 наназад.

Втората задача бара многу повеќе код, но може да се реши со упорност и лесно да се потврди со помош на тест сигнали.

Тест сигналите се достапни на серверот на BBC ftp://ftp.kw.bbc.co.uk/t2refs/ со детални инструкции.

Решението на првиот проблем е многу зависно од карактеристиките на SDR уредот и неговите контролни способности. Користењето на препорачаните функции за контрола на фреквенцијата, како што велат, не беше успешно, но даде големо искуство во читањето на истите. документација, програмирање, гледање ТВ серии, решавање филозофски прашања..., накратко, не беше можно да се напушти проектот.

Вербата во „чистиот СДР“ само стана посилна.

Сигналот го земаме таков каков што е, го интерполираме речиси до аналог и вадиме дискретен, но сличен на вистинскиот.

Блок-дијаграм за синхронизација:

SDR DVB-T2 ресивер во C++

Овде се е според учебникот. Следно е малку покомплицирано. Треба да се пресметаат отстапувањата. Има многу литература и истражувачки статии кои ги споредуваат предностите и недостатоците на различните методи. Од класиците - ова е „Мајкл Спет, Стефан Фехтел, Гунар Фок, Хајнрих Мејр, оптимален дизајн на ресивер за пренос на широкопојасен интернет базиран на OFDM - Дел I и II“. Но, немам сретнато ниту еден инженер кој може и сака да брои, па се користеше инженерски пристап. Користејќи го истиот метод на синхронизација, детонирањето беше воведено во тест сигналот. Со споредување на различни метрики со познати отстапувања (сам ги претстави), беа избрани најдобрите за перформанси и леснотија на имплементација. Отстапувањето на фреквенцијата на прием се пресметува со споредување на заштитниот интервал и неговиот дел што се повторува. Фазата на приемната фреквенција и фреквенцијата на земање мостри се проценуваат од фазното отстапување на пилот-сигналите и исто така се користи во едноставен, линеарен еквилајзер на OFDM сигнал.

Карактеристика на еквилајзерот:

SDR DVB-T2 ресивер во C++

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

Автокорелација на сигналот P1 (највисоката точка на почетокот на рамката):

SDR DVB-T2 ресивер во C++

Прва слика (остануваат само шест месеци до подвижната слика...):

SDR DVB-T2 ресивер во C++

И тука дознаваме што е нерамнотежа на коефициентот на интелигенција, поместување на DC и истекување на LO. Како по правило, компензацијата за овие изобличувања специфични за директна конверзија се спроведува во двигателот на уредот SDR. Затоа, требаше долго време да се разбере: исфрлањето на ѕвездите од пријателското соѕвездие QAM64 е работа на функциите за компензација. Морав да исклучам сè и да го напишам мојот велосипед.

И тогаш сликата се пресели:

SDR DVB-T2 ресивер во C++

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

SDR DVB-T2 ресивер во C++

Накратко, ова е резултат на поминување на меленото месо назад низ мелницата за месо. Стандардот предвидува четири типа на мешање:

  • малку преплетување
  • преплетување на клетките (мешање на ќелии во блок за кодирање)
  • временско преплетување (исто така е во групата на блокови за кодирање)
  • преплетување на фреквенцијата (мешање на фреквенција во симбол OFDM)

Како резултат на тоа, го имаме следниот сигнал на влезот:

SDR DVB-T2 ресивер во C++

Сето ова е борба за отпорност на бучава на кодираниот сигнал.

Вкупно

Сега можеме да го видиме не само самиот сигнал и неговата форма, туку и информации за услугата.
На воздухот има два мултиплекса. Секој има два физички канали (PLP).

Во првиот мултиплекс е забележана една необичност - првата PLP е означена како „повеќекратна“, што е логично, бидејќи има повеќе од една во мултиплексот, а втората PLP е означена како „единечна“ и ова е прашање.
Уште поинтересна е втората необичност во вториот мултиплекс - сите програми се во првиот PLP, но во вториот PLP има сигнал од непозната природа со мала брзина. Барем VLC плеерот, кој разбира околу педесет видео формати и исто толку аудио, не го препознава.

Самиот проект може да се најде овде.

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

П.С. Додека ја пишував статијата тешко, успеав да го интегрирам PlutoSDR во проектот.

Некој веднаш ќе каже дека има само 6Msps за IQ сигналот на USB2.0 излезот, но ви требаат најмалку 9,2Msps, но ова е посебна тема.

Извор: www.habr.com

Додадете коментар