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