Integrated and Statistical Levels
Standards: IEC 61672IEC 61252ISO 1996BS 7445Key references: Kinsler et al. 2000Bies et al. 2017
A noise measurement rarely ends with a waveform: it ends with a handful of single numbers that a limit, a regulation or a report can be checked against. This page is that reduction chain, computed directly from the calibrated signal in pascals rather than from meter readouts: the equivalent continuous level /, the percentile levels , the event and peak measures (/SEL, ), the noise dose of IEC 61252 and the whole-day descriptors / with the ISO 1996-1 rating levels. Working from the signal means each definition (an integral, a percentile, an energy sum) is applied exactly, with no detector or display approximation in between.
Which descriptor fits which question follows the ISO 1996-1 quantity families (BS 7445-1 is the survey-practice guide to the same choice, and Bies, Hansen & Howard 2017, §2.5 surveys them side by side):
- Accumulated exposure over an interval: /, the energy mean. It answers “how much sound arrived in total”, regardless of how it was distributed in time.
- How the fluctuating level was distributed: the percentiles : as the background level, as the intrusive traffic indicator, as the median. Two signals with the same can have very different spreads.
- Single events of different durations, compared fairly: SEL, the event’s whole energy normalized to one second.
- Hearing-risk screening: and the dose measures, which feed the occupational workflow of Occupational exposure (ISO 9612).
- Long-term community annoyance: / and the ISO 1996-1 rating levels, which weight evening and night energy before averaging the day.
Two boundaries with the sibling pages are worth keeping sharp. The integrated metrics here deliberately bypass the exponential detector: and SEL have no time constant, and Fast/Slow ballistics enter only through the percentile levels, which are defined on the time-weighted level track (see Time Weighting). And everything on this page assumes the signal is already in pascals: the sensitivity factor that gets it there is the subject of Calibration.
Leq and LAeq
Section titled “Leq and LAeq”The equivalent continuous level integrates the squared pressure over the measurement time:
and is the same integral after A-weighting the signal. is the level exceeded of the time: the -th percentile of the time-weighted level distribution.
import numpy as npfrom phonometry import metrology
# recording: a calibrated microphone capture (Pa) — recorded through your measurement chain. Synthesized here so the guide runs standalone.fs = 48000recording = 0.2 * np.sin(2 * np.pi * 1000 * np.arange(fs) / fs)sensitivity = 1.0 # calibration_factor (see Calibration)
# Equivalent continuous level of the whole recordinglevel = metrology.leq(recording, calibration_factor=sensitivity)
# A-weighted Leq (the standard environmental noise metric)la = metrology.laeq(recording, fs, calibration_factor=sensitivity)Both accept 1D signals (returning a scalar) or 2D [channels, samples] arrays
(returning one level per channel), and support dbfs=True for digital
full-scale analysis (calibration does not apply in dBFS mode).
Why the energy mean and not the arithmetic mean of dB values? Because sound doses add as energy: two periods at 60 dB and 80 dB do not average to 70 dB; the 80 dB half dominates and = 77 dB. Averaging decibels directly underestimates every fluctuating noise. is the level of the steady sound carrying the same energy as the real, fluctuating one, which is why regulations are written in terms of it.
The same rule governs every combination of levels: period levels into a
whole-day value, microphone positions into a room average, repeated
measurements into a mean. Combine energies,
10 * np.log10(np.mean(10 ** (L / 10))), never the dB values. The
arithmetic-mean error is one-sided (it always under-reads) and grows with
the spread, so it does not cancel out over many measurements: with values
spread over 10 dB it already costs a couple of decibels. The few normative
formulas that do average decibels directly are deliberate approximations and
say so (ISO 1996-2 offers one as a substitute for repeated-measurement
uncertainty and warns it inflates once levels spread beyond 3 dB, see the
uncertainty section below); everywhere else, energy.
leq() / laeq() parameters
Section titled “leq() / laeq() parameters”| Parameter | Type / shape | Units | Range / default | Notes |
|---|---|---|---|---|
x | 1D or 2D array | digital units (or Pa if calibrated) | non-empty | 2D is [channels, samples]; returns one level per channel |
fs | int | Hz | > 0 (laeq only) | leq needs no sample rate (pure RMS integral) |
calibration_factor | float | Pa per digital unit | default 1.0 | From sensitivity() |
dbfs | bool | — | default False | True: 0 dBFS = full-scale RMS sine; ignores calibration |
Percentile levels (LN)
Section titled “Percentile levels (LN)”ln_levels computes statistical levels from the time-weighted envelope:
L10 is the level exceeded 10 % of the time (event peaks), L50 the median,
L90 the background level.
import numpy as npfrom phonometry import metrology
# A steady tone gives L10 = L50 = L90; percentiles only tell a story for a# *fluctuating* level. Synthesize 3 s alternating between a quiet and a# ~10 dB louder half-second so the statistics separate.fs = 48000rng = np.random.default_rng(0)segment = fs // 2 # 0.5 s per levelquiet = 0.02 * rng.standard_normal(segment) # backgroundloud = 0.06 * rng.standard_normal(segment) # ~10 dB louder eventsvarying = np.tile(np.concatenate([quiet, loud]), 3)
stats = metrology.ln_levels(varying, fs, n=(10, 50, 90), weighting="A")print(f"LA10={stats[10]:.1f} LA50={stats[50]:.1f} LA90={stats[90]:.1f} dB")# LA10=66.6 LA50=65.2 LA90=58.5 dB -> L10 (events) > L50 (median) > L90 (background)L10 tracks the event peaks, L50 the median level and L90 the background.
Show the code for this figure
import numpy as npimport matplotlib.pyplot as pltfrom phonometry import metrology
# The fluctuating signal of the ln_levels example: 0.5 s of background# alternating with 0.5 s of ~10 dB louder events, repeated 3 timesfs = 48000rng = np.random.default_rng(0)segment = fs // 2quiet = 0.02 * rng.standard_normal(segment)loud = 0.06 * rng.standard_normal(segment)varying = np.tile(np.concatenate([quiet, loud]), 3)
# Fast mean-square envelope -> level vs time, plus the percentile levelsenvelope = metrology.time_weighting(varying, fs, mode="fast")level_t = 10 * np.log10(np.maximum(envelope, 1e-12) / (2e-5) ** 2)stats = metrology.ln_levels(varying, fs, n=(10, 50, 90))t = np.arange(varying.size) / fs
fig, ax = plt.subplots()ax.plot(t, level_t, linewidth=0.8, label="Fast level Lp(t)")for i, (n_value, style) in enumerate([(10, "--"), (50, "-"), (90, "-.")], 1): ax.axhline(float(stats[n_value]), color=f"C{i}", linestyle=style, label=f"L{n_value} = {stats[n_value]:.1f} dB")ax.set(xlabel="Time [s]", ylabel="Level [dB]")ax.legend(loc="lower right")plt.show()Options: mode selects the envelope ballistics ('fast', 'slow',
'impulse'), weighting applies A/C weighting first, and
calibration_factor/dbfs behave as in leq. The integrator attack transient
(~5τ) is discarded before taking percentiles, so the leading settling ramp is
not counted in the low percentiles.
Formally, is the -th percentile of the distribution of the time-weighted level: the recording is first turned into a level-vs-time envelope (Fast by default), and is the envelope value exceeded 10 % of the time. That makes the ballistics choice part of the metric: an from a Slow envelope is systematically lower than from a Fast one on impulsive noise, so regulations always name the time weighting.
Reading Leq against the percentiles
Section titled “Reading Leq against the percentiles”and the family answer different questions about the same level history. is an energy mean, so the loudest moments dominate it: a single second at 100 dB lifts the of an otherwise steady 60 dB hour to about 66 dB, while , and even barely move (a one-second event occupies far less than 10 % of the hour). Percentiles are rank statistics, robust against rare events by construction. In practice:
- (and ) is the dose metric: regulations, exposure and annoyance models are written in it precisely because it refuses to ignore rare loud events.
- estimates the residual (background) level under an intermittent source, which is how ISO 1996-2 Annex I uses it.
- tracks event peaks; the spread is a quick intermittency indicator.
- measures how “peaky” the history is: for steady noise the two nearly coincide, and the more the level fluctuates the further climbs above the median (for a Gaussian level distribution with standard deviation dB, ).
One caution: percentiles do not combine. Two hours with known
values do not yield the two-hour by any formula; recompute it from
the pooled envelope. values, by contrast, combine exactly by
time-weighted energy averaging, which is what composite_rating_level
does below.
ln_levels() parameters
Section titled “ln_levels() parameters”| Parameter | Type / shape | Units | Range / default | Notes |
|---|---|---|---|---|
x | 1D or 2D array | digital units | non-empty | 2D returns per-channel dicts |
fs | int | Hz | > 0 | Needed by the envelope detector |
n | tuple of ints | % | default (10, 50, 90) | Any exceedance percentages, e.g. (1, 5, 95) |
mode | str | — | 'fast' (default), 'slow', 'impulse' | IEC 61672-1 ballistics of the envelope |
weighting | str or None | — | 'A', 'C', 'G', 'Z', None (default) | Frequency weighting before the envelope |
calibration_factor / dbfs | float / bool | — | as leq | Same semantics as in leq() |
Peak, event and occupational metrics
Section titled “Peak, event and occupational metrics”import numpy as npfrom phonometry import metrology
# recording: a calibrated microphone capture (Pa) — recorded through your measurement chain. Synthesized here so the guide runs standalone.fs = 48000recording = 0.2 * np.sin(2 * np.pi * 1000 * np.arange(fs) / fs)sensitivity = 1.0 # calibration_factor (see Calibration)
# C-weighted peak (IEC 61672-1 §5.13) - occupational action limits use thispeak = metrology.lc_peak(recording, fs, calibration_factor=sensitivity)
# A single noise event and a work-shift sample (slices of a real recording)event = recordingshift_sample = recording
# Sound exposure level: single-event level normalized to 1 s (LAE)lae = metrology.sel(event, fs, weighting="A", calibration_factor=sensitivity)
# Daily noise dose (IEC 61252): exposure in Pa²·h and LEX,8h / LEP,dE = metrology.sound_exposure(shift_sample, fs, duration_hours=8, calibration_factor=sensitivity)lex = metrology.lex_8h(shift_sample, fs, duration_hours=8, calibration_factor=sensitivity)lc_peak is verified against the one-cycle/half-cycle reference responses of
IEC 61672-1:2013 Table 5, sel against the Table 4 LAE toneburst column, and
the dose functions against the IEC 61252 anchors (3.2 Pa²h ↔ exactly 90 dB).
lc_peak polyphase-oversamples the C-weighted signal by oversample (default
8) before taking the maximum, recovering the true inter-sample peak: a raw
on-grid maximum under-reads sustained HF tones by up to ~1.15 dB (an 8 kHz tone
at 48 kHz is only 6 samples/cycle). Set oversample=1 to detect the peak on the
original sample grid. With duration_hours, the input is treated as a
representative sample of that exposure period; without it, the input is the
whole event.
SEL: comparing events of different duration
Section titled “SEL: comparing events of different duration”A 4 s train pass-by and a 30 s one cannot be compared by their alone: the longer event delivers more energy at the same level. The sound exposure level compresses the whole event energy into exactly one second:
so events of any duration become directly comparable, and identical events sum as . This is the building block of airport and railway noise models.
Show the code for this figure
import numpy as npimport matplotlib.pyplot as pltfrom phonometry import metrology
# A vehicle pass-by: noise under a gaussian energy envelope (dBFS analysis)fs = 48000t = np.arange(int(8.0 * fs)) / fsrng = np.random.default_rng(11)x = 0.3 * np.exp(-0.5 * ((t - 4.0) / 1.1) ** 2) * rng.standard_normal(t.size)
level = 10 * np.log10(np.maximum(metrology.time_weighting(x, fs, mode="fast"), 1e-12))l_sel = float(metrology.sel(x, fs, dbfs=True))l_eq = float(metrology.leq(x, dbfs=True))print(f"Leq = {l_eq:.1f} dBFS, SEL = {l_sel:.1f} dBFS")# Leq = -16.6 dBFS, SEL = -7.6 dBFS -> the 1 s block carries the event energy
fig, ax = plt.subplots()ax.plot(t, level, linewidth=1.0, label="Fast level of the event")ax.hlines(l_eq, 0, 8, color="C2", linestyle="--", label=f"Leq over the whole event = {l_eq:.1f} dBFS")ax.fill_between([3.5, 4.5], -55, l_sel, color="C1", alpha=0.25)ax.hlines(l_sel, 3.5, 4.5, color="C1", linewidth=2, label=f"SEL = {l_sel:.1f} dBFS: same energy in 1 s")ax.set(xlabel="Time [s]", ylabel="Level [dBFS]", ylim=(-55, l_sel + 6))ax.legend(loc="lower left")plt.show()Noise dose: sound exposure and LEX,8h
Section titled “Noise dose: sound exposure and LEX,8h”Occupational regulations limit the daily dose, not the level. IEC 61252 expresses it as sound exposure in pascal-squared-hours (the time integral of the squared A-weighted pressure) and the equivalent normalized 8 h level:
The anchor worth memorizing: 3.2 Pa²h ⇔ exactly 90 dB over 8 h (the CI suite enforces it). Half the dose is −3 dB; double duration at the same level is +3 dB.
Peak / event / dose parameters
Section titled “Peak / event / dose parameters”| Function | Key parameters | Returns | Standard anchor |
|---|---|---|---|
lc_peak(x, fs, calibration_factor=1.0, dbfs=False) | dbfs=True references full-scale peak (1.0), not RMS | LCpeak [dB] | IEC 61672-1 §5.13, Table 5 tone bursts |
sel(x, fs, weighting=None, ...) | weighting='A' gives LAE | SEL [dB] | IEC 61672-1 Table 4 (LAE column) |
sound_exposure(x, fs, duration_hours=None, ...) | duration_hours treats x as a sample of that period | E [Pa²h] | IEC 61252 |
lex_8h(x, fs, duration_hours=None, ...) | same sampling semantics | LEX,8h [dB] | IEC 61252 (≡ LEP,d) |
lex_8h rates one recording; assembling a full working day from task or
job samples, with the normative ISO 9612 uncertainty budget, continues in
Occupational Noise Exposure.
Environmental noise: Lden, Ldn and rating levels (ISO 1996-1)
Section titled “Environmental noise: Lden, Ldn and rating levels (ISO 1996-1)”Regulatory noise assessment weights evenings and nights more heavily.
lden() implements the day-evening-night level of ISO 1996-1:2016 (3.6.4:
+5 dB evening, +10 dB night, default 12/4/8 h periods, adjustable because
countries define them differently), ldn() the day-night variant (3.6.5),
and composite_rating_level() the general whole-day composite of clause 6.5
(Formulae 5-6) for arbitrary periods with source or character adjustments
(Table A.1: e.g. +5 dB regular impulsive, +12 dB highly impulsive, +3 to
+6 dB prominent tones):
from phonometry import environmental
l = environmental.lden(63.2, 58.1, 51.4) # from LAeq per periodr = environmental.composite_rating_level([(63.2, 12, 0.0), # day (58.1, 4, 5.0), # evening (+5) (51.4, 8, 10.0)]) # night (+10) == environmental.ldenShow the code for this figure
import numpy as npimport matplotlib.pyplot as pltfrom phonometry import environmental
# Synthetic hourly LAeq of an urban road (dB), hours 00 to 23laeq_h = np.array([48, 46, 45, 45, 46, 50, 56, 64, 66, 65, 63, 63, 64, 63, 63, 64, 65, 66, 65, 64, 63, 62, 61, 50], dtype=float)
def period_leq(idx): return 10 * np.log10(np.mean(10 ** (laeq_h[idx] / 10))) # energy mean
ld = period_leq(np.arange(7, 19)) # day 07-19le = period_leq(np.arange(19, 23)) # evening 19-23ln_ = period_leq(np.r_[23, np.arange(0, 7)]) # night 23-07l_den = environmental.lden(ld, le, ln_)print(f"Lden = {l_den:.1f} dB") # Lden = 64.3 dB
fig, ax = plt.subplots()ax.axvspan(19, 23, color="C1", alpha=0.15) # eveningax.axvspan(23, 24, color="C0", alpha=0.15); ax.axvspan(0, 7, color="C0", alpha=0.15)ax.step(np.arange(25), np.r_[laeq_h, laeq_h[-1]], where="post", color="0.3", label="Hourly LAeq")ax.hlines(ld, 7, 19, color="C2", linestyle="--", label="Lday (+0 dB)")ax.hlines(le + 5, 19, 23, color="C1", linestyle="--", label="Levening + 5 dB")ax.hlines([ln_ + 10, ln_ + 10], [23, 0], [24, 7], color="C0", linestyle="--", label="Lnight + 10 dB")ax.hlines(l_den, 0, 24, color="C3", linewidth=2, label=f"Lden = {l_den:.1f} dB")ax.set(xlabel="Hour of day", ylabel="Level [dB]", xlim=(0, 24))ax.legend(loc="upper left", fontsize=8, ncol=2)plt.show()lden() / ldn() / composite_rating_level() parameters
Section titled “lden() / ldn() / composite_rating_level() parameters”| Function | Key parameters | Notes |
|---|---|---|
lden(lday, levening, lnight, hours=(12, 4, 8)) | period LAeq values [dB]; hours must sum to 24 | +5 dB evening, +10 dB night (3.6.4) |
ldn(lday, lnight, hours=(15, 9)) | +10 dB night (3.6.5) | |
composite_rating_level(periods) | iterable of (level_db, hours, adjustment_db); hours positive, finite and summing to 24 | General Formulae (5)-(6); adjustments per Table A.1 |
Where you put the microphone changes the number: ISO 1996-2 fixes the receiver positions and their façade corrections. The diagram is measurement context; apply the corrections to your levels before analysis:
Combine with laeq() per time period to go from recordings to Lden, and with
the tone_to_noise_ratio() / prominence_ratio() verdicts of
Prominent Discrete Tones to justify tonal adjustments.
Determining levels: tonal adjustment, residual noise and uncertainty (ISO 1996-2)
Section titled “Determining levels: tonal adjustment, residual noise and uncertainty (ISO 1996-2)”ISO 1996-2:2017 is the determination part: how the measured level is turned into a rating level and reported with its uncertainty. The rating-level summation and the time-of-day penalties live in ISO 1996-1 (above); ISO 1996-2 supplies the tonal adjustment, the residual-noise correction and the uncertainty budget.
Tonal adjustment (engineering method, Annex C). From the energy-summed tone
level and the masking-noise level in the critical band around a
tone, the audibility above the masking threshold is
dB (Formula (C.3)),
and the adjustment is for ,
for and above (Formulae (C.4)–(C.6)). The
critical bandwidth is 100 Hz up to 500 Hz and 20 % of above (Table C.1).
The one-third-octave survey method (tonal_seeking_survey) flags a band
exceeding both neighbours by 15/8/5 dB (low/mid/high), and
tonal_adjustment_from_mean_audibility maps the ISO/PAS 20065 mean audibility to
(Table J.1).
Show the code for this figure
import matplotlib.pyplot as pltfrom phonometry import environmental
# ISO 1996-2:2007 Annex C.5, Example 2 (two tones near 400 Hz):res = environmental.assess_tonal_audibility(tone_level=54.1, masking_noise_level=45.2, centre_frequency=430.0)print(res.audibility, res.adjustment) # ΔLta ≈ 11.1 dB -> Kt = 6 dBres.plot()plt.show()Residual-noise correction (Clause 10.4). residual_sound_correction()
applies (Formula (16)). With a
residual within 3 dB of the measured level no correction is allowed: the
uncorrected measured level is then the reportable value, as an upper
bound of the specific sound (exposed as reportable_upper_bound, with
reliable=False). gaussian_residual_level() estimates the residual from
percentile levels (Annex I) and rejects inverted percentile orderings.
Measurement uncertainty (Clause 4, Annex F). combined_standard_uncertainty()
forms (Formula (2)) and
environmental_expanded_uncertainty() applies (95 %) or (80 %);
residual_correction_uncertainty() carries the residual-correction sensitivity
(Formulae (F.7)/(F.8)) and uncertainty_from_repeated_measurements() the
repeated-measurement standard uncertainty: the primary energy-domain route
(Formulae (17)+(19)), with the level-domain Note 2 substitute (Formula (20))
reported alongside as approximate_uncertainty and a warning when the levels
spread beyond 3 dB, where the substitute grossly inflates.
from phonometry import environmental
tonal = environmental.assess_tonal_audibility(54.1, 45.2, 430.0) # TonalAssessmentResultkt = tonal.adjustment # 6 dBtonal.plot() # this audibility on the Kt curve, as in the figure abovecorr = environmental.residual_sound_correction(measured_level=58.0, residual_level=50.0)u = environmental.combined_standard_uncertainty([0.59, 0.3, 2.0, 0.40, 0.38]) # 2.18 dB (G.2)environmental.expanded_uncertainty(u) # 4.36 dB (k = 2)Octave Spectrogram (levels over time)
Section titled “Octave Spectrogram (levels over time)”Short-time fractional-octave analysis: one level per band per window, time-aligned across bands.
import numpy as npfrom phonometry import metrology
# recording: a calibrated microphone capture (Pa) — recorded through your measurement chain. Synthesized here so the guide runs standalone.fs = 48000recording = 0.2 * np.sin(2 * np.pi * 1000 * np.arange(fs) / fs)
bank = metrology.OctaveFilterBank(fs=48000, fraction=3)levels, freq, times = bank.spectrogram(recording, window_time=0.125, overlap=0.5)# levels: (bands, frames) — ready for pcolormesh(times, freq, levels)
A logarithmic sweep plus two tone bursts, resolved in time and in standardized 1/3-octave bands.
Show the code for this figure
import numpy as npimport matplotlib.pyplot as pltfrom scipy.signal import chirpfrom phonometry import metrology
# Log sweep 80 Hz -> 8 kHz plus two tone bursts, in a little noisefs = 48000t = np.arange(int(4.0 * fs)) / fsx = 0.5 * chirp(t, f0=80, t1=4.0, f1=8000, method="logarithmic")x[int(1.0 * fs):int(1.3 * fs)] += np.sin(2 * np.pi * 4000 * t[: int(0.3 * fs)])x[int(2.5 * fs):int(2.8 * fs)] += np.sin(2 * np.pi * 250 * t[: int(0.3 * fs)])x += 0.01 * np.random.default_rng(42).standard_normal(t.size)
bank = metrology.OctaveFilterBank(fs=fs, fraction=3, order=6, limits=[50.0, 12000.0])levels, freq, times = bank.spectrogram(x, window_time=0.125, overlap=0.5)
fig, ax = plt.subplots()mesh = ax.pcolormesh(times, freq, levels, shading="auto")ax.set_yscale("log")ax.set(xlabel="Time [s]", ylabel="Frequency [Hz]")fig.colorbar(mesh, label="Level [dB]")plt.show()- Multichannel input
(channels, samples)returns(channels, bands, frames). timesholds each window’s center in seconds.mode='peak'gives per-window peak-holding levels instead of RMS.zero_phase=Truefilters bands forward-backward so per-band group delay does not skew the frames (offline analysis only).
OctaveFilterBank.spectrogram() parameters
Section titled “OctaveFilterBank.spectrogram() parameters”| Parameter | Type | Units | Range / default | Notes |
|---|---|---|---|---|
x | 1D or 2D array | digital units | non-empty | 2D returns (channels, bands, frames) |
window_time | float | s | > 0; default 0.125 | Frame length (0.125 s mirrors Fast) |
overlap | float | — | 0 ≤ overlap < 1; default 0.5 | Fraction of window overlap (0 = none) |
mode | str | — | 'rms' (default) or 'peak' | Per-window detector |
detrend | bool | — | default True | Remove each band’s DC offset before the level (improves low-frequency accuracy) |
zero_phase | bool | — | default False | Forward-backward filtering (offline only) |
calibration_factor / dbfs | — | — | constructor-only | Set on OctaveFilterBank(...), not per call |
See Calibration and dBFS to convert digital units to physical SPL, and Time Weighting for the envelope details. The ISO 9612 occupational strategies continue in Occupational Noise Exposure, the ECMA-418-1 tonal-prominence verdicts in Prominent Discrete Tones, and the ISO 226 equal-loudness contours live with the perception metrics in Loudness. Whether a single Leq is a fair summary of a measurement at all is a stationarity question - the data qualification tests answer it objectively from segment mean squares.
What this guide covers
Section titled “What this guide covers”Covered. IEC 61672-1:2013’s Fast/Slow/Impulse envelope ballistics
behind the percentile levels, the C-weighted peak of clause 5.13
(lc_peak, verified against Table 5) and the sound exposure level (sel,
verified against the Table 4 LAE column); IEC 61252:1993’s sound exposure
and LEX,8h (sound_exposure, lex_8h); ISO 1996-1:2016’s Lden, Ldn and
composite rating level (clause 6.5, environmental.lden/ldn/
composite_rating_level); and ISO 1996-2:2017’s tonal adjustment (Annex
C), residual-noise correction (Clause 10.4) and measurement uncertainty
budget (Clause 4, Annex F).
Not covered. IEC 61252 was revised in 2025; only the formulae of the implemented first edition (1993) are here, not the newer one. ISO 1996-2 fixes the receiver positions and the façade corrections that turn a raw measurement into the level this page’s functions expect: those position and correction procedures are not implemented, only the arithmetic that follows once you have applied them.
See also
Section titled “See also”- Time Weighting: the Fast/Slow/Impulse detector the percentile levels are defined on.
- Calibration: the sensitivity factor that turns digital units into the pascals every level here assumes.
- Occupational exposure (ISO 9612): the workplace measurement strategies the dose measures feed.
- Multichannel and Performance: per-channel levels and how to combine them energetically.
- API reference:
metrology.levels,environmental.measurementandenvironmental.rating.
Quick answers
Section titled “Quick answers”What is the difference between Leq and SEL?
Section titled “What is the difference between Leq and SEL?”is the equivalent continuous level: the energy mean of the squared pressure over the measurement time , referenced to . SEL, the sound exposure level ( when A-weighted), compresses the whole event energy into exactly one second: with , so events of any duration become directly comparable and identical events sum as .
What sound exposure corresponds to 90 dB over an 8-hour working day?
Section titled “What sound exposure corresponds to 90 dB over an 8-hour working day?”Per IEC 61252:1993, the sound exposure is the time integral of the squared A-weighted pressure, expressed in pascal-squared-hours, and (equivalent to ) is the corresponding level normalized to 8 h. The anchor worth memorizing: 3.2 Pa²h corresponds to exactly 90 dB over 8 h. Half the dose is -3 dB, and double duration at the same level is +3 dB.
What penalties does Lden apply to evening and night noise?
Section titled “What penalties does Lden apply to evening and night noise?”, the day-evening-night level of ISO 1996-1:2016 (3.6.4), adds +5 dB to the evening level and +10 dB to the night level before energy-averaging the whole day, with default periods of 12, 4 and 8 hours, adjustable because countries define them differently. The day-night variant (3.6.5) keeps only the +10 dB night penalty.
References
Section titled “References”- Bies, D. A., Hansen, C. H., & Howard, C. Q. (2017). Engineering noise control (5th ed.). CRC Press. https://doi.org/10.1201/9781351228152Section 2.5 (the noise measures: Leq, Ldn, L10/L90 and their intended uses) and Section 2.15 (environmental noise surveys). ISBN 978-1-4987-2405-0.
- British Standards Institution. (2003). Description and measurement of environmental noise — Guide to quantities and procedures (BS 7445-1:2003). The survey-practice companion of ISO 1996-1: which descriptor family fits which assessment question, and the measurement procedures around them (BS 7445-2:1991 covers the land-use data acquisition).
- International Electrotechnical Commission. (1993). Electroacoustics — Specifications for personal sound exposure meters (IEC 61252:1993). The sound exposure E in Pa²h and the normalized 8 h level LEX,8h (≡ LEP,d), anchored at 3.2 Pa²h ⇔ exactly 90 dB. Since revised as IEC 61252:2025 (https://webstore.iec.ch/en/publication/68929); the first edition is the implemented one.
- International Electrotechnical Commission. (2013). Electroacoustics — Sound level meters — Part 1: Specifications (IEC 61672-1:2013). The Fast/Slow/Impulse envelope ballistics behind the percentile levels, the C-weighted peak of clause 5.13 (verified against the Table 5 tone bursts) and the sound exposure level verified against the Table 4 LAE column.
- International Organization for Standardization. (2016). Acoustics — Description, measurement and assessment of environmental noise — Part 1: Basic quantities and assessment procedures (ISO 1996-1:2016). Lden (3.6.4), Ldn (3.6.5) and the composite whole-day rating level of clause 6.5 (Formulae 5-6, Table A.1 adjustments).
- Kinsler, L. E., Frey, A. R., Coppens, A. B., & Sanders, J. V. (2000). Fundamentals of acoustics (4th ed.). Wiley. The sound-pressure, energy and level definitions underneath Leq, SEL and the dose measures (ISBN 978-0-471-84789-2).