From 12d4d854b02e9e65e299bf1f534fe7e4dec34485 Mon Sep 17 00:00:00 2001 From: topherbuckley Date: Wed, 28 Feb 2018 10:36:20 +0900 Subject: [PATCH 1/2] Fixes exponential weighting filter implementation. See Issue #210 --- acoustics/standards/iec_61672_1_2013.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/acoustics/standards/iec_61672_1_2013.py b/acoustics/standards/iec_61672_1_2013.py index 25de534e..1888a6bd 100644 --- a/acoustics/standards/iec_61672_1_2013.py +++ b/acoustics/standards/iec_61672_1_2013.py @@ -157,8 +157,9 @@ def integrate(data, sample_frequency, integration_time): integration_time = np.asarray(integration_time) sample_frequency = np.asarray(sample_frequency) samples = data.shape[-1] - b, a = zpk2tf([1.0], [1.0, integration_time], [1.0]) - b, a = bilinear(b, a, fs=sample_frequency) + b_analog = np.poly1d([1]) + a_analog = np.poly1d([integration_time, 1]) + b, a = bilinear(b_analog, a_analog, fs=sample_frequency) #b, a = bilinear([1.0], [1.0, integration_time], fs=sample_frequency) # Bilinear: Analog to Digital filter. n = np.floor(integration_time * sample_frequency).astype(int) data = data[..., 0:n*(samples//n)] From a937cd7f0cec7d38194b810439fcb3bde0befc28 Mon Sep 17 00:00:00 2001 From: topherbuckley Date: Thu, 1 Mar 2018 10:12:59 +0900 Subject: [PATCH 2/2] added kwarg for reference pressure pref in order to be able to calculate spectrograms on dB SPL scale --- acoustics/_signal.pyx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/acoustics/_signal.pyx b/acoustics/_signal.pyx index 64faedec..c7f2f9d7 100644 --- a/acoustics/_signal.pyx +++ b/acoustics/_signal.pyx @@ -651,6 +651,7 @@ class Signal(numpy.ndarray): * xlim * ylim * clim + * pref (default to 1, set pref=20e-6 for SPL) .. note:: This method only works for a single channel. """ @@ -659,6 +660,7 @@ class Signal(numpy.ndarray): 'xlim' : None, 'ylim' : None, 'clim' : None, + 'pref' : 1, 'NFFT' : 4096, 'noverlap' : 128, 'title': 'Spectrogram', @@ -676,7 +678,7 @@ class Signal(numpy.ndarray): ax0 = params.get('ax', plt.figure().add_subplot(111)) ax0.set_title(params['title']) - data = np.squeeze(self) + data = np.squeeze(self) / pref try: _, _, _, im = ax0.specgram(data, Fs=self.fs, noverlap=params['noverlap'], NFFT=params['NFFT'], mode='magnitude', scale_by_freq=False) except AttributeError: