How is loudness measured, and why is LUFS not dB?
Loudness · 3 min read
A loudness meter filters the audio roughly as the ear hears it, averages its energy, drops the quiet parts and reports one level against digital full scale: that is LUFS. A peak meter in dBFS reads something else, so two files with the same peak can sit 14 LU apart.
The recipe is ITU-R BS.1770; our analyzer implements it.
The filter: bass counts less
BS.1770's K-weighting cuts the lowest bass and lifts everything above about 1.5 kHz by 3 to 4 dB, as a head does to sound reaching the ears.
Tones peaking at -20 dBFS read -31.08 LUFS at 25 Hz, -16.65 at 10 kHz: same peak, different weight. In the ITU's listening tests, energy with just the bass roll-off predicted perceived loudness as well as complex hearing models did; K-weighting adds the head shelf.
Gates: silence does not count
The standard averages the filtered energy in 400 ms blocks. A gate at -70 LUFS drops silence, and a second gate 10 LU under the average of the rest drops much quieter sections.
A silent tail does not lower a track's number; a breakdown more than 10 LU under the rest drops out. A breakdown within 10 LU still counts, but loud sections weigh more than their share of the time.
That gated whole-file number is integrated loudness. A meter moving during a set shows momentary (0.4 s) or short-term (3 s) loudness, as EBU Tech 3341 defines them; loudness range (LRA) is how far apart quiet and loud sections sit, in LU.
So why is LUFS not dB?
"dB" is only a ratio: it needs a reference.
| Unit | Measures | Reference |
|---|---|---|
| dBFS | a sample's level | full scale |
| dBTP | the rebuilt waveform's peak | full scale |
| LU | a loudness difference, 1 LU = 1 dB | none |
| LUFS (= LKFS) | a loudness level | full scale |
True peak is the level the wave reaches between the samples: on one EBU test tone, 3 dB above every sample; Club loudness, measured draws it.
Turn a tone up 6 dB and it reads 6 LU louder: gain is the one case where LU and dB agree. Change the spectrum or add silence, and they part ways. Without the audio, "-9 LUFS" and "peaks at -9 dBFS" cannot be converted into each other.
What this does not tell you
- How loud a track sounds in a club. BS.1770 was validated on broadcast material at normal listening levels; bass sensitivity changes with level, as the ISO 226 equal-loudness contours show, and a club is outside that.
- Whether our analyzer is fully conformant. We tested it on tones rebuilt from the EBU's descriptions, not the official test files.
- LRA on real music, to the decimal. Our library, libebur128, takes short-term values once a second, not 10 times as Tech 3342 asks. We have not measured the effect on real tracks.
How we checked our analyzer, with every number
Method. 28 synthetic WAV files (48 kHz, 32-bit float), built in code so the correct answer is known in advance: sine tones, tone sequences and the EBU conformance cases rebuilt from their written descriptions. No music. Measured with our analyzer, analyze_track, which uses libebur128 1.2.6 through pyebur128 0.1.1. Standards: ITU-R BS.1770-5, EBU R 128, Tech 3341 and Tech 3342, current editions (November 2023). Tone levels are per-channel peak dBFS, as the EBU tables state them. The script content-social/drafts/scripts/I1_measurement.py prints every number below; I1_figures.py draws the figures.
The four documents. BS.1770-5 defines the algorithm. R 128 says what broadcasters do with it: -23 LUFS, true peak at or below -1 dBTP. Tech 3341 defines meter behaviour (momentary, short-term, integrated). Tech 3342 defines LRA. LUFS and LKFS are the same unit; as R 128 notes, the ITU writes one, the EBU the other. In BS.1770, Annex 1 (the loudness algorithm for up to five channels) and Annex 2 (true peak) are the parts that matter for a stereo club track, and their coefficients and thresholds are the ones libebur128 implements. The library predates BS.1770-5; we checked the filter part directly, and at 48 kHz its formula reproduces both coefficient tables of BS.1770-5 to every published digit.
K-weighting, tones at -20 dBFS peak, stereo.
| Frequency | Measured | vs 1 kHz |
|---|---|---|
| 25 Hz | -31.08 LUFS | -11.09 LU |
| 50 Hz | -24.63 LUFS | -4.64 LU |
| 100 Hz | -21.83 LUFS | -1.84 LU |
| 500 Hz | -20.65 LUFS | -0.66 LU |
| 1 kHz | -19.99 LUFS | 0 |
| 2 kHz | -17.62 LUFS | +2.37 LU |
| 4 kHz | -16.72 LUFS | +3.27 LU |
| 10 kHz | -16.65 LUFS | +3.34 LU |
| 16 kHz | -16.65 LUFS | +3.34 LU |
BS.1770 warns the algorithm "is not, in general, suitable for use to estimate the subjective loudness of pure tones": these show what the filter does, not how loud each tone sounds.
Channels, 997 Hz at -20 dBFS. Mono -23.01 LUFS, stereo left only -23.01, stereo both channels -20.00.
Gates. The last column is computed from how we built each signal, not measured.
| Signal | Measured | No gates |
|---|---|---|
| 20 s at -20 dBFS, then 60 s silence | -20.03 LUFS | -26.02 |
| Tech 3341 case 3: 10 s -36, 60 s -23, 10 s -36 | -23.01 LUFS | -24.18 |
| Tech 3341 case 4: case 3 plus 10 s -72 at each end | -23.01 LUFS | -25.15 |
Tech 3341 expects -23.0 ±0.1 LUFS for cases 3 and 4. The relative gate was -8 LU until R 128 version 2 moved it to -10.
LRA, per Tech 3342, is the spread between the 10th and 95th percentile of the gated short-term values. Tech 3342 cases (1 kHz stereo, 20 s per segment): expected 10, 5, 20, 15 LU (±1); measured 10.0, 5.0, 20.0, 15.0.
True peak, Tech 3341 cases 16 to 18 (amplitude 0.5, true peak -6.02 dBFS, with the 10 ms fades the EBU asks for): 12 kHz -6.05, 8 kHz -6.01, 6 kHz -6.02 dBTP, inside Tech 3341's +0.2/-0.4 dB tolerance. Sample peaks: -9.03, -7.27, -6.71 dBFS. The 12 kHz case is the worst one BS.1770 describes, a tone at a quarter of the sample rate with an unlucky phase: the samples read 3 dB under the wave. Without fades the readings rise to -5.92, -5.66, -5.37: a file that starts mid-waveform contains a step, and a step's rebuilt waveform overshoots.
How much 4x oversampling can still miss. BS.1770 gives the worst case as 20 log10(cos(pi f / n)): 0.554 dB at 4x for content at 0.45 of the sample rate, 0.136 dB at 8x. At 44.1 kHz, 4x runs at 176.4 kHz, below the 192 kHz BS.1770 asks for before calling a result dBTP; for 20 kHz content the worst case is 0.563 dB instead of 0.474 dB at 48 kHz. libebur128 oversamples 4x below 96 kHz, 2x up to 192 kHz.
More limits.
- BS.1770 itself warns that its loudness estimate carries "some degree of uncertainty depending on listeners, audio material and listening conditions".
- Our analyzer reports integrated loudness, LRA and true peak for the whole file. It does not report momentary or short-term values.
- The gain check was made on a tone, not on a track: the same 1 kHz tone at -20, -26 and -33 dBFS reads -19.99, -25.99 and -32.99 LUFS, steps of 6.00 and 13.00 LU.
- At 44.1 kHz, 4x oversampling stays under the 192 kHz BS.1770 asks for before calling a result dBTP (above). Real music rarely sits at the worst case, but a true-peak reading is an estimate, not an exact figure.
- Nothing here covers what happens inside a bar: integrated loudness and LRA both ignore the scale below 0.4 s.
Related
- What does Spotify do to your track's loudness?
- What does "just normalise it" actually do to a track?
- What does mastering actually change in a track?
- Club loudness, measured
Sources
- ITU-R, Recommendation ITU-R BS.1770-5 (11/2023): Algorithms to measure audio programme loudness and true-peak audio level. https://www.itu.int/rec/R-REC-BS.1770-5-202311-I
- EBU, R 128 (2023): Loudness normalisation and permitted maximum level of audio signals, version 5. https://tech.ebu.ch/docs/r/r128.pdf
- EBU, Tech 3341 (2023): Loudness Metering: 'EBU Mode' metering to supplement EBU R 128 loudness normalization, version 4. https://tech.ebu.ch/docs/tech/tech3341.pdf
- EBU, Tech 3342 (2023): Loudness Range: a measure to supplement EBU R 128 loudness normalization, version 4. https://tech.ebu.ch/docs/tech/tech3342.pdf
- libebur128 v1.2.6,
ebur128/ebur128.c(filter parameters, true-peak interpolator, gating, LRA). https://github.com/jiixyj/libebur128/blob/v1.2.6/ebur128/ebur128.c - pyebur128 0.1.1 (Python binding to libebur128). https://pypi.org/project/pyebur128/
- ISO, ISO 226:2023 Acoustics: Normal equal-loudness-level contours. https://www.iso.org/standard/83117.html
We build enguetedl.ch; the analyzer above is ours.