Een universele breedbandontvanger ontvanger.

De experimenten met de Raspberry Pi en RTL Dongle gaat verder. Had ik in een eerder blog al verteld dat het mogelijk is om de combinatie RPi en Dongle als remote ontvanger te gebruiken, nu een blog over een desktop versie met andere software en een heus display.

Voor dit experiment gebruik ik een Raspberry Pi type A board. Dus geen LAN aansluiting. Ik heb een monitor aangesloten en een toetsenbord en muis, dus kan alle kanten op. Overigens via WiFi ben ik op het huisnetwerk (en dus internet) aangesloten. Verder is op de gevoede USB 2.0 Hub een RTL Dongle aangesloten die op een buitenantenne is geplugt!

Werkt het? Jein. Het koste me wel wat moeite en knutselen (met software en parameters dan) maar ik ben eigenlijk wel tevreden over het resultaat en hoop dat er nog betere software komt. Een beschrijving van de situatie.

Wij amateurs zijn verwent met de SDR# software op Windows of krachtiger Linux systemen. Hiermee is werkelijk alles te bedienen, besturen en met name de selectiviteit is prima. Op een RPi werkt dit echter niet 123. Althans ik ben nog geen dergelijke software tegengekomen die op een Raspberry Pi stand houd.

Wel ben ik tegen een andere oplossing gestoten. Daarvoor moet je allereerst de software installeren zoals beschreven in mijn vorige post: https://pa3ang.nl//archives/3405
Na de installatie heb je dan de volgende software: rtl_ftp, rtl_test, rtl_adsb, rtl_sdr en rtl_fm. Deze laatste is nu voor ons van belang. Dit is namelijk zoals de ontwerper zegt:

Rtl_fm is a little utility I wrote for the rtl-sdr project. The program was made to fill a gap in software defined radio: all the computers weaker than a Pentium 4. Basically, an Atom processor processor does not have enough oomph to demodulate something as simple as narrow band FM using the standard tools. (Recently a high performance FM demodulator was released, Simple FM but it works only possibly on newer Atoms.) So rtl_fm was written with one goal, efficiency, in mind.

Het is dus een lichtgewicht programmaatje om FM (en AM) te demoduleren. Nou en dat doet het. Je kunt de bandbreedte (van de demodulator) instellen en omdat het programma ook geschikt is voor WideBand FM is er aan de ‘voorkant’ weinig narrowband selectiviteit. Sterk nabuursignalen hoor je dus doorbreken. Dit is een belangrijke tekortkoming en maken het programma feitelijk ongeschikt voor onze radioamateur toepassingen. Echter op een ‘rustige’ 2 meter band komt PI3UTR prima binnen in Zwolle en breekt Apeldoorn op 145.725 (100 kHz hoger) niet door maar PI3MEP in Meppel op 25kHz hoger wel.

Je kunt veel instellen bij rtl_fm. In feite alles wat belangrijk is. O ja, je moet een geschikte player hebben om het ruwe signaal naar te pipe-en. aplay zit standaard in Wheezy, maar er wordt ook gebruik gemaakt van play. Dit is een player programma welke onderdeel is van het Sox pakket. Dus $: sudo apt-get install sox Als je dan toch bezig bent installeer dan ook even het multimon programma waarmee je allerlei digitale signalen kunt decoderen (nee geen D-STAR en C2000). $: sudo apt-get install multimon

Ondertussen heb ik een klein schriptje geschreven om snel de mode, frequentie, squelch en decoder bandbreedte te kunnen veranderen. Het is verre van af!

#!/bin/bash
#
# Radio station script for rtl_fm met play
# by <pa3ang@xs4all.nl>
#
# Version 1.0
# 2013-04-30
# https://www.pa3ang.nl
#

# Copy/redirect output to stderr
function StdErr () {
cat – 1>&2
}

# Help
# 1st argument is a mode, 2nd is frequency in MHz, 3rd is squelch (optional), 4th is bandwidth
# mode AM, NFM, WFM
# freq in MHz with decimal .
# squelch  value 0 – 255
# bandwidth  in kHz without k

if [[ $1 == “AM” ]]; then
# mostly VHF aircomms 118 – 136 MHz
killall -9 rtl_fm
if [ -z “$3″ ]; then
sq=”120″
else
sq=$3
fi
gn=”A”
ppm=”62″
if [ -z “$4″ ]; then
bw=”8k”
else
bw=$4
fi
rtl_fm -M -f $2M -l $sq -s $bw -p $ppm | play -r $bw -t raw -e signed-integer -b 16 -c 1 -V1 – -q &
fi

if [[ $1 == “NFM” ]]; then
killall -9 rtl_fm
if [ -z “$3″ ]; then
sq=”120″
else
sq=$3
fi
gn=”A”
# ppm checked for VHF
ppm=”90″
if [ -z “$4″ ]; then
bw=”16k”
else
bw=$4
fi
rtl_fm -N -E -f $2M -l $sq -o 1 -s $bw -p $ppm | play -r $bw -t raw -e signed-integer -b 16 -c 1 -V1 – -q &
fi

if [[ $1 == “WFM” ]]; then
# FM Band 88 – 108 MHz, WBFM only
killall -9 rtl_fm
sq=”0″
gn=”A”
bw=”170″
# aplay player !
rtl_fm -W -f $2M -l 0 -p 0 -o 4 | aplay -r 32K -f S16_LE -t raw -c 1 -q &
fi

# info on BitWizard RPI-UI
sudo bw_tool -a 94 -C -r 17 -v 0 -t “$2” MHz, “$1”
sudo bw_tool -a 94 -r 17 -v 32 -t “s$sq|g$gn|p$ppm|b$bw”

exit $ERR_OK

Een simple script met de naam radiofm wat je aanmaakt in je /home/pi directory en maak hem dan executable met $:  sudo chmod +x radiofm

De mogelijke command’s:
./radiofm WFM 99.4  (FM ontvangst in mono!)
./radiofm NFM 145.625 120 12   (mode, frequentie in MHz, squelch nivo en bandbreedte)
./radiofm AM 126.2 120  (AM ontvangst)
etc.

Het script schrijft ook info naar het BitWizard display. Het volgende projectje is een Python script met uitlezing van de knopjes en misschien een draaischakelaar (encoder) aansluiten.

Ik wilde in elk geval weten of het project kans van slagen heeft en met de eerder gemelde probleem van de selectiviteit lijkt het toch de inspanning waard om nog even verder te programmeren.

Nuttige linkjes met veel info:
http://superkuh.com/rtlsdr.html
http://dekar.wc3edit.net/2012/05/24/multimonng
http://kmkeen.com/rtl-demod-guide/index.html
http://sdr.osmocom.org/trac/wiki/rtl-sdr