SDR DVB-T2 EmpfÀnger in C++

Software Defined Radio (SDR) ist eine Methode, die manuelle Arbeit mit Metall (was im Grunde genommen gesundheitlich vorteilhaft ist) durch das Kopfzerbrechen des Programmierens zu ersetzen. SDR wird eine große Zukunft vorausgesagt, und sein Hauptvorteil liegt darin, die EinschrĂ€nkungen bei der Implementierung von Funkprotokollen zu beseitigen. Ein Beispiel dafĂŒr ist das OFDM-Modulationsverfahren (Orthogonal Frequency-Division Multiplexing), das nur durch SDR möglich wurde. Doch SDR bietet noch eine weitere, rein ingenieurtechnische Möglichkeit: die Kontrolle und Visualisierung des Signals an beliebigen Punkten mit minimalem Aufwand.

Einer der interessanten Kommunikationsstandards ist das terrestrische DVB-T2 Fernsehen.
Warum? NatĂŒrlich könnte man einfach aufstehen und den Fernseher einschalten, aber es gibt dort absolut nichts zu sehen, und das ist schon lĂ€ngst kein persönliches GefĂŒhl mehr, sondern eine medizinische Tatsache.

Im Ernst, DVB-T2 wurde mit sehr umfangreichen Möglichkeiten entwickelt, darunter:

  • Indoor-Anwendung
  • Modulation von QPSK bis 256QAM
  • Bandbreite von 1,7 MHz bis 8 MHz

Es gibt Erfahrungen mit dem Empfang von digitalem Fernsehen nach dem SDR-Prinzip. Der Standard DVB-T ist im bekannten Projekt GNURadio vorhanden. Es gibt ein Modul gr-dvbs2rx fĂŒr den Standard DVB-T2 (ebenfalls fĂŒr GNURadio), das jedoch eine vorherige Signal-Synchronisation erfordert und inspirierend ist (ein besonderes Dankeschön an Ron Economos).

Was haben wir.

Es gibt den Standard ETSI EN 302 755, der die Übertragung ausfĂŒhrlich beschreibt, jedoch nicht den Empfang.

Das Signal wird mit einer Abtastrate von 9,14285714285714285714 MHz ausgestrahlt, moduliert mit COFDM und 32.768 TrÀgersignalen in einem 8 MHz-Band.

Es wird empfohlen, solche Signale mit einer Verdopplung der Abtastrate zu empfangen (um nichts zu verlieren) und auf einer Zwischenfrequenz, die höher ist als die Bandbreite (SuperhĂ©tĂ©rodine-Empfang), um DC-Verschiebungen und das "Durchdringen" des lokalen Oszillators (LO) am Eingang des EmpfĂ€ngers zu vermeiden. GerĂ€te, die diesen Anforderungen entsprechen, sind fĂŒr einfache Neugier zu teuer.

SdrPlay mit 10Msps 10bit oder AirSpy, die Ă€hnliche Eigenschaften haben, sind deutlich gĂŒnstiger. Hier geht es nicht um die doppelte Abtastrate, und der Empfang kann nur mit direkter Umwandlung (Zero IF) erfolgen. Daher wechseln wir (aus finanziellen GrĂŒnden) auf die Seite der AnhĂ€nger von „purem“ SDR mit minimaler Hardwareumwandlung.

Es mussten zwei Aufgaben gelöst werden:

  1. Synchronisation. Die genaue Abweichung der Frequenz bis zur Phase und die Abweichung der Abtastrate ermitteln.
  2. Den DVB-T2-Standard rĂŒckwĂ€rts neu schreiben.

Die zweite Aufgabe erfordert viel mehr Code, ist aber mit Geduld lösbar und kann leicht durch Testsignale ĂŒberprĂŒft werden.

Test-Signale sind auf dem Server der BBC verfĂŒgbar: ftp://ftp.kw.bbc.co.uk/t2refs/ mit einer ausfĂŒhrlichen Anleitung.

Die Lösung der ersten Aufgabe hĂ€ngt stark von den Eigenschaften des SDR-GerĂ€ts und den Steuerungsmöglichkeiten ab. Die empfohlenen Steuerungsfunktionen zur Frequenznutzung waren, wie man sagt, nicht erfolgreich, aber sie boten viel Erfahrung im Lesen von technischen Dokumentationen, Programmierung, dem Ansehen von Serien und dem Lösen philosophischer Fragen
 kurz gesagt, ich konnte das Projekt nicht aufgeben.

Der Glaube an „pure SDR“ ist nur gewachsen.

Wir nehmen das Signal so wie es ist, interpolieren es nahezu zu einem Äquivalent und extrahieren dann ein diskretes Signal, das jedoch dem echten Ă€hnlich ist.

Synchronisationsdiagramm:

SDR DVB-T2 EmpfÀnger in C++

