python/bode.py
author Puneeth Chaganti <punchagan@fossee.in>
Fri, 27 May 2011 14:24:59 +0530
changeset 0 0efde00f9229
permissions -rw-r--r--
Initial commit.

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)