Showing posts with label rtl_fm. Show all posts
Showing posts with label rtl_fm. Show all posts

Wednesday, March 22, 2017

Receiving NOAA weather satellite images with a RTL dongle and a Turnstile crossed dipole automatically.

Receiving NOAA weather satellite images with a RTL dongle and a Turnstile crossed dipole automatically. 
NOAA19-HVCT 2017-03-18 15:40 Taken with this system
What do you need to setup a automatic NOAA APT Weather station configuration.
The necessary licences for your region. FCC ...
Here is a Link to Automated NOAA weather satellite System In Bassonia South Africa.


Hardware requirement diagram.

How dose this system work?

  • The system consists of 3 shell scripts that tai 5 applications together.
  • The shell scrip will fetch the satellite TLE keps data from celestrack. http://www.celestrak.com/NORAD/elements/weather.txt
  • The NOAA satellite TLE data is then passed to the predict satellite positioning software.
  • The predict software calculate when the next satellite will be above your radio station.
  • The result of the calculations for the next 24 hours is then send to a scheduler program call "at".
  • The "at" scheduler will then start and stop the rtl_fm receiver at the required time, frequency and record the audio in the recording directory from the NOAA satellite.
  • The Audio files is not in the correct format for wxtoimg utility to convert it to images and need to be converted to the correct format using the SOX until.
  • The converted recordings is then passed to wxtoimg utility to generate the Satellite images.
  • The images is then exposed via a Apache web server with a php plugin to the internet.

Hardware

  • Raspberry PI and power supply
  • RTL dongle with USB cable and MCX connector adaptor.
  • RG58 Coaxial cable with connectors or better cable. Max 4m
  • Turnstile crossed dipole Antenna.
  • All Hardware and software is available from Giga Technology

Software

  • Predict - Utility to calculate satellite azimuth and elevation using TLE Kep elements
  • rtl_fm - SDR fm Demodulation Utility to decode your ATP Satellite signal to audio file.
  • Sox - To convert row Audio file into format for wxtoimg to convert to Satellite Image.
  • Shell script to calculate the schedule for enabling the rtl receiver.
  • wxtoimg - Utility that converts ATP Audio files into Satellite Images.
  • Apache server to expose the images to the internet.
Software Functional Block diagram


The following software need to be installed on Raspberry Pi or Linux server.

sudo apt-get install predict
sudo apt-get install rtl-sdr
sudo apt-get install sox
sudo apt-get install wxtoimg
sudo apt-get install git
sudo apt-get install apache2
sudo apt-get install php
sudo apt-get install libapache2-mod-php
sudo apt-get install php-mcrypt
sudo apt-get install php-mysql

Create a directory sh in hour home directory.
cd
mkdir sh
cd sh
Create a wxsat directory in your home directory
cd
mkdir wxsat
cd wxsat
Create a images directory in wxsat directory
mkdir images
Create a recordings directory.
mkdir recordings
Create a thumb directory inside the images directory.
cd images
mkdir thumb


cd to sh directory and download the following scripts from github using the git command below
cd ~/sh
git clone https://github.com/antonjan/noaa_weather.git
it will create a directory noaa_weather in the sh directory
Inside the directory there will be three scripts. (the index.php will need to be moved later)
noaa_sat_scheduler.sh
noaa_scheduler.sh
create_thumbnail.sh
index.php
Readme.me

You will need to change your stations GPS coordinates in the following files

Edit the file noaa_sat_schedule.sh and change the following details to your coordinates.
The last one is altitude in meters.

/usr/local/bin/wxmap -a -T "NOAA ${bird}" -H ~/wxsat/weather.txt -L "-26.17/-28.03/1700" -p0 -o "\$mapdate" ~/wxsat/noaa${bird}map.png
/usr/local/bin/wxmap -a -T "NOAA ${bird}" -H ~/wxsat/weather.txt -L "-26.17/-28.03/1700" -p0 -o "\$mapdate" ~/wxtoimg/maps/noaa${bird}map.png

and save the file.
Then you need update the predict program with your station coordinates.
Run the command sudo predict
Select the G to change your ground station position details.
and enter to get to next position. ESC to exit. ant then Q to exit.




Setup crontab to run the scrip at midnight
using the command sudo crontab -e
add the following at the bottom of the crontab file

1 0 * * * ~/sh/noaa_weather/noaa_scheduler.sh

