Rpi-rtl-sdr
In 2013 I bought one of these cheap USB DVB-T RTL-SDR dongles.
Details:
Tuner Frequency Range Elonics E4000 52 - 2200 MHz with a gap from 1100 MHz to 1250 MHz (varies) VID PID Tuner Device Name 0x0bda 0x2838 E4000 ezcap USB 2.0 DVB-T/DAB/FM dongle
Source: http://sdr.osmocom.org/trac/wiki/rtl-sdr
It came with a small magnetic-base antenna and some software. Initially I used it on Windows and was able to receive signals between 50MHz - 1GHz. There are mods available to make them listen on lower frequencies (HF) but I got it to show aircraft's transponder messages using RTL1090. Combined with Google Maps and VirtualRadar it is fascinating and fun to see what flies overhead..
Currently I am attempting to use one of these dongles to act as an aprs receiver (Rx-Only iGate) for 2m (145.175MHz). If this works I will free up one of my handheld transceivers and I will be able to bring down the power consumption and size of the project considerably.
Linux uses rtl_fm to communicate with these devices.
This is what you should see when plugging in the RTL-SDR on a Debian 9 system:
Apr 22 08:34:14 debian kernel: [ 358.696018] usb 8-5: new high-speed USB device number 6 using ehci-pci Apr 22 08:34:14 debian kernel: [ 358.856014] usb 8-5: New USB device found, idVendor=0bda, idProduct=2838 Apr 22 08:34:14 debian kernel: [ 358.856018] usb 8-5: New USB device strings: Mfr=1, Product=2, SerialNumber=3 Apr 22 08:34:14 debian kernel: [ 358.856020] usb 8-5: Product: RTL2841UHIDIR Apr 22 08:34:14 debian kernel: [ 358.856022] usb 8-5: Manufacturer: Realtek Apr 22 08:34:14 debian kernel: [ 358.856024] usb 8-5: SerialNumber: 00000001 Apr 22 08:34:14 debian mtp-probe: checking bus 8, device 6: "/sys/devices/pci0000:00/0000:00:1d.7/usb8/8-5" Apr 22 08:34:14 debian mtp-probe: bus: 8, device: 6 was not an MTP device Apr 22 08:34:14 debian kernel: [ 359.121689] usb 8-5: dvb_usb_v2: found a 'Realtek RTL2832U reference design' in warm state Apr 22 08:34:14 debian kernel: [ 359.179365] usb 8-5: dvb_usb_v2: will pass the complete MPEG2 transport stream to the software demuxer Apr 22 08:34:14 debian kernel: [ 359.179381] DVB: registering new adapter (Realtek RTL2832U reference design) Apr 22 08:34:14 debian kernel: [ 359.227932] i2c i2c-8: Added multiplexed i2c bus 9 Apr 22 08:34:14 debian kernel: [ 359.227934] rtl2832 8-0010: Realtek RTL2832 successfully attached Apr 22 08:34:14 debian kernel: [ 359.227943] usb 8-5: DVB: registering adapter 0 frontend 0 (Realtek RTL2832 (DVB-T))... Apr 22 08:34:14 debian kernel: [ 359.257263] r820t 9-001a: creating new instance Apr 22 08:34:14 debian kernel: [ 359.264401] r820t 9-001a: Rafael Micro r820t successfully identified Apr 22 08:34:14 debian kernel: [ 359.267992] rtl2832_sdr rtl2832_sdr.1.auto: Registered as swradio0 Apr 22 08:34:14 debian kernel: [ 359.267994] rtl2832_sdr rtl2832_sdr.1.auto: Realtek RTL2832 SDR attached Apr 22 08:34:14 debian kernel: [ 359.267996] rtl2832_sdr rtl2832_sdr.1.auto: SDR API is still slightly experimental and functionality changes may follow Apr 22 08:34:14 debian kernel: [ 359.274612] Registered IR keymap rc-empty Apr 22 08:34:14 debian kernel: [ 359.274710] input: Realtek RTL2832U reference design as /devices/pci0000:00/0000:00:1d.7/usb8/8-5/rc/rc0/input32 Apr 22 08:34:14 debian kernel: [ 359.274811] rc rc0: Realtek RTL2832U reference design as /devices/pci0000:00/0000:00:1d.7/usb8/8-5/rc/rc0 Apr 22 08:34:14 debian kernel: [ 359.276298] usb 8-5: dvb_usb_v2: schedule remote query interval to 200 msecs Apr 22 08:34:14 debian kernel: [ 359.286751] lirc_dev: IR Remote Control driver registered, major 244 Apr 22 08:34:14 debian kernel: [ 359.287484] usb 8-5: dvb_usb_v2: 'Realtek RTL2832U reference design' successfully initialized and connected Apr 22 08:34:14 debian kernel: [ 359.287526] usbcore: registered new interface driver dvb_usb_rtl28xxu Apr 22 08:34:14 debian kernel: [ 359.344649] rc rc0: lirc_dev: driver ir-lirc-codec (dvb_usb_rtl28xxu) registered at minor = 0 Apr 22 08:34:14 debian kernel: [ 359.344651] IR LIRC bridge handler initialized
test audio out by listening to a local FM broadcast station (update frequency for your area)
rtl_fm -f 102.1M -s 170k -r 44100 -o 1 - | aplay -t raw -r 44100 -f S16_LE -c 1 -V mono -
rtl_fm
- -s 170k = Sampling bandwidth, use 170k for Wide-Band FM, 25k for Narrow-Band FM
- -r 44100 = output sampling rate; must always be less than the Sampling Bandwidth
- -o 1 = Oversampling
NOTE:
aplay
- -c 1 = Channels (use 2 for stereo)
- -V mono = VU-meter (show signal strength on screen)
- -r 44100 = sampling rate (max=44100) (must match output sampling rate from rtl_fm)
streaming over TCP
If your device does not have a soundcard available you can stream the audio over the network.
On the server:
(required packages: apt-get install sox libsox-fmt-mp3 socat)
rtl_fm -f 106.1M -s 170k -r 44100 - | sox -traw -r44100 -es -b16 -c1 -V1 - -tmp3 - | socat -u - TCP-LISTEN:8080
On the receiver:
(required packages: apt-get install sox libsox-fmt-mp3 netcat)
netcat <server> 8080 | play -t mp3 -
testing APRS packets with MultimonNG
Feeding a pre-recorded aprs packet in .wav format into multimon (it supports .mp3 as well)
multimon-ng -a AFSK1200 -t wav -i <soundfile.wav>
creating a Virtual Sound Device for the RTL-SDR
This will allow us to simply connect soundmodem to the virtual sound device and all we need to do then is feed it with audio from the RTL-SDR.
# modprobe snd-aloop -or- # echo "snd-aloop" >> /etc/modules (reboot)
send RTL-SDR audio to the virtual sound device
$ rtl_fm -f <freq> -s 100k -r 22050 - | aplay -r 22050 -f S16_LE -t raw -c 1 -D hw:Loopback,0,0
Confirm audio is coming through:
arecord -f S16_LE -r 22050 -D plughw:1,1 - | aplay -r 22050 -f S16_LE -
We can now use the virtual sound device to configure soundmodem
(more info here when I get it to work!)