Using RTL-SDR for tuning to FM Radio spectrum with OpenWebRX

Pedro Freitas
2 min readMar 21, 2021

I was looking for a solution to listen remotely to a local FM radio station. I had DVB-T+FM+DAB device laying around, which is basically a cheap RTL-SDR powered with Realtek RTL2832U + R820T2. The device looks as depicted in Picture 1.

Picture 1 — Picture of the DVB-T+FM+DAB device

After some research, I have found out the OpenWebRX project, which is a server that provides a web-based player, which supports multi-user streaming of local SDR receiver devices. This open-source project is based on Python and maintained on GitHub. They provide binaries for popular Linux distros and Raspberry Pi.

During last year, OpenWebRX developers added support to Wideband FM (WFM), which allows me to setup for my use-case. In Picture 2, you can see OpenWebRX setup for tuning into FM radio frequencies.

Picture 2 —Example of OpenWebRX operating with FM radio profiles

Only one profile can be selected at the same time, meaning that the spectrum is limited to the RTL-SDR device bandwidth. I’ve found out that the maximum usable and stable bandwidth for this device is 2.4 MHz. FM radio operates from 87.5<->88.0 MHz to 108.0 MHz, so I’ve setup my config_webrx.py profiles in this way:

sdrs = {
"rtlsdr": {
"name": "RTL-SDR USB Stick",
"type": "rtl_sdr",
"ppm": 0,
"profiles": {},
},
}
x = 1
samp_rate = 2400000 #2.4 MHz
for start_freq in range(88000000, 108000000, (samp_rate - 100000)):
fm_profile = {
"name": "FM Radio " + str(x)
"center_freq": start_freq + (samp_rate / 2),
"rf_gain": 29,
"samp_rate": samp_rate,
"start_freq": start_freq,
"start_mod": "wfm",
}
sdrs["rtlsdr"]["profiles"]["FM" + str(x)] = fm_profile
x+=1

I’m using (samp_rate-100000) as increment of the range, to avoid missing part of the frequency in between FM profiles (considering WFM tuning up to 0.2 MHz range), due to the bandwidth limitations described earlier. Meanwhile the center frequency of the profile is setup to be half of the available bandwidth. More information on the configurations available are described in the official documentation available in here.

I’m happy with the end result and now I’m able to listen to clear crisp local FM radio remotely, from different locations! OpenWebRX and RTL-SDR devices can be used for other purposes and you can tune into the public receiver book of the OpenWebRX community for more examples.

--

--

Pedro Freitas

Full-time DevOps Engineer | CKA | CKAD — Helping organizations to grow a DevOps culture.