# Tonality from the Sottek Hearing Model (ECMA-418-2)

> Part of [LISQM](https://zhenxianli.github.io/LISQM/) (List of Implementations of Sound Quality Metrics), a list of open-source implementations of psychoacoustic metrics. Data as of 2026-10-28. Web page: https://zhenxianli.github.io/LISQM/metrics/tonality-ecma-418-2.html

**Quantity:** Tonality · **Unit:** tu_HMS · **Also known as:** ECMA-418-2 tonality, psychoacoustic tonality, tu_HMS, Sottek tonality, SHM tonality

Psychoacoustic tonality from the Sottek Hearing Model, Clause 6 of ECMA-418-2, with specific tonality and tonal frequency over time. The method came from ECMA-74 (17th edition, 2019) when ECMA-418-2 was first published in 2020.

The current edition is ECMA-418-2:2025 (4th ed.). Open-source implementations of it: **[SQAT](https://zhenxianli.github.io/LISQM/projects/sqat.html)** (MATLAB), **[sottek-hearing-model](https://zhenxianli.github.io/LISQM/projects/sottek-hearing-model.html)** (Python), [refmap-psychoacoustics](https://zhenxianli.github.io/LISQM/projects/refmap-psychoacoustics.html) (MATLAB, Python), [MetaSona](https://zhenxianli.github.io/LISQM/projects/metasona.html) (C, Python; newly released, not yet seen to be widely used; mono or stereo), and [phonometry](https://zhenxianli.github.io/LISQM/projects/phonometry.html) (Python; newly released, not yet seen to be widely used; mono only). Implementations of earlier editions or related models: **[SQAT](https://zhenxianli.github.io/LISQM/projects/sqat.html)** (MATLAB; ECMA-418-2:2024 (3rd ed.)).

## Editions and who implements them

| Date | Edition | Status | What changed | Implemented by |
|---|---|---|---|---|
| 2025-06 | [ECMA-418-2:2025 (4th ed.)](https://ecma-international.org/wp-content/uploads/ECMA-418-2_4th_edition_june_2025.pdf) | current | Hearing-model and conformance updates (48 kHz sampling). | **[SQAT](https://zhenxianli.github.io/LISQM/projects/sqat.html)**, **[sottek-hearing-model](https://zhenxianli.github.io/LISQM/projects/sottek-hearing-model.html)**, [refmap-psychoacoustics](https://zhenxianli.github.io/LISQM/projects/refmap-psychoacoustics.html), [MetaSona](https://zhenxianli.github.io/LISQM/projects/metasona.html), [phonometry](https://zhenxianli.github.io/LISQM/projects/phonometry.html) |
| 2024-12 | [ECMA-418-2:2024 (3rd ed.)](https://ecma-international.org/wp-content/uploads/ECMA-418-2_3rd_edition_december_2024.pdf) | superseded | Diffuse-field outer and middle ear filter added (affects all metrics); refinements mainly to roughness. | **[SQAT](https://zhenxianli.github.io/LISQM/projects/sqat.html)** |
| 2022-12 | [ECMA-418-2:2022 (2nd ed.)](https://ecma-international.org/wp-content/uploads/ECMA-418-2_2nd_edition_december_2022.pdf) | superseded | Refined calculation. | — |
| 2020-12 | [ECMA-418-2:2020 (1st ed.)](https://ecma-international.org/wp-content/uploads/ECMA-418-2_1st_edition_december_2020.pdf) | superseded | Clause 6 tonality. | — |
| 2019-12 | [ECMA-74:2019 (17th ed.)](https://ecma-international.org/publications-and-standards/standards/ecma-74/) | superseded | Hearing model and tonality before ECMA-418-2 existed. | — |

## Project map

The lines of the project map for Sottek Hearing Model tonality only, between the projects listed for it (the whole map: https://zhenxianli.github.io/LISQM/projects/map.md). Agreement between a project and the code it was ported or adapted from only checks the port.

### Ported or adapted from another project

- From **[SQAT](https://zhenxianli.github.io/LISQM/projects/sqat.html)**: [MetaSona](https://zhenxianli.github.io/LISQM/projects/metasona.html) (ECMA-418-2:2025 (4th ed.))

### The author's own code

- From [refmap-psychoacoustics](https://zhenxianli.github.io/LISQM/projects/refmap-psychoacoustics.html) (Mike Lotinga): **[SQAT](https://zhenxianli.github.io/LISQM/projects/sqat.html)** (ECMA-418-2:2025 (4th ed.) and ECMA-418-2:2024 (3rd ed.)); **[sottek-hearing-model](https://zhenxianli.github.io/LISQM/projects/sottek-hearing-model.html)** (ECMA-418-2:2025 (4th ed.))

### Used at run time

- [rota-order](https://zhenxianli.github.io/LISQM/projects/rota-order.html) calls **[sottek-hearing-model](https://zhenxianli.github.io/LISQM/projects/sottek-hearing-model.html)** (ECMA-418-2:2025 (4th ed.))
- [rota-order](https://zhenxianli.github.io/LISQM/projects/rota-order.html) calls **[SQAT](https://zhenxianli.github.io/LISQM/projects/sqat.html)** (ECMA-418-2:2025 (4th ed.))
- [pySQAT](https://zhenxianli.github.io/LISQM/projects/pysqat.html) calls **[sottek-hearing-model](https://zhenxianli.github.io/LISQM/projects/sottek-hearing-model.html)** (ECMA-418-2:2025 (4th ed.))

### Same contributor

- **[SQAT](https://zhenxianli.github.io/LISQM/projects/sqat.html)** and **[sottek-hearing-model](https://zhenxianli.github.io/LISQM/projects/sottek-hearing-model.html)** (Mike Lotinga)

On the map without a line, as no relation to another project listed for Sottek Hearing Model tonality is recorded for them: [phonometry](https://zhenxianli.github.io/LISQM/projects/phonometry.html).

## Implementations

| Project | Language | Edition | Functions | Validation (as stated) | Notes |
|---|---|---|---|---|---|
| **[SQAT](https://zhenxianli.github.io/LISQM/projects/sqat.html)** | MATLAB | [ECMA-418-2:2025 (4th ed.)](https://ecma-international.org/wp-content/uploads/ECMA-418-2_4th_edition_june_2025.pdf) (since v2.0) | `Tonality_ECMA418_2` | compared with ArtemiS SUITE (HEAD acoustics) | — |
| **[SQAT](https://zhenxianli.github.io/LISQM/projects/sqat.html)** | MATLAB | [ECMA-418-2:2024 (3rd ed.)](https://ecma-international.org/wp-content/uploads/ECMA-418-2_3rd_edition_december_2024.pdf) (since v1.3) | `Tonality_ECMA418_2` | compared with ArtemiS SUITE (HEAD acoustics) | In v1.3; v2.0 follows the 4th edition. |
| **[sottek-hearing-model](https://zhenxianli.github.io/LISQM/projects/sottek-hearing-model.html)** | Python | [ECMA-418-2:2025 (4th ed.)](https://ecma-international.org/wp-content/uploads/ECMA-418-2_4th_edition_june_2025.pdf) (since 0.1.9) | `shm_tonality_ecma` | standard or paper data (reference signal and one recording); also compared with ArtemiS SUITE (HEAD acoustics) | Optional experimental tonal-annoyance weighting (Sottek & Becker, 2019) since 0.1.14. |
| [refmap-psychoacoustics](https://zhenxianli.github.io/LISQM/projects/refmap-psychoacoustics.html) | MATLAB, Python | [ECMA-418-2:2025 (4th ed.)](https://ecma-international.org/wp-content/uploads/ECMA-418-2_4th_edition_june_2025.pdf) | `acousticSHMTonality` | compared with ArtemiS SUITE (HEAD acoustics) | — |
| [MetaSona](https://zhenxianli.github.io/LISQM/projects/metasona.html) | C, Python | [ECMA-418-2:2025 (4th ed.)](https://ecma-international.org/wp-content/uploads/ECMA-418-2_4th_edition_june_2025.pdf) (mono or stereo; since 0.2.0) | `tonality_ecma`, `ecma_tonal_analysis` | compared with SQAT (its source) | Newly released project, not yet seen to be widely used. |
| [phonometry](https://zhenxianli.github.io/LISQM/projects/phonometry.html) | Python | [ECMA-418-2:2025 (4th ed.)](https://ecma-international.org/wp-content/uploads/ECMA-418-2_4th_edition_june_2025.pdf) (mono only; since 3.1.0) | `tonality_ecma` | standard or paper data (calibration signal only) | Newly released project, not yet seen to be widely used. |

Also available through tools that call one of these implementations: [rota-order](https://zhenxianli.github.io/LISQM/projects/rota-order.html) (via sottek-hearing-model, ECMA-418-2:2025 (4th ed.)) and [pySQAT](https://zhenxianli.github.io/LISQM/projects/pysqat.html) (via sottek-hearing-model, ECMA-418-2:2025 (4th ed.)).

**See also:** [Tonality, Aures/Terhardt model](https://zhenxianli.github.io/LISQM/metrics/tonality-aures.html), [Tone-to-noise ratio and prominence ratio (ECMA-418-1)](https://zhenxianli.github.io/LISQM/metrics/tone-to-noise-prominence-ratio.html), [Loudness from the Sottek Hearing Model (ECMA-418-2)](https://zhenxianli.github.io/LISQM/metrics/loudness-ecma-418-2.html)

## How they were validated

As reported by each project; LISQM has not run the code. Two implementations that agree can still share the same error.

- **[SQAT](https://zhenxianli.github.io/LISQM/projects/sqat.html)**, ECMA-418-2:2025 (4th ed.): compared with ArtemiS SUITE (HEAD acoustics)
  - Ported or adapted from [refmap-psychoacoustics](https://zhenxianli.github.io/LISQM/projects/refmap-psychoacoustics.html) (the author's own code).
  - Checked for the 4th edition against reference results from HEAD acoustics ArtemiS SUITE 17.1 (named in the source of SQAT's validation page) for a binaural recording of a train station.
  - A verification against Annex B.2 (PR #79) was merged and reverted on 2026-09-21 because the Annex B values of the 2025 edition appear to be out of date.
- **[SQAT](https://zhenxianli.github.io/LISQM/projects/sqat.html)**, ECMA-418-2:2024 (3rd ed.): compared with ArtemiS SUITE (HEAD acoustics)
  - Ported or adapted from [refmap-psychoacoustics](https://zhenxianli.github.io/LISQM/projects/refmap-psychoacoustics.html) (the author's own code).
  - Checked against reference results from HEAD acoustics ArtemiS SUITE 15.7 (named in the source of SQAT's validation page) for a binaural recording of a train station.
- **[sottek-hearing-model](https://zhenxianli.github.io/LISQM/projects/sottek-hearing-model.html)**, ECMA-418-2:2025 (4th ed.): standard or paper data (reference signal and one recording); also compared with ArtemiS SUITE (HEAD acoustics)
  - Ported or adapted from [refmap-psychoacoustics](https://zhenxianli.github.io/LISQM/projects/refmap-psychoacoustics.html) (the author's own code).
  - Unit tests check the standard's reference signal, which should give 1 tu_HMS, at 48 and 44.1 kHz.
  - RefMap's verification against ArtemiS v17.1, as for loudness.
  - **Checked by the maintainer of LISQM:** In personal use, Zhenxian LI found its results in very good agreement with those of HEAD acoustics ArtemiS SUITE. This is a personal check, not a published comparison.
- [refmap-psychoacoustics](https://zhenxianli.github.io/LISQM/projects/refmap-psychoacoustics.html), ECMA-418-2:2025 (4th ed.): compared with ArtemiS SUITE (HEAD acoustics)
  - Verified against HEAD acoustics ArtemiS v17.1 with the same three signals as loudness.
- [MetaSona](https://zhenxianli.github.io/LISQM/projects/metasona.html), ECMA-418-2:2025 (4th ed.): compared with **[SQAT](https://zhenxianli.github.io/LISQM/projects/sqat.html)** (its source)
  - Ported or adapted from **[SQAT](https://zhenxianli.github.io/LISQM/projects/sqat.html)**. It was compared with the code it was ported from, which checks the port only.
  - The project says that detailed validation and reference comparisons are kept outside the repository; the results are not published.
- [phonometry](https://zhenxianli.github.io/LISQM/projects/phonometry.html), ECMA-418-2:2025 (4th ed.): standard or paper data (calibration signal only)
  - Checked at the calibration signal only.
- [rota-order](https://zhenxianli.github.io/LISQM/projects/rota-order.html) (via sottek-hearing-model), ECMA-418-2:2025 (4th ed.) (through sottek-hearing-model's shm_tonality_ecma): own tests only
  - Tests, which run only where sottek-hearing-model is installed (the project's continuous integration does not install it), check that the wrappers return what direct calls of the package give, that one speed bin reproduces the package's single values, and that the dominant tonal frequency of a tone in noise maps to its order.
- [rota-order](https://zhenxianli.github.io/LISQM/projects/rota-order.html) (via SQAT), ECMA-418-2:2025 (4th ed.) (through SQAT v2.0's Tonality_ECMA418_2 in MATLAB): own tests only
  - Tests with a stub engine check the call passed to SQAT and the conversion of its output; the comparison with a direct SQAT call runs only where MATLAB and SQAT v2.0 are installed.
- [pySQAT](https://zhenxianli.github.io/LISQM/projects/pysqat.html) (via sottek-hearing-model), ECMA-418-2:2025 (4th ed.): compared with **[SQAT](https://zhenxianli.github.io/LISQM/projects/sqat.html)** (also ported from [refmap-psychoacoustics](https://zhenxianli.github.io/LISQM/projects/refmap-psychoacoustics.html))
  - Code ported from the same source is expected to agree, so that comparison is not an independent check.
  - Compared by `validation/FINAL_VAL.py` with the bundled SQAT v1.3 MATLAB code, which follows ECMA-418-2:2024 (3rd edition), so the comparison crosses editions.

## Before you compare numbers

Implementations of the same metric can give different numbers without either being wrong. Check these choices first.

- **Edition and start.** Compare implementations of the same edition; overall values leave out the first 304 ms, where the filters settle.
- **Tonal annoyance weighting.** RefMap and sottek-hearing-model offer an optional weighting after Sottek & Becker (2019), which is not part of ECMA-418-2; leave it off when comparing with other implementations.

What the projects state:

- **[SQAT](https://zhenxianli.github.io/LISQM/projects/sqat.html)**: Statistics take the nearest rank of the sorted time series, without interpolation (`get_exceeded_value`), and leave out the first `time_skip` seconds; the code enforces at least 304 ms (it cites ECMA-418-2:2025, Section 8.1.4).
- **[sottek-hearing-model](https://zhenxianli.github.io/LISQM/projects/sottek-hearing-model.html)**: Input at other sample rates is resampled to 48 kHz.
- [MetaSona](https://zhenxianli.github.io/LISQM/projects/metasona.html): Expects calibrated sound pressure in pascals. The C functions require 48 kHz input; the Python interface resamples other rates to 48 kHz (SciPy `resample_poly`). `time_skip_s` (default 0 s) leaves out the start of the signal from the reported frames; the computation still runs over the whole signal. Time-varying results include every complete frame, labelled at frame centres, which differs from SQAT's handling of the last frame and of time stamps.
- [rota-order](https://zhenxianli.github.io/LISQM/projects/rota-order.html): For the ECMA-418-2 metrics, `vs_rpm` takes by default the mean of the loudness and the tonality in each speed bin, the tonality only above 0.02 tu_HMS, and the 90th percentile of the roughness, after about 0.3 s (0.6 s for SQAT's tonality). Input in any unit is turned into sound pressure in Pa by an explicit calibration factor and resampled to 48 kHz.

## References

1. ECMA-74:2019 (17th ed.). Measurement of airborne noise emitted by information technology and telecommunications equipment. https://ecma-international.org/publications-and-standards/standards/ecma-74/
2. ECMA-418-2:2020 (1st ed.). Psychoacoustic metrics for ITT equipment — Part 2 (models based on human perception). https://ecma-international.org/wp-content/uploads/ECMA-418-2_1st_edition_december_2020.pdf
3. ECMA-418-2:2022 (2nd ed.). Psychoacoustic metrics for ITT equipment — Part 2 (models based on human perception). https://ecma-international.org/wp-content/uploads/ECMA-418-2_2nd_edition_december_2022.pdf
4. ECMA-418-2:2024 (3rd ed.). Psychoacoustic metrics for ITT equipment — Part 2 (methods for describing human perception based on the Sottek Hearing Model). https://ecma-international.org/wp-content/uploads/ECMA-418-2_3rd_edition_december_2024.pdf
5. ECMA-418-2:2025 (4th ed.). Psychoacoustic metrics for ITT equipment — Part 2 (methods for describing human perception based on the Sottek Hearing Model). https://ecma-international.org/wp-content/uploads/ECMA-418-2_4th_edition_june_2025.pdf
