SDR
/ˌɛs diː ˈɑːr/
n. "Configurable RF transceiver implementing analog radio functions via FPGA/DSP software unlike fixed SerDes PHYs."
SDR, short for Software Defined Radio, replaces analog mixers/filters/modulators with high-speed ADC/DAC + FPGA/DSP processing—USRP/Xilinx RFSoC platforms tune 10MHz-6GHz via FPGA bitstreams implementing GFSK, PSK, OFDM while GNU Radio/Python scripts handle baseband demodulation. Contrasts dedicated SerDes silicon optimized for single protocol by supporting FM/GSM/LTE/5G waveforms on identical hardware.
Key characteristics of SDR include: Wideband ADC/DAC 20-1000MSPS digitizes IF/baseband directly; FPGA Reconfiguration swaps PRBS generators for QAM demodulators mid-session; GNU Radio Flowgraphs chain FFT/FIR/equalizers visually; RF Front-End tunable LNA/mixer sweeps 100kHz-6GHz; MIMO Support multi-channel TX/RX for beamforming.
Conceptual example of SDR usage:
# GNU Radio flowgraph decoding Bluetooth GFSK via USRP
# Blocks: USRP Source → Freq Xlating FIR → FM De-emph → Audio Sink
import uhd
import numpy as np
usrp = uhd.usrp.MultiUSRP()
usrp.set_rx_rate(2e6) # 2MSPS
usrp.set_rx_freq(2.44e9) # Bluetooth channel
usrp.set_rx_gain(40)
# GFSK demodulation parameters
BT = 0.5 # Gaussian filter
f_dev = 160e3 # Deviation
while True:
# Receive 10ms burst
rx_samples = usrp.recv_num_samps(20000, 0)
# FM Discriminator (arg(d/dt))
phase = np.angle(rx_samples)
freq = np.diff(phase) / (1.0/usrp.get_rx_rate())
# Symbol timing + NRZ decode
symbols = (freq > f_dev/2).astype(int)
bits = np.diff(symbols) # Manchester decode
# Packet sync + CRC check
if detect_bluetooth_header(bits):
decode_access_addr(bits)
Conceptually, SDR digitizes RF directly after LNA—FPGA polyphase filters decimate to baseband while Python scripts implement protocol stacks for FHSS tracking or TDMA slot demodulation. HackRF/PlutoSDR captures Bluetooth piconets amid WiFi interference; contrasts BIST-validated ASICs by enabling spectrum warfare where VHDL bitstreams swap radar waveforms for cellular protocols mid-mission.