Wiki sections

Wiki Spectrum analyzer

RBW, windows and VBW

In this app the resolution bandwidth (RBW) is set in hertz and the FFT size (N) is derived from it — not the other way round. This page covers how to set the RBW and why the achieved bandwidth differs from the requested one, what N does, how the seven windows differ, what the VBW smooths, and how "Spectrum frames" and "Spectrum from blocks" affect the picture.

Where it is in the app

The Spectrum analyzer tab, the Resolution bandwidth group. From top to bottom it holds RBW, actual, N (FFT), Window, ENBW, DC filter, VBW, time constant, the Passport row (see The passport of the receiver's own spurs), Averaging, Detector, Detector ↔px, the detection-mark switches, Rows/s and Fold. In a sweep the sweep controls appear between them — see Sweep. Every label has a "?" circle in front of it: hover over it and the app itself explains what the control does.

Whatever you set here is always visible in the trust bar: RBW, VBW, N, the window with its ENBW, and the detector with its fold.

With a tinySA 0.9.25 this group is absent: the instrument sweeps by itself and has its own RBW. The tinySA instrument group takes its place — see tinySA and tinySA Ultra.

RBW: requested and achieved

The RBW is the width of the "slot" each spectrum point looks through. A narrower RBW resolves closer signals and lowers the noise floor: half the width gives −3 dB. The price is a larger N, that is a longer acquisition: a short burst is smeared across the frame.

RBW
A list on a 1–2–5 grid from 1 Hz to 50 MHz. Until you pick something, the RBW is derived from N and the field shows it with the note · from N. After start-up that means N 4096 and the HANN window: 7.32 kHz at 20 MS/s, 732 Hz at 2 MS/s. Once you pick a value from the list, the app takes the smallest N (a power of two) that gives a bandwidth no wider than the requested one.
actual
The RBW that was really achieved: RBW = ENBW × sample rate / N. N is a power of two, so the achieved bandwidth is almost always narrower than the requested one. The number turns amber when it is narrower by more than a factor of 1.67 (below 0.6 of the requested value) and red when it is wider than requested: N has hit its ceiling of 16384. A line then appears under the field: The set RBW is unreachable: N has hit the ceiling of … (the trace texture width). The actual bandwidth is wider than the one set.

The narrowest bandwidth depends on the sample rate. For the HANN window:

Sample rateN 256N 1024N 4096N 16384
20 MS/s (HackRF One)117.2 kHz29.3 kHz7.32 kHz1.83 kHz
2 MS/s (HackRF One)11.7 kHz2.93 kHz732 Hz183 Hz
2.56 MS/s (RTL-SDR 0.9.25)15.0 kHz3.75 kHz938 Hz234 Hz
1.024 MS/s (RTL-SDR)6.0 kHz1.5 kHz375 Hz93.8 Hz

What is held when the sample rate or the window changes

  • RBW picked from the list. When the sample rate changes (for example with the wheel over the spectrum), the bandwidth stays and N follows.
  • RBW derived from N. When the sample rate changes, N stays and the bandwidth follows it. This is the same coupling of RBW to span that analyzers call "RBW auto".
  • The window changes. The bandwidth is always held and N is recomputed: the same N with different windows gives bandwidths that differ several times over.

In a sweep the app chooses the sample rate itself. While the RBW is derived from N, the sweep runs at the device's widest sample rate, and a finer RBW there comes from a larger N. On a HackRF One 0.9.36 the sweep treats a set RBW differently: it takes the widest sample rate at which the FFT frame for that RBW still fits into the block in which the device delivers its own sweep. A finer RBW may need a lower rate, and then the pass is longer: half the bandwidth makes the pass about four times longer. Details are in Sweep rate and a set RBW.

When the wheel has narrowed the receive band down to the device's lowest sample rate, the panel gives a hint: from there on use Ctrl+wheel, which is display zoom — it adds no bins.

N — the FFT size

N (FFT)
256, 512, 1024, 2048, 4096, 8192 or 16384; the default is 4096. If you set N by hand, the RBW becomes derived from it again. Set N by hand when the frame length itself matters rather than the bandwidth; otherwise it is easier to set the RBW and let N follow.

One FFT frame lasts N / sample rate: 205 µs at N 4096 and 20 MS/s, 8.2 ms at N 16384 and 2 MS/s. An event shorter than the frame is smeared across it. Frames are taken back to back, without overlap; there is no overlap control. Samples at block boundaries are not lost — the unused tail is added to the next block.

The ceiling of 16384 is the width of the trace texture. The waterfall keeps up to 4096 points per row in its history: with a wider N the row is reduced by peak, and the trust bar says History peak ×2 or peak ×4. The trace stays at full width (see waterfall history). Changing N or the window resets what the traces have accumulated.

The seven windows

A window trades level accuracy for resolution. The flatter the top of the window, the more accurately it reads the amplitude of a tone that falls between two bins, but the wider its bandwidth — and the larger the N needed for the same RBW. The table gives numbers computed from the coefficients the app really applies; N and the achieved bandwidth are an example for an RBW of 10 kHz at 20 MS/s.

In the listENBW, binsA tone between bins reads low by up toNAchieved RBWWhat it is
RECT1.00003.92 dB20489.77 kHzRectangular: the narrowest bandwidth, but a strong neighbour spreads its sidelobes across the whole scale.
HANN1.50001.42 dB40967.32 kHzThe app's default window.
HAMMING1.36281.75 dB40966.65 kHzSlightly narrower than Hann.
BLACKMAN_HARRIS42.00440.83 dB40969.79 kHzFour-term Blackman-Harris: between Hann and flat-top.
FLATTOP3.77020.01 dB81929.20 kHzFlat-top: amplitude error up to 0.01 dB, bandwidth about 2.5 times wider than Hann.
KAISER81.66571.18 dB40968.13 kHzKaiser with β = 8.
HFT248D5.65120.0009 dB163846.90 kHzAn eleven-term flat-top window: the amplitude is right wherever the tone falls between bins; bandwidth 3.8 times wider than Hann.

The spectrum is normalised to the sum of the window coefficients, so a full-scale tone at the centre of a bin reads 0 dBFS with any window.

ENBW

The ENBW field shows the equivalent noise bandwidth of the selected window in bins: one spectrum sample "weighs" that many bins of noise. This is what makes the RBW differ from the grid step (sample rate / N). The value is computed from the actual window coefficients rather than taken from a reference table, and it also stands in the trust bar next to the window name.

Which window to choose

  • For looking around the band, leave HANN.
  • To measure the level of a narrow carrier, take FLATTOP or HFT248D: without them the level read from the trace is low by the amount in the third column, depending on where the frequency falls between bins. The free edition has no markers that would correct this by themselves. In SDR SA PRO PRO a trace marker on the top of a tone in tuned mode also shows the tone level refined between bins — when the top stands at least 15 dB above the noise around it, not with the RECT window and not on the reference trace (see Trace markers).
  • RECT gives the narrowest bandwidth for the same N, but only works while there is no strong signal nearby: that one spreads its sidelobes across the whole scale.

VBW — the video filter

VBW
off (default), 0.5, 1, 2, 5, 10 or 30 Hz. The video filter smooths the trace in time without narrowing the RBW: the noise floor settles, but a burst shorter than the time constant reads low.
time constant
τ = 1/(2π·VBW), in milliseconds: 318 ms for 0.5 Hz, 159 for 1 Hz, 80 for 2 Hz, 32 for 5 Hz, 16 for 10 Hz, 5 for 30 Hz. This is the answer to whether your burst will make it.

There is one VBW for the instrument and it acts on all four traces. It is a filter after the detector and before the trace accumulation, so it changes the measurement rather than decorating the picture; that is why its value always stands in the trust bar. The VBW does not act on the waterfall. In a sweep the filter works pass by pass: a live trace with the VBW on is updated once per pass.

Averaging: Power or Log (video)

Averaging
Power (default) — in linear power, unbiased. Log (video) — in decibels, as programs without metrology do: it underestimates the noise level — by up to 2.51 dB, depending on how many spectra have already been folded into one frame. For a carrier there is no difference.

The switch is one for all traces and governs two stages at once: the video filter and the accumulation in the Average mode. Changing it resets the traces. The rest of the processing always runs in linear power — levels are converted to decibels only at the output.

Bins per pixel

When there are more bins than pixels, every pixel has to reduce several bins to one number. How many is shown by the bin/px badge in the trust bar (it appears when there is more than one bin per pixel), together with the name of the detector that does it.

Detector ↔px
peak (default), neg, sample or avg. peak never loses a narrow spur between pixels; avg averages in power. It acts on both the trace and the waterfall. Programs that draw a few hundred points across the whole span and average them show a narrow line 40 dB above the floor as a 10 dB bump; to compare pictures fairly, choose avg.

Ctrl+wheel zooms the picture: there are fewer bins per pixel, and once there is less than one, no new measurement appears from zooming. For the detectors over time, see Detectors.

DC filter

DC filter
auto (default), on or off; the switch is absent in a sweep. It removes the DC component from the IQ stream — the peak exactly at the centre of the band, which is local-oscillator leakage and the device's ADC offset. auto means "on in tuned mode". The filter does not remove the noise around the centre, and it removes a real signal exactly at the tuned frequency together with the offset — which is why the DC mark stays on the plot: while the filter is active it is dimmer and labelled DC−.
DC removed
The level of the DC component, in dBFS, that the filter is currently subtracting. The field is visible while the filter is active.

Spectrum frames and Spectrum from blocks

These two switches are on the Device tab, in the Host group. They are for a machine that cannot keep up, and they relate to the measurement in different ways.

Spectrum frames
60 (default), 30 or 15 — how many times a second the spectrum and the waterfall are redrawn because of new data. It does not affect the measurement: no waterfall rows are lost, they land in the same frame as a batch, and mouse actions are drawn at once under any cap. Measured at 20 MS/s with a cap of 30: the interface thread 19 → 15 % of a core, the graphics-driver thread 9 → 5 %.
Spectrum from blocks
auto (default), all, every 2nd, every 4th or every 8th. The spectrum is the most expensive part of the processing, and it can be computed from fewer than all blocks of samples; the recording, the audio and zero span still get every block. auto uses all blocks while the processing fits into air time, and when it does not, skips as many as needed. every 2nd means half of the air time, and so on. all skips nothing: if the machine falls behind, samples are lost in the device ring.
Spectrum coverage
The share of air time the spectrum was really computed from, and the skip step. When it is below 100 %, the same number stands in the trust bar as Coverage.

Skipping blocks changes the measurement, and the app says so: an event shorter than the gap may not reach the screen. The waterfall keeps its set row rate, but each row is folded from fewer spectra. The weighted detectors qp, cav and crms freeze during a gap. There is no skipping in a sweep, nor when the FFT frame is longer than half a device block — the Spectrum coverage field says so.

Load figures and advice for a weak machine are on the Performance page.

Limits

  • N is a power of two only, no more than 16384; when N is derived from the RBW it is never below 64. Frame overlap cannot be adjusted.
  • RBW, N, the window, VBW, the averaging type and the detectors are not kept between launches: the app always starts with N 4096, HANN, VBW off, Power. DC filter, Rows/s, Spectrum frames and Spectrum from blocks are kept.
  • The level of a narrow tone between bins reads low by an amount that depends on the window (the table above). The free edition has no correcting markers; in SDR SA PRO PRO a trace marker on the top of a tone gives the correction — under the conditions named above.
  • The narrowest RBW is limited by the device's lowest sample rate and the N ceiling: 183 Hz on a HackRF One and 93.8 Hz on an RTL-SDR with the HANN window.
  • In a sweep the RBW is also limited by the sweep grid — no more than 5 million bins per pass 0.9.36; on a wider span the actual RBW is coarser than the one set, and the panel says why (see Sweep rate and a set RBW).
  • For EMC estimates the bandwidth here is not the one the standard requires — see CISPR detectors.
  • With a tinySA the instrument sets the bandwidth; the app's N, window and detectors do not apply to it.

The wiki describes version 0.9.49. Your app's version is shown in the Help menu, under About. Found a mistake? Write to us.