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 |