Prominent Discrete Tones (ECMA-418-1)
Standards: ECMA-418
Tonal components in machinery noise are far more annoying than their level
suggests. ECMA-418-1:2024 (referenced by ECMA-74 Annex D) gives two FFT-based
methods to decide whether a discrete tone is prominent:
tone_to_noise_ratio() compares the tone level with the masking noise in its
critical band (clause 11), and prominence_ratio() compares the critical band
centred on the tone with the two contiguous bands (clause 12). Both return a
structured verdict against the frequency-dependent prominence criteria.
1. Tone-to-noise ratio and prominence ratio
Section titled “1. Tone-to-noise ratio and prominence ratio”import numpy as npfrom phonometry import psychoacoustics
fs = 48000rng = np.random.default_rng(0)t = np.arange(fs) / fsx = np.sin(2 * np.pi * 1000 * t) + 0.05 * rng.standard_normal(fs) # 1 kHz tone in noisetnr = psychoacoustics.tone_to_noise_ratio(x, fs) # highest peak, or tone_freq=...pr = psychoacoustics.prominence_ratio(x, fs, tone_freq=1000.0)print(round(tnr.ratio_db, 1), round(tnr.criterion_db, 1), tnr.prominent) # 45.6 8.0 Trueprint(round(pr.ratio_db, 1), round(pr.criterion_db, 1), pr.prominent) # 45.7 9.0 True
tnr.plot() # the tone against its prominence criterion (needs matplotlib)Three numbers, in that order: the ratio is the tone’s excess over its masking
noise in decibels, the criterion is the frequency-dependent line it has to
clear, and prominent is the comparison of the two. Quote a result as
“TNR = 45.6 dB against an 8.0 dB criterion at 1 kHz, prominent by 37.6 dB”,
never as a bare boolean — the margin is what tells a reviewer whether the
verdict survives the measurement uncertainty. (This synthetic tone is
absurdly prominent; the 250 Hz fan tone further down clears its criterion by
2.1 dB, which is the interesting case.)
The methods hinge on the critical band, the ear’s analysis bandwidth, Hz (162 Hz at 1 kHz): a tone is masked only by the noise inside its critical band, so both methods focus on that band rather than the whole spectrum, but they use it differently. The tone-to-noise ratio works within the band, separating its spectral lines into tone and noise and subtracting their levels (clause 11, Formulae 9–11); the prominence ratio instead compares the whole band centred on the tone with the mean of its two contiguous critical bands (clause 12, Formula 23):
where is the tone level (the energy sum of the tonal lines above the band-edge baseline, Formula 9), the level of the masking noise that remains in the critical band, rescaled to the full critical bandwidth (Formulae 10–11), and , , the powers in the middle, lower and upper critical bands (below Hz the truncated lower band is rescaled to a 100 Hz bandwidth, Formula 24).
Show the code for this figure
import numpy as npimport matplotlib.pyplot as pltfrom scipy.signal import welchfrom phonometry import psychoacoustics
fs = 48000rng = np.random.default_rng(21)t = np.arange(30 * fs) / fsx = (np.sqrt(2) * 0.1 * np.sin(2 * np.pi * 1000 * t) + 0.05 * rng.standard_normal(t.size))res = psychoacoustics.tone_to_noise_ratio(x, fs)
# Averaged 1 Hz Hann spectrum (the clause 11.1 front end) and the# critical band about the detected tone (edges approximated as +/- dfc/2):f, p = welch(x, fs, window="hann", nperseg=fs, scaling="spectrum")dfc = 25 + 75 * (1 + 1.4 * (res.frequency / 1000) ** 2) ** 0.69sel = (f > 700) & (f < 1400)plt.plot(f[sel], 10 * np.log10(p[sel]))plt.axvspan(res.frequency - dfc / 2, res.frequency + dfc / 2, alpha=0.15)plt.title(f"TNR = {res.ratio_db:.1f} dB (criterion {res.criterion_db:.1f} dB)")plt.xlabel("Frequency [Hz]"); plt.ylabel("Bin power [dB]")plt.show()A TNR at or above dB below 1 kHz (a flat 8 dB for kHz) classifies the tone as prominent; the PR criterion is dB below 1 kHz and 9 dB from there up, likewise applied with . Low frequencies get higher thresholds because wider relative bands mask more.
ToneAssessment.plot() puts the verdict in its context: it draws the
criterion of the producing method over the whole 89.1 Hz to 11.2 kHz range of
interest and marks the assessed tone at its own frequency, so the margin that
decides the verdict is visible rather than implied.
Show the code for this figure
import numpy as npimport matplotlib.pyplot as pltfrom phonometry import psychoacoustics
# A 250 Hz fan tone recorded in broadband machinery noise, 10 s at 48 kHz.fs = 48000rng = np.random.default_rng(4)t = np.arange(10 * fs) / fsx = (np.sqrt(2) * 0.011 * np.sin(2 * np.pi * 250.0 * t) + 0.03 * rng.standard_normal(t.size))res = psychoacoustics.tone_to_noise_ratio(x, fs)print(round(res.ratio_db, 1), round(res.criterion_db, 1), res.prominent)# 15.1 13.0 True
# One line: the tone against the criterion curve of its own method.res.plot()plt.show()
# By hand, mirroring what ToneAssessment.plot() draws:f = np.logspace(np.log10(89.1), np.log10(11200.0), 400)criterion = np.where(f < 1000.0, 8.0 + 8.33 * np.log10(1000.0 / f), 8.0)fig, ax = plt.subplots()ax.semilogx(f, criterion, color="#d62728", label="prominence criterion")ax.plot([res.frequency], [res.ratio_db], "o", label="assessed tone")ax.plot([res.frequency] * 2, [res.criterion_db, res.ratio_db], ":", color="0.6")ax.set_xlabel("Frequency [Hz]")ax.set_ylabel("Tone-to-noise ratio TNR [dB]")ax.legend()plt.show()When the two ratios disagree. Near the criteria the verdicts can differ, because each ratio is fragile in a different situation. TNR has to split the critical band into tonal and noise lines first, so it degrades when that separation is ambiguous: a tone riding a steep noise slope, or closely spaced components whose skirts overlap. PR needs no separation, which makes it the robust, automatable choice when several tones share the critical band (they all land in ); in exchange it reads low when a neighbouring band also carries a tone (the flanking bands are then not noise) and is biased on sharply sloping spectra, where the two flanking bands no longer estimate the masking at the tone. In practice: prefer TNR for a clean, isolated tone, prefer PR for multi-tone complexes sharing a band, and report both when they straddle their criteria.
Two criteria, two failure modes. Left: the PR criterion sits about 1 to 2 dB above the TNR one below 1 kHz, which is enough for the same 250 Hz fan tone to be prominent by TNR (15.1 dB against 13.0 dB) and not prominent by PR (14.9 dB against 15.0 dB). Right: a tone in the neighbouring critical band leaves the TNR untouched and destroys the PR, because the flanking bands it treats as noise are no longer noise.
Show the code for this figure
import numpy as np
# `psychoacoustics` is imported by the snippets above.fs = 48000rng = np.random.default_rng(7)t = np.arange(8 * fs) / fs
# A 1 kHz tone in broadband noise, plus a second tone at 1160 Hz: outside the# 162 Hz critical band around 1 kHz, so inside the upper contiguous band the# prominence ratio uses as its noise estimate.primary = np.sqrt(2) * 0.012 * np.sin(2 * np.pi * 1000.0 * t)noise = 0.05 * rng.standard_normal(t.size)for relative_db in (-24.0, -12.0, 0.0, 12.0): second = np.sqrt(2) * 0.012 * 10 ** (relative_db / 20) y = primary + second * np.sin(2 * np.pi * 1160.0 * t) + noise tnr_y = psychoacoustics.tone_to_noise_ratio(y, fs, tone_freq=1000.0) pr_y = psychoacoustics.prominence_ratio(y, fs, tone_freq=1000.0) print(relative_db, round(tnr_y.ratio_db, 1), round(pr_y.ratio_db, 1))# -24.0 9.2 9.8# -12.0 9.2 8.7# 0.0 9.2 2.5# 12.0 9.2 -8.6A tone that will not hold still. Both methods assume the tone stays at one
frequency for the whole average. A fan or pump whose speed drifts smears the
tone across many bins: the tone band widens, part of the tone is counted as
masking noise, and the TNR reads low, while the PR is affected less but still
sees a smeared band. Clause 11.2 gives the diagnostic rather than leaving it to
judgement — if the tone band is wider than 15 % of the critical bandwidth,
repeat the analysis with a finer resolution, and a tone band that stays wider
than 15 % through that iteration indicates a tone of time-varying frequency or
another phenomenon. At that point the assessment is invalid rather than merely
uncertain. The remedies are upstream: stabilise the operating point of the
equipment under test, shorten each average and average the ratios instead of
the spectra, or order-track the rotating source. Harmonic complexes deserve the
same care component by component with tone_freq=, since a drifting
fundamental drifts proportionally more at every harmonic.
2. Where to measure (ECMA-74), and what the ratios need
Section titled “2. Where to measure (ECMA-74), and what the ratios need”ECMA-74 is the emission standard that delegates its tone assessments to ECMA-418-1, and it also fixes where the microphone goes around a device: one operator position and four bystander positions. Phonometry implements the ECMA-418-1 assessments, not the ECMA-74 measurement procedure, so the diagram below is context for reading an emission declaration rather than something the library performs.
Which position’s numbers are reported. ECMA-418-1 clause 6 is explicit. If the equipment has an operator position, measure there — at the loudest of them when there is more than one, judged by the A-weighted level. If it has none, measure at the bystander position with the highest A-weighted level and at every other bystander position within 0.5 dB of it. The geometry comes from ECMA-74:2025 clause 8.6: the operator microphone 0.25 m ± 0.03 m horizontally from the reference box at 1.20 m ± 0.03 m seated or 1.50 m ± 0.03 m standing (0.50 m for table-top equipment tested without its detachable keyboard, and 0.125 m at 1.0 m for hand-held equipment); at least four bystander positions 1.00 m ± 0.03 m from the sides of the reference box at 1.50 m ± 0.03 m above the floor, with more added at 1.0 m intervals when a side exceeds 2.0 m. Where several positions are measured, clause 6 requires the highest TNR and PR to be reported together with the position each came from.
With what. A class 1 microphone chain per IEC 61672-1 into an FFT analyser with linear (not exponential) RMS averaging and a Hanning window, calibrated directly in dB re 20 µPa; the microphone oriented so that the incidence angle is the one for which its response is flattest, which ECMA-74 clause 8.6.4 takes as 30° or 45° below the horizontal in most practical cases. The measurement interval must cover at least three operational cycles, or the complete sequence for equipment that runs a sequence of varying cycles (ECMA-74 clause 7.7.2 via 8.7.2), and the background noise is corrected as ISO 11201 accuracy grade 2 requires.
Resolution, in actionable terms. Clause 7 asks for an FFT resolution below 1 % of the tone frequency, and recommends 0.25 % or better for the tone-to-noise ratio, because experience has shown 1 % occasionally fails to resolve the tone. At 250 Hz that is 0.63 Hz, so records of a second or more per average; the library’s 1 Hz default therefore satisfies the recommendation only above about 400 Hz and is too coarse below it. Clause 11.2 adds the check that matters at the far end: the tone band must not exceed 15 % of the critical bandwidth, and if it does, the analysis is repeated finer.
The weighting trap. Clause 7 forbids any frequency weighting on the analyser input, A-weighting included. Both ratios compare levels inside and across critical bands, so a weighting curve tilts the comparison — harmless for a TNR at 1 kHz, worth several tenths of a decibel for a PR at low frequency, where the A-curve falls steeply across three consecutive critical bands. The ratios are indifferent to absolute calibration but not to spectral shape, which is why “calibration cancels out” is only half the story: the analyser should still be calibrated absolutely, because the clause 8/9 threshold screen below needs real sound pressure levels.
Proximate secondary tones in the same critical band are combined per
clause 11.6; for harmonic complexes assess each component (tone_freq=).
Both methods work on Hann-windowed, RMS-averaged spectra and need no absolute
calibration for the ratio itself (the ratios are level differences).
tone_to_noise_ratio() / prominence_ratio() parameters
Section titled “tone_to_noise_ratio() / prominence_ratio() parameters”| Parameter | Type | Units | Range / default | Notes |
|---|---|---|---|---|
x | 1D array | any (uncalibrated OK) | ≥ fs/resolution_hz samples | Ratios are level differences: calibration cancels out |
fs | int | Hz | > 0 | |
tone_freq | float, optional | Hz | 89.1–11 200; default None | None assesses the highest peak in the range of interest |
resolution_hz | float | Hz | > 0; default 1.0 | Tone band must stay within 15 % of the critical band (clause 11.2) |
Both return a ToneAssessment(frequency, ratio_db, criterion_db, prominent).
3. Which tonality metric, and when
Section titled “3. Which tonality metric, and when”The library implements four tonality assessments, and they are not interchangeable: each belongs to a different standard with its own purpose, input and output.
| TNR / PR | Tone audibility | Psychoacoustic tonality T | Wind-turbine tonal audibility | |
|---|---|---|---|---|
| Standard | ECMA-418-1:2024, clauses 11 and 12 | ISO/PAS 20065:2016, adopted by ISO 1996-2:2017 Annex J | ECMA-418-2:2025, clause 6 | IEC 61400-11:2012, clause 9.5 |
| Question answered | Is this discrete tone prominent in the emission of a device? | Is the tone audible above the noise that masks it, and by how much? | How tonal does the sound feel? | Is a turbine tone audible at the reference position, wind bin by wind bin? |
| Input | One FFT spectrum, no calibration needed | Narrow-band spectra with the line spacing declared | The calibrated pressure signal, through the Sottek hearing model | Narrow-band spectra per wind-speed bin, with the reference distance |
| Output | A ratio in dB against a frequency-dependent criterion, plus a prominent / not prominent verdict | An audibility in dB, whose decisive and mean values feed the tonal adjustment Kt | A tonality in tu_HMS, a perceptual magnitude with no criterion | An audibility in dB per bin, reported with the turbine’s sound power |
| Use it for | Declaring ITT equipment emission (ECMA-74 Annex D) | Environmental-noise rating: justifying, or refusing, a tonal penalty | Sound-quality work: comparing designs, not passing a limit | Type testing and acceptance of wind turbines |
Read the table as a decision: the purpose of the report picks the metric,
not the convenience of the input. A device emission declaration is an
ECMA-418-1 prominence verdict; a complaint about a tone from an installation
is an ISO 1996-2 rating, so it needs the audibility that maps to Kt
(the tone-audibility guide);
a product comparison where nobody is being fined is where the ECMA-418-2
tonality earns its place, because it is a magnitude rather than a threshold
test (the sound-quality guide); and a
turbine is its own regime, with a measurement procedure in IEC 61400-11 that
fixes the geometry and the wind bins (the
wind-turbine guide).
Two consequences worth keeping in mind. First, the numbers do not convert: a TNR of 12 dB is not an audibility of 12 dB, because the masking model, the band definition and the reference differ. Second, the metrics can disagree about the same sound, and legitimately so. A tone can be prominent by ECMA-418-1 in the near field of the machine and inaudible at the dwelling where the ISO 1996-2 assessment is made, while a hearing-model tonality stays moderate throughout because it rates the whole sound and not one spectral line. Report the metric the assessment calls for, and quote any other only as supporting evidence.
What this guide covers
Section titled “What this guide covers”Covered
ECMA-418-1:2024 (3rd edition): the tone-to-noise ratio (clause 11, Formulae 9 to 12) and prominence ratio (clause 12, Formulae 23 to 26) methods on Hann-windowed, RMS-averaged spectra, the clause 10 critical-band model, the frequency-dependent prominence criteria, and the clause 11.6 combination of secondary tones sharing a band, all through
tone_to_noise_ratio()andprominence_ratio(). The clause 6 microphone positions and clause 7 instrumentation requirements are documented in §2 as the conditions the two ratios are defined under.Not covered
The
prominentverdict these functions return is the numeric criterion only. The standard also requires a prominent tone to be confirmed by aural examination (clauses 11.8/12.8) and to pass the clause 8/9 lower-threshold-of-hearing screen, which needs calibrated absolute levels: both checks are left to the caller. ECMA-74:2025 is covered only as the standard that delegates its tone assessments to ECMA-418-1; its own Annex D measurement procedure and operator/bystander positions (shown above for context) are not implemented here.
See also
Section titled “See also”- Environmental Levels: the ISO 1996-1 rating levels and their Table A.1 tonal adjustments, whose Kt is justified by the ISO/PAS 20065 audibility route; these prominence verdicts are complementary emission screening.
- Sound Quality Metrics: the ECMA-418-2 psychoacoustic tonality T in tu_HMS, the hearing-model counterpart of these FFT ratios.
- Objective audibility of tones in noise: the ISO/PAS 20065 audibility ΔL that the ISO 1996-2 tonal adjustment Kt is read from.
- Wind-turbine noise: the IEC 61400-11 tonal audibility, the same question asked per wind-speed bin.
- Impulsive-sound prominence: the NT ACOU 112 counterpart for impulsive (rather than tonal) character.
- Theory: the critical-band model and criteria derivation.
- API reference:
psychoacoustics.quality.tonality. - Theory: Tone prominence: TNR and PR: the critical-band construction behind TNR and PR, and the criteria that make a tone prominent.
References
Section titled “References”- Ecma International. (2024). Psychoacoustic metrics for ITT equipment — Part 1: Prominent discrete tones (ECMA-418-1:2024 (3rd ed.)). The implemented standard, freely downloadable (the linked PDF is the free download): the tone-to-noise ratio (clause 11) and prominence ratio (clause 12) methods, the critical-band model and the frequency-dependent prominence criteria of section 1.
- Ecma International. (2025). Measurement of airborne noise emitted by information technology and telecommunications equipment (ECMA-74:2025 (22nd ed.)). The parent emission standard, freely downloadable (the linked PDF is the free download): the operator/bystander measurement positions of section 2, with Annex D delegating the tone assessments to ECMA-418-1.