From e45051ef14fd2750dcb96b6a776aa6836fbbcc0d Mon Sep 17 00:00:00 2001 From: wantysal Date: Mon, 16 May 2022 13:29:04 +0200 Subject: [PATCH 01/17] [CC] added noct_synthesis to the init file to import it more easily --- mosqito/sound_level_meter/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mosqito/sound_level_meter/__init__.py b/mosqito/sound_level_meter/__init__.py index d4e1f9ce..19691338 100644 --- a/mosqito/sound_level_meter/__init__.py +++ b/mosqito/sound_level_meter/__init__.py @@ -1,3 +1,3 @@ from mosqito.sound_level_meter.noct_spectrum.noct_spectrum import ( - noct_spectrum, + noct_spectrum, noct_synthesis ) From 1dfdd10278f08d5de36b64595530ef9e5a59b6e2 Mon Sep 17 00:00:00 2001 From: wantysal Date: Mon, 16 May 2022 14:09:39 +0200 Subject: [PATCH 02/17] [CC] nth octave spectrum computation enhanced --- .../noct_spectrum/noct_synthesis.py | 35 ++++++++----------- 1 file changed, 15 insertions(+), 20 deletions(-) diff --git a/mosqito/sound_level_meter/noct_spectrum/noct_synthesis.py b/mosqito/sound_level_meter/noct_spectrum/noct_synthesis.py index 25f83fcc..f5f80d81 100644 --- a/mosqito/sound_level_meter/noct_spectrum/noct_synthesis.py +++ b/mosqito/sound_level_meter/noct_spectrum/noct_synthesis.py @@ -5,6 +5,8 @@ # Local application imports from mosqito.sound_level_meter.noct_spectrum._center_freq import _center_freq +from mosqito.sound_level_meter.noct_spectrum._filter_bandwidth import _filter_bandwidth +from mosqito.sound_level_meter.noct_spectrum._n_oct_freq_filter import _n_oct_freq_filter def noct_synthesis(spectrum, freqs, fmin, fmax, n=3, G=10, fr=1000): @@ -44,7 +46,7 @@ def noct_synthesis(spectrum, freqs, fmin, fmax, n=3, G=10, fr=1000): # Get filters center frequencies fc_vec, fpref = _center_freq(fmin=fmin, fmax=fmax, n=n, G=G, fr=fr) - nband = len(fpref) + nband = len(fc_vec) if len(spectrum.shape) > 1: nseg = spectrum.shape[1] @@ -56,24 +58,17 @@ def noct_synthesis(spectrum, freqs, fmin, fmax, n=3, G=10, fr=1000): nseg = 1 spec = np.zeros((nband)) - # Frequency resolution - # df = freqs[1:] - freqs[:-1] - # df = np.concatenate((df, [df[-1]])) - - # Get upper and lower frequencies - fu = fc_vec * 2**(1/(2*n)) - fl = fc_vec / 2**(1/(2*n)) - - for s in range(nseg): - for i in range(nband): - if len(spectrum.shape) > 1: - # index of the frequencies within the band - idx = np.where((freqs[:, s] >= fl[i]) & (freqs[:, s] < fu[i])) - spec[i, s] = np.sqrt( - np.sum(np.power(np.abs(spectrum[idx,s]), 2))) - else: - # index of the frequencies within the band - idx = np.where((freqs >= fl[i]) & (freqs < fu[i])) - spec[i] = np.sqrt(np.sum(np.abs(spectrum[idx])**2)) + fs = np.mean(freqs[1:] - freqs[:-1]) * 2 * len(spectrum) + + # Get filters center frequencies + fc_vec, fpref = _center_freq(fmin=fmin, fmax=fmax, n=n, G=G, fr=fr) + + # Compute the filters bandwidth + alpha_vec = _filter_bandwidth(fc_vec, n=n) + + # Calculation of the rms level of the signal in each band + spec = [] + for fc, alpha in zip(fc_vec, alpha_vec): + spec.append(_n_oct_freq_filter(spectrum, fs, fc, alpha)) return spec, fpref From 88fbdde30ed1b5b3525a6258e0c232bbd875f1bf Mon Sep 17 00:00:00 2001 From: wantysal Date: Mon, 16 May 2022 15:16:58 +0200 Subject: [PATCH 03/17] [CC] init file corrected --- mosqito/sound_level_meter/__init__.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mosqito/sound_level_meter/__init__.py b/mosqito/sound_level_meter/__init__.py index 19691338..e87ee5a5 100644 --- a/mosqito/sound_level_meter/__init__.py +++ b/mosqito/sound_level_meter/__init__.py @@ -1,3 +1,3 @@ -from mosqito.sound_level_meter.noct_spectrum.noct_spectrum import ( - noct_spectrum, noct_synthesis -) +from mosqito.sound_level_meter.noct_spectrum.noct_spectrum import noct_spectrum +from mosqito.sound_level_meter.noct_spectrum.noct_synthesis import noct_synthesis + From 3a830163536f82c881d58a58c1d9b326e8ccedcb Mon Sep 17 00:00:00 2001 From: wantysal <70269666+wantysal@users.noreply.github.com> Date: Mon, 16 May 2022 17:20:44 +0200 Subject: [PATCH 04/17] [CC] output as numpy.array --- mosqito/sound_level_meter/noct_spectrum/noct_synthesis.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mosqito/sound_level_meter/noct_spectrum/noct_synthesis.py b/mosqito/sound_level_meter/noct_spectrum/noct_synthesis.py index f5f80d81..323ffd2f 100644 --- a/mosqito/sound_level_meter/noct_spectrum/noct_synthesis.py +++ b/mosqito/sound_level_meter/noct_spectrum/noct_synthesis.py @@ -71,4 +71,4 @@ def noct_synthesis(spectrum, freqs, fmin, fmax, n=3, G=10, fr=1000): for fc, alpha in zip(fc_vec, alpha_vec): spec.append(_n_oct_freq_filter(spectrum, fs, fc, alpha)) - return spec, fpref + return np.array(spec), fpref From 23e70f3140a3f5a1ce33fb419da8d2df9b91eaf5 Mon Sep 17 00:00:00 2001 From: wantysal Date: Tue, 17 May 2022 21:21:54 +0200 Subject: [PATCH 05/17] [CC] return low and high frequency of each band on top of the center frequency --- mosqito/sound_level_meter/noct_spectrum/_filter_bandwidth.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mosqito/sound_level_meter/noct_spectrum/_filter_bandwidth.py b/mosqito/sound_level_meter/noct_spectrum/_filter_bandwidth.py index c0b2c677..e1835bd1 100644 --- a/mosqito/sound_level_meter/noct_spectrum/_filter_bandwidth.py +++ b/mosqito/sound_level_meter/noct_spectrum/_filter_bandwidth.py @@ -54,7 +54,7 @@ def _filter_bandwidth(fc, n=3, N=3): # Ratio of the upper and lower band-edge frequencies to the mid-band frequency alpha = (1 + np.sqrt(1 + 4 * qd ** 2)) / 2 / qd - return alpha + return alpha, f1, f2 if __name__ == "__main__": From c413ad95c1ee74655700cc9e83f0726942e5b152 Mon Sep 17 00:00:00 2001 From: wantysal Date: Tue, 17 May 2022 21:22:37 +0200 Subject: [PATCH 06/17] [CC] use sos instead of a,b when building filter for better performance --- .../sound_level_meter/noct_spectrum/_n_oct_time_filter.py | 8 ++++---- mosqito/sound_level_meter/noct_spectrum/noct_spectrum.py | 3 ++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/mosqito/sound_level_meter/noct_spectrum/_n_oct_time_filter.py b/mosqito/sound_level_meter/noct_spectrum/_n_oct_time_filter.py index 50ad8017..45773982 100644 --- a/mosqito/sound_level_meter/noct_spectrum/_n_oct_time_filter.py +++ b/mosqito/sound_level_meter/noct_spectrum/_n_oct_time_filter.py @@ -2,7 +2,7 @@ # Standard library imports import numpy as np -from scipy.signal import decimate, butter, lfilter +from scipy.signal import decimate, butter, sosfilt def _n_oct_time_filter(sig, fs, fc, alpha, N=3): @@ -29,7 +29,7 @@ def _n_oct_time_filter(sig, fs, fc, alpha, N=3): alpha : float Ratio of the upper and lower band-edge frequencies to the mid-band frequency - N : int, optional + n : int, optional Filter order. Default to 3 Outputs @@ -59,10 +59,10 @@ def _n_oct_time_filter(sig, fs, fc, alpha, N=3): w2 = fc / (fs / 2) * alpha # define filter coefficient - b, a = butter(N, [w1, w2], "bandpass", analog=False) + sos = butter(int(N), (w1, w2), "bandpass", analog=False, output='sos') # filter signal - sig_filt = lfilter(b, a, sig, axis=0) + sig_filt = sosfilt(sos, sig, axis=0) # Compute overall rms level level = np.sqrt(np.mean(sig_filt ** 2, axis=0)) diff --git a/mosqito/sound_level_meter/noct_spectrum/noct_spectrum.py b/mosqito/sound_level_meter/noct_spectrum/noct_spectrum.py index 6cce7dc8..a4b0abf6 100644 --- a/mosqito/sound_level_meter/noct_spectrum/noct_spectrum.py +++ b/mosqito/sound_level_meter/noct_spectrum/noct_spectrum.py @@ -53,11 +53,12 @@ def noct_spectrum(sig, fs, fmin, fmax, n=3, G=10, fr=1000): fc_vec, fpref = _center_freq(fmin=fmin, fmax=fmax, n=n, G=G, fr=fr) # Compute the filters bandwidth - alpha_vec = _filter_bandwidth(fc_vec, n=n) + alpha_vec, _, _ = _filter_bandwidth(fc_vec, n=n) # Calculation of the rms level of the signal in each band spec = [] for fc, alpha in zip(fc_vec, alpha_vec): + print(fc, alpha) spec.append(_n_oct_time_filter(sig, fs, fc, alpha)) return np.array(spec), fpref From 768d71e05203f62d78edb5d2a50bfe6e37f9206a Mon Sep 17 00:00:00 2001 From: wantysal Date: Tue, 17 May 2022 21:23:21 +0200 Subject: [PATCH 07/17] [CC] using sosfreqz(scipy.signal.butter) for better accuracy on both synthetic and technical signals --- .../noct_spectrum/_n_oct_freq_filter.py | 72 +++++++++---------- .../noct_spectrum/noct_synthesis.py | 41 +++++++---- 2 files changed, 59 insertions(+), 54 deletions(-) diff --git a/mosqito/sound_level_meter/noct_spectrum/_n_oct_freq_filter.py b/mosqito/sound_level_meter/noct_spectrum/_n_oct_freq_filter.py index 502fddc7..969fc83e 100644 --- a/mosqito/sound_level_meter/noct_spectrum/_n_oct_freq_filter.py +++ b/mosqito/sound_level_meter/noct_spectrum/_n_oct_freq_filter.py @@ -1,15 +1,11 @@ # -*- coding: utf-8 -*- -""" -Created on Thu Mar 10 10:00:03 2022 -@author: wantysal -""" + # Standard library imports import numpy as np -from scipy.signal import butter, freqz - +from scipy.signal import butter, sosfreqz -def _n_oct_freq_filter(spectrum, fs, fc, alpha, n=3): +def _n_oct_freq_filter(spectrum, fs, factor, fc, alpha, n=3): """ n-th octave filtering in frequency domain Designs a digital 1/3-octave filter with center frequency fc for @@ -21,12 +17,14 @@ def _n_oct_freq_filter(spectrum, fs, fc, alpha, n=3): Frequency spectrum [complex] fs : float Sampling frequency [Hz] + factor : integer + Downsampling factor fc : float Filter exact center frequency [Hz] alpha : float Ratio of the upper and lower band-edge frequencies to the mid-band frequency - N : int, optional + n : int, optional Filter order. Default to 3 Outputs @@ -35,40 +33,36 @@ def _n_oct_freq_filter(spectrum, fs, fc, alpha, n=3): Rms level of sig in the third octave band centered on fc """ - # Check for Nyquist-Shannon criteria - if fc > 0.88 * (fs / 2): - raise ValueError( - """ERROR: Design not possible. Filter center frequency shall - verify: fc <= 0.88 * (fs / 2)""" - ) - # Normalized cutoff frequencies - w1 = fc / (fs / 2) / alpha - w2 = fc / (fs / 2) * alpha + w1 = fc / (fs / 2) / alpha + w2 = fc / (fs / 2) * alpha - # define filter coefficient - b, a = butter(n, [w1, w2], "bandpass", analog=False) + # Define filter coefficient + sos = butter(n, [w1, w2], "bandpass", analog=False, output ='sos') + + # # filter signal + # if len(spectrum.shape)>1: + # level = [] + # # go into frequency domain + # w, h = freqz(b, a, worN=spectrum.shape[1]) + # for i in range(spectrum.shape[0]): + # spec_filt = spectrum[i,:] * h + # # Compute overall rms level + # level.append(np.sqrt(np.sum(np.abs(spec_filt) ** 2))) + # level = np.array(level) + # else: + # # go into frequency domain + # w, h = freqz(b, a, worN=len(spectrum)) + # spec_filt = spectrum * h + # # Compute overall rms level + # level = np.sqrt(np.sum(np.abs(spec_filt) ** 2)) + + # Get FRF and apply it + w, h = sosfreqz(sos, worN=len(spectrum)) + spec_filt = np.multiply(h, spectrum.T).T - # filter signal - if len(spectrum.shape)>1: - level = [] - # go into frequency domain - w, h = freqz(b, a, worN=spectrum.shape[1]) - for i in range(spectrum.shape[0]): - spec_filt = spectrum[i,:] * h - # Compute overall rms level - level.append(np.sqrt(np.sum(np.abs(spec_filt) ** 2))) - level = np.array(level) - else: - # go into frequency domain - w, h = freqz(b, a, worN=len(spectrum)) - spec_filt = spectrum * h - # Compute overall rms level - level = np.sqrt(np.sum(np.abs(spec_filt) ** 2)) + # Compute overall rms level + level = np.sqrt(np.sum(np.abs(spec_filt) ** 2, axis=0)) return level - - - - diff --git a/mosqito/sound_level_meter/noct_spectrum/noct_synthesis.py b/mosqito/sound_level_meter/noct_spectrum/noct_synthesis.py index 323ffd2f..853ccd57 100644 --- a/mosqito/sound_level_meter/noct_spectrum/noct_synthesis.py +++ b/mosqito/sound_level_meter/noct_spectrum/noct_synthesis.py @@ -11,10 +11,8 @@ def noct_synthesis(spectrum, freqs, fmin, fmax, n=3, G=10, fr=1000): """Adapt input spectrum to nth-octave band spectrum - Convert the input spectrum to third-octave band spectrum between "fc_min" and "fc_max". - Parameters ---------- spectrum : numpy.ndarray @@ -34,7 +32,6 @@ def noct_synthesis(spectrum, freqs, fmin, fmax, n=3, G=10, fr=1000): Reference frequency. Shall be set to 1 kHz for audible frequency range, to 1 Hz for infrasonic range (f < 20 Hz) and to 1 MHz for ultrasonic range (f > 31.5 kHz). - Outputs ------- spec : numpy.ndarray @@ -42,33 +39,47 @@ def noct_synthesis(spectrum, freqs, fmin, fmax, n=3, G=10, fr=1000): fpref : numpy.ndarray Corresponding preferred third octave band center frequencies, size (nbands). """ + + # Deduce sampling frequency + fs = np.mean(freqs[1:] - freqs[:-1]) * 2 * len(spectrum) # Get filters center frequencies fc_vec, fpref = _center_freq(fmin=fmin, fmax=fmax, n=n, G=G, fr=fr) - + + # Compute the filters bandwidth + alpha_vec, f_low, f_high = _filter_bandwidth(fc_vec, n=n) + + # Delete ends frequencies to prevent aliasing + idx = np.asarray(np.where(f_high > fs / 2)) + if any(idx[0]): + fc_vec = np.delete(fc_vec, idx) + f_low = np.delete(f_low, idx) + f_high = np.delete(f_high, idx) + + # Number of nth bands nband = len(fc_vec) - + + # Results array initialization if len(spectrum.shape) > 1: nseg = spectrum.shape[1] spec = np.zeros((nband, nseg)) + # If only one axis is given, it is used for all the spectra if len(freqs.shape) == 1: freqs = np.tile(freqs, (nseg, 1)).T - else: nseg = 1 spec = np.zeros((nband)) - fs = np.mean(freqs[1:] - freqs[:-1]) * 2 * len(spectrum) - - # Get filters center frequencies - fc_vec, fpref = _center_freq(fmin=fmin, fmax=fmax, n=n, G=G, fr=fr) - - # Compute the filters bandwidth - alpha_vec = _filter_bandwidth(fc_vec, n=n) + # Downsampling according to the band frequency + guard = 0.10 + factor_vec = (np.floor((fs / (2+guard)) / f_high)).astype('int') + for idx in range(len(factor_vec)): + # Factor between 1 Date: Tue, 17 May 2022 21:23:40 +0200 Subject: [PATCH 08/17] [CC] tests update --- .../noct_spectrum/test_noct_synthesis.py | 57 ++++++++++++++++--- tests/sq_metrics/tonality/test_pr_ecma_st.py | 4 +- tests/sq_metrics/tonality/test_tnr_ecma_st.py | 2 +- 3 files changed, 50 insertions(+), 13 deletions(-) diff --git a/tests/sound_level_meter/noct_spectrum/test_noct_synthesis.py b/tests/sound_level_meter/noct_spectrum/test_noct_synthesis.py index 9a0aedac..33758e08 100644 --- a/tests/sound_level_meter/noct_spectrum/test_noct_synthesis.py +++ b/tests/sound_level_meter/noct_spectrum/test_noct_synthesis.py @@ -7,7 +7,7 @@ raise RuntimeError( "In order to perform the tests you need the 'pytest' package." ) -# import matplotlib.pyplot as plt +import matplotlib.pyplot as plt # External library imports import numpy as np @@ -24,9 +24,10 @@ def _dB(amp): @pytest.mark.noct_synthesis # to skip or run only loudness noct_synthesis tests -def test_noct_synthesis(): - sig, fs = load( - "tests/input/Test signal 5 (pinknoise 60 dB).wav", wav_calib=2*2**0.5) +def test_noct_synthesis_technical(): + + ############################## TECHNICAL SIGNAL ########################## + sig, fs = load("tests\input\Test signal 5 (pinknoise 60 dB).wav", wav_calib=2*2**0.5) spec_3t, freq_3t = noct_spectrum(sig, fs, fmin=24, fmax=12600, n=3) spec_1t, freq_1t = noct_spectrum(sig, fs, fmin=24, fmax=12600, n=1) @@ -41,10 +42,8 @@ def test_noct_synthesis(): # Frequency axis freqs = fftfreq(n, 1/fs)[0:n//2] - spec_3f, freq_3f = noct_synthesis( - np.abs(spectrum), freqs, fmin=24, fmax=12600, n=3) - spec_1f, freq_1f = noct_synthesis( - np.abs(spectrum), freqs, fmin=24, fmax=12600, n=1) + spec_3f, freq_3f = noct_synthesis(np.abs(spectrum), freqs, fmin=24, fmax=12600, n=3) + spec_1f, freq_1f = noct_synthesis(np.abs(spectrum), freqs, fmin=24, fmax=12600, n=1) # plt.figure() # plt.semilogx(freq_3t, _dB(spec_3t), label='noct spectrum') @@ -60,8 +59,48 @@ def test_noct_synthesis(): np.testing.assert_allclose(_dB(spec_3t[:, 0]), _dB(spec_3f), atol=0.3) np.testing.assert_allclose(_dB(spec_1t[:, 0]), _dB(spec_1f), atol=0.3) + + +# @pytest.mark.noct_synthesis # to skip or run only loudness noct_synthesis tests +# def test_noct_synthesis_synthetic(): + +# ########################## SYNTHETIC SIGNAL############################### +# sig, fs = load("tests\input\white_noise_200_2000_Hz_stationary.wav", wav_calib=2*2**0.5) + +# spec_3t, freq_3t = noct_spectrum(sig, fs, fmin=24, fmax=12600, n=3) +# spec_1t, freq_1t = noct_spectrum(sig, fs, fmin=24, fmax=12600, n=1) + +# # Creation of the spectrum by FFT +# # 2* because we consider a one-sided spectrum +# # /np.sqrt(2) to go from amplitude peak to amplitude RMS +# # /n normalization for the numpy fft function +# n = len(sig) +# spectrum = 2 / np.sqrt(2) / n * fft(sig)[0:n//2] + +# # Frequency axis +# freqs = fftfreq(n, 1/fs)[0:n//2] + +# spec_3f, freq_3f = noct_synthesis(np.abs(spectrum), freqs, fmin=24, fmax=12600, n=3) +# spec_1f, freq_1f = noct_synthesis(np.abs(spectrum), freqs, fmin=24, fmax=12600, n=1) + +# plt.figure() +# plt.semilogx(freq_3t, _dB(spec_3t), label='noct spectrum') +# plt.semilogx(freq_3f, _dB(spec_3f), label='noct synth') +# plt.legend() + +# plt.figure() +# plt.semilogx(freq_1t, _dB(spec_1t), label='noct spectrum') +# plt.semilogx(freq_1f, _dB(spec_1f), label='noct synth') +# plt.legend() + +# plt.show() + +# np.testing.assert_allclose(_dB(spec_3t[:, 0]), _dB(spec_3f), atol=0.3) +# np.testing.assert_allclose(_dB(spec_1t[:, 0]), _dB(spec_1f), atol=0.3) + # test de la fonction if __name__ == "__main__": - test_noct_synthesis() + test_noct_synthesis_technical() + # test_noct_synthesis_synthetic() diff --git a/tests/sq_metrics/tonality/test_pr_ecma_st.py b/tests/sq_metrics/tonality/test_pr_ecma_st.py index c7f5d39a..35a930b1 100644 --- a/tests/sq_metrics/tonality/test_pr_ecma_st.py +++ b/tests/sq_metrics/tonality/test_pr_ecma_st.py @@ -40,9 +40,7 @@ def test_pr_ecma_st(): audio, fs = load(signal["data_file"]) # Compute tone-to-noise ratio - pr = pr_ecma_st( audio, fs, prominence=True) - - + t_pr, pr, prom, tones_freqs = pr_ecma_st(audio, fs, prominence=True) if __name__ == "__main__": diff --git a/tests/sq_metrics/tonality/test_tnr_ecma_st.py b/tests/sq_metrics/tonality/test_tnr_ecma_st.py index e633aa0f..239420bc 100644 --- a/tests/sq_metrics/tonality/test_tnr_ecma_st.py +++ b/tests/sq_metrics/tonality/test_tnr_ecma_st.py @@ -41,7 +41,7 @@ def test_tnr_ecma_st(): # Load signal audio, fs = load(signal["data_file"]) # Compute tone-to-noise ratio - tnr = tnr_ecma_st(audio, fs, prominence=True) + t_tnr, tnr, prom, tones_freqs = tnr_ecma_st(audio, fs, prominence=True) if __name__ == "__main__": test_tnr_ecma_st() From d8640fc4bbcb0dd4a076f890d03b887c5c4e5157 Mon Sep 17 00:00:00 2001 From: wantysal Date: Wed, 18 May 2022 10:53:02 +0200 Subject: [PATCH 09/17] [CC] tests updated to check the frequencies found in tonality calculation --- tests/sq_metrics/tonality/test_pr_ecma_st.py | 11 +++++++---- tests/sq_metrics/tonality/test_pr_ecma_tv.py | 13 ++++++++----- tests/sq_metrics/tonality/test_tnr_ecma_st.py | 15 +++++++++------ tests/sq_metrics/tonality/test_tnr_ecma_tv.py | 13 ++++++++----- 4 files changed, 32 insertions(+), 20 deletions(-) diff --git a/tests/sq_metrics/tonality/test_pr_ecma_st.py b/tests/sq_metrics/tonality/test_pr_ecma_st.py index 35a930b1..e1baec3d 100644 --- a/tests/sq_metrics/tonality/test_pr_ecma_st.py +++ b/tests/sq_metrics/tonality/test_pr_ecma_st.py @@ -8,7 +8,7 @@ "In order to perform the tests you need the 'pytest' package." ) - +import numpy as np # Local application imports from mosqito.utils import load from mosqito.sq_metrics import pr_ecma_st @@ -30,17 +30,20 @@ def test_pr_ecma_st(): None """ # Test signal as input for prominence ratio calculation - # signals generated using audacity : white noise + tones at 200 and 2000 Hz + # signals generated using audacity : white noise + tones at 442 and 1768 Hz signal = { "data_file": "tests/input/white_noise_442_1768_Hz_stationary.wav" } # Load signal - audio, fs = load(signal["data_file"]) + audio, fs = load(signal["data_file"], wav_calib=0.01) # Compute tone-to-noise ratio - t_pr, pr, prom, tones_freqs = pr_ecma_st(audio, fs, prominence=True) + t_pr, pr, prom, freq = pr_ecma_st(audio, fs, prominence=True) + np.testing.assert_almost_equal(t_pr, 32.20980078537321) + np.testing.assert_almost_equal(freq.astype(np.int32), [442, 1768]) + assert np.count_nonzero(prom == True) == 2 if __name__ == "__main__": diff --git a/tests/sq_metrics/tonality/test_pr_ecma_tv.py b/tests/sq_metrics/tonality/test_pr_ecma_tv.py index 10eac97b..ff4777bf 100644 --- a/tests/sq_metrics/tonality/test_pr_ecma_tv.py +++ b/tests/sq_metrics/tonality/test_pr_ecma_tv.py @@ -8,7 +8,7 @@ "In order to perform the tests you need the 'pytest' package." ) - +import numpy as np # Local application imports from mosqito.utils import load from mosqito.sq_metrics import pr_ecma_tv @@ -30,18 +30,21 @@ def test_pr_ecma_tv(): None """ # Test signal as input for prominence ratio calculation - # signals generated using audacity : white noise + tones at 200 and 2000 Hz + # signals generated using audacity : white noise + tones at 442 and 1768 Hz signal = { "data_file": "tests/input/white_noise_442_1768_Hz_varying.wav" } # Load signal - audio, fs = load(signal["data_file"]) + audio, fs = load(signal["data_file"], wav_calib=0.01) # Compute tone-to-noise ratio - t_pr, pr, prom, freq, time = pr_ecma_tv( audio, fs, prominence=True) - + t_pr, pr, prom, freq, time = pr_ecma_tv(audio, fs, prominence=True) + np.testing.assert_almost_equal(max(t_pr), 34.02082433185258) + assert pr[np.argmin(np.abs(freq-442)),:].all() != np.nan + assert pr[np.argmin(np.abs(freq-1768)),2:3].all() != np.nan + assert np.count_nonzero(prom == True) == 8 diff --git a/tests/sq_metrics/tonality/test_tnr_ecma_st.py b/tests/sq_metrics/tonality/test_tnr_ecma_st.py index 239420bc..3480ebf8 100644 --- a/tests/sq_metrics/tonality/test_tnr_ecma_st.py +++ b/tests/sq_metrics/tonality/test_tnr_ecma_st.py @@ -9,7 +9,7 @@ "In order to perform the tests you need the 'pytest' package." ) - +import numpy as np # Local application imports from mosqito.utils import load from mosqito.sq_metrics import tnr_ecma_st @@ -30,18 +30,21 @@ def test_tnr_ecma_st(): ------- None """ - # Test signal as input for prominence ratio calculation - # signals generated using audacity : white noise + tones at 200 and 2000 Hz + # Test signal as input for tone to noise ratio calculation + # signals generated using audacity : white noise + tones at 442 and 1768 Hz signal = { - "tones freq": [200, 2000], + "tones freq": [442, 1768], "data_file": "tests/input/white_noise_442_1768_Hz_stationary.wav" } # Load signal - audio, fs = load(signal["data_file"]) + audio, fs = load(signal["data_file"], wav_calib=0.01) # Compute tone-to-noise ratio - t_tnr, tnr, prom, tones_freqs = tnr_ecma_st(audio, fs, prominence=True) + t_tnr, tnr, prom, freq = tnr_ecma_st(audio, fs, prominence=True) + np.testing.assert_almost_equal(t_tnr, 32.7142766) + np.testing.assert_almost_equal(freq.astype(np.int32), [442, 1768]) + assert np.count_nonzero(prom == True) == 2 if __name__ == "__main__": test_tnr_ecma_st() diff --git a/tests/sq_metrics/tonality/test_tnr_ecma_tv.py b/tests/sq_metrics/tonality/test_tnr_ecma_tv.py index dbfb69b4..26207d68 100644 --- a/tests/sq_metrics/tonality/test_tnr_ecma_tv.py +++ b/tests/sq_metrics/tonality/test_tnr_ecma_tv.py @@ -28,17 +28,20 @@ def test_tnr_ecma_tv(): None """ # Test signal as input for prominence ratio calculation - # signals generated using audacity : white noise + tones at 200 and 2000 Hz + # signals generated using audacity : white noise + tones at 442 and 1768 Hz - signal = {"data_file": "tests/input/white_noise_442_1768_Hz_varying.wav"} + signal = {"freq": [442, 1768], + "data_file": "tests/input/white_noise_442_1768_Hz_varying.wav"} # Load signal - audio, fs = load(signal["data_file"]) + audio, fs = load(signal["data_file"], wav_calib=0.01) # Compute tone-to-noise ratio t_tnr, tnr, prom, freq, time = tnr_ecma_tv(audio, fs, prominence=True) - np.testing.assert_almost_equal(max(t_tnr), 34.995108238375025) - assert np.count_nonzero(prom == True) == 6 + np.testing.assert_almost_equal(max(t_tnr), 34.710964273840155) + assert tnr[np.argmin(np.abs(freq-442)),:].all() != np.nan + assert tnr[np.argmin(np.abs(freq-1768)),2:3].all() != np.nan + assert np.count_nonzero(prom == True) == 8 if __name__ == "__main__": From b02e552e5c687b44721238f1d9f19a0a3ff6bc1c Mon Sep 17 00:00:00 2001 From: wantysal Date: Wed, 18 May 2022 10:53:55 +0200 Subject: [PATCH 10/17] [CC] spectrum scanning function corrected on the lower boundary frequency --- .../prominence_ratio_ecma/_pr_main_calc.py | 4 +- .../_screening_for_tones.py | 8 +-- .../tone_to_noise_ecma/_spectrum_smoothing.py | 62 +++++++------------ 3 files changed, 27 insertions(+), 47 deletions(-) diff --git a/mosqito/sq_metrics/tonality/prominence_ratio_ecma/_pr_main_calc.py b/mosqito/sq_metrics/tonality/prominence_ratio_ecma/_pr_main_calc.py index d621715c..3ad5843d 100644 --- a/mosqito/sq_metrics/tonality/prominence_ratio_ecma/_pr_main_calc.py +++ b/mosqito/sq_metrics/tonality/prominence_ratio_ecma/_pr_main_calc.py @@ -205,9 +205,7 @@ def _pr_main_calc(spectrum_db, freq_axis): # suppression from the list of tones of all the candidates belonging to the # same critical band - sup = np.where((peaks >= low_limit_idx) & (peaks <= high_limit_idx))[ - 0 - ] + sup = np.where((peaks >= low_limit_idx) & (peaks <= high_limit_idx))[0] peaks = np.delete(peaks, sup) nb_tones -= len(sup) diff --git a/mosqito/sq_metrics/tonality/tone_to_noise_ecma/_screening_for_tones.py b/mosqito/sq_metrics/tonality/tone_to_noise_ecma/_screening_for_tones.py index 6084bcd9..d9d8c4e4 100644 --- a/mosqito/sq_metrics/tonality/tone_to_noise_ecma/_screening_for_tones.py +++ b/mosqito/sq_metrics/tonality/tone_to_noise_ecma/_screening_for_tones.py @@ -8,9 +8,7 @@ import numpy as np # Mosqito functions import -from mosqito.sq_metrics.tonality.tone_to_noise_ecma._spectrum_smoothing import ( - _spectrum_smoothing, -) +from mosqito.sq_metrics.tonality.tone_to_noise_ecma._spectrum_smoothing import _spectrum_smoothing from mosqito.sq_metrics.tonality.tone_to_noise_ecma._LTH import _LTH from mosqito.sq_metrics.tonality.tone_to_noise_ecma._critical_band import _critical_band @@ -54,7 +52,7 @@ def _screening_for_tones(freqs, spec_db, method, low_freq, high_freq): # Detection of the tonal candidates according to their level # Creation of the smoothed spectrum - smooth_spec = _spectrum_smoothing(freqs, spec_db, 24, low_freq, high_freq, freqs) + smooth_spec = _spectrum_smoothing(freqs, spec_db.T, 24, low_freq, high_freq, freqs).T n = spec_db.shape[0] @@ -149,7 +147,7 @@ def _screening_for_tones(freqs, spec_db, method, low_freq, high_freq): # Screen the left points of the peak temp = peak_index - 1 # As long as the level decreases, - while (spec_db[temp] > smooth_spec[temp] + 6) and (temp + 1 < (block+1)*m): + while (spec_db[temp] > smooth_spec[temp] + 6) and (temp +1 > (block)*m): # if a highest spectral line is found, it becomes the candidate if spec_db[temp] > spec_db[peak_index]: peak_index = temp diff --git a/mosqito/sq_metrics/tonality/tone_to_noise_ecma/_spectrum_smoothing.py b/mosqito/sq_metrics/tonality/tone_to_noise_ecma/_spectrum_smoothing.py index 06ae5e4f..73b86858 100644 --- a/mosqito/sq_metrics/tonality/tone_to_noise_ecma/_spectrum_smoothing.py +++ b/mosqito/sq_metrics/tonality/tone_to_noise_ecma/_spectrum_smoothing.py @@ -18,9 +18,9 @@ def _spectrum_smoothing(freqs_in, spec, noct, low_freq, high_freq, freqs_out): Parameters ---------- freqs : numpy.array - frequency axis (frequency axis) + frequency axis dim (nperseg) spec : numpy.array - spectrum in dB (n block x spectrum) + spectrum in dB (nperseg, nseg) noct : integer n-th octave-band according to which smooth the spectrum low_freq : float @@ -36,14 +36,13 @@ def _spectrum_smoothing(freqs_in, spec, noct, low_freq, high_freq, freqs_out): smoothed spectrum along the given frequency axis """ - n = spec.shape[0] + nperseg = spec.shape[0] if len(spec.shape) > 1: - m = spec.shape[1] + nseg = spec.shape[1] else: - m = spec.shape[0] - n = 1 + nseg = 1 spec = spec.ravel() - stop = np.arange(1, n + 1) * m + stop = np.arange(1, nseg + 1) * nperseg freqs_in = freqs_in.ravel() # n-th octave bands filter @@ -53,14 +52,12 @@ def _spectrum_smoothing(freqs_in, spec, noct, low_freq, high_freq, freqs_out): # Smoothed spectrum creation nb_bands = filter_freqs.shape[0] - smoothed_spectrum = np.zeros((n, nb_bands)) + smoothed_spectrum = np.zeros((nb_bands, nseg)) i = 0 # Each band is considered individually until all of them have been treated while nb_bands > 0: # Find the index of the spectral components within the frequency bin - bin_index = np.where( - (freqs_in >= filter_freqs[i, 0]) & (freqs_in <= filter_freqs[i, 2]) - )[0] + bin_index = np.where((freqs_in >= filter_freqs[i, 0]) & (freqs_in <= filter_freqs[i, 2]))[0] # If the frequency bin is empty, it is deleted from the list if len(bin_index) == 0: @@ -70,45 +67,32 @@ def _spectrum_smoothing(freqs_in, spec, noct, low_freq, high_freq, freqs_out): else: # The spectral components within the frequency bin are averaged on an energy basis - spec_sum = np.zeros((n)) - for j in range(n): - if ( - len(bin_index[(bin_index < stop[j]) & (bin_index > (stop[j] - m))]) - != 0 - ): - spec_sum[j] = np.mean( - 10 - ** ( - spec[ - bin_index[ - (bin_index < stop[j]) & (bin_index > (stop[j] - m)) - ] - ] - / 10 - ) - ) + spec_sum = np.zeros((nseg)) + for j in range(nseg): + if len(bin_index[(bin_index < stop[j]) & (bin_index > (stop[j] - nperseg))])!= 0: + spec_sum[j] = np.mean(10** (spec[bin_index[(bin_index < stop[j]) & (bin_index > (stop[j] - nperseg))]]/ 10)) else: spec_sum[j] = 1e-12 - smoothed_spectrum[:, i] = 10 * np.log10( - spec_sum - # / len(bin_index[(bin_index < stop[j]) & (bin_index > (stop[j] - m))]) - ) + smoothed_spectrum[i, :] = 10 * np.log10(spec_sum)# / len(bin_index[(bin_index < stop[j]) & (bin_index > (stop[j] - m))])) nb_bands -= 1 i += 1 # Pose of the smoothed spectrum on the frequency-axis - low = np.zeros((n, filter_freqs.shape[0])) - high = np.zeros((n, filter_freqs.shape[0])) + low = np.zeros((filter_freqs.shape[0], nseg)) + high = np.zeros((filter_freqs.shape[0], nseg)) # Index of the lower and higher limit of each frequency bin into the original spectrum for i in range(len(filter_freqs)): - low[:, i] = np.argmin(np.abs(freqs_out - filter_freqs[i, 0])) - high[:, i] = np.argmin(np.abs(freqs_out - filter_freqs[i, 2])) + low[i,:] = np.argmin(np.abs(freqs_out - filter_freqs[i, 0])) + high[i,:] = np.argmin(np.abs(freqs_out - filter_freqs[i, 2])) low = low.astype(int) high = high.astype(int) - smooth_spec = np.zeros((n, m)) - for i in range(n): + smooth_spec = np.zeros((nperseg, nseg)) + for i in range(nseg): for j in range(filter_freqs.shape[0]): - smooth_spec[i, low[i, j] : high[i, j]] = smoothed_spectrum[i, j] + smooth_spec[low[j,i] : high[j,i], i] = smoothed_spectrum[j,i] + + if smooth_spec.shape[1] == 1: + smooth_spec = np.squeeze(smooth_spec) return smooth_spec From de33b2f163f9a11db845232616c428be3ee5a383 Mon Sep 17 00:00:00 2001 From: wantysal Date: Wed, 18 May 2022 10:54:12 +0200 Subject: [PATCH 11/17] [CC] file path update --- tests/sound_level_meter/noct_spectrum/test_noct_synthesis.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/sound_level_meter/noct_spectrum/test_noct_synthesis.py b/tests/sound_level_meter/noct_spectrum/test_noct_synthesis.py index 33758e08..22a857cd 100644 --- a/tests/sound_level_meter/noct_spectrum/test_noct_synthesis.py +++ b/tests/sound_level_meter/noct_spectrum/test_noct_synthesis.py @@ -27,7 +27,7 @@ def _dB(amp): def test_noct_synthesis_technical(): ############################## TECHNICAL SIGNAL ########################## - sig, fs = load("tests\input\Test signal 5 (pinknoise 60 dB).wav", wav_calib=2*2**0.5) + sig, fs = load("tests/input/Test signal 5 (pinknoise 60 dB).wav", wav_calib=2*2**0.5) spec_3t, freq_3t = noct_spectrum(sig, fs, fmin=24, fmax=12600, n=3) spec_1t, freq_1t = noct_spectrum(sig, fs, fmin=24, fmax=12600, n=1) From 2017ba70c6bb2bdcc6a215ba588f4565e0713199 Mon Sep 17 00:00:00 2001 From: wantysal Date: Wed, 18 May 2022 11:10:16 +0200 Subject: [PATCH 12/17] [CC] useless variables / lines removed --- .../noct_spectrum/_n_oct_freq_filter.py | 25 ++----------------- .../noct_spectrum/test_noct_synthesis.py | 18 ++++++------- 2 files changed, 11 insertions(+), 32 deletions(-) diff --git a/mosqito/sound_level_meter/noct_spectrum/_n_oct_freq_filter.py b/mosqito/sound_level_meter/noct_spectrum/_n_oct_freq_filter.py index 969fc83e..f349104e 100644 --- a/mosqito/sound_level_meter/noct_spectrum/_n_oct_freq_filter.py +++ b/mosqito/sound_level_meter/noct_spectrum/_n_oct_freq_filter.py @@ -5,7 +5,7 @@ import numpy as np from scipy.signal import butter, sosfreqz -def _n_oct_freq_filter(spectrum, fs, factor, fc, alpha, n=3): +def _n_oct_freq_filter(spectrum, fs, fc, alpha, n=3): """ n-th octave filtering in frequency domain Designs a digital 1/3-octave filter with center frequency fc for @@ -17,8 +17,6 @@ def _n_oct_freq_filter(spectrum, fs, factor, fc, alpha, n=3): Frequency spectrum [complex] fs : float Sampling frequency [Hz] - factor : integer - Downsampling factor fc : float Filter exact center frequency [Hz] alpha : float @@ -38,26 +36,7 @@ def _n_oct_freq_filter(spectrum, fs, factor, fc, alpha, n=3): w2 = fc / (fs / 2) * alpha # Define filter coefficient - sos = butter(n, [w1, w2], "bandpass", analog=False, output ='sos') - - # # filter signal - # if len(spectrum.shape)>1: - # level = [] - # # go into frequency domain - # w, h = freqz(b, a, worN=spectrum.shape[1]) - # for i in range(spectrum.shape[0]): - # spec_filt = spectrum[i,:] * h - # # Compute overall rms level - # level.append(np.sqrt(np.sum(np.abs(spec_filt) ** 2))) - # level = np.array(level) - # else: - # # go into frequency domain - # w, h = freqz(b, a, worN=len(spectrum)) - # spec_filt = spectrum * h - # # Compute overall rms level - # level = np.sqrt(np.sum(np.abs(spec_filt) ** 2)) - - + sos = butter(n, [w1, w2], "bandpass", analog=False, output ='sos') # Get FRF and apply it w, h = sosfreqz(sos, worN=len(spectrum)) spec_filt = np.multiply(h, spectrum.T).T diff --git a/tests/sound_level_meter/noct_spectrum/test_noct_synthesis.py b/tests/sound_level_meter/noct_spectrum/test_noct_synthesis.py index 22a857cd..ae0f0f54 100644 --- a/tests/sound_level_meter/noct_spectrum/test_noct_synthesis.py +++ b/tests/sound_level_meter/noct_spectrum/test_noct_synthesis.py @@ -45,17 +45,17 @@ def test_noct_synthesis_technical(): spec_3f, freq_3f = noct_synthesis(np.abs(spectrum), freqs, fmin=24, fmax=12600, n=3) spec_1f, freq_1f = noct_synthesis(np.abs(spectrum), freqs, fmin=24, fmax=12600, n=1) - # plt.figure() - # plt.semilogx(freq_3t, _dB(spec_3t), label='noct spectrum') - # plt.semilogx(freq_3f, _dB(spec_3f), label='noct synth') - # plt.legend() + plt.figure() + plt.semilogx(freq_3t, _dB(spec_3t), label='noct spectrum') + plt.semilogx(freq_3f, _dB(spec_3f), label='noct synth') + plt.legend() - # plt.figure() - # plt.semilogx(freq_1t, _dB(spec_1t), label='noct spectrum') - # plt.semilogx(freq_1f, _dB(spec_1f), label='noct synth') - # plt.legend() + plt.figure() + plt.semilogx(freq_1t, _dB(spec_1t), label='noct spectrum') + plt.semilogx(freq_1f, _dB(spec_1f), label='noct synth') + plt.legend() - # plt.show() + plt.show() np.testing.assert_allclose(_dB(spec_3t[:, 0]), _dB(spec_3f), atol=0.3) np.testing.assert_allclose(_dB(spec_1t[:, 0]), _dB(spec_1f), atol=0.3) From 08feb9bc7b947a99c50f5c85276b279f4081d2f5 Mon Sep 17 00:00:00 2001 From: wantysal Date: Wed, 18 May 2022 11:16:33 +0200 Subject: [PATCH 13/17] [CC] useless lines removed --- .../sound_level_meter/noct_spectrum/noct_synthesis.py | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/mosqito/sound_level_meter/noct_spectrum/noct_synthesis.py b/mosqito/sound_level_meter/noct_spectrum/noct_synthesis.py index 853ccd57..4bead4e1 100644 --- a/mosqito/sound_level_meter/noct_spectrum/noct_synthesis.py +++ b/mosqito/sound_level_meter/noct_spectrum/noct_synthesis.py @@ -70,16 +70,9 @@ def noct_synthesis(spectrum, freqs, fmin, fmax, n=3, G=10, fr=1000): nseg = 1 spec = np.zeros((nband)) - # Downsampling according to the band frequency - guard = 0.10 - factor_vec = (np.floor((fs / (2+guard)) / f_high)).astype('int') - for idx in range(len(factor_vec)): - # Factor between 1 Date: Wed, 18 May 2022 11:20:05 +0200 Subject: [PATCH 14/17] [CC] deactivate plot from test --- .../noct_spectrum/test_noct_synthesis.py | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/tests/sound_level_meter/noct_spectrum/test_noct_synthesis.py b/tests/sound_level_meter/noct_spectrum/test_noct_synthesis.py index ae0f0f54..62549f47 100644 --- a/tests/sound_level_meter/noct_spectrum/test_noct_synthesis.py +++ b/tests/sound_level_meter/noct_spectrum/test_noct_synthesis.py @@ -7,7 +7,7 @@ raise RuntimeError( "In order to perform the tests you need the 'pytest' package." ) -import matplotlib.pyplot as plt +#import matplotlib.pyplot as plt # External library imports import numpy as np @@ -45,17 +45,17 @@ def test_noct_synthesis_technical(): spec_3f, freq_3f = noct_synthesis(np.abs(spectrum), freqs, fmin=24, fmax=12600, n=3) spec_1f, freq_1f = noct_synthesis(np.abs(spectrum), freqs, fmin=24, fmax=12600, n=1) - plt.figure() - plt.semilogx(freq_3t, _dB(spec_3t), label='noct spectrum') - plt.semilogx(freq_3f, _dB(spec_3f), label='noct synth') - plt.legend() + # plt.figure() + # plt.semilogx(freq_3t, _dB(spec_3t), label='noct spectrum') + # plt.semilogx(freq_3f, _dB(spec_3f), label='noct synth') + # plt.legend() - plt.figure() - plt.semilogx(freq_1t, _dB(spec_1t), label='noct spectrum') - plt.semilogx(freq_1f, _dB(spec_1f), label='noct synth') - plt.legend() + # plt.figure() + # plt.semilogx(freq_1t, _dB(spec_1t), label='noct spectrum') + # plt.semilogx(freq_1f, _dB(spec_1f), label='noct synth') + # plt.legend() - plt.show() + # plt.show() np.testing.assert_allclose(_dB(spec_3t[:, 0]), _dB(spec_3f), atol=0.3) np.testing.assert_allclose(_dB(spec_1t[:, 0]), _dB(spec_1f), atol=0.3) From a8103c0a753e7d2baeed4f586793ad488729017a Mon Sep 17 00:00:00 2001 From: wantysal Date: Fri, 20 May 2022 09:52:10 +0200 Subject: [PATCH 15/17] [CC] paths of the test files corrected --- ...validation_loudness_zwst_Test_signal_1.png | Bin 44757 -> 44758 bytes ...ness_zwst_Test_signal_2_(250_Hz_80_dB).png | Bin 38002 -> 38001 bytes ...dness_zwst_Test_signal_3_(1_kHz_60_dB).png | Bin 41069 -> 41070 bytes ...dness_zwst_Test_signal_4_(4_kHz_40_dB).png | Bin 39706 -> 39704 bytes ...s_zwst_Test_signal_5_(pinknoise_60_dB).png | Bin 42595 -> 42595 bytes .../loudness_zwst/validation_loudness_zwst.py | 30 +++---- .../loudness_zwtv/validation_loudness_zwtv.py | 82 ++++++++--------- .../sharpness_din/validation_sharpness_din.py | 84 +++++++++--------- 8 files changed, 96 insertions(+), 100 deletions(-) diff --git a/validations/sq_metrics/loudness_zwst/output/validation_loudness_zwst_Test_signal_1.png b/validations/sq_metrics/loudness_zwst/output/validation_loudness_zwst_Test_signal_1.png index 102ce8288642a4ed9f947cd392c74f5a432f77e0..180e63ca8fe328b7b325e9b85f194eb3b4ba7496 100644 GIT binary patch delta 28716 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 IUub>$A8hdaqW}N^ delta 28671 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 diff --git a/validations/sq_metrics/loudness_zwst/output/validation_loudness_zwst_Test_signal_2_(250_Hz_80_dB).png b/validations/sq_metrics/loudness_zwst/output/validation_loudness_zwst_Test_signal_2_(250_Hz_80_dB).png index f0e0441960a31b8463ad631f6ade0ba8583b4e63..c0b450874d6416e203500b67cc62f50b909b94f3 100644 GIT binary patch delta 12239 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 delta 12207 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 delta 10396 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 diff --git a/validations/sq_metrics/loudness_zwst/output/validation_loudness_zwst_Test_signal_4_(4_kHz_40_dB).png b/validations/sq_metrics/loudness_zwst/output/validation_loudness_zwst_Test_signal_4_(4_kHz_40_dB).png index 614513d5404606fb87eeac40e379d059506c2d86..336fa57e0e9a975903bf9502697a6dd4bf220a77 100644 GIT binary patch delta 19300 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 R?q3l&&N;g}y&(7`{SWOp(rW+! delta 19236 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 Y>-!G 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 qDmE31bB0u<%V z2l&38*lL=Zr1B9o!z;qDuQ@q)^vX?wfZv48PuU}HE93jn_V)XnoSX-M6n?a9ofj1q zecW8y$j|JiHucJ?+(pw{eFSuJPfAJ(NQZjMZX2z*?KuPgTZr&v`yZB=SQAmTgT#wC z78+VwKyw%{hpRJ3kSEKoPn4U2QrAb?iP1t{XAUfn9<|NQ!MnS=Co0TkqI*;2GCrKhstaphS zBYywZ0FBnt?figkq~bA&;M6NyzYm-=IR^&^@Z)~KWZpVdXJ_XmQRgDjLEwM3XItp0 zc}zMlj<;@mkFCEUO-*7%aLEW@N);q&QbI3?!H$4OcUKpLZ8el32WlvR+ZbP6U0pRp zoHm4rLCch2>?M$xBr#WR;Fin~i15x%+0q>?;K5wB^?`}Q0>veOK1f6sSk(bt<9pjr za|=f_8VzJH`gqS$Pfzcd;k%!o-`>%Ytg`Yak6XmuQtWN-UHx{TJzFl^%nGu~*M_U9 zse!C@p|3CbZ2q!?rU+P5JkcKfX--xkog}2Be)~&3-@bo0uoNVL&3YaF2L$>@PY(_- ze!@Oi!dzTj4oB;nx3-pxi}0a*#1BMyOECEKq>!qrs00893wnA!pDVZ9HY8qM(hrH0 zf;|A>R!M-k+WfHz=2upNKqvJ;P*8Wx2XJf*=vtzs&@?KE+@tOg^QK|k`k)+-tSn0t zaEiCaVRax?G<^}p*%5qCMn{Lj3McG>bPz^Hx`C&lpa7yHv&;MU)>XfGGrFMmo;eO~ z1q%!HS)ik%0|w&m{93u`7O~xQLzWL!ZyoR+7h-u~iauQ6n$S=}LUj!Cc&0qg_$PTJ aRA^!gU9B1?oi9W%@KKUelP!}r^Z!4Q04@ap diff --git a/validations/sq_metrics/loudness_zwst/validation_loudness_zwst.py b/validations/sq_metrics/loudness_zwst/validation_loudness_zwst.py index 1e3882a3..e10ac187 100644 --- a/validations/sq_metrics/loudness_zwst/validation_loudness_zwst.py +++ b/validations/sq_metrics/loudness_zwst/validation_loudness_zwst.py @@ -20,13 +20,9 @@ from mosqito.sq_metrics import loudness_zwst from mosqito.utils import isoclose from mosqito.utils import load -from mosqito.sq_metrics.loudness.loudness_zwst._main_loudness import ( - _main_loudness, -) -from mosqito.sq_metrics.loudness.loudness_zwst._calc_slopes import ( - _calc_slopes, -) -from validations.sq_metrics.loudness_zwst.input.ISO_532_1.test_signal_1 import test_signal_1 +from mosqito.sq_metrics.loudness.loudness_zwst._main_loudness import _main_loudness +from mosqito.sq_metrics.loudness.loudness_zwst._calc_slopes import _calc_slopes +from input.ISO_532_1.test_signal_1 import test_signal_1 def validation_loudness_zwst_3oct(): @@ -50,7 +46,7 @@ def validation_loudness_zwst_3oct(): # (from ISO 532-1 annex B2) : test_signal_1 # Load ISO reference outputs - file_path = "./validations/sq_metrics/loudness_zwst/input/ISO_532_1/test_signal_1.csv" + file_path = "input/ISO_532_1/test_signal_1.csv" N_iso = 83.296 N_specif_iso = np.genfromtxt( file_path, skip_header=1 @@ -96,24 +92,24 @@ def validation_loudness_zwst(): signals = [ { - "data_file": "./validations/sq_metrics/loudness_zwst/input/ISO_532_1/Test signal 2 (250 Hz 80 dB).wav", + "data_file": "input/ISO_532_1/Test signal 2 (250 Hz 80 dB).wav", "N": 14.655, - "N_specif_file": "./validations/sq_metrics/loudness_zwst/input/ISO_532_1/test_signal_2.csv", + "N_specif_file": "input/ISO_532_1/test_signal_2.csv", }, { - "data_file": "./validations/sq_metrics/loudness_zwst/input/ISO_532_1/Test signal 3 (1 kHz 60 dB).wav", + "data_file": "input/ISO_532_1/Test signal 3 (1 kHz 60 dB).wav", "N": 4.019, - "N_specif_file": "./validations/sq_metrics/loudness_zwst/input/ISO_532_1/test_signal_3.csv", + "N_specif_file": "input/ISO_532_1/test_signal_3.csv", }, { - "data_file": "./validations/sq_metrics/loudness_zwst/input/ISO_532_1/Test signal 4 (4 kHz 40 dB).wav", + "data_file": "input/ISO_532_1/Test signal 4 (4 kHz 40 dB).wav", "N": 1.549, - "N_specif_file": "./validations/sq_metrics/loudness_zwst/input/ISO_532_1/test_signal_4.csv", + "N_specif_file": "input/ISO_532_1/test_signal_4.csv", }, { - "data_file": "./validations/sq_metrics/loudness_zwst/input/ISO_532_1/Test signal 5 (pinknoise 60 dB).wav", + "data_file": "input/ISO_532_1/Test signal 5 (pinknoise 60 dB).wav", "N": 10.498, - "N_specif_file": "./validations/sq_metrics/loudness_zwst/input/ISO_532_1/test_signal_5.csv", + "N_specif_file": "input/ISO_532_1/test_signal_5.csv", }, ] @@ -166,7 +162,7 @@ def _format_plot(is_isoclose_N, is_isoclose_N_specific, N, N_iso, filename): transform=plt.gca().transAxes, bbox=props, ) - out_dir = "./validations/sq_metrics/loudness_zwst/output/" + out_dir = "output/" plt.savefig( out_dir + 'validation_loudness_zwst_' + "_".join(filename.split(" ")) + ".png", diff --git a/validations/sq_metrics/loudness_zwtv/validation_loudness_zwtv.py b/validations/sq_metrics/loudness_zwtv/validation_loudness_zwtv.py index cda7b185..9b0a89db 100644 --- a/validations/sq_metrics/loudness_zwtv/validation_loudness_zwtv.py +++ b/validations/sq_metrics/loudness_zwtv/validation_loudness_zwtv.py @@ -28,141 +28,141 @@ signal = np.zeros((20), dtype=dict) signal[0] = { - "data_file": "./validations/sq_metrics/loudness_zwtv/input/ISO_532-1/Annex B.4/Test signal 6 (tone 250 Hz 30 dB - 80 dB).wav", - "xls": "./validations/sq_metrics/loudness_zwtv/input/ISO_532-1/Annex B.4/Results and tests for synthetic signals (time varying loudness).xlsx", + "data_file": "input/ISO_532-1/Annex B.4/Test signal 6 (tone 250 Hz 30 dB - 80 dB).wav", + "xls": "input/ISO_532-1/Annex B.4/Results and tests for synthetic signals (time varying loudness).xlsx", "tab": "Test signal 6", "N_specif_bark": 2.5, "field": "free", } signal[1] = { - "data_file": "./validations/sq_metrics/loudness_zwtv/input/ISO_532-1/Annex B.4/Test signal 7 (tone 1 kHz 30 dB - 80 dB).wav", - "xls": "./validations/sq_metrics/loudness_zwtv/input/ISO_532-1/Annex B.4/Results and tests for synthetic signals (time varying loudness).xlsx", + "data_file": "input/ISO_532-1/Annex B.4/Test signal 7 (tone 1 kHz 30 dB - 80 dB).wav", + "xls": "input/ISO_532-1/Annex B.4/Results and tests for synthetic signals (time varying loudness).xlsx", "tab": "Test signal 7", "N_specif_bark": 8.5, "field": "free", } signal[2] = { - "data_file": "./validations/sq_metrics/loudness_zwtv/input/ISO_532-1/Annex B.4/Test signal 8 (tone 4 kHz 30 dB - 80 dB).wav", - "xls": "./validations/sq_metrics/loudness_zwtv/input/ISO_532-1/Annex B.4/Results and tests for synthetic signals (time varying loudness).xlsx", + "data_file": "input/ISO_532-1/Annex B.4/Test signal 8 (tone 4 kHz 30 dB - 80 dB).wav", + "xls": "input/ISO_532-1/Annex B.4/Results and tests for synthetic signals (time varying loudness).xlsx", "tab": "Test signal 8", "N_specif_bark": 17.5, "field": "free", } signal[3] = { - "data_file": "./validations/sq_metrics/loudness_zwtv/input/ISO_532-1/Annex B.4/Test signal 9 (pink noise 0 dB - 50 dB).wav", - "xls": "./validations/sq_metrics/loudness_zwtv/input/ISO_532-1/Annex B.4/Results and tests for synthetic signals (time varying loudness).xlsx", + "data_file": "input/ISO_532-1/Annex B.4/Test signal 9 (pink noise 0 dB - 50 dB).wav", + "xls": "input/ISO_532-1/Annex B.4/Results and tests for synthetic signals (time varying loudness).xlsx", "tab": "Test signal 9", "N_specif_bark": 17.5, "field": "free", } signal[4] = { - "data_file": "./validations/sq_metrics/loudness_zwtv/input/ISO_532-1/Annex B.4/Test signal 10 (tone pulse 1 kHz 10 ms 70 dB).wav", - "xls": "./validations/sq_metrics/loudness_zwtv/input/ISO_532-1/Annex B.4/Results and tests for synthetic signals (time varying loudness).xlsx", + "data_file": "input/ISO_532-1/Annex B.4/Test signal 10 (tone pulse 1 kHz 10 ms 70 dB).wav", + "xls": "input/ISO_532-1/Annex B.4/Results and tests for synthetic signals (time varying loudness).xlsx", "tab": "Test signal 10", "N_specif_bark": 8.5, "field": "free", } signal[5] = { - "data_file": "./validations/sq_metrics/loudness_zwtv/input/ISO_532-1/Annex B.4/Test signal 11 (tone pulse 1 kHz 50 ms 70 dB).wav", - "xls": "./validations/sq_metrics/loudness_zwtv/input/ISO_532-1/Annex B.4/Results and tests for synthetic signals (time varying loudness).xlsx", + "data_file": "input/ISO_532-1/Annex B.4/Test signal 11 (tone pulse 1 kHz 50 ms 70 dB).wav", + "xls": "input/ISO_532-1/Annex B.4/Results and tests for synthetic signals (time varying loudness).xlsx", "tab": "Test signal 11", "N_specif_bark": 8.5, "field": "free", } signal[6] = { - "data_file": "./validations/sq_metrics/loudness_zwtv/input/ISO_532-1/Annex B.4/Test signal 12 (tone pulse 1 kHz 500 ms 70 dB).wav", - "xls": "./validations/sq_metrics/loudness_zwtv/input/ISO_532-1/Annex B.4/Results and tests for synthetic signals (time varying loudness).xlsx", + "data_file": "input/ISO_532-1/Annex B.4/Test signal 12 (tone pulse 1 kHz 500 ms 70 dB).wav", + "xls": "input/ISO_532-1/Annex B.4/Results and tests for synthetic signals (time varying loudness).xlsx", "tab": "Test signal 12", "N_specif_bark": 8.5, "field": "free", } signal[7] = { - "data_file": "./validations/sq_metrics/loudness_zwtv/input/ISO_532-1/Annex B.4/Test signal 13 (combined tone pulses 1 kHz).wav", - "xls": "./validations/sq_metrics/loudness_zwtv/input/ISO_532-1/Annex B.4/Results and tests for synthetic signals (time varying loudness).xlsx", + "data_file": "input/ISO_532-1/Annex B.4/Test signal 13 (combined tone pulses 1 kHz).wav", + "xls": "input/ISO_532-1/Annex B.4/Results and tests for synthetic signals (time varying loudness).xlsx", "tab": "Test signal 13", "N_specif_bark": 8.5, "field": "free", } signal[8] = { - "data_file": "./validations/sq_metrics/loudness_zwtv/input/ISO_532-1/Annex B.5/Test signal 14 (propeller-driven airplane).wav", - "xls": "./validations/sq_metrics/loudness_zwtv/input/ISO_532-1/Annex B.5/Results and tests for technical signals (time varying loudness).xlsx", + "data_file": "input/ISO_532-1/Annex B.5/Test signal 14 (propeller-driven airplane).wav", + "xls": "input/ISO_532-1/Annex B.5/Results and tests for technical signals (time varying loudness).xlsx", "tab": "Test signal 14", "N_specif_bark": -1, "field": "free", } signal[9] = { - "data_file": "./validations/sq_metrics/loudness_zwtv/input/ISO_532-1/Annex B.5/Test signal 15 (vehicle interior 40 kmh).wav", - "xls": "./validations/sq_metrics/loudness_zwtv/input/ISO_532-1/Annex B.5/Results and tests for technical signals (time varying loudness).xlsx", + "data_file": "input/ISO_532-1/Annex B.5/Test signal 15 (vehicle interior 40 kmh).wav", + "xls": "input/ISO_532-1/Annex B.5/Results and tests for technical signals (time varying loudness).xlsx", "tab": "Test signal 15", "N_specif_bark": -1, "field": "diffuse", } signal[10] = { - "data_file": "./validations/sq_metrics/loudness_zwtv/input/ISO_532-1/Annex B.5/Test signal 16 (hairdryer).wav", - "xls": "./validations/sq_metrics/loudness_zwtv/input/ISO_532-1/Annex B.5/Results and tests for technical signals (time varying loudness).xlsx", + "data_file": "input/ISO_532-1/Annex B.5/Test signal 16 (hairdryer).wav", + "xls": "input/ISO_532-1/Annex B.5/Results and tests for technical signals (time varying loudness).xlsx", "tab": "Test signal 16", "N_specif_bark": -1, "field": "free", } signal[11] = { - "data_file": "./validations/sq_metrics/loudness_zwtv/input/ISO_532-1/Annex B.5/Test signal 17 (machine gun).wav", - "xls": "./validations/sq_metrics/loudness_zwtv/input/ISO_532-1/Annex B.5/Results and tests for technical signals (time varying loudness).xlsx", + "data_file": "input/ISO_532-1/Annex B.5/Test signal 17 (machine gun).wav", + "xls": "input/ISO_532-1/Annex B.5/Results and tests for technical signals (time varying loudness).xlsx", "tab": "Test signal 17", "N_specif_bark": -1, "field": "free", } signal[12] = { - "data_file": "./validations/sq_metrics/loudness_zwtv/input/ISO_532-1/Annex B.5/Test signal 18 (hammer).wav", - "xls": "./validations/sq_metrics/loudness_zwtv/input/ISO_532-1/Annex B.5/Results and tests for technical signals (time varying loudness).xlsx", + "data_file": "input/ISO_532-1/Annex B.5/Test signal 18 (hammer).wav", + "xls": "input/ISO_532-1/Annex B.5/Results and tests for technical signals (time varying loudness).xlsx", "tab": "Test signal 18", "N_specif_bark": -1, "field": "free", } signal[13] = { - "data_file": "./validations/sq_metrics/loudness_zwtv/input/ISO_532-1/Annex B.5/Test signal 19 (door creak).wav", - "xls": "./validations/sq_metrics/loudness_zwtv/input/ISO_532-1/Annex B.5/Results and tests for technical signals (time varying loudness).xlsx", + "data_file": "input/ISO_532-1/Annex B.5/Test signal 19 (door creak).wav", + "xls": "input/ISO_532-1/Annex B.5/Results and tests for technical signals (time varying loudness).xlsx", "tab": "Test signal 19", "N_specif_bark": -1, "field": "free", } signal[14] = { - "data_file": "./validations/sq_metrics/loudness_zwtv/input/ISO_532-1/Annex B.5/Test signal 20 (shaking coins).wav", - "xls": "./validations/sq_metrics/loudness_zwtv/input/ISO_532-1/Annex B.5/Results and tests for technical signals (time varying loudness).xlsx", + "data_file": "input/ISO_532-1/Annex B.5/Test signal 20 (shaking coins).wav", + "xls": "input/ISO_532-1/Annex B.5/Results and tests for technical signals (time varying loudness).xlsx", "tab": "Test signal 20", "N_specif_bark": -1, "field": "free", } signal[15] = { - "data_file": "./validations/sq_metrics/loudness_zwtv/input/ISO_532-1/Annex B.5/Test signal 21 (jackhammer).wav", - "xls": "./validations/sq_metrics/loudness_zwtv/input/ISO_532-1/Annex B.5/Results and tests for technical signals (time varying loudness).xlsx", + "data_file": "input/ISO_532-1/Annex B.5/Test signal 21 (jackhammer).wav", + "xls": "input/ISO_532-1/Annex B.5/Results and tests for technical signals (time varying loudness).xlsx", "tab": "Test signal 21", "N_specif_bark": -1, "field": "free", } signal[16] = { - "data_file": "./validations/sq_metrics/loudness_zwtv/input/ISO_532-1/Annex B.5/Test signal 22 (ratchet wheel (large)).wav", - "xls": "./validations/sq_metrics/loudness_zwtv/input/ISO_532-1/Annex B.5/Results and tests for technical signals (time varying loudness).xlsx", + "data_file": "input/ISO_532-1/Annex B.5/Test signal 22 (ratchet wheel (large)).wav", + "xls": "input/ISO_532-1/Annex B.5/Results and tests for technical signals (time varying loudness).xlsx", "tab": "Test signal 22", "N_specif_bark": -1, "field": "free", } signal[17] = { - "data_file": "./validations/sq_metrics/loudness_zwtv/input/ISO_532-1/Annex B.5/Test signal 23 (typewriter).wav", - "xls": "./validations/sq_metrics/loudness_zwtv/input/ISO_532-1/Annex B.5/Results and tests for technical signals (time varying loudness).xlsx", + "data_file": "input/ISO_532-1/Annex B.5/Test signal 23 (typewriter).wav", + "xls": "input/ISO_532-1/Annex B.5/Results and tests for technical signals (time varying loudness).xlsx", "tab": "Test signal 23", "N_specif_bark": -1, "field": "free", } signal[18] = { - "data_file": "./validations/sq_metrics/loudness_zwtv/input/ISO_532-1/Annex B.5/Test signal 24 (woodpecker).wav", - "xls": "./validations/sq_metrics/loudness_zwtv/input/ISO_532-1/Annex B.5/Results and tests for technical signals (time varying loudness).xlsx", + "data_file": "input/ISO_532-1/Annex B.5/Test signal 24 (woodpecker).wav", + "xls": "input/ISO_532-1/Annex B.5/Results and tests for technical signals (time varying loudness).xlsx", "tab": "Test signal 24", "N_specif_bark": -1, "field": "free", } signal[19] = { - "data_file": "./validations/sq_metrics/loudness_zwtv/input/ISO_532-1/Annex B.5/Test signal 25 (full can rattle).wav", - "xls": "./validations/sq_metrics/loudness_zwtv/input/ISO_532-1/Annex B.5/Results and tests for technical signals (time varying loudness).xlsx", + "data_file": "input/ISO_532-1/Annex B.5/Test signal 25 (full can rattle).wav", + "xls": "input/ISO_532-1/Annex B.5/Results and tests for technical signals (time varying loudness).xlsx", "tab": "Test signal 25", "N_specif_bark": -1, "field": "free", @@ -213,7 +213,7 @@ def validation_loudness_zwtv(signal): # Check ISO 532-1 compliance _check_compliance( - loudness, signal, "./validations/sq_metrics/loudness_zwtv/output/" + loudness, signal, "output/" ) diff --git a/validations/sq_metrics/sharpness_din/validation_sharpness_din.py b/validations/sq_metrics/sharpness_din/validation_sharpness_din.py index ecf2b3e4..1203acfd 100644 --- a/validations/sq_metrics/sharpness_din/validation_sharpness_din.py +++ b/validations/sq_metrics/sharpness_din/validation_sharpness_din.py @@ -22,84 +22,84 @@ broadband = np.zeros((20), dtype=dict) broadband[0] = { - "data_file": "./validations/sq_metrics/sharpness_din/input/broadband_250.wav", + "data_file": "input/broadband_250.wav", "type": "Broad-band", "S": 2.70, } broadband[1] = { - "data_file": "./validations/sq_metrics/sharpness_din/input/broadband_350.wav", + "data_file": "input/broadband_350.wav", "S": 2.74, } broadband[2] = { - "data_file": "./validations/sq_metrics/sharpness_din/input/broadband_450.wav", + "data_file": "input/broadband_450.wav", "S": 2.78, } broadband[3] = { - "data_file": "./validations/sq_metrics/sharpness_din/input/broadband_570.wav", + "data_file": "input/broadband_570.wav", "S": 2.85, } broadband[4] = { - "data_file": "./validations/sq_metrics/sharpness_din/input/broadband_700.wav", + "data_file": "input/broadband_700.wav", "S": 2.91, } broadband[5] = { - "data_file": "./validations/sq_metrics/sharpness_din/input/broadband_840.wav", + "data_file": "input/broadband_840.wav", "S": 2.96, } broadband[6] = { - "data_file": "./validations/sq_metrics/sharpness_din/input/broadband_1000.wav", + "data_file": "input/broadband_1000.wav", "S": 3.05, } broadband[7] = { - "data_file": "./validations/sq_metrics/sharpness_din/input/broadband_1170.wav", + "data_file": "input/broadband_1170.wav", "S": 3.12, } broadband[8] = { - "data_file": "./validations/sq_metrics/sharpness_din/input/broadband_1370.wav", + "data_file": "input/broadband_1370.wav", "S": 3.20, } broadband[9] = { - "data_file": "./validations/sq_metrics/sharpness_din/input/broadband_1600.wav", + "data_file": "input/broadband_1600.wav", "S": 3.30, } broadband[10] = { - "data_file": "./validations/sq_metrics/sharpness_din/input/broadband_1850.wav", + "data_file": "input/broadband_1850.wav", "S": 3.42, } broadband[11] = { - "data_file": "./validations/sq_metrics/sharpness_din/input/broadband_2150.wav", + "data_file": "input/broadband_2150.wav", "S": 3.53, } broadband[12] = { - "data_file": "./validations/sq_metrics/sharpness_din/input/broadband_2500.wav", + "data_file": "input/broadband_2500.wav", "S": 3.69, } broadband[13] = { - "data_file": "./validations/sq_metrics/sharpness_din/input/broadband_2900.wav", + "data_file": "input/broadband_2900.wav", "S": 3.89, } broadband[14] = { - "data_file": "./validations/sq_metrics/sharpness_din/input/broadband_3400.wav", + "data_file": "input/broadband_3400.wav", "S": 4.12, } broadband[15] = { - "data_file": "./validations/sq_metrics/sharpness_din/input/broadband_4000.wav", + "data_file": "input/broadband_4000.wav", "S": 4.49, } broadband[16] = { - "data_file": "./validations/sq_metrics/sharpness_din/input/broadband_4800.wav", + "data_file": "input/broadband_4800.wav", "S": 5.04, } broadband[17] = { - "data_file": "./validations/sq_metrics/sharpness_din/input/broadband_5800.wav", + "data_file": "input/broadband_5800.wav", "S": 5.69, } broadband[18] = { - "data_file": "./validations/sq_metrics/sharpness_din/input/broadband_7000.wav", + "data_file": "input/broadband_7000.wav", "S": 6.47, } broadband[19] = { - "data_file": "./validations/sq_metrics/sharpness_din/input/broadband_8500.wav", + "data_file": "input/broadband_8500.wav", "S": 7.46, } @@ -108,88 +108,88 @@ narrowband = np.zeros((21), dtype=dict) narrowband[0] = { - "data_file": "./validations/sq_metrics/sharpness_din/input/narrowband_250.wav", + "data_file": "input/narrowband_250.wav", "type": "Narrow-band", "S": 0.38, } narrowband[1] = { - "data_file": "./validations/sq_metrics/sharpness_din/input/narrowband_350.wav", + "data_file": "input/narrowband_350.wav", "S": 0.49, } narrowband[2] = { - "data_file": "./validations/sq_metrics/sharpness_din/input/narrowband_450.wav", + "data_file": "input/narrowband_450.wav", "S": 0.6, } narrowband[3] = { - "data_file": "./validations/sq_metrics/sharpness_din/input/narrowband_570.wav", + "data_file": "input/narrowband_570.wav", "S": 0.71, } narrowband[4] = { - "data_file": "./validations/sq_metrics/sharpness_din/input/narrowband_700.wav", + "data_file": "input/narrowband_700.wav", "S": 0.82, } narrowband[5] = { - "data_file": "./validations/sq_metrics/sharpness_din/input/narrowband_840.wav", + "data_file": "input/narrowband_840.wav", "S": 0.93, } narrowband[6] = { - "data_file": "./validations/sq_metrics/sharpness_din/input/narrowband_1000.wav", + "data_file": "input/narrowband_1000.wav", "S": 1.00, } narrowband[7] = { - "data_file": "./validations/sq_metrics/sharpness_din/input/narrowband_1170.wav", + "data_file": "input/narrowband_1170.wav", "S": 1.13, } narrowband[8] = { - "data_file": "./validations/sq_metrics/sharpness_din/input/narrowband_1370.wav", + "data_file": "input/narrowband_1370.wav", "S": 1.26, } narrowband[9] = { - "data_file": "./validations/sq_metrics/sharpness_din/input/narrowband_1600.wav", + "data_file": "input/narrowband_1600.wav", "S": 1.35, } narrowband[10] = { - "data_file": "./validations/sq_metrics/sharpness_din/input/narrowband_1850.wav", + "data_file": "input/narrowband_1850.wav", "S": 1.49, } narrowband[11] = { - "data_file": "./validations/sq_metrics/sharpness_din/input/narrowband_2150.wav", + "data_file": "input/narrowband_2150.wav", "S": 1.64, } narrowband[12] = { - "data_file": "./validations/sq_metrics/sharpness_din/input/narrowband_2500.wav", + "data_file": "input/narrowband_2500.wav", "S": 1.78, } narrowband[13] = { - "data_file": "./validations/sq_metrics/sharpness_din/input/narrowband_2900.wav", + "data_file": "input/narrowband_2900.wav", "S": 2.06, } narrowband[14] = { - "data_file": "./validations/sq_metrics/sharpness_din/input/narrowband_3400.wav", + "data_file": "input/narrowband_3400.wav", "S": 2.40, } narrowband[15] = { - "data_file": "./validations/sq_metrics/sharpness_din/input/narrowband_4000.wav", + "data_file": "input/narrowband_4000.wav", "S": 2.82, } narrowband[16] = { - "data_file": "./validations/sq_metrics/sharpness_din/input/narrowband_4800.wav", + "data_file": "input/narrowband_4800.wav", "S": 3.48, } narrowband[17] = { - "data_file": "./validations/sq_metrics/sharpness_din/input/narrowband_5800.wav", + "data_file": "input/narrowband_5800.wav", "S": 4.43, } narrowband[18] = { - "data_file": "./validations/sq_metrics/sharpness_din/input/narrowband_7000.wav", + "data_file": "input/narrowband_7000.wav", "S": 5.52, } narrowband[19] = { - "data_file": "./validations/sq_metrics/sharpness_din/input/narrowband_8500.wav", + "data_file": "input/narrowband_8500.wav", "S": 6.81, } narrowband[20] = { - "data_file": "./validations/sq_metrics/sharpness_din/input/narrowband_10500.wav", + "data_file": "input/narrowband_10500.wav", "S": 8.55, } @@ -302,7 +302,7 @@ def _check_compliance(sharpness, reference, noise_type): plt.ylabel("Sharpness, [acum]") plt.savefig( - "./validations/sq_metrics/sharpness_din/output/" + "output/" + "validation_sharpness_" + noise_type + "_noise" From 6ddfdd3b9cf6e56c3285fbbc115d562dd9b7723e Mon Sep 17 00:00:00 2001 From: wantysal Date: Fri, 20 May 2022 10:55:06 +0200 Subject: [PATCH 16/17] [BC] validation print deleted --- mosqito/sound_level_meter/noct_spectrum/noct_spectrum.py | 1 - 1 file changed, 1 deletion(-) diff --git a/mosqito/sound_level_meter/noct_spectrum/noct_spectrum.py b/mosqito/sound_level_meter/noct_spectrum/noct_spectrum.py index a4b0abf6..d9831dbf 100644 --- a/mosqito/sound_level_meter/noct_spectrum/noct_spectrum.py +++ b/mosqito/sound_level_meter/noct_spectrum/noct_spectrum.py @@ -58,7 +58,6 @@ def noct_spectrum(sig, fs, fmin, fmax, n=3, G=10, fr=1000): # Calculation of the rms level of the signal in each band spec = [] for fc, alpha in zip(fc_vec, alpha_vec): - print(fc, alpha) spec.append(_n_oct_time_filter(sig, fs, fc, alpha)) return np.array(spec), fpref From ff32c700ba02f24d94f40df38312ab8ec888598a Mon Sep 17 00:00:00 2001 From: wantysal Date: Fri, 20 May 2022 13:47:24 +0200 Subject: [PATCH 17/17] [CC] docstring update --- mosqito/sound_level_meter/noct_spectrum/_filter_bandwidth.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/mosqito/sound_level_meter/noct_spectrum/_filter_bandwidth.py b/mosqito/sound_level_meter/noct_spectrum/_filter_bandwidth.py index e1835bd1..53c08164 100644 --- a/mosqito/sound_level_meter/noct_spectrum/_filter_bandwidth.py +++ b/mosqito/sound_level_meter/noct_spectrum/_filter_bandwidth.py @@ -30,6 +30,11 @@ def _filter_bandwidth(fc, n=3, N=3): alpha : numpy.ndarray Ratio of the upper and lower band-edge frequencies to the mid-band frequency + f1 : float + Lower frequency of the band in Hz + f2 : float + Upper frequency of the band in Hz + """ """