Skip to content

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 np
from phonometry import psychoacoustics
fs = 48000
rng = np.random.default_rng(0)
t = np.arange(fs) / fs
x = np.sin(2 * np.pi * 1000 * t) + 0.05 * rng.standard_normal(fs) # 1 kHz tone in noise
tnr = 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 True
print(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).

Averaged spectrum of a tone in noise with the critical band shaded and the tone-to-noise ratio annotated against its prominence criterionAveraged spectrum of a tone in noise with the critical band shaded and the tone-to-noise ratio annotated against its prominence criterion
Show the code for this figure
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import welch
from phonometry import psychoacoustics
fs = 48000
rng = np.random.default_rng(21)
t = np.arange(30 * fs) / fs
x = (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.69
sel = (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.

Tone-to-noise ratio of a 250 Hz fan tone plotted against the ECMA-418-1 prominence criterion: the criterion falls from about 17 dB at 89 Hz to a flat 8 dB above 1 kHz, and the assessed tone sits at 15.1 dB, 2.1 dB above the 13.0 dB criterion at 250 Hz, so it is prominentTone-to-noise ratio of a 250 Hz fan tone plotted against the ECMA-418-1 prominence criterion: the criterion falls from about 17 dB at 89 Hz to a flat 8 dB above 1 kHz, and the assessed tone sits at 15.1 dB, 2.1 dB above the 13.0 dB criterion at 250 Hz, so it is prominent
Show the code for this figure
import numpy as np
import matplotlib.pyplot as plt
from phonometry import psychoacoustics
# A 250 Hz fan tone recorded in broadband machinery noise, 10 s at 48 kHz.
fs = 48000
rng = np.random.default_rng(4)
t = np.arange(10 * fs) / fs
x = (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.

Left: the ECMA-418-1 tone-to-noise and prominence criteria over the 89.1 Hz to 11.2 kHz range of interest, with the 250 Hz fan tone marked at 15.1 dB above its 13.0 dB TNR criterion and at 14.9 dB just below its 15.0 dB PR criterion. Right: the tone-to-noise ratio and the prominence ratio of a 1 kHz tone as a second tone grows in the next critical band up, the TNR flat at about 9.2 dB while the PR falls from 9.9 dB through its 9 dB criterion down to below minus 8 dBLeft: the ECMA-418-1 tone-to-noise and prominence criteria over the 89.1 Hz to 11.2 kHz range of interest, with the 250 Hz fan tone marked at 15.1 dB above its 13.0 dB TNR criterion and at 14.9 dB just below its 15.0 dB PR criterion. Right: the tone-to-noise ratio and the prominence ratio of a 1 kHz tone as a second tone grows in the next critical band up, the TNR flat at about 9.2 dB while the PR falls from 9.9 dB through its 9 dB criterion down to below minus 8 dB

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 = 48000
rng = 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.6

A 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.

ECMA-74 emission measurement positions: seated operator microphone at 0.25 m and 1.20 m, and the four bystander positions at 1 mECMA-74 emission measurement positions: seated operator microphone at 0.25 m and 1.20 m, and the four bystander positions at 1 m

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”
ParameterTypeUnitsRange / defaultNotes
x1D arrayany (uncalibrated OK)fs/resolution_hz samplesRatios are level differences: calibration cancels out
fsintHz> 0
tone_freqfloat, optionalHz89.1–11 200; default NoneNone assesses the highest peak in the range of interest
resolution_hzfloatHz> 0; default 1.0Tone band must stay within 15 % of the critical band (clause 11.2)

Both return a ToneAssessment(frequency, ratio_db, criterion_db, prominent).

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 / PRTone audibility Psychoacoustic tonality TWind-turbine tonal audibility
StandardECMA-418-1:2024, clauses 11 and 12ISO/PAS 20065:2016, adopted by ISO 1996-2:2017 Annex JECMA-418-2:2025, clause 6IEC 61400-11:2012, clause 9.5
Question answeredIs 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?
InputOne FFT spectrum, no calibration neededNarrow-band spectra with the line spacing declaredThe calibrated pressure signal, through the Sottek hearing modelNarrow-band spectra per wind-speed bin, with the reference distance
OutputA ratio in dB against a frequency-dependent criterion, plus a prominent / not prominent verdictAn audibility in dB, whose decisive and mean values feed the tonal adjustment KtA tonality in tu_HMS, a perceptual magnitude with no criterionAn audibility in dB per bin, reported with the turbine’s sound power
Use it forDeclaring ITT equipment emission (ECMA-74 Annex D)Environmental-noise rating: justifying, or refusing, a tonal penaltySound-quality work: comparing designs, not passing a limitType 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.

  • 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() and prominence_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 prominent verdict 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.