Schicht 1: Modulator/Demodulator (Ein-/Ausgang via Soundkarte)
Links zu diesem Thema:
Allgemeines
Datensicherung, Paketierung, Interface zum Anwenderprogramm
Dokumentation der Schnittstelle für das Anwenderprogramm
Anwenderprogramm "oscardata", Dokumentation folgt in Kürze ...
Die Modemfunktion, also die Modulation / Demodulation der digitalen Daten auf ein Audiosignal wurde in QPSK sowie 8PSK realisiert.
Es wurden verschiedene SDR Bibliotheken getestet (Liquid-SDR, GR usw). Allerdings gelang es nur mit GNU Radio die Entwicklung voranzutreiben, da die grafische Benutzeroberfläche schon sehr komfortabel ist und schnelle Änderungen erlaubt. Allerdings ist Gnu Radio ein reines Linuxprogramm. Man schleppt damit einen riesigen Rucksack von Abhängigkeiten herum und hat keine Chance das ganze auf andere System zu portieren. Daher wurde Modulator und Demodulator dann auf Liquid-SDR portiert und steht damit für Linux und Windows zur Verfügung.
QPSK / 8PSK - Modulator:
Modulator und Demodulator
sind GNU-Radio Projekte welche von der übergeordneten
Schicht automatisch gestartet werden. Die Projekte sind auf
der Amsat-DL Github Seite im Quelltext verfügbar und laufen
unter GNU-Radio ab Version 3.8.
Die zu sendenden Daten werden
über UDP Port 40134 an den Modulator übermittelt und von der
UDP-Source übernommen und gepuffert. Von dort gehen sie als
Byte-Strom in den Constellation Modulator. Dieser wandelt
jedes Byte in 8 Bit und erzeugt somit einen Bitstrom, in
diesem Beispiel mit 3000 bit/s. Ein QPSK Signal überträgt 2
Bit pro Periode der Trägerfrequenz, daher wird aus jeweils 2
Bit ein Symbol erzeugt, die Symbolrate beträgt jetzt noch
1500 Symbole/s. Und schließlich erhöht der Constellation
Modulator die Symbolrate um den Faktor 32 was zu einer
Rate von 48000 Symbolen/s führt, genau der Datenrate der
Soundkarte.
Der Faktor 32 sowie die Datenrate der Soundkarte sind
konfigurierbar um verschiedenste Geschwindigkeiten zu
erhalten.
Und schließlich erzeugt der Modulator die
Symbol-Konstellation, d.h. es wird anhand einer Tabelle
festgelegt an welcher Position ein Symbol liegen soll
(Augendiagramm). Der Ausgang des Modulators ist ein
komplexes I/Q Signal.
Ein Tiefpassfilter mit einer Grenzfrequenz von 3,6 kHz entfernt Oberwellen um unerwünschte Mischprodukte bei der weiteren Verarbeitung zu vermeiden.
Die Wahl
des passenden Frequenzgangs lehnt sich an moderne digitale
ICOM Transceiver an, welche im DATA Modus einen NF
Frequenzbereich von 300 bis 2700 Hz (2400 Hz Bandbreite)
übertragen. Die Mittenfrequenz liegt bei genau 1500 Hz.
Nach der Trennung des I/Q Signals in seinen Real- und
Imaginärteil folgt ein normaler digitaler SSB Mischer. Die
Mischfrequenz wird durch zwei 1500 Hz Generatoren erzeugt.
Die Phasenverschiebung der Generatoren erzeugt zusammen
mit einem Addierer ein USB Signal (für ein LSB Signal
würde anstatt des Addierers ein Subtrahierer zum Einsatz
kommen). Das Ausgangssignal dieses Mischer ist ein 1500 Hz
Träger welcher mit den Daten QPSK Moduliert ist. Die
Bandbreite hängt von der konfigurierbaren Datenrate ab.
Um
Übersteuerung und Nichtlinearitäten zu vermeiden folgt
noch ein 4:1 Abschwächer nach welchem das Signal an die
Soundkarte und weiter zum Funkgerät geht. Sämtliche
Parameter dieses Modulators wurden während hunderten Tests
optimiert um den bestmöglichen Störabstand zu erreichen.
Der 8PSK Modulator sieht genauso aus. Der Unterschied ist,
dass 3 Bit in ein Symbol gepackt werden und die Konstellation 8 Punkte im
Augendiagramm hat.
QPSK / 8PSK - Demodulator:
der Demodulator ist ziemlich aufwändig, sodass hier nur Ausschnitte gezeigt werden. Wer den kompletten FlowGraph sehen möchte kann die GRC Datei von der Amsat-DL Github Seite herunterladen.
Audio-Eingang und SSB-Mischer:
Auf der rechten Seite kommt das Audiosignal vom Empfänger an und wird von der Soundkarte in einen Bitstream mit 44,1 oder 48 kHz umgesetzt.
Zunächst folgt ein Anti-Aliasing Filter. Eigentlich ist dieser bereits in der Soundkarte enthalten, aber um sicherzugehen wird es nochmal gemacht. Danach folgt der, vom Sender bekannte, SSB-Mischer. Das Audiosignal benutzt eine Trägerfrequenz von 1,5kHz. Mit zwei phasenverschobenen Generatoren wird das Audiosignal ins Baseband (0 Hz) heruntergemischt und gleichzeitig das komplexe I/Q Signal erzeugt.
Schließlich folgt noch ein Resampler, der vom Anwenderprogramm programmiert werden kann um verschiedene Sampleraten einzustellen.
Filterung, Taktsynchronisierung und QPSK / 8PSK Demodulation:
der Ausgang des Resamplers ist am Eingang des Polyphase Clock Synchronizers angeschlossen. Weiter geht es durch einen Equalizer, eine AGC und die Costas-Loop. Diese vier Blöcke dienen der Rekonstruktion des Taktes sowie der Wiederherstellung einer sauberen Konstallation (Position der Bits im komplexen Raum). Diese Blöcke sind von ganz entscheidender Bedeutung. Zum heutigen Stand ist GNU Radio das einzige System dass diese Blöcke in höchster Qualität anbietet. Mit keiner anderen der getesteten SDR Bibliotheken konnte eine so hohe Rekonstruktionsqualität gemessen werden.
Die Einstellung sämtlicher Filterparameter wurde in einer fast endlosen Versuchsreihe ermittelt. Einige Einstellung (wie z.B output SPS) ergeben keinen nachvollziehbaren Sinn, sind jedoch in der Praxis optimal.
Der Constellation Decoder sieht sich die Position der Symbole in I und Q Ebene an und entscheidet um welches Symbol es sich handelt. An seinem Ausgang werden die Symbole (nicht die Bits) ausgegeben. Da wir im "Differential" Modus arbeiten, folgt noch ein entsprechende Dekoder. Dieser Modus vermeidet Mehrdeutigkeiten bei der Symbolauswertung.
Die Blöcke "Map" und Unpack 2 Bits" erzeugen aus den Symbolen den Bitstrom. Dieser wird zu Bytes (8 Bit) verpackt und dann an die UDP Schnittstelle übergeben wo der Datenstrom zu übergeordneten Verarbeitung gesendet wird.
Spektrum und Augendiagramm:
Damit der Benutzer sein Funkgerät optimal einstellen kann und über die Qualität der Übertragung informiert wird benötigen wir sowohl ein Spektrumdisplay sowie ein Augendiagramm.
Dazu müssen diese Signal abgegriffen und zur Anwendungssoftware gesendet werden:
der obere Block bekommt die Audio Samples direkt von der Soundkarte. Ein Resampler reduziert die Datenrate um nicht zuviel UDP Last zu erzeugen. Das Originalsignal ist eine Fließkommazahl zwischen 0 und 1. Zur Übertragung eignen sich aber Ganzzahlen viel besser. Daher werden die Sample mit einem Multiplizierer in den Bereich 0 bis 2^24 gebracht. Damit der Empfänger im UDP Datenstrom den Beginn eines Zahlenwertes erkennen kann wird eine feste Zahl "1000" als Marker dazugemischt. Diese Audiosamples werden in der übergeodneten Schicht mit einer FFT verarbeitet um das Spektrum zu erzeugen.
Der untere Block ist am Ausgang der Costas-Loop angeschlossen und bekommt das saubere I/Q Signal. Dieser wird in Real- und Imaginärteil getrennt und per UDP an das übergeordnete Programm geschickt. Eine feste Zahl "1000" dient auch hier als Marker zur Erkennung der Zahlenpositionen im Datenstrom.
Das 8PSK Empfangsteil sieht genauso aus, nur dass die Bitanzahl und Konstallationen entsprechend angepasst sind.
Endgültige Version mit Liquid-SDR:
Nachdem die GNU Radio Version gut lief wurde das Konzept fast 1:1 auf Liquid-SDR umgeschrieben.
Hier die Unterschiede dieser endgültigen Version im Vergleich zur obigen Beschreibung.
Unter GNU Radio erfolgt die Synchronisation mit den vier Blöcken Polyphase Sync, Equalizer, AGC und Costas Loop.
In Liquid-SDR gibt es eine ähnliche Funktion: smytrack. Symtrack beeinhaltet den Synchonizer, Equalizer sowie AGC und außerdem eine PLL, welche zwar anders als die Costal Loop funktioniert, dieser jedoch etwas ähnlich ist. Jedenfalls funktioniert symtrack ganz hervorragend. Die Empfindlichkeit des Demodulators ist um fast 3 dB besser als unter GNU Radio.
Ein weiterer Vorteil von Liquid-SDR ist der einfachere Zugriff auf ale Rohdaten. Damit entfallen die im letzten Bild gezeigten Blöcke zum Abgreifen von IQ Daten und Audio-Samples.