Odbiornik SDR DVB-T2 w języku C++

Radio definiowane programowo to metoda zastępująca obróbkę metalu (która jest w gruncie rzeczy zdrowa) uciążliwym procesem programowania. Przewiduje się, że SDR-y będą miały świetlaną przyszłość, a za ich główną zaletę uważa się zniesienie ograniczeń w implementacji protokołów radiowych. Przykładem jest metoda modulacji OFDM (Orthogonal Frequency-Division Multiplexing), która stała się możliwa do zastosowania dopiero dzięki metodzie SDR. Ale SDR ma jeszcze inną, czysto inżynieryjną możliwość: możliwość sterowania i wizualizacji sygnału w dowolnym punkcie, przy minimalnym nakładzie pracy.

Jednym z ciekawszych standardów komunikacyjnych jest naziemna telewizja DVB-T2.
Po co? Oczywiście, można po prostu włączyć telewizor, nie wstając z łóżka, ale nie ma tam absolutnie nic do oglądania. Nie jest to moja opinia, a fakt medyczny.

Naprawdę, DVB-T2 zostało zaprojektowane z myślą o bardzo szerokich możliwościach, obejmujących:

  • do użytku wewnątrz pomieszczeń
  • modulacja z QPSK na 256QAM
  • szerokość pasma od 1,7MHz do 8MHz

Istnieją doświadczenia w odbiorze telewizji cyfrowej przy wykorzystaniu zasady SDR. Standard DVB-T jest zawarty w znanym projekcie GNURadio. Istnieje blok gr-dvbs2rx dla standardu DVB-T2 (wszystko dla tego samego GNURadio), ale wymaga on wstępnej synchronizacji sygnału i jest inspirujący (szczególne podziękowania dla Rona Economosa).

Co mamy.

Istnieje norma ETSI EN 302 755, która szczegółowo opisuje nadawanie, ale nie odbiór.

Sygnał emisyjny o częstotliwości próbkowania 9,14285714285714285714 MHz, modulowany metodą COFDM z 32768 falami nośnymi, w paśmie 8 MHz.

Zaleca się odbiór takich sygnałów z podwojoną częstotliwością próbkowania (aby niczego nie stracić), a przy częstotliwości pośredniej z większym pasmem (odbiór superheterodynowy), aby pozbyć się przesunięcia DC i „wycieku” generatora lokalnego (LO) do wejścia odbiornika. Urządzenia spełniające te warunki są zbyt drogie, aby zaspokoić zwykłą ciekawość.

SdrPlay z 10Msps 10bit lub AirSpy o podobnych parametrach są o rząd wielkości tańsze. Nie ma tutaj mowy o podwójnej częstotliwości próbkowania, a odbiór może odbywać się jedynie przy użyciu konwersji bezpośredniej (Zero IF). Dlatego też (ze względów finansowych) przechodzimy na stronę zwolenników „czystego” SDR z minimalną konwersją sprzętową.

Do rozwiązania były dwa problemy:

  1. Synchronizacja. Znajdź dokładne odchylenie częstotliwości radiowej wraz z dokładnością fazy i odchyleniem częstotliwości próbkowania.
  2. Przepisz standard DVB-T2 od tyłu.

Drugie zadanie wymaga o wiele więcej kodu, ale można je rozwiązać wytrwale i łatwo zweryfikować za pomocą sygnałów testowych.

Sygnały testowe są dostępne na serwerze BBC ftp://ftp.kw.bbc.co.uk/t2refs/ wraz ze szczegółowymi instrukcjami.

Rozwiązanie pierwszego problemu zależy w dużej mierze od charakterystyki urządzenia SDR i możliwości sterowania. Korzystanie z zalecanych funkcji kontroli częstotliwości, jak to się mówi, nie przyniosło efektów, ale dało sporo doświadczenia w czytaniu technologii. dokumentacja, programowanie, oglądanie seriali, rozwiązywanie zagadnień filozoficznych..., krótko mówiąc, nie można było porzucić projektu.

Wiara w „czysty SDR” stała się jeszcze silniejsza.

Akceptujemy sygnał taki, jaki jest, interpolujemy go niemal do postaci analogowej i wyodrębniamy sygnał dyskretny, ale podobny do rzeczywistego.

Schemat blokowy synchronizacji:

Odbiornik SDR DVB-T2 w języku C++

