Raspberry Pi radio IQ transmit

As a radio scientist, I need software defined radio (SDR) transmitters that ingest raw IQ (in-phase, quadrature) data. IQ data allows transmitting anything within the instantaneous bandwidth and dynamic range limitations of the particular SDR.

IQ RF Transmit

The rpitx program by amateur radio F5OEO ingests IQ data (and has utilities to convert from audio to popular analog formats such as SSB, AM, and FM voice) to transmit on air from the Raspberry Pi onboard PLL via PWM accessed on the GPIO 12 pin using DMA.

The Raspberry Pi BCM2835 PLL PLLD operates at 500 MHz, decimated down to the carrier frequency desired and modulated, with claimed resolution ~16 bit. I have not tested that dynamic range claim.

Install rpitx

At Raspberry Pi Terminal:

apt install git

git clone https://github.com/F5OEO/rpitx

cd rpitx
./install.sh

Run rpitx IQ transmitter

rpitx -i myfile.bin -m iq -f 97500

This command transmits single-precision complex64 IQ file myfile.bin at 97.5 MHz center frequency (consider the error in the Raspberry Pi PLL baseclock).

HD Video RF Transmit

F5OEO notes live video streaming 64 k-symbol/sec - 4 M-symbol/sec DVS-B https://twitter.com/F5OEOEvariste using his new program rpidatv, which sends DVS-B HD video receivable by the $20 RTL-SDR dongles.

RF Receiver

With the Raspberry Pi 2 collecting samples at 2.048 MS/s, about 3% of one CPU core is used. This does not include demodulation, just passing samples. After installing rtl-sdr, you can playback over the Raspberry Pi 3.5mm output jack using aplay.

Radio receiver examples

99.5 FM broadcast, in stereo on the Raspberry Pi:

rtl_fm -f 99.5M -M wbfm | aplay -r 24k -f S16_LE -t raw -c 1

162.475 MHz NOAA weather radio (NBFM)

rtl_fm -f 162.475M -M fm -s 64k -Afast -r 32k -E demp | aplay -r 24k -f S16_LE -t raw -c 1

CPU Utilization [%]

Rpi Model Stream 2.048 MS/s, no demod WBFM playback over 3.5 mm jack
2 3.0 12.0

Leave a Comment