%pylab inline
Populating the interactive namespace from numpy and matplotlib
f0 = 400
Fs = 44100
Q = 0.9
w0 = 2*pi*f0/Fs
alpha = sin(w0)/(2*Q)
b0 = alpha
b1 = 0
b2 = -alpha
a0 = 1 + alpha
a1 = -2*cos(w0)
a2 = 1 - alpha
from scipy.signal import freqz
lambda w, h: plot(w, abs(h)))
def func(w,h):
plot(w, abs(h)))
freqz([b0, b1, b2], [a0, a1, a2], plot=lambda w, h: plot(Fs * w/(2*pi), abs(h)));
freqz([b0, b1, b2], [a0, a1, a2], plot=lambda w, h: plot(Fs * w/(2*pi), abs(h)));
xlim((200, 500))
(200, 500)
def resonator(f0, Q, Fs=44100) :
w0 = 2*pi*f0/Fs
alpha = sin(w0)/(2*Q)
b0 = alpha
b1 = 0
b2 = -alpha
a0 = 1 + alpha
a1 = -2*cos(w0)
a2 = 1 - alpha
return [b0, b1, b2], [a0, a1, a2]
resonator(4000, 0.6)
([0.4496256193218176, 0, -0.4496256193218176], [1.4496256193218175, -1.6839061678457496, 0.55037438067818245])
b, a = resonator(4000, 0.6)
freqz(b, a, plot=lambda w, h: plot(Fs * w/(2*pi), abs(h)));
vlines(4000, 0, 1)
<matplotlib.collections.LineCollection at 0x7f182a6791d0>
from scipy.signal import lfilter
b, a = resonator(2000, 0.2)
impulse = r_[1, zeros(50)]
stem(lfilter(b, a, impulse))
<Container object of 3 artists>
b, a = resonator(2000, 0.7)
impulse = r_[1, zeros(50)]
stem(lfilter(b, a, impulse))
<Container object of 3 artists>
b, a = resonator(2000, 0.9)
impulse = r_[1, zeros(50)]
stem(lfilter(b, a, impulse))
<Container object of 3 artists>
b, a = resonator(2000, 0.97)
impulse = r_[1, zeros(50)]
stem(lfilter(b, a, impulse))
<Container object of 3 artists>
b, a = resonator(2000, 0.999)
impulse = r_[1, zeros(50)]
stem(lfilter(b, a, impulse))
<Container object of 3 artists>
b, a = resonator(2000, 0.9999)
impulse = r_[1, zeros(50)]
stem(lfilter(b, a, impulse))
<Container object of 3 artists>
b, a = resonator(2000, 5)
impulse = r_[1, zeros(50)]
stem(lfilter(b, a, impulse))
<Container object of 3 artists>
from scipy.signal import tf2zpk
z, p, k = tf2zpk(b, a)
abs(p)
array([ 0.97227313, 0.97227313])
b, a = resonator(2000, 6.1)
impulse = r_[1, zeros(50)]
stem(lfilter(b, a, impulse))
<Container object of 3 artists>
z, p, k = tf2zpk(b, a)
abs(p)
array([ 0.97721756, 0.97721756])
b, a = resonator(2000, 2* pi)
impulse = r_[1, zeros(50)]
stem(lfilter(b, a, impulse))
z, p, k = tf2zpk(b, a)
abs(p)
array([ 0.97787459, 0.97787459])
b, a = resonator(2000, 20)
impulse = r_[1, zeros(50)]
stem(lfilter(b, a, impulse))
z, p, k = tf2zpk(b, a)
abs(p)
array([ 0.99299674, 0.99299674])
b, a = resonator(2000, 200)
impulse = r_[1, zeros(50)]
stem(lfilter(b, a, impulse))
z, p, k = tf2zpk(b, a)
abs(p)
array([ 0.99929747, 0.99929747])
b, a = resonator(2000, 2000)
impulse = r_[1, zeros(50)]
stem(lfilter(b, a, impulse))
z, p, k = tf2zpk(b, a)
abs(p)
array([ 0.99992972, 0.99992972])
b, a = resonator(2000, 200000)
impulse = r_[1, zeros(50)]
stem(lfilter(b, a, impulse))
z, p, k = tf2zpk(b, a)
abs(p)
array([ 0.9999993, 0.9999993])
resonator(440, 10)
([0.0031324162089371838, 0, -0.0031324162089371838], [1.0031324162089372, -1.99607132886337, 0.99686758379106277])
By: Andrés Cabrera mantaraya36@gmail.com
For Course MAT 240B at UCSB
This ipython notebook is licensed under the CC-BY-NC-SA license: http://creativecommons.org/licenses/by-nc-sa/4.0/