SSB-USB-Sender (Phasenmethode)

Moduliert ein Audiosignal per Phasenmethode (Hartley-Modulator, siehe
SSB-Grundlagenartikel,
Abschnitt 2) auf USB und schreibt das Ergebnis als rohe komplexe IQ-Datei —
zum Testen der Demodulationskette (z. B.
ssb-usb-empfaenger), ohne dass dafür ein realer
Sender oder SDR-Empfang nötig wäre. Zwei Varianten, je nach Audioquelle:

ssb_usb_sender.grc — Live-Mikrofon

QT-GUI-Anwendung (Audio Source → Throttle → Hilbert → Rational Resampler → Multiply mit komplexem NCO-Träger → Multiply Const → File Sink), nimmt
laufend über das Mikrofon auf und schreibt nach ssb_usb_144300_test.iq.
Läuft, bis das Fenster geschlossen wird — zum Aufzeichnen eigener
Sprachdurchsagen als Testmaterial.

ssb_usb_sender_testsignal.grc — reproduzierbarer Batch-Generator

Kein GUI, läuft automatisch bis zum Dateiende durch (Wav File Source → Hilbert → Rational Resampler → Multiply mit NCO → Multiply Const → File Sink), liest test_audio.wav und schreibt nach
ssb_usb_144300_testsignal.iq. Deterministisch und reproduzierbar — die
richtige Wahl für automatisierte Tests oder um die Demodulationskette ohne
Mikrofon zu prüfen.

Parameter (beide Varianten)

Variable Wert Bedeutung
audio_rate 48.000 S/s Abtastrate der Audioquelle
interp 40 Interpolationsfaktor des Rational Resampler
samp_rate 1.920.000 S/s Abtastrate der erzeugten IQ-Datei (audio_rate * interp)
carrier_freq 500.000 Hz „Sendefrequenz" — Position des Trägers im IQ-Basisband
volume 0,8 Amplitudenskalierung vor dem File Sink

carrier_freq frei wählbar (Nyquist beachten: samp_rate/2 muss deutlich über
carrier_freq + 3000 Hz liegen — bei 500 kHz und 1,92 MS/s reichlich Reserve
bis knapp unter 960 kHz).

Wichtig bei generate_options im GRC: Für ein eigenständig lauffähiges
Programm (python3 datei.py) muss die Option „QT GUI" oder „No GUI"
gewählt sein — „Hier Block (QT GUI)" erzeugt nur eine Klassendefinition
ohne main()/if __name__ == "__main__" und lässt sich nicht direkt
ausführen (das Skript beendet sich dann sofort, ohne Fehlermeldung).

Verifiziert (tatsächlich ausgeführt, GNU Radio 3.10.12.0)

FFT der mit ssb_usb_sender_testsignal.grc erzeugten Datei zeigt die Energie
exakt im erwarteten Band, das Spiegelband (unteres Seitenband) ist um
114 dB unterdrückt:

Peak-Pegel bei +300..+503 kHz (USB, erwartet): 0.0 dB
Peak-Pegel bei -503..-300 kHz (Spiegel-/LSB-Bereich): -114.3 dB
Peak-Pegel bei -3..+3 kHz um DC: -178.9 dB
Peak-Pegel bei +300..+503 kHz (USB, erwartet): 0.0 dB
Peak-Pegel bei -503..-300 kHz (Spiegel-/LSB-Bereich): -114.3 dB
Peak-Pegel bei -3..+3 kHz um DC: -178.9 dB

Vollständiger Kreislauf Sender → Datei → Test-Empfänger
→ Audio verifiziert: Die Momentanfrequenz des demodulierten Signals folgt dem
eingespeisten Chirp-Verlauf über die gesamte Dauer (z. B. bei t=2,05s
gemessen 1710,9 Hz gegenüber 1682,4 Hz erwartet — die kleine,
gleichbleibende Differenz stammt von der endlichen FFT-Fensterauflösung der
Messung, nicht von der Modulationskette).

Zum Testen der Demodulation

Der fertig vorbereitete ssb_usb_144300_file_test.grc
im ssb-usb-empfaenger-Ordner liest bereits standardmäßig
ssb_usb_144300_testsignal.iq und demoduliert es — einfach
ssb_usb_sender_testsignal.py einmal laufen lassen und danach den
Test-Empfänger öffnen.