Sharpness (DIN 45692, Aures, von Bismarck)
Sharpness is the weighted first moment of specific loudness along the critical-band rate, with a weighting that emphasises high frequencies. DIN 45692:2009 standardises the weighting and a test procedure, using Zwicker specific loudness (ISO 532-1 / DIN 45631). Most implementations also offer the weightings of von Bismarck (1974) and Aures (1985).
The current edition is DIN 45692:2009. Open-source implementations of it:
- Python MoSQITo, phonometry new, pySQAT developing, PsychoacousticParametersMeasurer legacy
- MATLAB SQAT, refmap-psychoacoustics (also Python)
- C MetaSona new (also Python)
- C++ SoundPalette new
- C# Mosqito.NET new
- Rust Kirin Hypha new
- Julia PsychoacousticMetrics.jl new
Earlier editions or related models: AARAE (MATLAB; Fastl & Zwicker (2007); from the specific loudness of LoudnessCF) and Swift & Gee codes (MATLAB; legacy, no commit since 2020-01; Swift & Gee (2017); from Moore–Glasberg specific loudness, stationary and time-varying).
Editions and who implements them
| Date | Edition | Status | What changed | Implemented by |
|---|---|---|---|---|
| 2017 | Swift & Gee (2017) | published | — | Swift & Gee codes legacy |
| 2009-08 | DIN 45692:2009 | current | Standardised weighting and test procedure; no revision announced. | SQAT, MoSQITo, refmap-psychoacoustics, MetaSona new, Kirin Hypha new, Mosqito.NET new, phonometry new, PsychoacousticMetrics.jl new, SoundPalette new, pySQAT developing, PsychoacousticParametersMeasurer legacy |
| 2007 | Fastl & Zwicker (2007) | published | Zwicker & Fastl weighting as given in the textbook. | AARAE |
| 1985 | Aures (1985b) | published | Weighting that depends on total loudness. | — |
| 1974 | von Bismarck (1974) | published | Original sharpness weighting. | — |
Project map
The project map, with only the lines for sharpness between the projects listed for it. Agreement between a project and the code it was ported or adapted from only checks the port.
- ported or adapted from another project
- used at run time
- results checked against
- same contributor
- SQAT SQAT, MoSQITo, and sottek-hearing-model
- legacy legacy project
Scroll the picture sideways.
Implementations
| Project | Edition | Functions | Validation (as stated) | Notes |
|---|---|---|---|---|
| SQAT MATLAB | DIN 45692:2009 DIN 45692 weighting, plus von Bismarck and Aures options; since v1.0 | Sharpness_DIN45692, Sharpness_DIN45692_from_loudness, Sharpness_DIN45692_from_wavfile | standard or paper data | — |
| MoSQITo Python | DIN 45692:2009 weightings: DIN 45692, Aures, von Bismarck, Fastl; since 1.0.2 | sharpness_din_st, sharpness_din_tv, sharpness_din_perseg, sharpness_din_from_loudness, sharpness_din_freq | standard or paper data (outcome not stated) | — |
| refmap-psychoacoustics MATLAB Python | 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. |
| AARAE MATLAB | Fastl & Zwicker (2007) from the specific loudness of LoudnessCF | sharpness_Fastl | not stated | The header describes a weighting fitted to data in Zwicker & Fastl's Psychoacoustics: Facts and Models (edition not stated), names the method "Fastl (1991)" and credits Claire Churchill (2004). |
| MetaSona C Python | DIN 45692:2009 from specific loudness; since 0.1.0 | sharpness_din45692 | not stated | new |
| Kirin Hypha Rust | DIN 45692:2009 from the time-varying specific loudness; shown in the plug-in; since 1.0.0 | kirin_measure::phase_d::sharpness | compared with MoSQITo (its source) | new |
| Mosqito.NET C# | DIN 45692:2009 weightings: DIN 45692, Aures, von Bismarck, Fastl | Sq.SharpnessDinSt, Sq.SharpnessDinTv, Sq.SharpnessDinPerSeg, Sq.SharpnessDinFreq | compared with MoSQITo (its source) | new |
| phonometry Python | DIN 45692:2009 also the informative Aures and von Bismarck variants; since 3.1.0 | sharpness_din, sharpness_din_from_specific | standard or paper data | new |
| PsychoacousticMetrics.jl Julia | DIN 45692:2009 weightings: DIN 45692 (default), Aures, von Bismarck, Fastl; from a ZwickerLoudness.jl result; since 0.2.0 | sharpness | standard or paper data also compared with MoSQITo | new Uses ZwickerLoudness.jl. |
| SoundPalette C++ | DIN 45692:2009 from time-averaged specific loudness; since v0.5.0 | sp::compute_psycho | compared with MoSQITo | new source-available |
| pySQAT Python | DIN 45692:2009 | Sharpness_DIN45692, Sharpness_DIN45692_from_loudness | compared with SQAT (its source) | developing no licence |
| Swift & Gee codes MATLAB | Swift & Gee (2017) from Moore–Glasberg specific loudness, stationary and time-varying | stationaryLoudness, Glasberg_loudness | not stated | legacy |
| PsychoacousticParametersMeasurer Python | DIN 45692:2009 | calc_sharpness | not stated | legacy no licence The file header says "Sharpness DIN 45692"; the function also returns the von Bismarck and Aures variants. |
Projects in bold and other established projects come first, then newly released, developing and legacy ones. Validation is what each project says about its own testing. The details are below, and the kinds of evidence are explained on the About page. The project map above shows which project was ported or adapted from which.
Also available through tools that call one of these implementations: rota-order (via MoSQITo, DIN 45692:2009), PsychoBox (via MoSQITo, DIN 45692:2009), and Soundscapy (via MoSQITo, DIN 45692:2009).
See also: Zwicker loudness (ISO 532-1, DIN 45631).
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. Kinds of evidence.
- SQAT · DIN 45692:2009
standard or paper data
- Checked with the narrowband and broadband test signals of DIN 45692.
- MoSQITo · DIN 45692:2009
standard or paper data (outcome not stated)
- Validation scripts use the DIN 45692 test signals; the documentation marks it as validated.
- Kirin Hypha new · DIN 45692:2009
compared with MoSQITo (its source)
Ported or adapted from MoSQITo. It was compared with the code it was ported from, which checks the port only.
- Tests assert agreement with MoSQITo within 0.05 acum.
- Mosqito.NET new · DIN 45692:2009
compared with MoSQITo (its source)
Ported or adapted from MoSQITo. It was compared with the code it was ported from, which checks the port only.
- Every public function is compared with the output of Python MoSQITo for seven WAV files (three of them ISO 532-1 test signals), within 1 % (0.5 dB for levels); MoSQITo's unit tests are ported too.
- phonometry new · DIN 45692:2009
standard or paper data
- Checked with the DIN 45692 reference signal and Tables A.2 and A.3.
- PsychoacousticMetrics.jl new · DIN 45692:2009
standard or paper data also compared with MoSQITo
- Tested against all 41 reference signals of DIN 45692:2009 chapter 6 (21 narrowband, 20 broadband) within the standard's tolerance of ±max(5 %, 0.05 acum).
- Cross-checked against MoSQITo for all four weightings.
- Total loudness N is computed as the Riemann sum over the 240-bin specific loudness (
0.1 * sum), not taken fromZwickerResult.loudness(see thesharpnessdocstring).
- SoundPalette new · DIN 45692:2009
compared with MoSQITo
- Compared with MoSQITo 1.2.1 (tolerance ±5 %).
- rota-order new via MoSQITo · DIN 45692:2009 (through MoSQITo's sharpness_din_from_loudness)
own tests only
- Tests, which run only where MoSQITo is installed (the project's continuous integration does not install it), check that the wrapper returns what a direct call of MoSQITo gives, also when the sharpness is computed from an earlier loudness result.
- rota-order new via SQAT · DIN 45692:2009 (through SQAT v2.0's Sharpness_DIN45692_from_loudness 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 developing · DIN 45692:2009
compared with SQAT (its source)
Ported or adapted from SQAT. It was compared with the code it was ported from, which checks the port only.
- Compared with SQAT v1.3, run in MATLAB, by
validation/FINAL_VAL.py; the generated reports are not committed.
- Compared with SQAT v1.3, run in MATLAB, by
Not stated by refmap-psychoacoustics, AARAE, MetaSona, Swift & Gee codes, PsychoacousticParametersMeasurer, PsychoBox, and Soundscapy.
Before you compare numbers
Implementations of the same metric can give different numbers without either being wrong. Check these choices first.
- Weighting. The DIN 45692, Aures and von Bismarck weightings give different values for the same sound, and Aures' weighting depends on loudness. Many tools offer several; check which one is used (RefMap's default is Aures).
- Loudness input. Sharpness is computed from Zwicker specific loudness, so the loudness choices (sound field, calibration, sample rate) carry over. Sharpness from another loudness model, such as ECMA-418-2 (RefMap) or Moore–Glasberg (Swift & Gee), is a different quantity.
What the projects state:
- SQAT
- Statistics such as N5 take the nearest rank of the sorted time series, without interpolation (
get_exceeded_value), and leave out the firsttime_skipseconds of the signal.
- Statistics such as N5 take the nearest rank of the sorted time series, without interpolation (
- MetaSona new
- 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 new
- The method
vs_rpmof a wrapper's result bins it along rpm after leaving out the start of the signal: by default it takes in each speed bin the 95th percentile of the loudness (N5), the median of the sharpness and the 90th percentile of the roughness, after 0.6 s for loudness and sharpness and 1.5 s for roughness. Keyword arguments override these choices. - Input in any unit is turned into sound pressure in Pa by an explicit calibration factor and resampled to 48 kHz.
- The method
- Swift & Gee codes legacy
- The code works at 32 kHz; other rates are resampled with the Signal Processing Toolbox's
resample.
- The code works at 32 kHz; other rates are resampled with the Signal Processing Toolbox's
References
- von Bismarck, G. (1974). Sharpness as an attribute of the timbre of steady sounds. Acustica, 30(3), 159–172. https://www.ingentaconnect.com/contentone/dav/aaua/1974/00000030/00000003/art00006
- Aures, W. (1985). Berechnungsverfahren für den sensorischen Wohlklang beliebiger Schallsignale [A model for calculating the sensory euphony of various sounds]. Acustica, 59, 130–141.
- Fastl, H., & Zwicker, E. (2007). Psychoacoustics: Facts and models (3rd ed.). Springer. https://doi.org/10.1007/978-3-540-68888-4
- DIN 45692:2009. Messtechnische Simulation der Hörempfindung Schärfe (Measurement technique for the simulation of the auditory sensation of sharpness). https://www.dinmedia.de/en/standard/din-45692/117635111
- Swift, S. H., & Gee, K. L. (2017). Extending sharpness calculation for an alternative loudness metric input. The Journal of the Acoustical Society of America, 142(6), EL549. https://doi.org/10.1121/1.5016193