WSPR Signaltest mit Arduino
WSPR Signal-Informationen und -Kodierung
Eine WSPR – Standard-Aussendung besteht stets aus einem Rufzeichen, einem QTH-Locator(4-stellig) und der Sendeleistung des WSPR-Senders in dBm – das ist alles. Beispiel:
DL0RI JO40 23
Diese Informationen werden in 162 quartäre Kanalsymbole (Ziffern 0,1,2,3) gepackt, welche durch vier verschiedene Träger – Frequenzen innerhalb einer Bandbreite von ca. 6Hz realisiert werden, d.h. die vier Träger liegen sehr dicht beieinander (Schmalband 4-FSK Modulation). Die Dauer der Aussendung für ein Kanalsymbol dauert jeweils 683ms, so dass für die Übertragung insgesamt 162 * 0,683s = 110,6s nötig sind. Die Kodierung selber ist ein Thema für sich; dafür steht ein frei erhältliches Programm zur Verfügung (Dank dem Erfinder von WSPR, Joe Taylor, K1JT !), welches als Eingabe die Sende-Information erhält, hier z.B. DL0RI JO40 23, und in der Ausgabe ein Textfile liefert, welches die 162 Kanalsymbole für diese Eingabe enthält.
Für einen Test soll nun ein einfacher Versuchsaufbau für eine Aussendung im 10m Band realisiert werden. Für WSPR Aussendungen ist dort ein 200 Hz breiter Kanal reserviert (28,126 000 MHz – 28,126 200 MHz). Dort legen wir unser Signal in die Mitte (28,126 100 Hz). Die vier Trägerfrequenzen für die Kanalsymbole 0,1,2,3 liegen jeweils genau 1,46 Hz auseinander; für die Übertragung eines WSPR-Signals werden dann ca. 6 Hz Bandbreite beansprucht. Folgender Frequenzplan ergibt sich dann:
Was es jetzt nur noch braucht ist ein frequenzgenau einstellbarer Oszillator (z.B. Si5351, steuerbar über den I2C-Bus), einen Feldeffekttransistorfür die Signalverstärkung inklusive Tiefpass (zur Vermeidung von Störungen anderer Funkdienste in höher gelegenen Frequenzbereichen).
Beispiel des zeitlichen Verlaufs der Kanal-Symbol-Übertragung
byte symbols[162] = {1,3,2,2,2,2,0,2,…….. };
Ebenso die vier Oszillatorfrequenzen für die Symbole 0,1,2,3:
unsigned long long frequency[4] = {f0,f1,f2,f3}; mit
f0 = 28126097,81 Hz
f1 = 28126099,27 Hz
f2 = 28126100,73 Hz
f3 = 28126102,19 Hz
Der Oszillator wird dann über die beiden Listen gesteuert. Möglich macht das eine formidable Arduino Programm-Bibliothek Etherkit Si5351 Library von Jason Milldrum, NT7S (https://github.com/NT7S/Si5351), mit der die Oszillatorfrequenz mit dem Befehl
si5351.set_freq(frequency[val]);
erforderlich genau eingestellt werden kann – thanks a lot, Jason! Um nun den Oszilator gemäß Kanal-Symbol-Liste steuern zu können, wird mittels einer Laufvariable i über eine Schleife das jeweilige Symbol aus der Liste ausgewählt und das so lange, bis alle 162 Symbole abgearbeitet sind.
for (byte i=0; i< 162; i++){
si5351.set_freq(frequency[symbols[i]]);
}
Da es für den zeitlichen Ablauf einer Aussendung strenge Regeln gibt – gestartet darf eine Aussendung nur sekundengenau zu jedem ganzzahligem Minutenanfang) – bedarf es noch einer genauen GPS-Uhr (Smartphone-Uhr, PC-Netzzeit, etc.) und eines Schalters zum Starten einer Aussendung. Das Arduino-Programm findet man hier.
Hardwaremodule:
Si5351 Oszillator mit TXCO, Tiefpassfilter, QRPLabs Shield, Arduino
Ein hervorragend ausgearbeitetes und vom Konstrukteur betreutes Projekt für eine automatisch arbeitenden WSPR Bake findet man unter http://www.qrp-labs.com.
weiter zu WSPR mit Soundcard + TX