def compute_parameters(self, target='stopband'): """ This function computes the order and the -3 dB-frequency of the filter for the specific parameters. Arguments: target: The optimization goal for the filter computation. Choices are: - stopband: optimize to the stopband (like MATLAB) - passband: optimize to the passband """ if target not in ['passband', 'stopband', None]: raise ValueError("Target must be one of passband or stopband, \ or not given if filter is not Butterworth.") else: self.filter_target = target if True: # Change here to be more verbose. print("Ws = ", self.Ws) print("Wp = ", self.Wp) print("Rp = ", self.passband_attenuation) print("Rs = ", self.stopband_attenuation) if self.filter_class == 'butterworth': if target == 'passband': self.N, self.Wn = signal.buttord(self.Wp, self.Ws, self.passband_attenuation, self.stopband_attenuation, analog=True) elif target == 'stopband': self.N, self.Wn = custom.custom_buttord(self.Wp, self.Ws, self.passband_attenuation, self.stopband_attenuation, analog=True) else: raise ValueError("Butterworth filters must match either the \ passband or the stopband.") elif self.filter_class == 'chebyshev_1': self.N, self.Wn = signal.cheb1ord(self.Wp, self.Ws, self.passband_attenuation, self.stopband_attenuation, analog=True) elif self.filter_class == 'chebyshev_2': self.N, self.Wn = signal.cheb2ord(self.Wp, self.Ws, self.passband_attenuation, self.stopband_attenuation, analog=True) elif self.filter_class == 'elliptical': self.N, self.Wn = signal.ellipord(self.Wp, self.Ws, self.passband_attenuation, self.stopband_attenuation, analog=True) else: raise NotImplementedError( "Filter family {} not yet implemented".format(self.filter_class)) pass
def _compute_parameters(self): normalized_pb, normalized_sb = self.normalized_pb_sb() self.already_normalized_Wn = True if self.target == 'passband': self.N, self.Wn = signal.buttord(normalized_pb, normalized_sb, self.filter_parameters['passband_attenuation'], self.filter_parameters['stopband_attenuation'], analog=False) elif self.target == 'stopband': # Match stopband (like MATLAB) self.N, self.Wn = custom.custom_buttord(normalized_pb, normalized_sb, self.filter_parameters['passband_attenuation'], self.filter_parameters['stopband_attenuation'], analog=False) else: raise ValueError("Butterworth filters must match or the passband\ or the stopband.")