FFT spectrum analysis: peak, RMS and what the bins really mean

Published 11 September 2026 · Updated 11 September 2026 · 13 min read

Magnitude-response illustration
A windowed magnitude spectrum: tallest bin, interpolated peak and noise floor.

An FFT is the easy part. Deciding what the resulting numbers represent is where measurements go wrong: a bin is not a tone, the tallest bin is usually not the amplitude, and the noise floor is not the noise density. Each of those three statements costs a decibel or two when it is ignored, and every one of them is visible in the analyser below.

The tool generates a test signal or reads a captured record, windows it, transforms it, and reports the peak with two different amplitude estimates, the RMS, the crest factor, the noise floor and the noise density. Nothing leaves the browser, so a capture file can be loaded without it going anywhere.

Windowed FFT analyser

Build a signal from tones, noise and DC, or load a text/CSV capture. The generator is deterministic, so the same inputs always give the same result.

Peak frequency
Peak level, tallest bin
Peak level, interpolated
Window amplitude correction
Time-domain RMS
Crest factor
Mean square from the spectrum
Noise floor (median bin)
Noise density
Resolution

Record, with the window envelope

Amplitude spectrum

The spectrum is a single-sided amplitude spectrum in dBFS, corrected by the window's coherent gain, so an isolated tone reads its true amplitude. The noise density is estimated from the median bin power — robust against tones — corrected for the exponential distribution's median-to-mean ratio of ln 2, and divided by ENBW × Δf.

What each row is telling you

  • Peak frequency — the largest bin, refined by a parabola through its two neighbours in the decibel domain. That refinement is what turns 11.72 Hz steps into a frequency good to a small fraction of a bin.
  • Peak level, tallest bin — the raw reading, exactly what a hardware analyser shows. It is the honest number, and it is usually low.
  • Peak level, interpolated — the parabola's apex, which recovers most of that loss for a Hann window and overshoots slightly.
  • Time-domain RMS — computed from the samples, before windowing. This is the reference every spectral estimate is judged against.
  • Crest factor — peak divided by RMS. 3.01 dB is a sine, 12 dB or more means a spiky or impulsive record.
  • Mean square from the spectrum — the sum of the whole spectrum under the energy-gain normalisation, which recovers the record's mean square even when the tone does not land on a bin. If this row disagrees with the time-domain RMS, the window or the normalisation is wrong.
  • Noise floor — the median bin level, chosen over the mean because a single loud tone would drag a mean several decibels upward.
  • Noise density in dBFS/Hz — what the floor means per hertz, which is the only form in which two floors measured with different settings can be compared.

Why the tallest bin is not the amplitude

A tone almost never lands exactly on a bin. The window's main lobe is sampled at bin centres, so the reading depends on how far the tone sits from the nearest centre. The loss at that point is called scalloping loss, and for a Hann window it reaches 1.42 dB at exactly half a bin — a factor of 1.18 in voltage, which is the kind of error that gets written into a report.

Measured with a full-scale tone, stepping the frequency away from a bin centre:

Offset from bin centre Hann, tallest bin Hann, interpolated Flat-top, tallest bin Flat-top, interpolated
0.00 bin0.000 dB0.000 dB0.000 dB0.000 dB
0.25 bin−0.352 dB+0.088 dB+0.002 dB+0.063 dB
0.37 bin−0.774 dB+0.186 dB+0.001 dB+0.113 dB
0.50 bin−1.423 dB+0.324 dB−0.010 dB+0.165 dB

Three things fall out of that table. Hann loses up to 1.42 dB if you read the tallest bin. Parabolic interpolation does not just recover the loss, it overshoots by up to 0.32 dB, because the log-magnitude parabola is an approximation and not the actual window response. And the flat-top window needs no interpolation at all: its tallest bin is within 0.01 dB of the truth across the whole range, which is precisely what it was designed for. Note also that the flat-top's interpolated value is worse than its raw bin — parabolic interpolation assumes a rounded peak, and a flat top does not have one.