You can run the script manually now to see if it works.
sudo ~/sh/noaa_weather/noaa_scheduler.sh
it should create schedules to run for the next 24 hours.
type the command sudo at -l witch should list the scheduled tasks
You should see something like this.
94 Thu Mar 23 02:13:00 2017 a root
95 Thu Mar 23 14:43:00 2017 a root
88 Thu Mar 23 05:30:00 2017 a root
92 Thu Mar 23 05:49:00 2017 a root
89 Thu Mar 23 17:53:00 2017 a root

There also should be at least 4 files in the ~/wxsat directory

noaa15.at
noaa18.at
noaa19.at
weather.txt

If you got here all went ok.
Connect the rtl dongle to your raspberry pi or Linux (ubuntu) computer.
Connect the coaxial cable to the Turnstile crossed dipole at wate for the first scheduled task as in the list above. sudo at -l

If you want to remove a previous task you can run the following command.
Make sure you always only have one task for the same time.
sudo atrm [task number]   EG sudo atrm 94

Go and look in the ~/wxsat/images  directory and your satellite images should be there for the day.
cd ~/wxsat/images

Ok now we need to get your image exposed on the Apache2 web server.

You now will need the full path to your wxsat directory.
cd ~/wxsat
pwd
/home/anton/wxsat
So in my case the full path is /home/anton/wxsat
Create a link between the apache server and you images.
go to directory /var/www
cd /var/www
sudo ln -s /home/anton/wxsat ./wxsat

if you goto you webserver on raspberry or linux you should see your images.
Take your browser on the Raspberry or linux server and goto http://localhost/wxsat/images
You will see a directory with file names of all the satellite images.
If you cant see the images you might have to make a small change to your apache2.conf file.

make sure you have the following in you /etc/apache2/apache2.conf file
change or add this

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

Then restart Apache2
sudo systemctl restart apache2



Image file list

Ok So you want to see thumbnail images and the click on image to view full image the copy the file index.php from the git repository into your images directory.
cp ~/sh/noaa_weather/index.php ~/wxsat/images/

Ok check your image directory in your web browser again and it should now have index page with thumbnails. You can change the index.php content of this page to add your details.

http://localhost/wxsat/images

Thumbnail Image index page




Here is a Link to Automated NOAA weather satellite System In Bassonia South Africa.

My Satellite Antennas
Notes:
The following config files is used by default
(The wxtoimg and wxmap command line will look in both places for a config file)
  • /usr/local/etc/wxtoimg.cfg
  • ~.wxtoimgrc
Example of the config file.

