# refmap-psychoacoustics

> 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/projects/refmap-psychoacoustics.html

Research code of the REFMAP project at the University of Salford, in MATLAB with Python ports. Implements ECMA-418-2:2025 loudness, tonality and roughness, and also sharpness, impulsiveness, psychoacoustic annoyance and aural detectability models.

- **Repository:** https://github.com/acoustics-code-salford/refmap-psychoacoustics
- **Language:** MATLAB, Python
- **Kind:** Research code (Code published with a study, a thesis or a student project, to run or adapt; not packaged as a library.)
- **Group:** established (Described in a publication, used by others, or written by the authors of the model, with more than a year of history.)
- **Licence:** GPL-3.0 — The licences disagree: the LICENSE file holds the GPL-3.0 text, while pyproject.toml declares "AGPL-3.0-only". Neither says whether later GPL versions are allowed.
- **Latest release:** no release
- **Last commit:** 2026-10-14 (active)
- **GitHub stars:** 23
- **Maintainers:** Mike Lotinga
- **AI assistance:** not stated
- **Paper:** Lotinga, M. J. B., Torjussen, M., & Felix Greco, G. (2025). Verified implementations of the Sottek psychoacoustic Hearing Model standardised sound quality metrics (ECMA-418-2 loudness, tonality and roughness). *Forum Acusticum / Euronoise 2025*, Málaga. https://doi.org/10.61782/fa.2025.0951
- **How to cite:** The README asks for "Lotinga, M.J.B. (2026). refmap-psychoacoustics. GitHub." with the repository URL; the ECMA-418-2 code is described in the paper above. The repository has a [CITATION.cff](https://github.com/acoustics-code-salford/refmap-psychoacoustics/blob/main/citation.cff) file. Name the version or commit you used.
- **Entry checked:** 2026-10-07

## What it implements

| Metric | Edition | Functions | Status | Validation (as stated) | Notes |
|---|---|---|---|---|---|
| [Sottek Hearing Model loudness](https://zhenxianli.github.io/LISQM/metrics/loudness-ecma-418-2.html) | [ECMA-418-2:2025 (4th ed.)](https://ecma-international.org/wp-content/uploads/ECMA-418-2_4th_edition_june_2025.pdf) (binaural and specific loudness) | `acousticSHMLoudness`, `acousticSHMLoudnessFromComponent` | available | compared with ArtemiS SUITE (HEAD acoustics) | — |
| [Sharpness](https://zhenxianli.github.io/LISQM/metrics/sharpness.html) | [DIN 45692:2009](https://www.dinmedia.de/en/standard/din-45692/117635111) (DIN 45692 weighting applied to ECMA-418-2 loudness) | `acousticSharpnessSHM`, `acousticSharpFromSHMLoud` | available | not stated | The DIN 45692 weighting is the option `widmann`; Aures (the default) and von Bismarck weightings are also offered. DIN 45692 itself is defined on Zwicker specific loudness. A further variant works from a Zwicker-based quasi-loudness (`acousticSharpFromQuasiLoud`). An inaccuracy in the Aures weighting was fixed on 2026-09-18. |
| [Sottek Hearing Model roughness](https://zhenxianli.github.io/LISQM/metrics/roughness-ecma-418-2.html) | [ECMA-418-2:2025 (4th ed.)](https://ecma-international.org/wp-content/uploads/ECMA-418-2_4th_edition_june_2025.pdf) | `acousticSHMRoughness` | available | compared with ArtemiS SUITE (HEAD acoustics) | — |
| [Sottek Hearing Model tonality](https://zhenxianli.github.io/LISQM/metrics/tonality-ecma-418-2.html) | [ECMA-418-2:2025 (4th ed.)](https://ecma-international.org/wp-content/uploads/ECMA-418-2_4th_edition_june_2025.pdf) | `acousticSHMTonality` | available | compared with ArtemiS SUITE (HEAD acoustics) | — |
| [Psychoacoustic annoyance](https://zhenxianli.github.io/LISQM/metrics/psychoacoustic-annoyance.html) | [Di et al. (2016)](https://doi.org/10.1016/j.apacoust.2015.12.006) (Python, from precomputed metric values) | `diPA` | available | not stated | — |
| [Psychoacoustic annoyance](https://zhenxianli.github.io/LISQM/metrics/psychoacoustic-annoyance.html) | [More (2010)](https://docs.lib.purdue.edu/dissertations/AAI3453255) (Python, from precomputed metric values) | `morePA` | available | not stated | — |
| [Psychoacoustic annoyance](https://zhenxianli.github.io/LISQM/metrics/psychoacoustic-annoyance.html) | [Widmann (1992)](https://zhenxianli.github.io/LISQM/standards.html#ref-widmann-1992) | `acousticPsychAnnoy`, `widmannPA` | available | standard or paper data | The MATLAB header names the model Widmann (1992), "commonly misattributed to Zwicker". The Python `widmannPA` takes precomputed metric values. |
| [Aural detectability](https://zhenxianli.github.io/LISQM/metrics/aural-detectability.html) | [Rizzi et al. (2025)](https://doi.org/10.2514/1.C038188) (MATLAB and Python) | `auralDetectability`, `aural_detect` | available | not stated | The same functions; the README cites this paper for the NASA development of the model. |
| [Aural detectability](https://zhenxianli.github.io/LISQM/metrics/aural-detectability.html) | [Fidell et al. (1974)](https://doi.org/10.1177/001872087401600405) (MATLAB and Python) | `auralDetectability`, `auralDetectFromLeq`, `aural_detect`, `aural_detect_from_lzeqt` | available | not stated | Code headers describe the Fidell, Pearsons & Bennett (1974) model as "developed further by NASA" and cite "Rizzi, SA et al, 2024"; the README cites Rizzi et al. (2025), *Journal of Aircraft*, doi:10.2514/1.C038188. |

## How it was validated

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

- [Sottek Hearing Model loudness](https://zhenxianli.github.io/LISQM/metrics/loudness-ecma-418-2.html), ECMA-418-2:2025 (4th ed.): compared with ArtemiS SUITE (HEAD acoustics)
  - MATLAB and Python verified against HEAD acoustics ArtemiS v17.1 for a 1 kHz tone at 40 dB SPL, a 1 kHz tone amplitude-modulated at 70 Hz at 60 dB SPL and a 30 s binaural street recording.
  - The audio and reference results are on Zenodo (doi:10.5281/zenodo.18849587).
- [Sottek Hearing Model roughness](https://zhenxianli.github.io/LISQM/metrics/roughness-ecma-418-2.html), ECMA-418-2:2025 (4th ed.); [Sottek Hearing Model tonality](https://zhenxianli.github.io/LISQM/metrics/tonality-ecma-418-2.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.
- [Psychoacoustic annoyance](https://zhenxianli.github.io/LISQM/metrics/psychoacoustic-annoyance.html), Widmann (1992): standard or paper data
  - A validation script (`validation/metrics/mlab/acousticPsychAnnoyValidation.m`) compares the MATLAB version with values from Widmann (1992).

Not stated for Sharpness · DIN 45692:2009; Psychoacoustic annoyance · Di et al. (2016); Psychoacoustic annoyance · More (2010); Aural detectability · Rizzi et al. (2025); Aural detectability · Fidell et al. (1974).

## Notes

- Its MATLAB ECMA-418-2 code is the origin of SQAT's ECMA-418-2 functions, of the Python package sottek-hearing-model, and through SQAT of MetaSona's ECMA-418-2 kernels. The Python functions `shm_loudness_ecma`, `shm_tonality_ecma` and `shm_roughness_ecma` in this repository import parts of the sottek-hearing-model package, so they are listed under that package rather than here.
- The Python package defined in pyproject.toml (refmap-psychoacoustics 0.1.0) is not on PyPI.
- Tonality has an optional tonal annoyance weighting after Sottek & Becker (2019), which is not part of ECMA-418-2.
- Further metrics without an entry in this list: partial loudness and partial tonality of a target in a masker ("based on ECMA-418-2:2025", an extension of the standard), quasi-loudness from the spectral elements of ISO 532-1 with optional ISO 532-3:2023 or ECMA-418-2:2025 ear filters, tonal sharpness, and impulsiveness after Willemsen & Rao (2010) from ISO 532-1:2017 or ECMA-418-2:2025 loudness.
- The Python code also has annoyance models after Willemsen et al. (2010), Torija et al. (2022) and Boucher et al. (2024), which have no reference entry in this list.
- Also contains listening-test apps and analysis notebooks.
- sottek-hearing-model's fluctuation strength was translated from `acousticSHMFluctuation.m`, which its verification report places in this repository; the file is not on the `main` branch (checked 2026-10-07).

## Before you rely on it

- The README calls it "'work in progress' code for a research project. It is not a completed package or code library."
- Some code comments still cite clauses of "ECMA 418-2:2022".

## Sources

- https://github.com/acoustics-code-salford/refmap-psychoacoustics
- https://github.com/acoustics-code-salford/refmap-psychoacoustics/blob/main/README.md
- https://github.com/acoustics-code-salford/refmap-psychoacoustics/blob/main/validation/ECMA-418-2/README.md
- https://github.com/acoustics-code-salford/refmap-psychoacoustics/blob/main/pyproject.toml
- https://github.com/acoustics-code-salford/refmap-psychoacoustics/blob/main/LICENSE
- https://doi.org/10.5281/zenodo.18849587
- https://pypi.org/project/sottek-hearing-model/
