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 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.

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).

F5OEO notes live video streaming 64 k-symbol/sec - 4 M-symbol/sec DVS-B using rpidatv, which sends DVS-B HD video receivable by the $20 RTL-SDR dongles.

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 headphone 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 in percent:

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