These programs implement a software defined reciever that isolates one FM station using multiple stages of decimating FIR filters. One FM station is demodulated using the quadrature demodulation technique. There are three programs.
- The first program uses the UHD to control the USRP hardware and writes to shared memory.
- The second program reads from shared memory, process the signal on the GPU using the C-API for CUDA, and writes the output to standard out.
- The third program (SoX) receives the signal through a pipe and reads from standard input. SoX writes the audio to the sound card.
We are using Ubuntu 16.04 LTS and a Nvidia GeForce GTX 1080 Ti GPU.
We are using a generic scanner antenna (25-1300 MHz) connected to a custom bandpass filter (KR Electronics) passing the 20 MHz wide FM band (88-108 MHz). The BPF output is connected to a USRP B205mini-i, which is connected to the PC via USB3.0. The programs below shift the center of the FM band to zero frequency (zero-IF receiver) and one station is isolated using multirate dignal signal processing implemented on the GPU. An FM station is demodulated and sample rate converted to 40 kSamples/second. The audio signal is piped to Sox for listening.
These programs require the following software:
- USRP Hardware Driver (UHD)
- Boost C++ library (should be pre-installed)
- CUDA (we use CUDA 8.0)
- SoX - Sound eXchange
Compile Instructions:
nvcc dsp4.cu -o dsp4
Execute Instructions: (NOTE: Launch this program before usrp_stream4
. The output of this program is piped to SoX for audio.)
./dsp4 | play --rate 40k -b 32 -c 1 -e float -t raw -
Compile Instructions:
usrp_stream4.cpp -o usrp_stream4 -luhd -lboost_system -lboost_thread -lboost_program_options
Execute Instructions: (NOTE: Launch this program after the dsp4
.)
./usrp_stream4.cpp --rate 20000000 --freq 98000000 --spb 16384 --type float