Two standards describe where the hearing threshold sits. ISO 7029:2017 gives the statistical distribution of the hearing threshold with age for an otologically normal population: the slow, high-frequency-first loss known as presbycusis. ISO 389-7:2005 fixes the reference threshold of hearing, the audiometric zero (0 dB HL) expressed as a sound pressure level under free-field and diffuse-field listening. Here both are returned on the same eleven audiometric frequencies, 125 Hz to 8000 Hz, so they combine band for band.
1. Age-related threshold (ISO 7029)
Section titled “1. Age-related threshold (ISO 7029)”For a person older than 18, the median hearing threshold deviation from the value at age 18 grows as a power law of age (ISO 7029 clause 4.2, Table 1):
with coefficients , per frequency and sex. The spread around the median is modelled by two half-Gaussians whose standard deviations (worse than the median) and (better) are fifth-degree polynomials in (clause 4.3, Tables 2–5). Any population fractile follows from the standard-normal quantile (clause 4.4): , using when and otherwise.
from phonometry import hearing
# Median threshold shift of a 65-year-old man, all audiometric frequencies.result = hearing.age_threshold(65, "male", fractile=0.5)print(result.median.round(1)) # [ 6.6 7.6 8. 9. 10.4 13.4 16.3 21.6 26.2 33.7 39.5]print(result.median[8].round(1)) # 26.2 dB at 4000 Hz
# The worst-hearing decile (90th percentile) at 4000 Hz:print(hearing.age_threshold(65, "male", fractile=0.9).threshold[8].round(1)) # 50.3
result.plot() # the median with the 10-90 % fractile band (needs matplotlib)The loss is largest at the high frequencies and grows with age: the classic
downward-sloping presbycusis audiogram. Men and women follow different
coefficients (the sex argument), and a subset of the audiometric frequencies
can be requested with frequencies=.
Where the model stops. ISO 7029:2017 specifies its coefficients for ages
18 to 80 years over the audiometric frequencies 125 Hz to 8000 Hz
(clause 4.1), and adds a caution of its own: from 3000 Hz to 8000 Hz the values
above 70 years are informative only, because at those frequencies the threshold
of many of the oldest subjects could not be measured at all — it ran off the
audiometer’s scale — so the fitted spread there rests on a truncated sample.
The power law is anchored at 18 years, where the median deviation is zero by
construction, and an age below that is refused outright, since the quantity is
defined as a deviation from 18. Nothing stops it at the top, though:
age_threshold(90, "male") returns 106.7 dB at 8 kHz, silently, and that is an
extrapolation the standard does not support. Quote such a value as an
extrapolation or stop at the limit. The fractile inherits the same weakness:
it describes a screened population of finite size, so the far tails are least
supported exactly where the far ages are.
Who counts as “otologically normal”. The ISO 7029 population is not the general population: it is people screened to be in a normal state of health, free from signs or symptoms of ear disease and wax obstruction, and (the demanding part) with no history of undue noise exposure, ototoxic drugs or familial hearing loss. The model therefore isolates pure ageing: it is the baseline that other standards subtract from. A real, unscreened workforce tends to have higher thresholds on average (not necessarily at every age or frequency), which is why ISO 1999 supplies an unscreened population as an alternate reference (its “database B”) for studies whose goal is comparison with an actual population rather than isolating the noise effect.
Reading the percentiles. A fractile is a population statement, not a
prediction for a person: fractile=0.9 returns the threshold that 90 % of
otologically normal people of that age and sex are better than (only the
worst-hearing tenth exceeds it), and fractile=0.5 the median: half above,
half below. The spread is deliberately asymmetric (two half-Gaussians, with
over most of the range): ageing drags a minority far down while the
better-hearing half stays bunched near the median, so the far percentiles on
the bad side move much faster with age than the good side ever improves. An
individual audiogram can sit anywhere in that fan; the model tells you how
surprising it is, not what it should be.
Both claims of the paragraph above, drawn at 4 kHz. Left: men and women follow different coefficients, and the gap grows with age — 4.9 dB at 60 years and 6.8 dB at 80 — so a fractile statement without a sex attached is meaningless. Right: the asymmetry is real but not permanent. pulls away from until about 64 years, then falls back and crosses under it at 75. That reversal is an artefact with a name: from 3 kHz upwards the threshold of many of the oldest subjects could not be measured at all, which is why ISO 7029 clause 4.1 marks everything above 70 years at those frequencies as informative only.
Show the code for this figure
import matplotlib.pyplot as pltimport numpy as np
# `hearing` is the import of the first snippet on this page.ages = np.arange(18.0, 81.0)i = 8 # 4000 Hz, the ninth audiometric frequency
fig, (ax_sex, ax_spread) = plt.subplots(1, 2, figsize=(12.5, 5.4))for sex, style in (("male", "-"), ("female", "--")): med = [hearing.age_threshold(a, sex, 0.5).median[i] for a in ages] ax_sex.plot(ages, med, style, label=sex)ax_sex.legend()
res = [hearing.age_threshold(a, "male", 0.5) for a in ages]su = np.array([r.spread_upper[i] for r in res])sl = np.array([r.spread_lower[i] for r in res])ax_spread.plot(ages, su, "-", label="s_u")ax_spread.plot(ages, sl, "--", label="s_l")ax_spread.axvline(70.0, linestyle=":") # informative only above hereax_spread.legend()plt.show()AgeThresholdResult.plot() draws that fan directly: the median, the requested
fractile and the 10 % to 90 % fractile band, on an audiogram axis.
Show the code for this figure
import matplotlib.pyplot as pltfrom phonometry import hearing
# A 70-year-old man, worst-hearing decile: the median presbycusis slope with# the population spread around it.res = hearing.age_threshold(70, "male", fractile=0.9)print(res.median.round(1))print(res.threshold.round(1)) # the 90 % fractile
# One line: the median, the fractile and the 10-90 % band.res.plot()plt.show()The band is the whole point of the model. At 500 Hz the fractiles of a 70-year-old span a handful of decibels, so an individual audiogram there is informative; at 8 kHz they span tens of decibels, so a single measured value says little about whether that ear is unusual. Any statement of the form “this person has lost more hearing than their age explains” is a statement about where they sit in this fan, and it needs the fractile, not the median.
Where the age component goes next. ISO 7029 is not only an audiology reference: it is the age input of the noise-induced-hearing-loss model. ISO 1999:2013 calls it database A and its clause 6.1 Formula (1) combines the age threshold with the noise-induced shift into the threshold a real audiogram would show, , at the same fractile. In practice that means the two guides chain: pick the population and fractile here, add the exposure there, and compare the result, never the noise component alone, against a measured audiogram. The noise-induced hearing loss guide picks the chain up at that point.
2. Reference threshold of hearing (ISO 389-7)
Section titled “2. Reference threshold of hearing (ISO 389-7)”The audiometric zero is not a fixed sound pressure level: it depends on how the
sound reaches the listener. ISO 389-7:2005 Table 1 gives the reference
threshold for free-field (frontal incidence) and diffuse-field
listening. That table is a one-third-octave table of 38 rows running from 20 Hz
to 18 000 Hz; reference_threshold carries only the eleven audiometric rows
ISO 7029 also uses, so the two functions align band for band and can be added
without resampling. Any other frequency raises rather than interpolating,
because the standard tabulates the threshold and defines no interpolation
between its rows.
from phonometry import hearing
print(hearing.reference_threshold("free-field"))# [22.1 11.4 4.4 2.4 2.4 2.4 -1.3 -5.8 -5.4 4.3 12.6]print(hearing.reference_threshold("diffuse-field")[4]) # 0.8 dB at 1000 HzWhat the reference zero is referenced to
Section titled “What the reference zero is referenced to”These values calibrate sound-field audiometry — the loudspeaker-based test methods of ISO 8253-2 — and not earphone audiometry. They hold under the four conditions ISO 389-7 clause 1 lists, and only those:
- The field. With the listener absent, the field is a free progressive plane wave with the source directly in front (frontal incidence), or a diffuse field qualified as ISO 8253-2 specifies.
- The signal. A pure tone in the free field; a one-third-octave band of white or pink noise in the diffuse field. Up to 8 kHz either column also applies to any other noise band narrower than the critical band.
- The measurement point. The sound pressure level is measured with the listener absent, at the point the centre of the listener’s head will occupy — not at the ear, and not with the subject in the chair.
- The ears. Listening is binaural.
The values also carry a procedure. Definition 3.1 notes that the whole ISO 389 series rests on the threshold procedure of ISO 8253-1, and that a test procedure with other characteristics can be expected to give thresholds differing by up to several decibels on average. A survey therefore records the procedure it used, not only the levels it obtained.
The trap is the clinical audiogram. 0 dB HL on an audiometer is the reference
equivalent threshold sound pressure level of ISO 389-1 (supra-aural), ISO 389-2
(insert) or ISO 389-8 (circumaural) for the earphone actually fitted, referred
to an acoustic coupler or an ear simulator, and obtained monaurally. ISO 389-7
clause 1 states outright that its data differ from those and that a direct
comparison is not appropriate. reference_threshold("free-field") is the zero
of a loudspeaker-based test; it is never a conversion factor for a headphone
audiogram.
The two fields agree at low frequencies and diverge above about 1 kHz, where the ear-canal resonance and head diffraction make the frontal free field the more sensitive condition (a lower threshold) around 3–4 kHz.
From a dB HL threshold to a sound pressure level. Audiometric zero is the sound pressure level of the reference threshold, so a threshold in dB HL becomes a physical level by adding the ISO 389-7 value for the same frequency and the same listening condition, :
hl = hearing.age_threshold(65, "male", 0.5).median # dB HL, the §1 medianfree = hl + hearing.reference_threshold("free-field")diffuse = hl + hearing.reference_threshold("diffuse-field")print(hl[8].round(1), free[8].round(1), diffuse[8].round(1)) # 26.2 20.8 22.4The 65-year-old man’s median 26.2 dB HL at 4 kHz is a sound pressure level of 20.8 dB under frontal free-field listening and 22.4 dB in a diffuse field: the same ear needs 1.6 dB less pressure in the free field, because head diffraction and the ear-canal resonance give it more gain there. Three things make that addition legitimate, and all three belong in the report. The ISO 7029 output is a deviation from the median 18-year-old, and it is a hearing threshold level in dB HL only insofar as the reference zero is that same median — ISO 7029 clause 1 says exactly this, and its NOTE 2 warns that the two do not always coincide, because the reference zeros were established on subjects up to 25 or 30 years old whose hearing is on average slightly worse. The two standards also describe different listening conditions (ISO 7029 monaural through earphones, ISO 389-7 binaural in a sound field), so the sum estimates the field level that ear would need rather than reproducing a measurement. And the field is a listening condition, not a measurement option: pick the one that matches how the sound actually reaches the listener, and never mix a diffuse-field threshold with a free-field speech spectrum in the same calculation.
Show the code for this figure
import matplotlib.pyplot as pltfrom phonometry import hearingfrom phonometry.hearing import AUDIOMETRIC_FREQUENCIES as f
# One line for the age distribution:hearing.age_threshold(70, "male", 0.5).plot()plt.show()
# By hand, both panels:fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))for age in (20, 40, 60, 80): r = hearing.age_threshold(age, "male", 0.5) ax1.plot(f, r.median, "o-", label=f"{age} yr")ax1.set_xscale("log"); ax1.invert_yaxis(); ax1.legend()
ax2.plot(f, hearing.reference_threshold("free-field"), "o-", label="Free-field")ax2.plot(f, hearing.reference_threshold("diffuse-field"), "s--", label="Diffuse-field")ax2.set_xscale("log"); ax2.legend()plt.show()The AgeThresholdResult carries the median, the spread_upper and
spread_lower, and the threshold at the requested fractile, and its
.plot() draws the median with the 10–90 % band. The noise-induced permanent
threshold shift of ISO 1999, which adds a noise component on top of this age
component, is the subject of the
noise-induced hearing loss guide.
What this guide covers
Section titled “What this guide covers”Covered
ISO 7029:2017’s age model: the median power-law deviation from age 18 (clause 4.2, Table 1), the asymmetric half-Gaussian spreads and (clause 4.3, Tables 2–5), and the population-fractile calculation of clause 4.4, all implemented by
age_threshold(age, sex, fractile). ISO 389-7:2005 Table 1’s free-field and diffuse-field reference threshold of hearing at the eleven audiometric frequencies, returned byreference_threshold(field), together with the clause 1 listening conditions that define it.Not covered
ISO 1999:2013 clause 6.1 Formula (1) combines this age threshold with a noise-induced shift into a real audiogram. That combination is implemented, by
htlan, but it is documented in the noise-induced hearing loss guide rather than here; this page stops at the age component. Of ISO 389-7:2005, this module returns only the eleven audiometric rows of Table 1. The other 27 — the third octaves from 20 Hz to 100 Hz, the intermediate third octaves between the audiometric points, and the extended high frequencies from 9 kHz to 18 kHz — are not carried, and neither is Amendment 1:2016, so low-frequency and extended-high-frequency work has to read the table itself. The earphone reference zeros of ISO 389-1/-2/-8, the sound-field audiometric procedure of ISO 8253-2, and how the ISO 389-7 values were established, are not implemented.
See also
Section titled “See also”- Noise-induced hearing loss: the ISO 1999 model that adds the noise component on top of this age component.
- Speech Intelligibility Index: a raised threshold as an input, and what it costs in speech audibility.
- Loudness: the ISO 226:2023 threshold of hearing, the free-field pure-tone counterpart of the audiometric zero of section 2.
- Occupational noise exposure: the ISO 9612 daily exposure level that drives the noise component.
- API reference:
hearing.threshold. - Theory: Hearing thresholds and presbycusis: the ISO 389-7 reference thresholds and the ISO 7029 age statistics, and why the two are different quantities.
References
Section titled “References”- International Organization for Standardization. (2005). Acoustics — Reference zero for the calibration of audiometric equipment — Part 7: Reference threshold of hearing under free-field and diffuse-field listening conditions (ISO 389-7:2005). The audiometric zero of section 2 (Table 1), implemented here through its European adoption EN ISO 389-7:2006.
- International Organization for Standardization. (2017). Acoustics — Statistical distribution of hearing thresholds related to age and gender (ISO 7029:2017). The age model of section 1: the median power law (clause 4.2, Table 1), the asymmetric spread around the median (clause 4.3, Tables 2–5) and the fractile machinery and its application (clause 4.4).