I. Der RasPi als RTL-SDR Server mit einem DVB-T USB-Stick

RTL-SDR USB-Stick Installation und Test

In den letzten Tagen ist die Idee gereift meinen bislang noch separat laufenden Raspberry Pi ADS-B Flugtransponderempfänger mit einem sehr preiswerten NoName DVB-T+DAB+FM USB-Stick ebenfalls mit auf den gerade neu aufgesetzten RasPi FHEM-Server zu verlagern, um damit nur noch einen Controller im 24-Stunden Dauerbetrieb laufen zu haben. Der DVB-T USB-Empfänger soll dann dieses Mal auf dem RasPi nicht nur als ADS-B Server (Installationsanleitung und mehr folgt in weiteren Teilen) fungieren sondern auch noch als RTL-SDR Server und seine Daten zum SDR-Client wie zum Beispiel SDR# über das Netzwerk streamen.

Der von mir verwendete USB 2.0 Dongle ist mit einem RTL2832U Demodulator und USB-ControllDVB-T Stick offener, getaktet mit einem 28,8MHz Quarz sowie einem Rafael R820T Tuner-IC ausgestattet. Der Abstimmbereich überstreicht mit dem aktuellen Treiber lückenlos den Bereich von 24 MHz bis zu 1,766 GHz. Mit der Installation eines experimentellen Treibers lässt dich der Abstimmbereich noch etwas erweitern. Weitere Details zu den verwendbaren USB-Dongles können im Internet recherchiert werden. Der etwas empfindlichere R820T2 Tuner, oft in einem blauen USB-Stickgehäuse verbaut, wird bei ebay inzwischen für deutlich unter € 10 angeboten!

DVB-T Stick offen RTL2832UDVB-T Stick offen R820T

 

 

 

Die Stromaufnahme ist mit etwa 1,5W angegeben. Der (MicroCoax) MCX-Antenneneingang ist hier mit 75 Ohm spezifiziert. Die leichte Fehlanpassung auf 50 Ohm Koaxialkabel ist aber zu verschmerzen.

  1. Da der RasPi FHEM Server „Headless“ betrieben wird, also ohne Monitor und Tastatur, wird auf dem PC noch ein SSH Client wie PuTTY benötigt. Dieses Tool muss ggf. noch vorab installiert werden. Der Start von PuTTY erfolgt dann über die des Raspberry Pi, bei mir 192.168.1.49. Alle anderen Einstellungen im PuTTY können unverändert bleiben.
  2. Mit Username pi und Passwort raspberry loggen wir uns dann über PuTTY in das System ein.
  3. Über den Befehl uname –a oder uname –r können wir uns die aktuell installierte Wheezy Version unseres RasPi anzeigen lassen. Bei mir steht derzeit 3.18.11+
uname -a
 uname -r
  1. Anschließend führen wir wie vor jeder neuen Installation von Software erst einmal ein Update mit Upgrade durch und lassen uns zum Schluss wieder die Version im Terminal ausgeben:
sudo apt-get update && sudo apt-get upgrade && uname -a
  1. Da Linux nach einem Update auch Treiber mit aktuelleren Versionen überschreibt, müssten nach jedem Update die Originaltreiber des Wheezy manuell wieder gegen die SDR-spezifischen Treiber getauscht werden. Das ist u. U. mühsam und geht auch einfacher. Dazu wechseln wir ins entsprechende Verzeichnis mit:
cd /etc/modprobe.d
  1. Hier erstellen wir einfach eine neue zusätzliche Konfigurationsdatei:
sudo nano nonrtl.conf
  1. Die folgenden 3 Zeilen müssen jetzt in diese Datei nonrtl.conf geschrieben oder kopiert werden, um sicherzustellen, dass die hier aufgelisteten Treiber ab sofort nicht mehr vom Kernel geladen werden:
# If DVB-T Stick is used as SDR-Receiver uncomment following 3 lines
blacklist dvb_usb_rtl28xxu
blacklist rtl2832
blacklist rtl2830
  1. Mit CTRL + x und Bestätigung mit y wird die Datei auf das Speichermedium geschrieben und der nano Editor geschlossen. Alternativ kann obiger Text übrigens aber auch genauso gut zusätzlich mit in die Datei /etc/modprobe.d/rasp-blacklist geschrieben werden. Soll der DVB-T Stick später irgendwann mal auf diesem Raspberry Pi wieder seiner ursprünglich gedachten Bestimmung zugeführt werden, so müssen obige Zeilen einfach nur auskommentiert unde das System neu gestartet werden.
  2. Nach diesem Schritt sollte das System einmal neu hochgefahren werden mit:
