python/bode.py
changeset 0 0efde00f9229
equal deleted inserted replaced
-1:000000000000 0:0efde00f9229
       
     1 import pylab as pl
       
     2 
       
     3 def freqresp(H, omega, sys_type='c'):
       
     4     if (omega == None):
       
     5         omega = pl.logspace(-2, 2);
       
     6 
       
     7     num = pl.poly1d(H.num)
       
     8     den = pl.poly1d(H.den)
       
     9     if sys_type == 'd':
       
    10         fresp = map(lambda w: num(w) / den(w), pl.exp(2*pl.pi*omega*1j))
       
    11     else:
       
    12         fresp = map(lambda w: num(w) / den(w), 2*pl.pi*omega*1j)
       
    13     fresp = pl.array(fresp)
       
    14     return omega, fresp
       
    15 
       
    16 def phasemag(fresp):
       
    17     mag = abs(fresp)
       
    18     mag = 20*pl.log10(mag)
       
    19 
       
    20     phase = pl.angle(fresp)*180/pl.pi
       
    21 
       
    22     return mag, phase
       
    23     
       
    24 def bode(sys, omega=None):
       
    25     omega, fresp  = freqresp(sys, omega, 'd')
       
    26     mag, phase = phasemag(fresp)
       
    27 
       
    28     pl.subplot(211)
       
    29     pl.grid(linestyle='--')
       
    30     pl.semilogx(omega, mag)
       
    31     xmin, xmax = pl.xlim()
       
    32     pl.xlim(1e-3, xmax)
       
    33 
       
    34     pl.subplot(212)
       
    35     pl.grid(linestyle='--')
       
    36     pl.semilogx(omega, phase)
       
    37     xmin, xmax = pl.xlim()
       
    38     pl.xlim(1e-3, xmax)
       
    39 
       
    40     return (211, 212)
       
    41