loudness_zwst_perseg#
- loudness_zwst_perseg(signal, fs, nperseg=4096, noverlap=None, field_type='free')[source]#
Compute the loudness value per segments from a time signal
This function computes the acoustic loudness according to Zwicker method (ISO.532-1:2017) by segmentation of a stationary signal.
- Parameters:
signal (array_like) β Input time signal in [Pa].
fs (float, optional) β Sampling frequency, can be omitted if the input is a DataTimeobject. Default to None
nperseg (int, optional) β Length of each segment. Defaults to 4096.
noverlap (int, optional) β Number of points to overlap between segments. If None, noverlap = nperseg / 2. Defaults to None.
field_type ({'free', 'diffuse'}) β Type of soundfield. Default is βfreeβ
- Returns:
N (float) β Overall loudness [sones], size (Ntime,).
N_specific (numpy.ndarray) β Specific loudness [sones/bark], size (Nbark, Ntime).
bark_axis (numpy.ndarray) β Bark axis, size (Nbark,).
time_axis (numpy.ndarray) β Time axis, size (Ntime,).
Warning
- Nnumpy.array
The overall loudness array [sones], size (Ntime,).
- N_specificnumpy.ndarray
The specific loudness array [sones/bark], size (Nbark, Ntime).
- bark_axis: numpy.array
The Bark axis array, size (Nbark,).
- time_axis: numpy.array
The time axis array, size (Ntime,). The sampling frequency of the signal must be >= 48 kHz to fulfill requirements.
If the provided signal doesnβt meet the requirements, it will be resampled.
See also
loudness_zwstLoudness computation for a stationary time signal
loudness_zwst_freqLoudness computation from a sound spectrum
loudness_zwtvLoudness computation for a non-stationary time signal
Notes
For each considered segment, the total loudness \(N\) is computed as the integral of the specific loudness \(N'\) measured in sone/bark, over the Bark scale. The values of specific loudness are evaluated from third octave band levels as function of critical band rate \(z\) in Bark.
\[N=\int_{0}^{24Bark}N'(z)\textup{dz}\]Due to normative continuity, the method is in accordance with ISO 226:1987 equal loudness contours instead of ISO 226:2003, as defined in the following standards:
ISO 532:1975 (method B)
DIN 45631:1991
ISO 532-1:2017 (method 1)
References
[1]E.Zwicker and H.Fastl. Program for calculating loudness according to din 45631 (iso 532b). Journal of the Acoustical Society of Japan, 1991. URL: https://www.jstage.jst.go.jp/article/ast1980/12/1/12_1_39/_article.
[2]ISO.532-1:2017. Methods for calculating loudness, part 1 Zwicker Method. International Organization for Standardization, 2017. URL: https://www.iso.org/standard/63077.html.
Examples
>>> from mosqito.sq_metrics import loudness_zwst_perseg >>> import matplotlib.pyplot as plt >>> import numpy as np >>> fs=48000 >>> d=1 >>> dB=60 >>> time = np.arange(0, d, 1/fs) >>> f = np.linspace(1000,5000, len(time)) >>> stimulus = 0.5 * (1 + np.sin(2 * np.pi * f * time)) >>> rms = np.sqrt(np.mean(np.power(stimulus, 2))) >>> ampl = 0.00002 * np.power(10, dB / 20) / rms >>> stimulus = stimulus * ampl >>> N, N_spec, bark_axis, time_axis = loudness_zwst_perseg(stimulus, fs=fs) >>> plt.plot(time_axis, N) >>> plt.xlabel("Time [s]") >>> plt.ylabel("Loudness [Sone]")
(
Source code,png,hires.png,pdf)