sudo shutdown -r 0
  1. Mit den nächsten Schritten werden nach der erneuten Anmeldung an den RasPi das Github und USB Bibliotheken heruntergeladen und installiert:
sudo apt-get install git-core # Installs the git repository fetch code
sudo apt-get install git # Installs git system 
sudo apt-get install cmake # Tool for software generation
sudo apt-get install libusb-1.0-0-dev        # USB library
sudo apt-get install build-essential          # Creates packages
  1. Als nächstes werden nun die Treiber- und Sourcecodepakete über Github heruntergeladen:
git clone git://git.osmocom.org/rtl-sdr.git
  1. Nun folgt die Installation der Treiber und Sources:
cd rtl-sdr                                                     # Change Directory
mkdir build                                                # Create directory
cd build                                                      # Change Directory
cmake ../ -DINSTALL_UDEV_RULES=ON # Compile as non-root
make # Compile
sudo make install
sudo ldconfig                                                # Administration update of the libraries
  1. Nach obigen Schritten sollte das System wieder einmal neu gestartet werden mit:
sudo reboot
  1. Nach erneuter Anmeldung an das System müssen jetzt aber erst noch einige Einstellungen vorgenommen werden. Dazu wechseln wir erst ins Homeverzeichnis, sofern nicht bereits nach dem Booten geschehen:
cd ~ 
  1. Nun kopieren wir einige Regeln und starten das System erneut:
sudo cp ./rtl-sdr/rtl-sdr.rules /etc/udev/rules.d/
sudo reboot
  1. Mit Fertigstellung der Installation sind nun auch mehrere Softwaretools auf dem RasPi installiert, darunter rtl_test, rtl_sdr, rtl_tcp, und. Diese schauen wir uns gleich alle an.
  2. Nach erneuter Anmeldung an den RasPi kann der DVB-T Stick jetzt das erste Mal eingesteckt werden und ein erster Funktionstest erfolgen. Eine möglicherweise ausgegebene Fehlermeldung mit Programmabbruch „No E4000 tuner found“ kann ignoriert werden, zumindest wenn kein DVB-T Stick mit einem Elonics Tuner E4000 verwendet wird.
rtl_test -t                                                         # -t enables Elonics E4000 tuner benchmark
  1. Bei mir wird daraufhin folgende Meldung ausgegeben, da in meinem Stick ein Rafael Tuner verbaut ist:

Found 1 device

0: Realtek, RTL2838UHIDIR, SN: 00000001

Using device 0: Generic RTL2832U OEM

Found Rafael Micro R820T tuner

Supported gain values (29): 0.0 0.9 1.4 2.7 3.7 7.7 8.7 12.5 14.4 15.7 16.6 19.7 20.7 22.9 25.4 28.0 29.7 32.8 33.8 36.4 37.2 38.6 40.2 42.1 43.4 43.9 44.5 48.0 49.6

[R82XX] PLL not locked!

Sampling at 2048000 S/s.

No E4000 tuner found, aborting.

  1. Stick, Controller und der richtige Tuner werden erkannt! Also folgt jetzt ein 2. Test um die Bitverluste mit dem hier verwendeten Rafael Micro R820T Tuner festzustellen. Der Aufruf erfolgt dann einfach ohne Parameter. Je höher die Samplerate und je länger das Tool auf dem RasPi ohne Bitfehler läuft, desto stabiler ist er später auch unter Betriebsbedingungen.
 rtl_test 
  1. Abgebrochen werden kann dieser ongoing laufende Test mit CTRL + cScreenshot_Sample_Rate. Die ausgegebene Fehlerrate sollte bei 0 liegen, ansonsten muss vermutlich die Samplerate doch etwas verringert werden.
  2. Mit rtl_test -h werden noch einige optionale Schalter angezeigt