#
# WXtoImg configuration file written by WXtoImg.
# "man wxtoimg" or wxtoimg.html for details.
# WXtoImg version 2.11.2 beta
#
#
Registration Name: WXtoImg Professional
Registration Email: Anton.janovsky@gmail.com
Registration Key: TRLQ-KGKH-7M7!-U96U-CBQ1
Signal Type: APT
Expert Mode: false
Status Info Size: 0
Large Pixmap Support: false
Prompt on Exit: true
Decode in Record: true
Scroll in Record: true
Direction: northbound
Sample Rate: 11025.00
#Resurs Sample Rate: 11025.0
#Meteor3 Sample Rate: 11025.0
#Meteor2 Sample Rate: 11025.0
#SICH1M Sample Rate: 11025.0
#SICH Sample Rate: 11025.0
#Okean Sample Rate: 11025.0
#NOAA Sample Rate: 11025.0
#Meteosat Sample Rate: 11025.0
#GOES Sample Rate: 11025.0
#GMS Sample Rate: 11025.0
#MTSAT Sample Rate: 11025.0
Set Sample Rate: false
Sharpen: 0.6
JPEG Quality: 90
AVI Codec: RGB
AVI Transparent: false
AVI Quality: 85
AVI Scale: 0.5000
Max Frames: 16
Frame Rate: 1.000
Image Format: JPEG
Anaglyph Image Format: png
Composite Image Format: png
Messages: normal
Resync: enabled
Noise Filter: 0
Noise Threshold: 44
Crop: disabled
Contrast: var
Illumination Compensation: none
Gamma: 1.40
Despeckle: 2.00
No Signal Fill: true
Audio Directory: /home/anton/wxtoimg/audio
Image Directory: /home/anton/wxtoimg/raw
Save Directory: /home/anton/wxtoimg/images
Map Directory: /home/anton/wxtoimg/maps
Thumbnail Directory: /home/anton/wxtoimg/thumbnails
Template for Audio: false
Filename Info: UTC YYYYMMDDHHMM
Temperature Units: C
Distance Units: km
Enhancement: HVCT
Auto Image Template: %s-%f-%e
Auto Image Enhancements: "-" "contrast -a" "contrast -b" "NO" "HVCT" "MSA" "MCIR"
Record Type: A
Record Name Format: %Y%m%d%H%M
BMPs for DA: false
Record Bits: 16
Record Level: 25
Record Delay: 60
Record Rate: 11025
Record Only Active: enabled
Record Elevation: 20
Record Above: 8
Record Disable Info: false
Record Add: -N
Record Device: 0
Record Modes: ARD
Recording Forces Location: false
Receiver Type: none
Receiver Port: /dev/ttyS0
Receiver Baud: 0
Rotor Type: none
Rotor Port: /dev/ttyS0
Rotor Baud: 0
Park Elevation: 90.0
Park Azimuth: 180.0
GPS Port: /dev/ttyS1
GPS Baud: 4800
GPS Use: false
GPS Set Clock: false
Pass List Hours: 168
Process Time: 300
Use Alternate Memory Model: false
Delete Audio After: 999
Delete Maps After: 999
Delete Raw Images After: 999
Delete Images After: 999
Flip Meteor 3: disabled
Map Build: enabled
Map Overlay: enabled
Map Population: 0
Map Antialias: true
Map Thick Lines: false
Map Land-Sea: enabled
Map Lakes: disabled
Map Rivers: disabled
Map Country Borders: enabled
Map State Borders: enabled
Map Ground Station: enabled
Map Grid: 10
Map Offset Northbound: 0
Map Offset Southbound: 0
Map Land Color: light-green
Map Lake Color: light-green
Map River Color: light-green
Map Country Border Color: yellow
Map State Border Color: yellow
Map Ground Station Color: yellow
Map City Color: orange
Map Grid Color: red
Ground Station: Johannesburg, South Africa
Latitude: -26.170
Longitude: 28.030
Altitude: 1700.0
NOAA\ 12 Is Active: false
NOAA\ 14 Is Active: false
NOAA\ 15 Is Active: true
NOAA\ 16 Is Active: false
NOAA\ 17 Is Active: false
NOAA\ 18 Is Active: true
NOAA\ 19 Is Active: true
Meteor\ 3-5 Is Active: false
Meteor\ 2-21 Is Active: false
Resurs\ O1-N4 Is Active: false
Okean-O Is Active: false
SICH-1 Is Active: false
SICH1M Is Active: false
GOES Is Active: false
GMS Is Active: false
MTSAT Is Active: false
Meteosat Is Active: false
NOAA\ 12 Frequency: 137.5000
NOAA\ 14 Frequency: 137.6200
NOAA\ 15 Frequency: 137.6200
NOAA\ 16 Frequency: 137.6200
NOAA\ 17 Frequency: 137.5000
NOAA\ 18 Frequency: 137.9125
NOAA\ 19 Frequency: 137.1000
Meteor\ 3-5 Frequency: 137.3000
Meteor\ 2-21 Frequency: 137.4000
Resurs\ O1-N4 Frequency: 137.8500
Okean-O Frequency: 137.4000
SICH-1 Frequency: 137.3800
SICH1M Frequency: 137.4000
GOES Frequency: 137.5000
GMS Frequency: 137.5000
MTSAT Frequency: 137.5000
Meteosat Frequency: 137.5000
NOAA\ 12 Priority: 1
NOAA\ 14 Priority: 1
NOAA\ 15 Priority: 1
NOAA\ 16 Priority: 1
NOAA\ 17 Priority: 1
NOAA\ 18 Priority: 1
NOAA\ 19 Priority: 1
Meteor\ 3-5 Priority: 2
Meteor\ 2-21 Priority: 1
Resurs\ O1-N4 Priority: 1
Okean-O Priority: 1
SICH-1 Priority: 1
SICH1M Priority: 1
GOES Priority: 5
GMS Priority: 5
MTSAT Priority: 5
Meteosat Priority: 5
NOAA 19 Catalogue Number: 33591
Auto-Decode: true
Alt Sensor: 0
MSA 1: 50
MSA 2: 50
MSA 3: 0
Atmospheric Compensation: false
Auto Save Options: true
Save Temperature Data: false
Check for New Version: true
Update Sat Info: true
Auto Record: false
Auto Update Keplers: false
Last Kepler Update: 0
Geometry: 1301x715+65+24
Pass List Geometry: 843x618+483+131
Help Geometry: 783x512+510+117
Own Colormap: true
Use UTC: true
Tearoff Menus: false
Image Set Background: false
Maximum Thumbnails: 25
Log Messages: false
Help Language: EN
Help Font Size: +0
Date Format: %Y-%m-%d %H:%M
Date Format with Seconds: %Y-%m-%d %H:%M:%S
Show All: false
Text Mode 1: 0
Text Mode 2: 0
Text String 1:
Text String 2:
Text Size 1: 26
Text Size 2: 18
Text on Movies: true
Text on Composites: false
Temp Scale: false
Temp Black: false
Projection: -
Projection Reference Latitude:
Projection Reference Longitude:
Projection Bound North:
Projection Bound South:
Projection Bound West:
Projection Bound East:
Projection Resampling: bicubic
Projection Scale: 1.000
Projection Min Fill: 0.1
Movie Projection Reference Latitude:
Movie Projection Reference Longitude:
Movie Projection Bound North:
Movie Projection Bound South:
Movie Projection Bound West:
Movie Projection Bound East:
Movie Projection Scale: 1.000
Auto Movie Template: %g-%e
Auto Movie Enhancements: "contrast -b" "MCIR"
Composite Projection Reference Latitude:
Composite Projection Reference Longitude:
Composite Projection Bound North:
Composite Projection Bound South:
Composite Projection Bound West:
Composite Projection Bound East:
Composite Projection Scale: 0.750
Auto Composite Template: %g-%@%Y%m%d-%p-%e
Auto Composite Enhancements: "MSA" "MCIR" "HVCT"
Composite Min Solar Elevation: 0.0
Web Page Template: /usr/local/lib/wx/template1.html
Web Page Enhancement: MSA,MCIR,veg,Pristine
Web Composite Enhancement:
Web Page Thumbnail Size: 20.0
Web Page Filename: index.html
Web Page FTP Publish: false
Web Page FTP Passive: true
Web Page FTP Host: myisp.someplace.net
Web Page FTP User:
Web Page FTP Passphrase:
Web Page FTP Directory: wxtoimg
Web Page Folder Publish: true
Web Page Folder: /home/anton/wxtoimg/web
Web Page Add All: false
Minimum Solar Elevation: 0.0
Exclude from Composites:
Exclude from Web:
Minimum Scan Lines: 0
Use MCIR if MSA fails: false
Kepler Host: www.celestrak.com
Kepler Login:
Kepler Passphrase:
Use Proxy: false
Proxy Host:
Proxy Port: 8080



