EDIT
This ended up being a bug with my plotting code :)
I'm relatively new to using IIR filters, I wanted a bandpass filter for the 0.5Hz -> 5.0Hz frequency range and was looking at the zero-pole plots for different options scipy gives you.
I'm using
def zpk_plots(low_cutoff=0.5, high_cutoff=5.0, order=5, attenuation=40):
sampling_freq = 30
nyquist_freq = 0.5*sampling_freq
norm_low_cutoff = low_cutoff / nyquist_freq
norm_high_cutoff = high_cutoff / nyquist_freq
cricial_freqs = [norm_low_cutoff, norm_high_cutoff]
z, p, k = butter(order, Wn=cricial_freqs, btype='bandpass',output="zpk")
pole_zero(z,p,k)
z, p, k = cheby1(order, attenuation, Wn=cricial_freqs, btype='bandpass',output="zpk")
pole_zero(z,p,k)
z, p, k = cheby2(order, attenuation, Wn=cricial_freqs, btype='bandpass',output="zpk")
pole_zero(z,p,k)
def pole_zero(z, p, k):
z_x = np.real(z)
z_y = np.imag(z)
p_x = np.real(p)
p_y = np.imag(z)
... plotting code here ...
Butterworth:
Chebyshev1:
Chebyshev2:
For Chebyshev2, my zero-pole plot looks very different. What does this mean? I'm not very good at filters so I may be completely misunderstanding it, but the poles are complex, and they don't have conjugate symmetry (I think this means the filter is not fully causal?) and also some of the poles are outside of the unit circle (I think this means the filter is unstable and will blow up the input signal?)
Essentially I want to know:
- Why is the Chebyshev2 plot so different from the others?
- What can the positions of the poles tell me about this filter's behavior?