Compounding this, the rectangular window loses 3.92 dB at half a bin, so a rectangular-windowed tone in a report can be 3.9 dB low and still look like a clean peak. If amplitude accuracy matters, use flat-top and read the tallest bin.

What interpolation is good for

Frequency. The same parabola that overshoots on level locates the peak to better than 0.02 bin in the tests above, which is 0.23 Hz on an 11.72 Hz grid — a twenty-fold improvement over the bin spacing. That matters when you are identifying a resonance, checking a crystal, or confirming that a 1 kHz tone really is 1 kHz.

It has limits. Two tones closer together than the window's main lobe produce one lump, and the parabola will place a single peak between them with a level that belongs to neither. Hann's main lobe is 4 bins wide, so tones a few bins apart need a wider window or a longer record, not better curve fitting.

RMS, Parseval and why the sum is trustworthy

Because the window is applied before the transform, the sum of the spectrum is weighted by the window's energy gain rather than its coherent gain. Divide the transformed power by N² × EG and the total recovers the record's mean square — for noise and for a single tone alike, and regardless of where the tone lands between bins. In the tests behind this page the spectral mean square of a full-scale sine came out at −3.0103 dB while the time-domain RMS read the same −3.0103 dB, which is Parseval's theorem doing its job.

That is the check worth keeping: if the mean square from the spectrum and the time domain disagree, something in the scaling is wrong, and no amount of staring at the peak will find it. The two gains are easy to confuse, which is the whole subject of the window function article.

Reading a noise floor

A floor in dBFS is meaningless on its own, because the number of bins it is spread over depends on the FFT size. Density in dBFS/Hz removes that: the noise power in one bin covers a bandwidth of ENBW × Δf, so dividing the bin power by that bandwidth gives a figure you can compare across settings. With the defaults here — 4096 points at 48 kHz — the bin width is 11.7188 Hz and the Hann ENBW is 17.578 Hz.

Two practical details. First, the tool estimates the bin power from the median rather than the mean: white-noise bin power follows an exponential distribution, whose median is ln 2 of its mean, so the median is divided by ln 2 to remove that bias while keeping the median's immunity to tones. Adding a full-scale tone to a noise record moved the reported density by 0.02 dB here, whereas a plain average of bin power would have been ruined.

Second, do not average decibels. Averaging power measurements after converting them to dB biases the result 2.57 dB low in the tests above, close to the theoretical −10γ/ln 10 = −2.51 dB, because the logarithm of an exponentially distributed power is skewed. Averaging amplitude in dB is biased the other way, by +0.44 dB against a theoretical +0.50 dB. Average power, or the square of amplitude, and convert afterwards.

Five mistakes worth avoiding

  1. Reading the peak bin as the amplitude. Up to 1.42 dB low with Hann, 3.92 dB low with rectangular. Use flat-top and the tallest bin, or correct for it knowingly.
  2. Forgetting the window's amplitude correction. A Hann-windowed tone reads 6.02 dB low before the coherent gain is divided out. Confusing that with the 1.76 dB noise correction is the same mistake in the other direction.
  3. Using zero padding as a resolution fix. It interpolates the spectrum you already have; it does not narrow the main lobe.
  4. Averaging dB values. A 2.5 dB low floor, every time, and it looks like an improvement because the trace gets smoother.
  5. Quoting a floor without its settings. A floor is only comparable as a density, and only when the bin width and ENBW are stated with it.

Choosing the settings

4096 points at 48 kHz is a common starting point: 11.72 Hz bins, an 85.3 ms record and a 17.58 Hz ENBW with Hann. Doubling the FFT size halves the bin width and doubles the record, so a signal that changes faster than the record cannot be resolved no matter what the FFT size says. The trade is always the same one the window article describes: frequency resolution against time resolution, with the window deciding how much leakage you accept in between.

Summary

Use the tallest bin only after correcting for the window; interpolate to find the frequency, not the level; check the spectral mean square against the time-domain RMS; and quote noise as a density with its ENBW. Then the FFT stops being a picture and becomes a measurement.

Values shown are engineering aids rather than measurements; see the disclaimer and the tool index.