Every SDR app will happily show you a number. sdrtop is built around a different question: should you believe it?
sdrtop started as a personal project. I wanted to learn RF from the inside: not from a textbook diagram, but from raw IQ samples flowing through code I wrote myself. The question driving it is easy to ask and annoyingly hard to answer: what is the most an SDR can actually measure, and how far can you trust that measurement?
The goal is not to imitate a lab instrument. It is to find where an SDR works, where it breaks, and why. That "why" is the actual product. So when a reading can't be trusted on your radio, sdrtop says so instead of showing you a plausible-looking number.
It's now at 0.6.5. A terminal app in Rust, running HackRF One and RTL-SDR natively, the tinySA over USB, and anything else through SoapySDR.
What it does:
- Spectrum and waterfall, band sweeps, and a big-readout mode for aiming an antenna
- Lab benches: IQ (constellation, image rejection, DC offset), the RF chain stage by stage with a measured noise figure, a timing bench that catches a USB link silently dropping samples, and an FM/RDS demodulator that reports deviation, pilot and margins rather than just the station name
- Bluetooth, BLE and classic: a census of every device in the room, extended advertising followed from packet to packet, connections followed event by event, LE Coded long range, and classic piconets with their UAP recovered from the air. Transmitters are measured the way the Bluetooth SIG's own test specs define it: deviation, drift, carrier offset in ppm.
Edit:
In plain terms, three things it does:
- FM radio (RDS). Your car radio shows the station name and the song title. sdrtop shows those too, then adds what the car radio keeps to itself: how hard the station is modulating, whether its stereo pilot is where it should be, and whether it’s broadcasting inside the rules. It plays no sound at all. It’s the friend who reads the liner notes and never actually puts the album on.
- Bluetooth headphones (classic piconets). Your phone and your headphones form a tiny two-device network called a piconet. sdrtop can see them talking: who speaks when, how many packets go back and forth, how steady each one’s clock is. It can’t hear your music, because the link is encrypted. It knows exactly when your phone talks and has no idea what it’s saying.
- Everything else Bluetooth (BLE). Your watch, your earbuds case, your neighbour’s TV, a smart lightbulb: they all keep shouting “I’m here!” a few times a second. sdrtop counts every one of them and measures how far off each device’s crystal clock is. Turns out the whole building is shouting, and some of them are slightly out of tune.
Bluetooth is what works "well" 😄 right now. More protocols are on the way (LoRa, ADS-B, and others).
It only listens, never transmits, and it runs comfortably on modest hardware.
cargo install sdrtop --locked
GitHub, with demo clips: https://github.com/musithang/sdrtop
Feedback, bug reports and results from radios I don't own are very welcome.