Fluctuation strength, Osses et al. model and Fastl & Zwicker formula
Fluctuation strength describes slow modulation around 4 Hz. Osses, García & Kohlrausch (2016) proposed a signal-based model; Fastl & Zwicker give a closed-form expression for modulated tones and noises. Neither is standardised. ECMA-418-2:2025 added a hearing-model method, listed on its own page.
There is no standard; the reference model is Osses et al. (2016). Open-source implementations of it:
- Python phonometry new, pySQAT developing
- MATLAB SQAT, fluctuation-strength-TUe legacy
- Julia PsychoacousticMetrics.jl new
Earlier editions or related models: phonometry (Python; newly released, not yet seen to be widely used; Fastl & Zwicker (2007); closed-form expression for amplitude-modulated noise) and PsychoacousticParametersMeasurer (Python; legacy, no commit since 2021-06; Fastl & Zwicker (2007); Zwicker & Fastl formula).
Editions and who implements them
| Date | Edition | Status | What changed | Implemented by |
|---|---|---|---|---|
| 2016 | Osses et al. (2016) | published | Signal-based model. | SQAT, phonometry new, PsychoacousticMetrics.jl new, pySQAT developing, fluctuation-strength-TUe legacy |
| 2007 | Fastl & Zwicker (2007) | published | Closed-form expression for amplitude- and frequency-modulated sounds. | phonometry new, PsychoacousticParametersMeasurer legacy |
Project map
The project map, with only the lines for fluctuation strength (Osses et al.) 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
- the author's own code
- results checked against
- SQAT SQAT, MoSQITo, and sottek-hearing-model
- legacy legacy project
Scroll the picture sideways.
Implementations
| Project | Edition | Functions | Validation (as stated) | Notes |
|---|---|---|---|---|
| SQAT MATLAB | Osses et al. (2016) since v1.0 | FluctuationStrength_Osses2016, FluctuationStrength_Osses2016_from_wavfile | standard or paper data | Alejandro Osses's FluctuationStrength_TUe.m (TU/e, 2014–2016), taken into SQAT in 2020 and modified there by Osses since 2023. |
| phonometry Python | Osses et al. (2016) since 3.1.0 | fluctuation_strength | standard or paper data also compared with SQAT | new |
| PsychoacousticMetrics.jl Julia | Osses et al. (2016) since 0.3.0 | fluctuation_strength_osses | reference code: SQAT | new |
| phonometry Python | Fastl & Zwicker (2007) closed-form expression for amplitude-modulated noise; since 3.1.0 | fluctuation_strength_am_noise | standard or paper data | new |
| pySQAT Python | Osses et al. (2016) | FluctuationStrength_Osses2016 | compared with SQAT (its source) | developing no licence |
| fluctuation-strength-TUe MATLAB | Osses et al. (2016) since 1.0 | FluctuationStrength_TUe | standard or paper data | legacy no licence |
| PsychoacousticParametersMeasurer Python | Fastl & Zwicker (2007) Zwicker & Fastl formula | acousticFluctuation, fmoddetection | not stated | legacy no licence The header cites Zwicker & Fastl, "Psychoacoustics: Facts and Models", without naming an edition. |
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.
See also: Fluctuation strength from the Sottek Hearing Model (ECMA-418-2).
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 · Osses et al. (2016)
standard or paper data
Ported or adapted from fluctuation-strength-TUe (the author's own code).
- Checked against amplitude- and frequency-modulation dependences from the literature.
- phonometry new · Osses et al. (2016)
standard or paper data also compared with SQAT
- Compared with the literature values in Table 1 of Osses et al. (2016): for amplitude-modulated 70 dB tones the Pearson correlation is about 0.98, within a factor of about 2.1 at every point. SQAT's
FluctuationStrength_Osses2016was consulted as a numeric reference for the shape of the sweep. - Validated for amplitude modulation only; a steady 1 kHz tone reads about 0.09 vacil.
- Compared with the literature values in Table 1 of Osses et al. (2016): for amplitude-modulated 70 dB tones the Pearson correlation is about 0.98, within a factor of about 2.1 at every point. SQAT's
- PsychoacousticMetrics.jl new · Osses et al. (2016)
reference code: SQAT
- Cross-checked against SQAT's
FluctuationStrength_Osses2016, run under Octave, on identical signals: 26 cases, including all 18 points of Fastl & Zwicker's AM/FM reference grid (Osses 2018 thesis, Table B.1), each reproduced to a relative tolerance of 1e-6 (measured 3e-9). - The grid stimuli are synthesised following the Osses et al. (2016) validation files that SQAT's own validation reads; the tests also check that each synthetic stimulus gives the value SQAT gives on the real file (tones to 5e-3, noise to 25 % across random draws).
- Against the published curves, 11 of the 18 points are within 30 %, and exactly those 11 are gated. The other seven are misses of the reference model itself (FM tones with a modulation frequency above 4 Hz overestimated three- to fourfold, thesis §B.4.1; the shoulder and tail points of AM tones and noise), which SQAT's own validation figures also show.
- Cross-checked against SQAT's
- phonometry new · Fastl & Zwicker (2007)
standard or paper data
- A conformance row checks Eq. (10.2) of Fastl & Zwicker for amplitude-modulated broadband noise.
- pySQAT developing · Osses et al. (2016)
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
- fluctuation-strength-TUe legacy · Osses et al. (2016)
standard or paper data
demos/demo_osses2016a.mreproduces the figures of the paper with the included stimuli (AM and FM tones, AM noise and excerpts of real sounds).
Not stated by PsychoacousticParametersMeasurer.
Before you compare numbers
Implementations of the same metric can give different numbers without either being wrong. Check these choices first.
- Sample rate. The model's envelope filters exist for 44.1 and 48 kHz: SQAT resamples other rates, PsychoacousticMetrics.jl rejects them.
- Steady sounds. The model is meant for modulated sounds; a steady tone does not give exactly zero (phonometry reports about 0.09 vacil for a 1 kHz tone).
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 (
- PsychoacousticMetrics.jl new
- Needs audio at 44.1 or 48 kHz (an error otherwise); SQAT resamples other rates itself.
References
- Fastl, H., & Zwicker, E. (2007). Psychoacoustics: Facts and models (3rd ed.). Springer. https://doi.org/10.1007/978-3-540-68888-4
- Osses Vecchi, A., García León, R., & Kohlrausch, A. (2016). Modelling the sensation of fluctuation strength. Proceedings of Meetings on Acoustics, 28, 050005. https://doi.org/10.1121/2.0000410