ref:

Saturday, November 26, 2016

Creating a 2m Fm Repeater with a Raspberry Pi (B) and a RTL dongle.

Creating a 2m Fm Repeater with a Raspberry Pi (B) and a RTL dongle. (Don't use this application without the RF filter)

RTL dongles is available from Giga Technology and the filter will be available soon.



For the purpose of this configuration I expect your Raspberry pi to be connected to the internet.
How will this repeater work.
This configuration was done with the latest Raspbian Os for Raspberry Pi downloaded from here https://www.raspberrypi.org/downloads/
I used my original Raspberry Pi B+ and also repeated  this on a Banana Pi
 as I need a hard drive to compile gnuradio for later SDR use.

I will be using a rtl dongle to receive my input signal on 70cm frequency configurable on the amateur 2m or 70cm band. The receiver signal will then be demodulated and re transmitted with a DSP Library simulating a FM Signal using a GPIO pin on the Raspberry as an transmitter.

Get your Raspberry Pi on the latest patch/update.

sudo apt-get update
sudo apt-get upgrade
Go and get some Coffee as it might take long time to update ..zzz...... ;-) 

Install the SDR command line application to access rtl  USB dongle.
This rtl library allow you to demodulate the fm / ssb input

sudo apt-get install rtl-sdr-0.5.3-3 mplayer octave gnuplot gnuplot-x11


Download the Fm transmitter software from github using the following command

Install the rpitx python library using the following command. 

rpitx is the main software to transmit. It allows to transmit from:
  • IQ files *.iq (can be generated by external software like GNU Radio).
  • Frequency/Time files *.ft (generally used to easily implement digital modes)
Installation of rpitx

