From eedd6d83b4a2b65f4fbb269631ab5188a6670243 Mon Sep 17 00:00:00 2001 From: Casper Date: Thu, 5 Jan 2023 17:06:32 +0100 Subject: [PATCH] Improved handling of EQ when fs=44.1k a bit, including suggestion to use 48k --- src/lasp/filter/filterbank_design.py | 52 ++++++++++++++-------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/src/lasp/filter/filterbank_design.py b/src/lasp/filter/filterbank_design.py index 777b720..5370725 100644 --- a/src/lasp/filter/filterbank_design.py +++ b/src/lasp/filter/filterbank_design.py @@ -85,8 +85,8 @@ class FilterBankDesigner: if self.nominal_txt(x) == nom_txt: return x raise ValueError( - f'Could not find a nominal frequency corresponding to {nom_txt}. Hint: use \'5k\' instead of \'5000\'.' - ) + f'Could not find a nominal frequency corresponding to {nom_txt}. ' + 'Hint: use \'5k\' instead of \'5000\'.') def sanitize_input(self, input_): if isinstance(input_, int): @@ -254,8 +254,8 @@ class FilterBankDesigner: for i, x in enumerate(range(xl, xu + 1)): fl = self.fl(x) fu = self.fu(x) - # Find the indices in the frequency array which correspond to the - # frequency band x + # Find the indices in the frequency array which correspond to + # the frequency band x if x != xu: indices_cur = np.where((freq >= fl) & (freq < fu)) else: @@ -337,13 +337,13 @@ class OctaveBankDesigner(FilterBankDesigner): Args: x: Filter offset power from the reference frequency of 1000 Hz. - filter_class: Either 0 or 1, defines the tolerances on the frequency - response + filter_class: Either 0 or 1, defines the tolerances on the + frequency response Returns: - freq, llim, ulim: Tuple of Numpy arrays containing the frequencies of - the corner points of the filter frequency response limits, lower limits - in *deciBell*, upper limits in *deciBell*, respectively. + freq, llim, ulim: Tuple of Numpy arrays containing the frequencies + of the corner points of the filter frequency response limits, lower + limits in *deciBell*, upper limits in *deciBell*, respectively. """ b = 1 @@ -450,8 +450,8 @@ class OctaveBankDesigner(FilterBankDesigner): if int(self.fs) in [44100, 48000, 96000]: return 1.0 else: - raise ValueError('Unimplemented sampling frequency for SOS' - 'filter design') + raise ValueError('Unimplemented sampling frequency \'{} Hz\' for ' + 'SOS filter design. Try 48 kHz.'.format(self.fs)) def sosFac_u(self, x): """Right side percentage of change in cut-on frequency for designing @@ -463,8 +463,8 @@ class OctaveBankDesigner(FilterBankDesigner): if int(self.fs) in [44100, 48000, 96000]: return 1.0 else: - raise ValueError('Unimplemented sampling frequency for SOS' - 'filter design') + raise ValueError('Unimplemented sampling frequency \'{} Hz\' for ' + 'SOS filter design. Try 48 kHz.'.format(self.fs)) class ThirdOctaveBankDesigner(FilterBankDesigner): @@ -511,13 +511,13 @@ class ThirdOctaveBankDesigner(FilterBankDesigner): Args: x: Filter offset power from the reference frequency of 1000 Hz. - filter_class: Either 0 or 1, defines the tolerances on the frequency - response + filter_class: Either 0 or 1, defines the tolerances on the + frequency response Returns: - freq, llim, ulim: Tuple of Numpy arrays containing the frequencies of - the corner points of the filter frequency response limits, lower limits - in *deciBell*, upper limits in *deciBell*, respectively. + freq, llim, ulim: Tuple of Numpy arrays containing the frequencies + of the corner points of the filter frequency response limits, lower + limits in *deciBell*, upper limits in *deciBell*, respectively. """ fm = self.G**(x / self.b) * self.fr @@ -605,16 +605,16 @@ class ThirdOctaveBankDesigner(FilterBankDesigner): # Idea: correct for frequency warping: if np.isclose(self.fs, 48000): return 1.00 - elif np.isclose(self.fs, 41000): - warnings.warn( - f'Frequency {self.fs} might not result in correct filters') - + elif np.isclose(self.fs, 44100): + warnings.warn(f'Sampling frequency {self.fs} Hz might result in ' + 'incorrect filters') return 1.00 elif np.isclose(self.fs, 32768): return 1.00 else: - raise ValueError('Unimplemented sampling frequency for SOS' - 'filter design') + raise ValueError('Unimplemented sampling frequency \'{} Hz\' for ' + 'SOS filter design. Try 48 kHz.'.format(self.fs)) + def sosFac_u(self, x): """Right side percentage of change in cut-on frequency for designing the filter.""" @@ -623,5 +623,5 @@ class ThirdOctaveBankDesigner(FilterBankDesigner): elif np.isclose(self.fs, 32768): return 1.00 else: - raise ValueError('Unimplemented sampling frequency for SOS' - 'filter design') + raise ValueError('Unimplemented sampling frequency \'{} Hz\' for ' + 'SOS filter design. Try 48 kHz.'.format(self.fs))