Hier ist alles nach Lehrbuch. Es wird nachfolgend etwas komplexer. Abweichungen mĂŒssen berechnet werden. Es gibt zahlreiche Literatur und Forschungsartikel, die die Vor- und Nachteile verschiedener Methoden vergleichen. Ein Klassiker ist – „Michael Speth, Stefan Fechtel, Gunnar Fock, Heinrich Meyr, Optimum Receiver Design for OFDM-Based Broadband Transmission – Teil I und II“. Allerdings habe ich keinen Ingenieur getroffen, der bereit und fĂ€hig ist, solche Berechnungen anzustellen, weshalb ein ingenieurtechnischer Ansatz verfolgt wurde. Mit demselben Synchronisationsverfahren wurden Störungen in das Testsignal eingebracht. Durch den Vergleich verschiedener Metriken mit bekannten Abweichungen (die ich selbst eingebracht habe) wurden die besten fĂŒr Leistung und einfache Umsetzung ausgewĂ€hlt. Die Empfangsfrequenzabweichung wird durch den Vergleich des Schutzintervalls und seines sich wiederholenden Teils berechnet. Die Phase der Empfangsfrequenz und die Abtastfrequenz werden anhand der Abweichung der Phasen der Pilotsignale geschĂ€tzt und werden in einem einfachen, linearen Equalizer des OFDM-Signals verwendet.

Charakteristik des Equalizers:

SDR DVB-T2 EmpfÀnger in C++

Und all das funktioniert gut, wenn man weiß, wann ein DVB-T2-Rahmen beginnt. Dazu wird im Signal das P1-Preambel-Symbol ĂŒbertragen. Die Methode zur Erkennung und Dekodierung des P1-Symbols ist in der technischen Spezifikation ETSI TS 102 831 beschrieben (dort gibt es auch viele nĂŒtzliche Empfehlungen zum Empfang).

Autokorrelation des P1-Signals (der höchste Punkt ist der Beginn des Rahmens):

SDR DVB-T2 EmpfÀnger in C++

Das erste Bild (nur noch sechs Monate bis zum bewegten Bild
):

SDR DVB-T2 EmpfÀnger in C++

Hier erfahren wir, was IQ-Imbalance, DC-Offset und LO-Leckage sind. In der Regel wird die Kompensation dieser direkt umwandlungs-spezifischen Verzerrungen im Treiber des SDR-GerÀts implementiert. Es hat daher viel Zeit in Anspruch genommen, zu verstehen: Das Herausziehen der Sterne aus dem harmonischen QAM64-Sternenbild ist die Arbeit der Kompensationsfunktionen. Ich musste alles ausschalten und mein eigenes Fahrrad entwickeln.

Und nun bewegt sich das Bild:

SDR DVB-T2 EmpfÀnger in C++

QAM64-Modulation mit spezifischer Sternenbilderdrehung im DVB-T2-Standard:

SDR DVB-T2 EmpfÀnger in C++

Kurz gesagt, dies ist das Ergebnis, das Hackfleisch durch den Fleischwolf zurĂŒckzulassen.

  • Bit-Interleaving (bitweises Interleaving mit gedrehten Spalten)
  • Cell-Interleaving (Interleaving von Zellen im Codierungsblock)
  • Zeitinterleave (auch in der Gruppe der Kodierungsblöcke)
  • Frequenzinterleave (Interleaving der Frequenzen im OFDM-Symbol)

Am Ende haben wir folgendes Signal an der Eingangsstelle:

SDR DVB-T2 EmpfÀnger in C++

All dies ist ein Kampf um die Störfestigkeit des codierten Signals.

Zusammenfassung

Jetzt können wir nicht nur das Signal und seine Form sehen, sondern auch die Steuerinformationen.
In der Luft sind zwei Multiplexe. In jedem davon zwei physische KanÀle (PLP).

Eine Eigenheit im ersten Multiplex – der erste PLP hat das Label „multiple“, was logisch ist, da er nicht der einzige im Multiplex ist, wĂ€hrend der zweite PLP das Label „single“ hat, und das wirft Fragen auf.
Noch interessanter ist die zweite Eigenheit im zweiten Multiplex – alle Programme sind im ersten PLP, wĂ€hrend im zweiten PLP ein Signal unbekannter Natur mit niedriger Geschwindigkeit prĂ€sent ist. Zumindest der VLC-Player, der etwa fĂŒnfzig Videoformate und ebenso viele Audioformate versteht, kann es nicht erkennen.

Das Projekt kann hier gefunden werden.

Das Projekt wurde ins Leben gerufen, um die Möglichkeit zu bestimmen, DVB-T2 mit SdrPlay (und jetzt auch AirSpy) zu dekodieren, deshalb ist dies nicht einmal eine Alpha-Version.

P.S. WĂ€hrend der Schwierigkeiten beim Schreiben des Artikels ist es gelungen, PlutoSDR in das Projekt zu integrieren.

Einige werden sofort sagen, dass dort nur 6 Msps fĂŒr das IQ-Signal ĂŒber USB 2.0 verfĂŒgbar sind, aber man benötigt mindestens 9,2 Msps – das ist jedoch ein anderes Thema.

Quelle: habr.com

Kaufen Sie zuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz, VPS VDS-Servern đŸ”„ Kaufen Sie zuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz, VPS VDS-Servern | ProHoster