git clone https://github.com/F5OEO/rpitx git clone https://github.com/F5OEO/rpitx
cd rpitx # make sure to have access to the internet to download packages # or download and install them manually (libsndfile1-dev and imagemagick) 
./install.sh

Ok lets create some IQ files that will be used  to test the transmitter.

SSB Transmiiter
./pissb sampleaudio.wav ssbIQ.wav


A sample script testssb.sh is included.


FM modulation

pifm converts an audio file (Wav, 48KHz, 1 channel, pcm_s16le codec) to Narrow band FM (12.5khz excursion) and outputs it to a .ft file. Assuming your audio file is in your current working directory ./pifm sampleaudio.wav fm.ft

Connect a antenna to pin 4  long wire 40cm or longer depending on 1/4 lent of wavelength.
Pin Connection Diagram. Use coaxial cable to make connection
Here is a link with the filter details for the 2m Band


You could then transmit it on 100MHZ (please set a correct frequency to be legal) 
sudo ./rpitx -m RF -i fm.ft -f 100000 -l -c1


A sample script : testfm.sh is included.  add -c1 for pin 4 transmission in file

VFO
A VFO mode is provided to allows precise frequency resolution. For example to set a carrier on 100MHz (please set a correct frequency to be legal)sudo ./rpitx -m VFO -f 100000 -c1

Ok we got the Transmitter working Now lets get the rtl dongle working.
Follow my steps here http://zr6aic.blogspot.co.za/2013/02/setting-up-my-raspberry-pi-as-sdr-server.html

When you are complete with installation of rtl_sdr and have tested it wit rtl_test -t we can now check what audio devices the raspberry have.

sudo aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA]
  Subdevices: 8/8
  Subdevice #0: subdevice #0
  Subdevice #1: subdevice #1
  Subdevice #2: subdevice #2
  Subdevice #3: subdevice #3
  Subdevice #4: subdevice #4
  Subdevice #5: subdevice #5
  Subdevice #6: subdevice #6
  Subdevice #7: subdevice #7
card 0: ALSA [bcm2835 ALSA], device 1: bcm2835 ALSA [bcm2835 IEC958/HDMI]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

Now we need to install some audio utility programs to pyp and convert audio signals
sudo apt-get install sox libsox-fmt-all
ok lets test to see if we can receive 2m band transmission.

Tune the the rtl dongle for a frequency of 145.500Mhz and transmit a test signal.

sudo rtl_fm -f 145500000 -M fm 

Transmit a mp3 file recording
sox -t mp3 zr6aic_CQ_mono.mp3 -t wav -r 48000 -c 1 - | sudo ./pifm - 145.5 -c1

Installing ffmpeg


# build and install x264
git clone --depth 1 git://git.videolan.org/x264 cd x264 
./configure --host=arm-unknown-linux-gnueabi --enable-static --disable-opencl 
make -j 4
sudo make install

 # build and make ffmpeg
git clone --depth=1 git://source.ffmpeg.org/ffmpeg.git cd ffmpeg
./configure --arch=armel --target-os=linux --enable-gpl --enable-libx264 --enable-nonfree
make -j4
sudo make install


Install the following utility classes to help with the audio manipulation
sudo apt-get install libav-tools sox oggfwd libsndfile1-dev
sudo apt-get install fftw3 libfftw3-dev

Install csdr
git clone https://github.com/simonyiszk/csdr.git 
cd csdr 
git fetch 
git checkout dev 
make && sudo make install

Testing transmitter with Audio file (pin4 = -c1)
(while true; do cat speech48000.raw; done) | csdr convert_i16_f | csdr gain_ff 700 | csdr convert_f_samplerf 20833 | sudo rpitx -i- -m RF -f 145000 -c1

Putting the rpitx transmitter in TCP port listening mode (replace ip with Raspberry pi ip)
Sending audio from remote computer. (using mike from Linux computer)
arecord -fS16_LE -r48000 -c1 - | nc 192.168.10.128 8011

Testing RTL_fm (replace ip with your Raspberry ip)
sudo rtl_fm -M wbfm -f 98000000 | play -t raw -r 24k -es -b 16 -c 1 -V1 -
sudo rtl_fm -M wbfm -f 98000000 |nc  192.168.10.128 8011 -


Send rtl_dongle to transmitter (replace with your raspnerry ip)
sudo rtl_sdr -s 250000 -f 144300000 -p 0 - | nc -vv 192.168.10.128 8011
sudo rtl_sdr -s 4800 -f 144300000 -p 0 - | nc -vv 192.168.10.128 8011
 

