A software-defined radio is a deceptively simple idea: instead of building a radio out of fixed analogue circuits tuned to one job, you digitise a chunk of the spectrum as fast as you can and do all the actual radio work - tuning, filtering, demodulating - in software. A twenty-dollar USB dongle becomes an FM receiver, an aircraft tracker, a weather-satellite downlink and a spectrum analyser, depending only on the code you run. This piece is how that actually works, with a live FFT and waterfall you can push past its own limits to watch aliasing happen.

[INFO]
Fundamentals only - standard DSP and the published specs of common SDR hardware. Builds on the modulation and spectrum foundation, and underpins the capture field guide and the site's HackRF hardware piece.
◈ interactive artifact
A Live Spectrum and Waterfall
A real 256-point FFT of a synthetic IQ stream. Slide the tone past the band edge and watch it alias back - the whole reason an anti-alias filter exists.

//IQ: Sampling Both Sides of Zero

An SDR front end mixes the incoming radio signal down against a local oscillator set to your tuned frequency, producing two sample streams: I (in-phase) and Q (quadrature, shifted 90 degrees). Treated as a single complex number per sample, I + jQ, they carry something a single real stream cannot: the ability to tell a signal above your tuned frequency from one below it.

The reason is in the maths of the carrier. A plain real sine wave is an equal mix of a positive and a negative frequency, so its spectrum is forced to be symmetric - a real-only sampler literally cannot distinguish +f from -f. A complex sample preserves the phase relationship between I and Q, which breaks that symmetry and lets the receiver place a signal unambiguously on either side of the center. That is why an SDR shows a band stretching both ways from the frequency you tuned to, rather than just upward.

It also doubles your bandwidth for a given sample rate. A real sampler at rate fs can only represent 0 to fs/2. A complex sampler carries twice the information per tick, so at the same rate it represents a full band of width fs, from -fs/2 to +fs/2 around the tuned frequency. For an SDR, the usable instantaneous bandwidth equals the sample rate.

//Nyquist, and Watching It Break

The sampling theorem says you can perfectly represent a signal only if your sample rate is more than twice the highest frequency present. For a complex SDR that means a band of width fs, centred on the tuned frequency. Anything outside that window is not politely ignored - it aliases: it folds back in and appears as a perfectly convincing signal at the wrong frequency, indistinguishable after the fact from a real one.

The demo makes this concrete. At 2.4 MS/s it can honestly show plus or minus 1.2 MHz. Slide the tone inside that window and it reads true. Slide it past the edge and it wraps around and reappears on the far side - a ghost. In real hardware this is why an analogue anti-alias filter sits before the digitiser: once an out-of-band signal has folded in, no amount of software can tell it from the real thing. You can only keep it out beforehand.

//Sample Rate, Bandwidth, and What You Can See at Once

The sample rate sets how much spectrum you see in one glance. A common RTL-SDR dongle runs comfortably at about 2.4 MS/s, so it shows roughly 2.4 MHz at once. A HackRF One reaches up to 20 MS/s, so up to about 20 MHz. Want to watch a wider range than that? You retune and sweep - you cannot see more than your sample rate at a single instant.

Two honest caveats the demo glosses: the band edges roll off, so the usable span is a bit less than the full sample rate; and direct-conversion front ends leave a DC spike right at the tuned frequency. Both are artifacts of the hardware, not the signal.

//The FFT and the Waterfall

To turn a stream of time samples into the picture of the spectrum you actually look at, an SDR runs a Fast Fourier Transform over successive blocks of samples. An FFT of N samples returns N frequency bins, each one the energy near a particular frequency. The resolution is simple and worth memorising:

bin width = sample rate / FFT size

At 2.4 MS/s with a 1024-point FFT, that is 2,343.75 Hz per bin; the demo uses a 256-point FFT, so its bins are 9,375 Hz wide. Bigger FFTs give finer frequency resolution - at the cost of a longer time block, so worse time resolution. That trade between seeing where in frequency versus when in time is fundamental and unavoidable.

The waterfall is just those FFTs stacked over time: each FFT produces one horizontal row of power-versus-frequency, you colour the power and scroll the rows down the screen. Frequency across, time down, brightness is power. It is the single most useful display in all of SDR, because a signal that blinks past in a fraction of a second - a key fob, a pager burst, a hopping transmitter - leaves a visible mark you can scroll back to.

Decibels and the noise floor

Power is plotted in decibels - a log scale - because radio signals span an enormous dynamic range, and a linear scale would bury every weak signal next to the strong ones. Ten dB is a factor of ten in power. The noise floor is the baseline grass on the display with no signal present: thermal noise plus the receiver's own noise. Real signals are the humps that rise above it, and how far above, in dB, is their signal-to-noise ratio - the number that decides whether you can actually decode them. A cheap RTL-SDR digitises with only 8 bits, which caps its dynamic range at roughly 50 dB and is the main reason a strong nearby transmitter can swamp everything.

//Why This Is the Key That Opens the Rest

Everything else in the signals cluster runs on these ideas. Capturing ADS-B, weather satellites or 433 MHz devices is choosing a frequency and a sample rate and demodulating what the FFT shows you. Frequency hopping is a signal that smears itself across the waterfall faster than you can follow without the hop set. Even GPS sits below the noise floor you see here, pulled out only by correlation. Learn to read a waterfall and most of radio stops being invisible.

[TECHNICAL NOTE]
Worked example, checkable against the demo: at fs = 2,400,000 S/s with a 256-point FFT, bin width = 2,400,000 / 256 = 9,375 Hz, and the visible span is the full 2.4 MHz (-1.2 to +1.2 MHz around the tuned frequency). A tone 300 kHz above centre lands at 300,000 / 9,375 = bin 32 of the positive half. Push it beyond +1.2 MHz and it wraps to a negative-frequency bin - the aliasing the demo shows.

//Sourcing and Framing

The IQ, Nyquist, aliasing and FFT material is standard digital signal processing (Lyons, Understanding DSP; the PySDR online textbook; the Nyquist-Shannon theorem). The hardware figures - RTL-SDR 8-bit and ~2.4 MS/s, HackRF up to 20 MS/s - are from the manufacturers' and osmocom's own documentation. The demo computes a genuine radix-2 FFT on a synthetic IQ stream in your browser; nothing is captured off the air, and the aliasing you can trigger is the real mathematical behaviour, not a canned animation.

As with the rest of the signals cluster, this stays at the published, textbook layer - how the tool works - with nothing operational. The interpretation is mine: that the waterfall is the one display worth truly learning, because it turns the invisible and the fleeting into something you can scroll back and inspect.