Wszystko tutaj jest zgodne z zasadami. Potem sprawa robi się trochę bardziej skomplikowana. Należy obliczyć odchylenia. Istnieje wiele publikacji i artykułów badawczych porównujących zalety i wady różnych metod. Z klasyki - oto „Michael Speth, Stefan Fechtel, Gunnar Fock, Heinrich Meyr, Optymalna konstrukcja odbiornika dla transmisji szerokopasmowej opartej na OFDM – część I i II”. Ale nie spotkałem ani jednego inżyniera, który by umiał i chciał liczyć, więc zastosowałem podejście inżynierskie. Tę samą metodę synchronizacji zastosowano do wprowadzenia rozstrojenia do sygnału testowego. Porównując różne wskaźniki ze znanymi odchyleniami (wprowadziłem je osobiście), wybrano najlepsze pod względem wydajności i łatwości wdrożenia. Odchylenie częstotliwości odbioru oblicza się poprzez porównanie przedziału ochronnego i jego powtarzalnej części. Fazę częstotliwości odbiorczej i częstotliwość próbkowania szacuje się na podstawie odchylenia fazowego sygnałów pilotujących. Wartość tę wykorzystuje się także w prostym liniowym korektorze sygnału OFDM.

Charakterystyka korektora:

Odbiornik SDR DVB-T2 w języku C++

Wszystko to działa dobrze, jeśli wiesz, kiedy rozpoczyna się transmisja DVB-T2. W tym celu w sygnale przesyłany jest symbol preambuły P1. Sposób wykrywania i dekodowania symbolu P1 opisano w specyfikacji technicznej ETSI TS 102 831 (znajduje się tam także wiele przydatnych zaleceń dotyczących odbioru).

Autokorelacja sygnału P1 (najwyższy punkt to początek klatki):

Odbiornik SDR DVB-T2 w języku C++

Pierwszy obraz (pozostało tylko sześć miesięcy do filmu…):

Odbiornik SDR DVB-T2 w języku C++

I tutaj dowiadujemy się, czym jest nierównowaga IQ, przesunięcie DC i upływ LO. Kompensacja zniekształceń charakterystycznych dla konwersji bezpośredniej jest zwykle realizowana w sterowniku urządzenia SDR. Minęło dużo czasu, zanim zrozumieliśmy, że usuwanie gwiazd z przyjaznej konstelacji QAM64 jest dziełem funkcji kompensacyjnych. Musiałem wyłączyć wszystko i napisać własny rower.

A potem obraz zaczął się poruszać:

Odbiornik SDR DVB-T2 w języku C++

Modulacja QAM64 ze specyficzną rotacją konstelacji w standardzie DVB-T2:

Odbiornik SDR DVB-T2 w języku C++

Krótko mówiąc, jest to efekt ponownego przepuszczenia zmielonego mięsa przez maszynkę do mięsa. Norma przewiduje cztery rodzaje mieszania:

  • przeplatanie bitów (mieszanie bitów ze skręcaniem kolumn)
  • przeplatanie komórek (mieszanie komórek w bloku kodującym)
  • przeplot czasowy (to samo w grupie bloków kodujących)
  • przeplot częstotliwości (mieszanie częstotliwości w symbolu OFDM)

W rezultacie na wejściu mamy następujący sygnał:

Odbiornik SDR DVB-T2 w języku C++

Wszystko to jest walką o odporność zakodowanego sygnału na zakłócenia.

Łączny

Teraz możemy zobaczyć nie tylko sam sygnał i jego kształt, ale także informacje o usłudze.
Nadawane są dwa multipleksy. Każdy z nich ma dwa kanały fizyczne (PLP).

W pierwszym multipleksie zauważono jedną dziwność - pierwszy PLP ma etykietę „wielokrotny”, co jest logiczne, gdyż nie jest jedynym w multipleksie, a drugi PLP ma etykietę „pojedynczy”, i to jest pytanie.
Jeszcze ciekawsza jest druga osobliwość w drugim multipleksie - wszystkie programy znajdują się w pierwszym PLP, a w drugim PLP przy niskiej prędkości pojawia się sygnał o nieznanej naturze. Przynajmniej odtwarzacz VLC, który rozpoznaje około pięćdziesięciu formatów wideo i tyle samo formatów audio, nie rozpoznaje go.

Sam projekt można znaleźć tutaj.

Projekt powstał w celu sprawdzenia możliwości dekodowania DVB-T2 przy użyciu SdrPlay (a teraz AirSpy), więc nie jest to nawet wersja alfa.

PS. Chociaż miałem trudności z pisaniem artykułu, udało mi się dodać PlutoSDR do projektu.

Ktoś od razu powie, że na wyjściu USB 6 sygnał IQ ma przepustowość zaledwie 2.0 Msps, a potrzebne jest co najmniej 9,2 Msps, ale to już osobny temat.

Źródło: www.habr.com