loudness_zwtv#

loudness_zwtv(signal, fs, field_type='free')[source]#

Returns the loudness value from a time signal

This function computes the acoustic loudness according to Zwicker method for time-varying signals (ISO.532-1:2017).

Parameters:
  • signal (numpy.array) – A time signal values [Pa].

  • fs (integer) – Sampling frequency, can be omitted if the input is a DataTime object. Default to None

  • field_type ({'free', 'diffuse'}) – Type of soundfield. Default is ‘free’

  • Outputs

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

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_zwst

Loudness computation for a stationary time signal

loudness_zwst_perseg

Loudness computation by time-segment

loudness_zwst_freq

Loudness computation from a sound spectrum

Notes

For each time frame considered, 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. The calculation includes the mutual effects that a time window can have on its neighbors.

\[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_zwtv
>>> 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_zwtv(stimulus, fs)
>>> plt.plot(time_axis, N)
>>> plt.xlabel("Time [s]")
>>> plt.ylabel("Loudness [Sone]")

(Source code, png, hires.png, pdf)

../../_images/mosqito-sq_metrics-loudness-loudness_zwtv-loudness_zwtv-1.png