refmap-psychoacoustics
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 file. Name the version or commit you used. |
| Entry checked | 7 October 2026 |
What it implements
| Metric | Edition | Functions | Validation (as stated) | Notes |
|---|---|---|---|---|
| Sottek Hearing Model loudness | ECMA-418-2:2025 (4th ed.) binaural and specific loudness | acousticSHMLoudness, acousticSHMLoudnessFromComponent | compared with ArtemiS SUITE (HEAD acoustics) | — |
| Sharpness | DIN 45692:2009 DIN 45692 weighting applied to ECMA-418-2 loudness | acousticSharpnessSHM, acousticSharpFromSHMLoud | 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 | ECMA-418-2:2025 (4th ed.) | acousticSHMRoughness | compared with ArtemiS SUITE (HEAD acoustics) | — |
| Sottek Hearing Model tonality | ECMA-418-2:2025 (4th ed.) | acousticSHMTonality | compared with ArtemiS SUITE (HEAD acoustics) | — |
| Psychoacoustic annoyance | Di et al. (2016) Python, from precomputed metric values | diPA | not stated | — |
| Psychoacoustic annoyance | More (2010) Python, from precomputed metric values | morePA | not stated | — |
| Psychoacoustic annoyance | Widmann (1992) | acousticPsychAnnoy, widmannPA | 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 | Rizzi et al. (2025) MATLAB and Python | auralDetectability, aural_detect | not stated | The same functions; the README cites this paper for the NASA development of the model. |
| Aural detectability | Fidell et al. (1974) MATLAB and Python | auralDetectability, auralDetectFromLeq, aural_detect, aural_detect_from_lzeqt | 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. Kinds of evidence.
- Sottek Hearing Model loudness · 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 · ECMA-418-2:2025 (4th ed.)
- Sottek Hearing Model tonality · 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 · Widmann (1992)
standard or paper data
- A validation script (
validation/metrics/mlab/acousticPsychAnnoyValidation.m) compares the MATLAB version with values from Widmann (1992).
- A validation script (
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_ecmaandshm_roughness_ecmain 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 themainbranch (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/