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

Radio definiowane programowo to metoda zastąpienia obróbki metali (która faktycznie jest korzystna dla zdrowia) bólem głowy związanym z programowaniem. SDR wróżą wspaniałą przyszłość, a za główną zaletę uważa się usunięcie ograniczeń we wdrażaniu protokołów radiowych. Przykładem jest metoda modulacji OFDM (Orthogonal Frequency-Division Multiplexing), która jest możliwa tylko dzięki metodzie SDR. Ale SDR ma jeszcze jedną, czysto inżynierską możliwość – możliwość sterowania i wizualizacji sygnału w dowolnym punkcie przy najmniejszym wysiłku.

Jednym z ciekawych standardów komunikacji jest naziemna telewizja naziemna DVB-T2.
Po co? Oczywiście można po prostu włączyć telewizor bez wstawania, ale nie ma tam absolutnie nic do oglądania i to już nie jest moja opinia, ale fakt medyczny.

Poważnie, DVB-T2 został zaprojektowany z bardzo szerokimi możliwościami, w tym:

  • zastosowanie wewnętrzne
  • modulacja od QPSK do 256QAM
  • szerokość pasma od 1,7 MHz do 8 MHz

Mam doświadczenie w odbiorze telewizji cyfrowej na zasadzie SDR. Standard DVB-T znajduje się w dobrze znanym projekcie GNURadio. Istnieje blok gr-dvbs2rx dla standardu DVB-T2 (wszystko dla tego samego GNURadio), ale wymaga 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 transmisję, ale nie odbiór.

Sygnał nadawany jest z częstotliwością próbkowania 9,14285714285714285714 MHz, modulowany przez COFDM z 32768 nośnymi, w paśmie 8 MHz.

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

SdrPlay z 10Msps 10bit lub AirSpy o podobnych parametrach jest znacznie tańszy. Nie ma tu mowy o podwojeniu częstotliwości próbkowania, a odbiór może odbywać się tylko przy bezpośredniej konwersji (Zero IF). Dlatego (ze względów finansowych) przechodzimy na stronę zwolenników „czystego” SDR z minimalną konwersją sprzętową.

Należało rozwiązać dwa problemy:

  1. Synchronizacja. Znajdź dokładne odchylenie RF z dokładnością do fazy i odchylenie częstotliwości próbkowania.
  2. Przepisz standard DVB-T2 wstecz.

Drugie zadanie wymaga znacznie większej ilości kodu, ale można je rozwiązać wytrwale i można je łatwo zweryfikować za pomocą sygnałów testowych.

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

Rozwiązanie pierwszego problemu jest w dużym stopniu zależne od charakterystyki urządzenia SDR i jego możliwości sterowania. Korzystanie z zalecanych funkcji kontroli częstotliwości, jak mówią, nie zakończyło się sukcesem, ale dało dużo doświadczenia podczas ich czytania. dokumentacja, programowanie, oglądanie seriali, rozwiązywanie problemów filozoficznych… mówiąc krótko, nie można było porzucić projektu.

Wiara w „czystą SDR” tylko wzrosła.

Bierzemy sygnał takim, jaki jest, interpolujemy go prawie na analogowy i usuwamy dyskretny, ale podobny do rzeczywistego.

Schemat blokowy synchronizacji:

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

Wszystko tutaj jest zgodne z podręcznikiem. Dalej jest trochę bardziej skomplikowanie. Należy obliczyć odchylenia. Istnieje wiele literatury i artykułów naukowych porównujących zalety i wady różnych metod. Z klasyków – to „Michael Speth, Stefan Fechtel, Gunnar Fock, Heinrich Meyr, Optymalny projekt odbiornika dla transmisji szerokopasmowej opartej na OFDM – część I i II”. Nie spotkałem jednak ani jednego inżyniera, który potrafiłby i chciał liczyć, dlatego zastosowano podejście inżynierskie. Stosując tę ​​samą metodę synchronizacji, do sygnału testowego wprowadzono rozstrojenie. Porównując różne metryki ze znanymi odchyleniami (sam je przedstawił), wybrano te najlepsze pod względem wydajności i łatwości wdrożenia. Odchylenie częstotliwości odbioru oblicza się poprzez porównanie okresu ochronnego i jego powtarzającej się części. Faza częstotliwości odbiorczej i częstotliwość próbkowania są szacowane na podstawie odchylenia fazy sygnałów pilotujących i jest to również wykorzystywane w prostym, liniowym korektorze sygnału OFDM.

Charakterystyka korektora:

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

A wszystko to działa dobrze, jeśli wiesz, kiedy rozpoczyna się ramka DVB-T2. W tym celu w sygnale transmitowany jest symbol preambuły P1. Sposób wykrywania i dekodowania symbolu P1 opisano w Specyfikacji Technicznej ETSI TS 102 831 (jest też wiele przydatnych zaleceń dotyczących odbioru).

Autokorelacja sygnału P1 (najwyższy punkt na początku ramki):

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

Pierwsze zdjęcie (do ruchomego obrazu pozostało już tylko sześć miesięcy...):

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

I tu dowiadujemy się, czym jest brak równowagi IQ, przesunięcie DC i wyciek LO. Z reguły kompensacja tych zniekształceń charakterystycznych dla konwersji bezpośredniej jest realizowana w sterowniku urządzenia SDR. Dlatego zrozumienie zajęło dużo czasu: wybijanie gwiazd z przyjaznej konstelacji QAM64 jest dziełem funkcji kompensacyjnych. Musiałem wszystko wyłączyć i napisać rower.

A potem obraz się poruszył:

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

Modulacja QAM64 z określoną rotacją konstelacji w standardzie DVB-T2:

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

Krótko mówiąc, jest to wynik przepuszczenia mięsa mielonego z powrotem przez maszynę do mięsa. Norma przewiduje cztery rodzaje mieszania:

  • trochę przeplatające się
  • przeplatanie komórek (mieszanie komórek w bloku kodującym)
  • przeplatanie czasowe (znajduje się również w grupie bloków kodujących)
  • przeplatanie częstotliwości (mieszanie częstotliwości w symbolu OFDM)

W efekcie 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 serwisowe.
Nadawane są dwa multipleksy. Każdy z nich ma dwa kanały fizyczne (PLP).

W pierwszym multipleksie zauważono jedną dziwność - pierwszy PLP jest oznaczony jako „wielokrotny”, co jest logiczne, ponieważ w multipleksie jest więcej niż jeden, a drugi PLP jest oznaczony jako „pojedynczy” i to jest pytanie.
Jeszcze bardziej interesująca jest druga osobliwość w drugim multipleksie - wszystkie programy są w pierwszym PLP, ale w drugim PLP pojawia się sygnał o nieznanym charakterze z małą prędkością. Przynajmniej odtwarzacz VLC, który rozumie około pięćdziesięciu formatów wideo i taką samą ilość dźwięku, tego nie rozpoznaje.

Sam projekt można znaleźć tutaj.

Projekt powstał z myślą o określeniu samej możliwości dekodowania DVB-T2 za pomocą SdrPlay (a obecnie AirSpy.), więc nie jest to nawet wersja alfa.

PS Podczas gdy pisałem artykuł z trudem, udało mi się zintegrować PlutoSDR z projektem.

Ktoś od razu powie, że na wyjściu USB6 dla sygnału IQ jest tylko 2.0Msps, a potrzeba co najmniej 9,2Msps, ale to już osobny temat.

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

Dodaj komentarz