Wiki sections

Wiki Spectrum analyzer

Detectors

A detector decides how many spectra become one point on the screen. The app has eleven of them, and they work in three places: the main detector folds spectra into a waterfall row, every trace has its own, and one more reduces bins to pixels. Each one shows something and hides something — this page says what exactly.

Three places where a detector works

In one second the receiver delivers hundreds or thousands of spectra, while the screen has a few hundred waterfall rows and one curve. Spectra are not thrown away: they are folded by a detector, and the app shows the fold factor.

Detector — the main one
The Spectrum analyzer tab, the Resolution bandwidth group. It folds K spectra over time into one waterfall row; in a sweep, the spectra of one segment. The default is rms. How many spectra a row holds is shown by the Fold field at the bottom of the group and by the trust bar: Detector rms ×11. The "?" hint next to the switch changes with the selection and names the price of that particular detector.
Trace detector
The second list in the row of each of the traces T1…T4 in the Traces group. The same list of eleven, but every trace has its own — see below.
Detector ↔px
Reduces bins to a pixel along frequency when there are more bins than pixels: peak, neg, sample or avg. See Bins per pixel.

The eleven detectors

In the listWhat it does with K spectraThe question it answersWhat it hides
peakMaximumWhether a burst happenedThe true noise level: the floor is raised by a few dB, and every spur of the receiver itself shows
negMinimumWhere the dips and the floor areSignals: they disappear
sampleOne spectrum — the lastWhat was there at one instantEverything that happened between samples
rmsMean powerWhat the level isShort bursts: they weaken the more, the larger the fold
avg_logMean of decibelsWhat a program without metrology would showThe true noise level: it reads low
medianMedianWhat is there all the time: the floor and carriersIsolated bursts
p9090th percentileWhat comes in burstsA single random outlier
qpCISPR 16-1-1 quasi-peakA preliminary EMC estimate of interferenceThe instantaneous spectrum: a row is a meter reading
cavCISPR-average: mean of the envelope voltageThe same, as an average valueThe true noise level: it reads 1.05 dB low
crmsCISPR RMS-averageThe same, as an RMS valueWith a long step between spectra, noise reads up to 1 dB low
floorLocal noise floorWhat the noise is in this particular regionNarrow signals: it is a floor trace, not a spectrum

peak, neg, sample, rms, avg_log

peak
Loses no narrow signal, but also shows every one of the receiver's own spurs and raises the noise floor by a few dB. Use it when looking for weak narrow or short signals.
neg
Holds the minima: signals disappear, dips and the floor become visible. A mode for diagnostics, not for searching.
sample
Takes one spectrum out of K. Fast, but a signal can drop out entirely — between samples.
rms
Averages power: the floor is smooth and unbiased, random outliers fade. A narrow peak weakens the more, the larger the fold. The default main detector.
avg_log
Averages decibels rather than power. It underestimates noise depending on the fold — by up to 2.51 dB in the limit. It is kept on purpose, so that the difference from rms can be seen on screen; for level measurements use rms or peak.

median and p90

median
The median of K spectra: a single burst does not show, the steady floor and carriers remain. Noise reads below its mean power; the limit is −1.59 dB.
p90
The 90th percentile of K spectra: bursty signals show as with peak, but one random outlier does not make the picture. Noise reads above its mean power.

qp, cav, crms: the CISPR detectors

These are weighted detectors per CISPR 16-1-1 computed in the time domain: every bin has a detector stage and a meter with time constants. They carry memory between frames, so after a retune their state is reset: the charge built up on the previous frequency is not carried over, and the stages are seeded from the first spectrum on the new frequency. The app takes the constants by the tuned frequency:

Band of the standardTuned frequencyChargeDischargeMeterRBW per the standard (−6 dB)
Aup to 150 kHz45 ms500 ms160 ms200 Hz
B0.15–30 MHz1 ms160 ms160 ms9 kHz
C/D30–1000 MHz1 ms550 ms100 ms120 kHz
—from 1 GHzthe C/D constants; the standard does not define quasi-peak there
qp — quasi-peak
A model of a diode detector with a critically damped meter; against the standard's pulse-response table it is within its tolerances. A waterfall row here is the meter reading with a discharge constant of hundreds of milliseconds, not an instantaneous spectrum: a signal sweeping through the band leaves a trail across its whole width. The heaviest detector: about half a CPU core at 20 MS/s, and that price is per consumer: the main detector and every trace set to qp compute their own.
cav — CISPR-average
The linear mean of the envelope voltage with the band's meter time constant. It reads a carrier exactly and noise 1.05 dB below its mean power.
crms — RMS-average
Root-mean-square above the corner frequency (100 Hz in bands B–D), linear average below it. It reads noise without bias as long as the step between spectra is well under 2.5 ms; at narrow sample rates with a large N the step is longer and noise reads up to 1 dB low.

This is a preliminary estimate, not a compliance measurement. The standard requires a bandwidth of 200 Hz, 9 kHz or 120 kHz at −6 dB and a particular filter shape. Here the RBW is set by N and the window, and a pulse shorter than the FFT frame is smeared across one or two spectra — so impulsive interference is weighted differently than in a receiver built to the standard. For steady and slowly modulated signals the readings agree with peak and average, as they should. The app says the same in the hint of each of these detectors.

