RTL-SDR kalibrieren (Frequenzkorrektur)
Der Quarz im RTL-SDR bestimmt jede Frequenzangabe des Empfängers — sein Fehler lässt sich messen und im Flowgraph korrigieren.
Jeder RTL-SDR-Stick tunt relativ zu seinem eigenen Referenzquarz. Weicht dieser Quarz auch nur geringfügig von seiner Nennfrequenz ab, ist jede eingestellte Empfangsfrequenz um denselben relativen Betrag verschoben — unabhängig davon, wie genau man den Zahlenwert im Flowgraph einträgt. Dieser Artikel zeigt, wie man den Fehler misst und korrigiert.
1. Warum das überhaupt relevant ist
Der Fehler wird in ppm (parts per million, Millionstel) angegeben, weil er sich proportional zur eingestellten Frequenz auswirkt — nicht als fester Hz-Betrag. Bei einem Fehler von beispielsweise −6 ppm auf 144,3 MHz (der Frequenz unseres USB-Sprachempfängers) ergibt das:
$$\Delta f = 144{,}3,\text{MHz} \times (-6 \times 10^{-6}) \approx -866,\text{Hz}$$
Fast 900 Hz Versatz — bei einem 300–3000-Hz-Sprachbandpass keine Kleinigkeit mehr: Die gesamte demodulierte Tonhöhe würde spürbar zu tief klingen, und je nach Vorzeichen könnte der Bandpass sogar Teile des eigentlichen Sprachbandes beschneiden. Bei schmalbandigen Digitalmodes (FT8 etc.) reicht dieser Fehler locker aus, um ein Signal komplett zu verfehlen.
2. Methode 1: rtl_test -p (schnell, im Lieferumfang)
Das rtl-sdr-Softwarepaket bringt ein eingebautes Messwerkzeug mit: rtl_test -p vergleicht über die Zeit die tatsächliche Abtastrate des Sticks mit der Systemuhr des Rechners. Da bei den meisten RTL-SDR-Designs ein einziger Quarz sowohl den Tuner-PLL als auch den ADC-Sample-Takt speist, ist ein gemessener Sample-Raten-Fehler ein direktes Maß für den Tuning-Fehler — ohne dass dafür ein echtes HF-Referenzsignal nötig wäre.
rtl_test -p
rtl_test -p
real sample rate: 2048013 current PPM: 7 cumulative PPM: 7
real sample rate: 2047978 current PPM: -10 cumulative PPM: -2
real sample rate: 2047985 current PPM: -7 cumulative PPM: -4
real sample rate: 2047989 current PPM: -5 cumulative PPM: -4
real sample rate: 2047976 current PPM: -12 cumulative PPM: -6
real sample rate: 2047996 current PPM: -2 cumulative PPM: -5
real sample rate: 2047982 current PPM: -9 cumulative PPM: -5
real sample rate: 2047990 current PPM: -5 cumulative PPM: -5
real sample rate: 2047973 current PPM: -13 cumulative PPM: -6
real sample rate: 2047995 current PPM: -2 cumulative PPM: -6
real sample rate: 2047983 current PPM: -8 cumulative PPM: -6
real sample rate: 2048013 current PPM: 7 cumulative PPM: 7
real sample rate: 2047978 current PPM: -10 cumulative PPM: -2
real sample rate: 2047985 current PPM: -7 cumulative PPM: -4
real sample rate: 2047989 current PPM: -5 cumulative PPM: -4
real sample rate: 2047976 current PPM: -12 cumulative PPM: -6
real sample rate: 2047996 current PPM: -2 cumulative PPM: -5
real sample rate: 2047982 current PPM: -9 cumulative PPM: -5
real sample rate: 2047990 current PPM: -5 cumulative PPM: -5
real sample rate: 2047973 current PPM: -13 cumulative PPM: -6
real sample rate: 2047995 current PPM: -2 cumulative PPM: -6
real sample rate: 2047983 current PPM: -8 cumulative PPM: -6
Die Einzelmessungen (current PPM) schwanken deutlich (−13 bis +7), der laufende Mittelwert (cumulative PPM) konvergiert aber sichtbar gegen −6 ppm — deutlich innerhalb der ±0,5-ppm-Werksangabe des TCXO liegt dieser konkrete Wert zwar nicht, aber in derselben Größenordnung, wie man es von einem gealterten/temperaturabhängigen Quarz erwarten würde.
rtl_test -p misst man den Fehler gegen die Systemuhr des Rechners, nicht gegen eine echte HF-Referenz. Das Ergebnis ist nur so gut wie die Zeitbasis des Host-Systems (bei einem NTP-synchronisierten Rechner in der Praxis ausreichend genau) — für höchste Ansprüche ist Methode 2 vorzuziehen.3. Methode 2: Kalibrierung gegen ein bekanntes Referenzsignal (genauer)
Präziser ist der Abgleich gegen ein Signal, dessen Frequenz exakt bekannt ist — ein Amateurfunkbake, ein Rundfunksender mit fester Trägerfrequenz, oder ein Zeitzeichensender wie DCF77 (77,5 kHz, atomuhrreferenziert). Das Prinzip:
- Den Empfänger auf die bekannte Referenzfrequenz $f_{\text{true}}$ einstellen.
- Im laufenden Flowgraph (z. B. mit einem QT-GUI-Frequenzsink) die tatsächlich empfangene Spitzenfrequenz $f_{\text{gemessen}}$ ablesen.
- Den Fehler berechnen:
$$\text{ppm} = \frac{f_{\text{gemessen}} - f_{\text{true}}}{f_{\text{true}}} \times 10^6$$
rtl_sdr -D bzw. direct_samp), benötigt dafür aber eine für diesen Frequenzbereich geeignete Antenne (Ferritantenne/Loop) — der mitgelieferte Teleskopstab ist bei 77,5 kHz fehlangepasst. Ein eigener Testversuch mit der Stock-Antenne lieferte entsprechend keinen eindeutig identifizierbaren Träger; dieser Absatz beschreibt daher bewusst nur das Verfahren, ohne einen hier tatsächlich verifizierten Zahlenwert zu behaupten.4. Korrektur im Flowgraph eintragen
Der RTL-SDR Source-Block (in GRC ein rtlsdr_source) hat einen Parameter „Ch0: Frequency Correction (ppm)" (corr0) — im eigenen USB-Sprachempfänger derzeit fest auf 0 gesetzt. Der gemessene Wert (z. B. -6) trägt man dort ein — GNU Radio kompensiert den Fehler dann automatisch bei jeder Frequenzeinstellung, nicht nur bei der aktuell gewählten.
5. Grenzen
- Temperaturabhängigkeit: Auch ein TCXO driftet mit der Temperatur, wenn auch deutlich weniger als ein unkompensierter Quarz. Nach längerer Aufwärmphase oder bei stark abweichender Umgebungstemperatur lohnt eine erneute Messung.
rtl_test -pbraucht Zeit: Die Einzelmessungen streuen stark; erst nach mehreren Minuten wird der kumulative Mittelwert aussagekräftig.- Referenzmethode setzt eine bekannte Quelle voraus: Ohne Zugang zu einem präzise bekannten Signal (Bake, Zeitzeichensender, kalibrierter Rundfunksender) lässt sich Methode 2 nicht durchführen — dann bleibt
rtl_test -pdie praktikablere Wahl.