One raw spectrum, turned into volts and then into power in three steps. Watch the tone’s reading go from a bare count to its true amplitude.
From raw FFT to volts
A 1 V, 1000 Hz tone plus noise of RMS 0.1 V; f_s = 8 kHz, N = 1024, Hann window.
Raw |X[k]|: the tone's bin reads 256, or 48.2 dB. That is A × Σw/2 with Σw = 512 for this window: a count with no unit.
Describe this picture
A 1 V, 1000 Hz tone plus noise of RMS 0.1 V, with kHz, and a Hann window. One panel, with frequency from 0 to 4000 Hz, ticks every 1000, and a vertical axis from −70 to 60 whose title changes with the step: “|X[k]| (dB)”, then “dB re 1 V”, “dB re 1 V”, and “dB re 1 V²”. The spectrum, bins 0 to 512, is a thin solid line, and the tone’s bin is ringed. From the third step on, a dashed horizontal line marks the truth, labelled “1 V (0 dB)” and later “0.5 V² (−3.0 dB)”. One row of readouts gives the scaling and what the tone reads in dB with its reference, such as “0.0 dB re 1 V”.
The clip plays once, in 15 s, holds on its last frame and has no control. It opens on the raw (readouts “raw |X[k]|”, “48.2 dB”): “Raw |X[k]|: the tone’s bin reads 256, or 48.2 dB. That is A × Σw/2 with Σw = 512 for this window: a count with no unit.” The whole curve then slides down 54.2 dB, and the vertical axis changes its title when the slide ends (”÷ Σw”, “−6.0 dB re 1 V”): “Divide by Σw: the tone reads 0.5, −6.0 dB re 1 V. The other half of the tone sits in the mirror bin at −1000 Hz.” Next the curve rises 6.0 dB (”× 2, one-sided”, “0.0 dB re 1 V”): “Fold the mirror half on (× 2 for every bin except 0 and N/2): the tone reads 1.00 V, 0.0 dB, its true amplitude. This is an amplitude spectrum.” Last, the curve drops 3.0 dB and the floor moves with it (“a² ÷ 2: power”, “−3.0 dB re 1 V²”), and the dashed line is now labelled “0.5 V² (−3.0 dB)”: “Square and halve: 0.500 V², −3.0 dB re 1 V², the tone’s power (its RMS squared). A power spectrum reads tones true. The noise floor, near −45 dB here, is another matter: it depends on N.” Reduced motion rests on the last frame and offers the four steps in turn.
An FFT’s numbers have no unit
The DFT (13.2) gives , and nothing about it says volts. Its size depends on how many samples you took and on which window you used. Read it as it comes, and the same 1 V tone shows a different number every time you change or the window.
This page turns into three quantities that do have units. The amplitude spectrum is in volts (V), and reads a tone’s amplitude. The power spectrum is in V², and reads a tone’s power. The power spectral density, or PSD, is in V² per hertz, and reads how much noise power sits in each hertz. Each reads one kind of signal true, and I will show you which and why.
I use one test signal for the whole page: a 1 V tone at 1000 Hz plus white noise of RMS 0.1 V, sampled at kHz and cut by a Hann window (Window functions compared, 15.2). Its truths are known in advance. The tone’s amplitude is 1 V. Its power is V², which is dB re 1 V². The noise power is V².
White noise spreads its power evenly from to (Oversampling and noise shaping, 11.3). Folded onto positive frequencies only, which I call the one-sided form, that is a density of . Here it is V²/Hz, or dB re 1 V²/Hz.
Two facts from earlier pages carry the rest. A tone of amplitude sitting on bin reads (Window functions compared, 15.2), where the sum runs over the window’s samples. Half of the tone sits in bin and half in its mirror bin (The DFT, 13.2).
From raw FFT to volts
Three plain steps turn into the tone’s amplitude. Divide by , which removes the window’s gain and the length together. Fold the negative half onto the positive half by multiplying by 2. Then the peak reads volts. Squaring and halving that amplitude gives power. It is like a kitchen scale: a raw count, minus the bowl, times the calibration, is grams.
The picture at the top of this page follows these steps for the page’s test signal, with . The raw of the tone’s bin reads 256, or 48.2 dB: a count with no unit. For the Hann window sums to 512, so the tone reads , which is dB.
Dividing by slides the whole curve down 54.2 dB, which is . The tone now reads 0.5, dB re 1 V. The other half of the tone sits in the mirror bin at Hz.
Folding the mirror half on raises the curve 6.0 dB, the factor 2. The tone reads 1.00 V, 0.0 dB, its true amplitude: this is an amplitude spectrum. Bins 0 and have no mirror partner, so they are not doubled.
Squaring and halving drops the curve 3.0 dB, and the floor moves with it. The tone reads 0.500 V², dB re 1 V², its power, which is its RMS squared. A power spectrum reads tones true. The noise floor, near dB here, is another matter: it depends on .
Written out, the amplitude and power spectra of a one-sided bin are
The second is the power spectrum. Its unit is V², and for a tone it reads the power, . The noise floor is a separate matter, and the next section turns to it.
Why the floor depends on N
A white noise sample of power is multiplied by the window and added up, so a bin of pure noise has mean square . Put that in the power-spectrum formula and you get a floor of
because (Window functions compared, 15.2). The tone’s reading did not change with , but the floor falls as grows. Another way to say it: each bin is wide, so it collects the noise of hertz. A longer record has narrower bins and each one catches less.
For the Hann window at the floor is V², which is dB re 1 V². Four times the length lowers it by dB.
Longer records: the tone stays, the floor moves
The cure is to divide by the width of a bin in hertz. A bin’s noise width is , so dividing the power spectrum by it gives
This is the power spectral density, in V²/Hz, written , where the superscript “1s” means one-sided. Put the noise floor into it, and the factors of cancel: , the truth from the start. Now I will show the trade at three lengths and then in reverse.
Watch the dotted floor: in the power spectrum it falls as grows, and in the density it sits on the truth line at every .
Longer records: the tone stays, the floor moves
The same signal, first as a power spectrum (V²), then as a power spectral density (V²/Hz), for N = 256, 1024 and 4096.
Power spectrum, N = 256: the tone reads −3.0 dB re 1 V², its true power. The noise floor sits near −39 dB.
Describe this picture
The same signal, first as a power spectrum (V²), then as a power spectral density (V²/Hz), for = 256, 1024 and 4096. One panel, with frequency from 0 to 4000 Hz and a vertical axis from −70 to 0, ticks at 0, −20, −40 and −60, titled “dB re 1 V²” in the first part and “dB re 1 V²/Hz” in the second. The one-sided spectrum is a thin solid line. A dashed truth line is labelled “tone power, −3.0 dB” in the first part and “noise density, −56.0 dB” in the second, and the measured floor is a dotted level labelled “floor”. The readouts are and the bin spacing, then the tone peak and the noise floor.
The clip plays once, in 17 s, and holds on its last frame. It starts as a power spectrum at (bin spacing 31.25 Hz, tone peak −3.0 dB): “Power spectrum, N = 256: the tone reads −3.0 dB re 1 V², its true power. The noise floor sits near −39 dB.” At (7.81 Hz): “N = 1024: the tone still reads −3.0 dB, but the floor is 6 dB lower, near −45 dB. Each bin is narrower and collects less noise.” At (1.95 Hz): “N = 4096: floor near −51 dB. The noise did not change; only the bins did. A power spectrum misreads noise by an amount that depends on N.” Then the scaling changes to density, and the whole curve slides down 4.7 dB: “Divide by each bin’s noise width, ENBW × f_s/N = 2.93 Hz: a density. The floor now reads −56 dB re 1 V²/Hz, the true noise density. The tone’s peak reads −7.7 dB, a number with no meaning for a tone.” The clip then goes back down in length. At : “N = 1024: the floor stays at −56 dB; the tone’s peak drops to −13.7 dB.” At the end: “N = 256: floor still −56 dB, tone −19.7 dB. A density reads noise true at every N; a power spectrum reads tones true. Choose the scaling for what you measure.”
When the clip has finished, a control named “Record length N”, reading “1024 samples”, sets from 256 to 8192 in powers of two; the hint reads “Drag across the plot, or use the arrow keys, to set N (256 to 8192).” Home and End jump to 256 and 8192. At 256, 1024 and 4096 the caption is the one above for that length. At 2048 and 8192 it reads, with the live tone value, “N = 8192: the floor stays near −56 dB; the tone’s peak reads −4.7 dB.”
As a power spectrum, the tone reads dB re 1 V², its true power, at every length. The floor sits near dB at , dB at 1024 and dB at 4096, 6 dB lower each time grows four times. The noise did not change; only the bins did. A power spectrum misreads noise by an amount that depends on .
Then the scaling changes to density. The floor now reads dB re 1 V²/Hz, the true noise density. At each bin’s noise width is Hz, and the slide is dB.
Going back down in length, the floor stays at dB, and the tone’s peak drops, to dB at and dB at 256. A density reads noise true at every ; a power spectrum reads tones true. Choose the scaling for what you measure.
Why does the tone’s peak move in the density? The tone’s power is fixed at 0.5 V², and it all lands in one bin whose noise width is hertz. Its density there is the power divided by that width, which changes with , so a density cannot read a tone. Its peak is V²/Hz at , which is dB.
When the clip has finished, drag across the plot to set yourself, from 256 to 8192. In the density view the dotted floor sits on the truth line at every you set. The tone’s peak is what changes.
The maths behind it · variance per unit frequency
A PSD is a variance per unit frequency: integrate it over frequency and you get the noise’s variance, as a probability density integrates to 1. The noise floor’s average is an estimate of that density, and its scatter from bin to bin is the subject of The periodogram (25.1).
One spectrum, four units
Here are all the scalings in one place, for one-sided bins .
| You want | Formula | Unit | In dB |
|---|---|---|---|
| Amplitude | V | dB re 1 V | |
| RMS amplitude | amplitude | V | dB re 1 V |
| Power spectrum | V² | dB re 1 V² | |
| PSD | V²/Hz | dB re 1 V²/Hz |
Fig. Bins 0 and N/2 are not doubled. SciPy’s periodogram(…, scaling=‘spectrum’) returns the power spectrum and scaling=‘density’ the PSD, both one-sided for real input.
For a digital signal with full scale , the amplitude in dB becomes dBFS (Signal size, 1.3), and the PSD becomes dBFS/Hz. A full-scale sine reads dBFS by RMS and 0 dBFS by peak, and this site uses the peak form unless it says otherwise. Amplitudes and RMS use . Powers and densities use . Always write the reference after the dB.
Window sums connect to the numbers of 15.2: and , where is the coherent gain. NumPy’s np.hanning is the symmetric Hann, so its sums differ slightly from the periodic window used here.
Getting a tone’s power from a PSD
A PSD does not read a tone, but you can still get the tone’s power out of it. Add the density over the tone’s lobe and multiply by the bin spacing . For this page’s tone the sum is V², the true power.
Do the same with the power spectrum and you overcount. The lobe of a power spectrum adds to V², which is , because every bin of the lobe is already a power, not a density. With no noise, SciPy’s periodogram(x, 8000, window='hann', scaling='spectrum') reads 0.500 V² at the tone’s bin. With the noise of the instrument’s signal, that bin reads 0.5003 V² for one draw: 0.5 plus the noise in that bin.
Noise density in everyday terms: mV per root hertz. That is how data sheets quote it, and squaring it gives back the PSD.
dBFS/Hz
A converter’s noise floor is usually quoted in dBFS/Hz. Take a 16-bit converter at 48 kHz. Its quantisation noise has power re full scale squared, which is dB (Quantization & noise, 11.1). Spread over 0 to 24 kHz, the one-sided density is dBFS/Hz. A full-scale sine is dBFS, so the signal-to-noise ratio is dB, which is the of 11.1 with before rounding.
The maths behind it · Parseval's theorem
Parseval says the DFT keeps the length of the data vector, up to the factor . Every scaling here is that one length bookkeeping, split into “per tone” and “per hertz”.
Worked example
- Chain, , Hann (, , ENBW 1.5). The tone is 256 (48.16 dB), then 0.5 ( dB re 1 V), then 1.000 V (0.00 dB), then 0.500 V² ( dB re 1 V²). The expected noise floor at those four steps is 5.84, , and dB.
- Floors and peaks. For of 256, 1024, 4096 and 8192 the power-spectrum floor is , , and dB re 1 V². The density tone peak is , , and dB re 1 V²/Hz. The density floor is dB at every . The bin noise widths are 46.88, 11.72, 2.93 and 1.46 Hz.
- Truth. V²/Hz, which is dB re 1 V²/Hz, or 1.58 mV/√Hz.
- Tone power from the PSD. Lobe sum times is 0.5000 V². The power-spectrum lobe sum is 0.7500 V², which is .
- dBFS/Hz. A 16-bit converter at 48 kHz gives dBFS/Hz, and at 44.1 kHz . A 24-bit converter at 48 kHz gives dBFS/Hz. The SNR of a full-scale sine is 98.09 dB at 16 bits and 146.26 dB at 24 bits.
Where you’ll meet this
Spectrograms & the STFT (15.5) draws these levels in dB for every frame. The periodogram (25.1) and Averaged periodograms: Bartlett and Welch (25.2) estimate a PSD and ask how much it scatters. Power spectral density (24.4) defines the PSD of a random process.
Reference card
| Quantity | Formula (one-sided, ) | Reads true |
|---|---|---|
| Amplitude spectrum | (V) | a tone’s amplitude |
| Power spectrum | (V²) | a tone’s power |
| PSD | (V²/Hz) | a noise density |
| White noise | flat to | |
| Bin noise width | Hz | power = PSD × this |
| Window sums | , | 15.2 |
| Tone power from a PSD | sum the lobe | |
| dB | dB re 1 V: ; dB re 1 V², re 1 V²/Hz: | name the reference |
| SciPy | periodogram/welch, scaling='spectrum' or 'density' | one-sided for real |