rtl_test -h
  1. Verläuft bis hierher alles wie erwartet, lässt sich die maximal mögliche fehlerfreie Samplerate auch schnell über den Befehl feststellen. Wobei hier 3.2e6 der Samplerate von 3,2 MSps (Mega Samples per second) entsprechen. Sollten während des obigen Tests nun doch Bitverluste aufgetreten sein oder die Bandbreite generell begrenzt werden, so kann der Wert entsprechend verkleinert werden. Standard auch über TCP sind eher nur 2.4e6 aber auch 2.88e6 sollten u. U. noch ohne Bitverlust funktionieren. In meiner Konstellation funktioniert nur eine Samplerate von 2,4 MSps fehlerfrei!
rtl_test -s 2.4e6

So weit schon mal ganz schön. Ich hoffe jetzt, dass diese bis hierher etwas ausführlichere Schritt-für-Schritt-Anleitung auch den Nicht-Linux-Spezialisten hilft.

Im nächsten Kapitel soll der USB-Dongle kalibriert werden. Wem die Genauigkeit des Oszillators egal ist, kann das folgende Kapitel auch überspringen oder zu einem späteren Zeitpunkt jederzeit durchführen.

Kalibrierung des DVB-T Sticks

Die Frequenzstabilität dieser DVB-T Sticks ist nicht gerade überragend. Auch die Temperaturabhängigkeit ist relativ hoch. Es gibt jedoch eine interessante Möglichkeit den Stick auch ohne Messsender zu kalibrieren.

  1. Wechseln wir dazu erst einmal wieder in das Homeverzeichnis mit:
cd
  1. Nun muss das Tool kal heruntergeladen:
sudo apt-get install libtool autoconf automake libfftw3-dev
git clone https://github.com/asdil12/kalibrate-rtl.git
cd kalibrate-rtl
git checkout arm_memory
./bootstrap
  1. Es dauert jetzt einen Moment, bis wir die nächsten Kommandos zur Installation eingeben können:
./configure
make
sudo make install
  1. Damit ist die Installation bereits abgeschlossen!
  2. Als nächstes kommt das Kalibriertool auch zum Einsatz. Vorab schauen wir uns noch die möglichen Schalter an mit:
kal -h
  1. Nun lassen wir das Tool kal nach den GSM-Masten in der Umgebung suchen.Der Parameter -g bestimmt hierbei die Verstärkung. Mit -g 45 bis -g 50 erhalte ich relativ gute Ergebnisse mit meiner simplen 0815 DVB-T Antenne. Der Suchlauf dauert einige Minuten!
kal -s GSM900 -g 50
  1. Um die Abweichung bei Betriebstemperatur zu berechnen, wählen wir de
    Screenshot_Calibrate_Stick
    
    

    n stärksten Kanal, bei Channel 97 aus und geben folgendes am Prompt ein:

kal -c 97 -g 50

Nach einigen weiteren Minuten des Wartens, endlich eine Anzeige. Für den voScreenshot_Calibrate_Stick_Ergebnisn mir verwendeten DVB-T Stick erhalten ich eine Abweichung von rund -6ppm. Den Wert notieren wir erst einmal auf dem Stick, da wir diesen später noch brauchen werden.

Der erste Ton aus dem RTL-SDR

Es gibt nun mehrere Optionen die empfangenen Audiodaten zu verarbeiten. Am ehesten ist man vermutlich geneigt, einfach eine Aktivbox mit dem Kopfhörerausgang des RasPi zu verbinden.

  1. Mit Eingabe von rtl_sdr werden folgende Optionen geboten:

Usage: -f frequency_to_tune_to [Hz]

[-s samplerate (default: 2048000 Hz)]

[-d device_index (default: 0)]

[-g gain (default: 0 for auto)]

[-p ppm_error (default: 0)]

[-b output_block_size (default: 16 * 16384)]

[-n number of samples to read (default: 0, infinite)]

[-S force sync output (default: async)]

filename (a ‚-‚ dumps samples to stdout)

rtl_sdr 
  1. Audiodaten können übrigens auch mitgeschnitten werden, wie hier in die Datei capture.bin. Die Samplerate ist auf 1,8MSps eingestellt, die Frequenz auf 392,0 MHz.