Working RX with rtl dongle
sudo nc -l 8011 | csdr convert_i16_f | csdr gain_ff 8000 | csdr convert_f_samplerf 20833 | sudo rpitx -i- -m RF -f 145300 -c1

Working TX with pin 4

sudo rtl_fm -s48000 -g 49.6 -l 0 -M fm -f 434400000 |nc  192.168.10.128 8011 -

here is repeater without sqaulse


How to make the Repeater to auto start when the Raspberry start boot up.

Create a file and edit it
sudo vi /etc/init.d/Repeater

Add the following in the file and save it

#! /bin/sh

# /home/pi/sh/run_repeater.sh

### BEGIN INIT INFO

# Provides:          SDR repater start script
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Simple script to start a program at boot
# Description:       A simple script from www.stuffaboutcode.com which will start / stop a program a boot / shutdown.
### END INIT INFO

# If you want a command to always run, put it here


# Carry out specific functions when asked to by the system

case "$1" in
  start)
    echo "Starting SDR_repeater"
    # run application you want to start
    /home/pi/sh/run_repeater.sh
    ;;
  stop)
    echo "Stopping SDR_Repeater"
    # kill application you want to stop
    killall rtl_fm
    killall rpitx
    ;;
  *)
    echo "Usage: /etc/init.d/Repeater {start|stop}"
    exit 1
    ;;

esac

Make the file executable

sudo chmod 755 /etc/init.d/Repeater


Create a file in the /home/pi/sh/run_repeater.sh

Vi /home/pi/sh/run_repeater.sh

Add the Repeater script define above in this file so that it can auto start on boot time.


sudo rtl_fm -p 38 -s48000 -g 0 -l 3 -M fm -f 434400000 |csdr convert_i16_f | csdr gain_ff 12000 | csdr convert_f_samplerf 20330 | sudo rpitx -i- -m RF -f 145293 -c1&


Test the start and stop script.


Start the Repeater

sudo /etc/init.d/Repeater start

Stop The Repeater

sudo /etc/init.d/Repeater stop

Here is a video of the Test of the repeater ( I have changed the wires with a coaxial cable)


Video testing Fm demod and re mod cross band


What else can I do

Creating APRS transmitter
Setting up APRX rpitx with Raspberry Pi

aprs --callsign <callsign> --output - "<message>" | csdr convert_i16_f | csdr gain_ff 7000 | csdr convert_f_samplerf 20833 | sudo rpitx -m RF -i - -f 144800 -c1

Repeater configured in a single line 
sudo rtl_fm -p 38 -s48000 -g 0 -l 0 -M fm -f 434400000 |csdr convert_i16_f | csdr gain_ff 12000 | csdr convert_f_samplerf 20330 | sudo rpitx -i- -m RF -f 145293 -c1


Specifications (measured with New Low pass filter board )

Here is some results of Power measurements at 145Mhz. (@50ohm) 

  • Voltage  1.3V
  • Power 32.7 mW  (15.1dBm)

Total power consumption on power supply when repeater is running

Measured  5.44 V  and  540mA  = Total watts   2.937Watts

Tuesday, May 7, 2013

How to do AFSK, PSK DTMF demodulation on Linux / Raspberry Pi using your RTL dongle

How to do AX25, AFSK, DTMF, POCSAG and PSK demodulation on Linux.

(RTL 2832U  receiver) Where can I get a RTL dongle http://www.giga.co.za


RTL 2832U


Using the programs multimon, sox, mkfifo, rtl_fm, git and RTL 2832U receiver you can demodulate the following modulations.

AX.25 (https://github.com/EliasOenal/multimon-ng/blob/master/README.md)
  • 1200 Baud AFSK
  • 2400 Baud AFSK (2 variants)
  • 4800 Baud HAPN
  • 9600 Baud FSK (G3RUH)
POCSAG
  • 512 Baud
  • 1200 Baud
  • 2400 Baud
Miscellaneous
  • DTMF
  • ZVEI
  • SCOPE

1) Download the following Library by using git
git clone https://github.com/EliasOenal/multimon-ng.git

cd to the multimon directory
cd multimon-ng
run the command make
mkdir build
cd build
qmake ../multimon-ng.pro
make
sudo make install

If you want to get this working on Raspberry pi you need to use the following

