# ----------------------------------------------------------------------------

print ('\n\nFiltro Butterworth de Orden 5:\n')

# Filtro de Butterworth: Uso de los Métodos dentro del Paquete signal de Scipy.
z1, p1, k1 = sig.buttap (orden_filtro)

# Obtengo los Coeficientes de mi Transferencia.
NUM1, DEN1 = sig.zpk2tf (z1, p1, k1)

# Cálculo de wb:
wb = eps ** (-1/orden_filtro)

# Obtengo la Transferencia Normalizada
my_tf_bw = tfunction ( NUM1, DEN1 )
pretty_print_lti(my_tf_bw)

print ('\nTransferencia Normalizada Factorizada:', convert2SOS ( my_tf_bw ))

NUM1, DEN1 = sig.lp2lp ( NUM1, DEN1, wb )
my_tf_bw = tfunction ( NUM1, DEN1 )

# ----------------------------------------------------------------------------

print ('\n\nFiltro Chebyshev de Orden 5:\n')

# Filtro de Chebyshev: Uso de los Métodos dentro del Paquete signal de Scipy.
z2, p2, k2 = sig.cheb1ap (orden_filtro, eps)

# Obtengo los Coeficientes de mi Transferencia.
NUM2, DEN2 = sig.zpk2tf (z2, p2, k2)
Ejemplo n.º 2
0
from splane import tfadd, tfcascade, analyze_sys, pzmap, grpDelay, bodePlot, pretty_print_lti


nn = 2 # orden
ripple = 3 # dB


eps = np.sqrt(10**(ripple/10)-1)

z,p,k = sig.besselap(nn, norm='delay')
# z,p,k = sig.buttap(nn)


num_lp, den_lp = sig.zpk2tf(z,p,k)
num_lp, den_lp = sig.lp2lp(num_lp, den_lp, eps**(-1/nn) )

num_hp, den_hp = sig.lp2hp(num_lp,den_lp)
lp_sys = sig.TransferFunction(num_lp,den_lp)
hp_sys = sig.TransferFunction(num_hp,den_hp)
xover = tfadd(lp_sys, hp_sys)
bandpass = tfcascade(lp_sys, hp_sys)

pretty_print_lti(lp_sys)
pretty_print_lti(hp_sys)
pretty_print_lti(xover)
pretty_print_lti(bandpass)


analyze_sys([lp_sys, hp_sys, xover, bandpass], ['lp', 'hp', 'xover', 'bandpass'])

Ejemplo n.º 3
0
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Wed May  8 23:14:49 2019

@author: mariano
"""

import scipy.signal as sig
import numpy as np
from splane import tfadd, tfcascade, analyze_sys, pzmap, grpDelay, bodePlot, pretty_print_lti

kn = 1

# num
qn = 1e6
wn = 2
# num
qd = np.sqrt(2)/2
wd = 1

tf_bicuad = sig.TransferFunction(kn*np.array([1, wn/qn, wn**2]), np.array([1, wd/qd, wd**2]))


pretty_print_lti(tf_bicuad)


analyze_sys([tf_bicuad], ['bicuad'])

Ejemplo n.º 4
0
# obtengo la transferencia normalizada del pasabanda
num_bp_n, den_bp_n = sig.lp2bp(num_lp_shift, den_lp_shift, wo=1, bw=1 / .253)

# obtengo la transferencia desnormalizada del pasabanda
num_bp, den_bp = sig.lp2bp(num_lp_shift, den_lp_shift, wo=8.367, bw=33)

# Averiguo los polos y ceros
z_bp_n, p_bp_n, k_bp_n = sig.tf2zpk(num_bp_n, den_bp_n)

str_aux = 'Pasabanda normalizado'
print(str_aux)
print('-' * len(str_aux))

this_lti = sig.TransferFunction(num_bp_n, den_bp_n)
pretty_print_lti(this_lti)
print('\n\n')

#%matplotlib qt5
# visualizo el modelo matemático normalizado
#analyze_sys([sig.TransferFunction(num_bp_n,den_bp_n)], ['mp'])
# o el modelo matemático desnormalizado
#analyze_sys([sig.TransferFunction(num_bp,den_bp)], ['mp'])

# visualización de cada sección

fig_id = 1
this_lti = sig.TransferFunction(num_bp_n, den_bp_n)
_, axes_hdl = bodePlot(this_lti, label='Total', fig_id=fig_id)
all_sys = [this_lti]
str_labels = ['total']
Ejemplo n.º 5
0
        this_order, _ = sig.ellipord(omega_p,
                                     omega_s,
                                     alfa_max,
                                     alfa_min,
                                     analog=True)

    z, p, k = sig.ellipap(this_order, alfa_max, alfa_min)

lowpass_proto_lti = sig.ZerosPolesGain(z, p, k).to_tf()
str_designed_filter = '{:s} orden {:d}'.format(aprox_name, this_order)

if force_order > 0:
    print_console_alert('Order forced to {:d}'.format(force_order))

print_console_subtitle('Total transfer function')
pretty_print_lti(lowpass_proto_lti)

if p.shape[0] > 2:

    print_console_subtitle('Cascade of second order systems (SOS' 's)')
    lowpass_sos_proto = zpk2sos_analog(z, p, k)

    # pretty_print_SOS(lowpass_sos_proto)
    pretty_print_SOS(lowpass_sos_proto, mode='omegayq')

    print_console_subtitle('Respuesta en frecuencia')

    analyze_sys(lowpass_sos_proto, str_designed_filter)

else:
    print_console_subtitle('Respuesta en frecuencia')