floor: the local noise floor

floor gives not a spectrum but a floor trace: the median of blocks of bins (64 bins with eight or more spectra in the fold, up to 512 with one), converted to mean power. Narrow signals, and anything raised that is narrower than five blocks, do not enter it. Measured: it lies 0.1–0.2 dB below the true floor.

Its main use is the excess over the local noise. Give floor to the second trace and switch on the a/b math with that trace for the first: you get the excess over the noise of that very region in decibels (see trace math).

Bias on noise

Every detector gives its own answer to "what is the noise level here", and the difference between them is not an error but a property of the operation itself. The trust bar states it as a number: the Bias field shows by how many decibels the main detector, at the current fold, shifts the noise level relative to its mean power.

DetectorFold ×2Fold ×8Fold ×32
peak+1.76 dB+4.34 dB+6.08 dB
neg−3.01 dB−9.03 dB−15.05 dB
avg_log−1.05 dB−2.09 dB−2.40 dB
median0.00 dB−1.19 dB−1.49 dB
p90+1.46 dB+3.05 dB+3.42 dB
  • For rms and sample the bias is zero at any fold, and for peak, neg, avg_log, median and p90 at a fold of ×1; the field is then absent from the bar.
  • cav in tuned mode reads noise 1.05 dB low at any fold.
  • For qp in tuned mode, for floor, and for crms when the step between spectra is too long (above 1 GHz the threshold is ten times stricter), there is no simple answer. The bar then says undefined instead of hiding the field: a hidden row would read as "zero".
  • The fold depends on the sample rate, N and the Rows/s slider. By changing the waterfall rate you change the fold — and with it the noise level shown by peak, neg, avg_log, median and p90.
  • The number applies to the main detector. The bar shows no separate bias for the traces.

A detector of its own for every trace

One trace in peak tells whether a burst happened, another in rms tells what the noise level is, and both are on screen at once — that is a measurement, not a picture. This is why the detector is chosen separately for each of the four traces: T1 and T2 have peak by default, T3 has neg, T4 has rms. The FFT is computed once, and all the traces and the waterfall get the same spectra — only the fold differs.

Changing the detector resets what that trace has accumulated. The weighted detectors keep their state separately in every trace. What a trace does with the folded row next — Max hold, Average, math — is on the Traces page.

With a tinySA 0.9.25 no detector can be chosen: the instrument returns an already folded row, and the trace lists and the trust bar say instrument.

Detectors in a sweep

In a sweep the receiver stays on a segment for milliseconds, so the detectors work differently.

  • Over time the main detector folds only the spectra of one segment — while no blocks are lost, no fewer than the Sweep: spectra slider sets (the actual number stands in the trust bar next to the detector). With one spectrum per segment there is nothing to fold: median, for example, gives that same spectrum.
  • Along frequency, on a wide span the stitched grid has more bins than a trace has points (75 bins per point on the full span of a HackRF One), and the same detector reduces them. The trace detector acts here too: it decides how the grid bins are reduced into a point of that trace.
  • Detectors that are statistics over time are replaced along frequency by a counterpart: p90 and qp reduce bins by peak, median, cav, crms and floor by mean power. peak, neg, sample, rms and avg_log stay themselves.
  • The weighted detectors run without memory in a sweep — the time constants have no time to act. qp shows peak, that is the upper bound of quasi-peak; cav is the voltage mean over the spectra of one segment only; crms is the mean power over those spectra, i.e. rms.

Which detector to choose

  • Looking for weak narrow or short signals — peak.
  • Measuring the level of noise or of a wide signal — rms.
  • Want to see bursty signals without reacting to a single outlier — p90.
  • Want to see only what is there all the time — median.
  • Need the excess over the local noise — floor on the second trace and a/b on the first.
  • Making a preliminary EMC estimate of interference — qp, cav, crms, keeping the bandwidth in mind.
  • The default pair of traces already answers two questions at once: T1 in peak — whether a burst happened, T4 in rms with averaging — what the mean level is.
  • PRO Measuring noise density, band power, OBW or ACPR with the SDR SA PRO markers — the trace must carry mean power: the rms or sample detector, a mode other than Max hold or Min hold, and Averaging set to Power. Otherwise the measurement comes with a caveat that says what is wrong. See Trace markers.

Limits

  • qp, cav and crms are a preliminary estimate, not a compliance measurement: the RBW is not the standard's, and above 1 GHz the standard does not define quasi-peak.
  • In a sweep the weighted detectors have no memory: qp there is peak.
  • When Spectrum from blocks skips blocks, qp, cav and crms freeze during the gap: their time constants run on processed time.
  • The choice of detectors is not kept between launches: the main one always starts as rms, the traces with their defaults.
  • The detectors are only those in the list; a percentile or time constants of your own cannot be set.
  • With a tinySA the app's detectors do not act: the instrument folds the row itself.

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.