qmake --version qmake: could not exec '/usr/lib/x86_64-linux-gnu/qt4/bin/qmake': No such file or directory 
alias qmake="$(find /usr -name qmake | grep qt5)" 
qmake --version QMake version 3.0 Using Qt version 5.3.2 in /usr/lib/x86_64-linux-gnu


Command line options. (here is the help file) multimon-ng [options] [input_file]

sudo sudo multimon-ng -h
multimon-ng  (C) 1996/1997 by Tom Sailer HB9JNX/AE4WA
             (C) 2012-2014 by Elias Oenal
available demodulators: POCSAG512 POCSAG1200 POCSAG2400 FLEX EAS UFSK1200 CLIPFSK FMSFSK AFSK1200 AFSK2400 AFSK2400_2 AFSK2400_3 HAPN4800 FSK9600 DTMF ZVEI1 ZVEI2 ZVEI3 DZVEI PZVEI EEA EIA CCIR MORSE_CW DUMPCSV SCOPE

Usage: multimon-ng [file] [file] [file] ...
  If no [file] is given, input will be read from your default sound
  hardware. A filename of "-" denotes standard input.
  -t <type>  : Input file type (any other type than raw requires sox)
  -a <demod> : Add demodulator
  -s <demod> : Subtract demodulator
  -c         : Remove all demodulators (must be added with -a <demod>)
  -q         : Quiet
  -v <level> : Level of verbosity (e.g. '-v 3')
               For POCSAG and MORSE_CW '-v1' prints decoding statistics.
  -h         : This help
  -A         : APRS mode (TNC2 text output)
  -m         : Mute SoX warnings
  -r         : Call SoX in repeatable mode (e.g. fixed random seed for dithering)
  -n         : Don't flush stdout, increases performance.
  -e         : POCSAG: Hide empty messages.
  -u         : POCSAG: Heuristically prune unlikely decodes.
  -i         : POCSAG: Inverts the input samples. Try this if decoding fails.
  -p         : POCSAG: Show partially received messages.
  -f <mode>  : POCSAG: Disables auto-detection and forces decoding of data as <mode>
                       (<mode> can be 'numeric', 'alpha' and 'skyper')
  -b <level> : POCSAG: BCH bit error correction level. Set 0 to disable, default is 2.
                       Lower levels increase performance and lower false positives.
  -o         : CW: Set threshold for dit detection (default: 500)
  -d         : CW: Dit length in ms (default: 50)
  -g         : CW: Gap length in ms (default: 50)
  -x         : CW: Disable auto threshold detection
  -y         : CW: Disable auto timing detection
   Raw input requires one channel, 16 bit, signed integer (platform-native)
   samples at the demodulator's input sampling rate, which is
   usually 22050 Hz. Raw input is assumed and required if piped input is used.


how to decode a wav file

sudo ./multimon-ng -s SCOPE -t wav /tmp/message.wav (to read wav file) How to convert a wav file to row file using sox sudo sox foo.wav foo.raw
Now we want to take the received signal from rtl_fm and pyp it to the multimon
Create a fifo Pyp 
sudo mkfifo soundfifo.raw 
ls -al 
prw-r--r--  1 anton anton     0 2013-05-07 22:35 soundfifo.raw

You will see its not a normal file its got a prw in front of the file definition when you list the files.
Lets get multimon to start receiving audio from soundfifo.raw pyp.
sudo multimon-ng -a AFSK1200 -a SCOPE -t raw soundfifo.raw
 
And now send the audio from rtl_fm to the soundfifo.raw
Decoding live data from rtl receiver. (Tuning receiver to 144.800 Mhz packet frequency and demodulate that to 22.05kHz audio)
 sudo rtl_fm -f 144800000 -s 22050 ./soundfifo.raw (read my section on rtl if you want to install rtl utilities)


You should then see the scope screen below.
 

Multimon Scope Display
And your afsk1200 decoding will start in console and the scope display will show your audio.
Here is an example of hot to decode directly from rtl dongle sudo rtl_fm -d0 -f 144800000 -s 22050 - | multimon-ng -a AFSK1200 -t raw /dev/stdin

Hope this help...
REF: www.baycom.org/~tom/ham/linux/multimon.html, http://www.youtube.com/watch?v=GBmli8Vflig and http://www.ultratechie.com/2012/10/pigate/
https://github.com/EliasOenal/multimon-ng/blob/master/README.md