SharedUntitled.ipynbOpen in CoCalc
Prueba de aproximaciones

## Comparativa de funciones de aproximación¶

En el siguiente documento se muestra una comparativa de órdenes para las funciones de aproximación estudiadas en clase:

import scipy.signal as sig
#import matplotlib.pyplot as plt
from splane import pzmap, grpDelay, bodePlot

def analyze_sys( all_sys, all_legends ):

cant_sys = len(all_legends);

## BODE plots
fig_hdl = 1
axes_hdl = ()

for ii in range(cant_sys):
fig_hdl, axes_hdl = bodePlot(all_sys[ii], fig_hdl, axes_hdl)

## PZ Maps
fig_hdl = 2

pzmap(all_sys, fig_hdl)

## Group delay plots
fig_hdl = 3

for ii in range(cant_sys):
fig_hdl = grpDelay(all_sys[ii], fig_hdl)

#####################
## Start of script ##
#####################

#aprox_name = 'Butterworth'
#aprox_name = 'Chebyshev1'
#aprox_name = 'Chebyshev2'
aprox_name = 'Bessel'
#aprox_name = 'Cauer'

ripple = 0.5
attenuation = 40
orders2analyze = range(2,7)

all_sys = []

for ii in orders2analyze:

if aprox_name == 'Butterworth':

z,p,k = sig.buttap(ii)

elif aprox_name == 'Chebyshev1':

z,p,k = sig.cheb1ap(ii, ripple)

elif aprox_name == 'Chebyshev2':

z,p,k = sig.cheb2ap(ii, ripple)

elif aprox_name == 'Bessel':

z,p,k = sig.besselap(ii, norm='mag')

elif aprox_name == 'Cauer':

z,p,k = sig.ellipap(ii, ripple, attenuation)

num, den = sig.zpk2tf(z,p,k)

all_sys.append(sig.TransferFunction(num,den))

analyze_sys( all_sys, orders2analyze )