diff -r 000000000000 -r 0efde00f9229 python/bode.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/python/bode.py Fri May 27 14:24:59 2011 +0530 @@ -0,0 +1,41 @@ +import pylab as pl + +def freqresp(H, omega, sys_type='c'): + if (omega == None): + omega = pl.logspace(-2, 2); + + num = pl.poly1d(H.num) + den = pl.poly1d(H.den) + if sys_type == 'd': + fresp = map(lambda w: num(w) / den(w), pl.exp(2*pl.pi*omega*1j)) + else: + fresp = map(lambda w: num(w) / den(w), 2*pl.pi*omega*1j) + fresp = pl.array(fresp) + return omega, fresp + +def phasemag(fresp): + mag = abs(fresp) + mag = 20*pl.log10(mag) + + phase = pl.angle(fresp)*180/pl.pi + + return mag, phase + +def bode(sys, omega=None): + omega, fresp = freqresp(sys, omega, 'd') + mag, phase = phasemag(fresp) + + pl.subplot(211) + pl.grid(linestyle='--') + pl.semilogx(omega, mag) + xmin, xmax = pl.xlim() + pl.xlim(1e-3, xmax) + + pl.subplot(212) + pl.grid(linestyle='--') + pl.semilogx(omega, phase) + xmin, xmax = pl.xlim() + pl.xlim(1e-3, xmax) + + return (211, 212) +