./rtl_sdr /tmp/capture.bin -s 1.8e6 -f 392e6
  1. Der RasPi unterstützt auch die Tonausgabe über das ALSA Soundsystem, wahlweise über HDMI oder die 3,5mm Stereo Klinkenbuchse. Als Standardvorgabe ist der auto-Mode präferiert über HDMI, sofern die HDMI Ausgabe das unterstützt. Ist kein Display angeschlossen, wird automatisch auf die analoge Klinkenbuchse umgeschaltet (<Nummer> 0=auto, 1=Klinkenbuchse, 2=HDMI)
  2. Mit amixer -h werden alle verfügbaren Optionen zur Einstellung der Audiokanäle angezeigt.
  3. Ggf. muss die Lautstärke im Mixer korrigiert werden.Dazu kann aber auch der Alsamixer verwendet werden. Die Bedienung erklärt sich hier weitgehend selbst.
alsamixer
  1. Mit dem ressourcenschonendem Tool rtl_fm ist ein weiteres Programm für Testzwecke mit vielen Optionen verfügbar. Es demoduliert auch auf leistungsschwachen Controllern FM, AM und SSB.
  2. Mit rtl_fm -h werden die rudimentären Optionen des kompakten Demodulators angezeigt.

Use: rtl_fm -f freq [-options] [filename]

-f frequency_to_tune_to [Hz]

use multiple -f for scanning (requires squelch)

ranges supported, -f 118M:137M:25k

[-M modulation (default: fm)]

fm, wbfm, raw, am, usb, lsb

wbfm == -M fm -s 170k -o 4 -A fast -r 32k -l 0 -E deemp

raw mode outputs 2×16 bit IQ pairs

[-s sample_rate (default: 24k)]

[-d device_index (default: 0)]

[-g tuner_gain (default: automatic)]

[-l squelch_level (default: 0/off)]

[-p ppm_error (default: 0)]

[-E enable_option (default: none)]

use multiple -E to enable multiple options

edge: enable lower edge tuning

dc: enable dc blocking filter

deemp: enable de-emphasis filter

direct: enable direct sampling

offset: enable offset tuning

filename (‚-‚ means stdout)

omitting the filename also uses stdout

Experimental options:

[-r resample_rate (default: none / same as -s)]

[-t squelch_delay (default: 10)]

+values will mute/scan, -values will exit

[-F fir_size (default: off)]

enables low-leakage downsample filter

size can be 0 or 9. 0 has bad roll off

[-A std/fast/lut choose atan math (default: std)]

Produces signed 16 bit ints, use Sox or aplay to hear them.

rtl_fm … | play -t raw -r 24k -es -b 16 -c 1 -V1 –

| aplay -r 24k -f S16_LE -t raw -c 1

-M wbfm | play -r 32k …

-s 22050 | multimon -t raw /dev/stdin

rtl_fm -h
  1. Mit folgender Zeile wird ein Breitband FM-Sender auf 96,2MHz über den Audioausgang mit der Klinkenbuchse am RasPi wiedergegeben.
rtl_fm -f 96.2e6 -M wbfm -s 200000 -r 48000 - | aplay -r 48k -f S16_LE
  1. Mit einer der folgenden Eingaben kann der RasPi ebenfalls am Kopfhörerausgang lokal abgehört werden:
    sudo rtl_fm -f 144800000 -s 44100 -g 9 -l 10 - | aplay -t raw -r 44100 -c 1 -f S16_LE
    rtl_fm -f 96.2e6 -M wbfm -g 50 -l 10 - | aplay -t raw -r 44100 -c 1 -f S16_LE
  2. Mit folgender Einstellung sollten sich mit etwas Geduld auch die im ISM Band heutzutage üblichen batteriebetriebenen Temperatur- und Feuchtesensoren auf 868,000 – 870,000 MHz oder 433,05 – 434,79 MHz abhören lassen bzw. wie hier die Daten in eine Datei schreiben lassen:
rtl_fm -M -f 868.3M -g 50 -s 30k > rtl.dat
rtl_fm -f 433.844M -M -s 30k > sensor.dat

Im nächsten Teil richten wir dann einen SDR-Server auf dem Raspberry Pi ein.

Werbeanzeigen

Ein Kommentar zu „I. Der RasPi als RTL-SDR Server mit einem DVB-T USB-Stick

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Google Foto

Du kommentierst mit Deinem Google-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s