b. Determinar, esquematizar y etiquetar su respuesta de frecuencia, indicando a que tipo de filtro no ideal de frecuencias selectivas se podría asociar su comportamiento.
tarea…
c. Obtener la respuesta impulso h(t) que representa al circuito eléctrico.
d. Determinar la respuesta v2(t) que se obtiene a la salida de dicho sistema cuando tiene una entrada v1(t) = sen 50t [V].
¿Qué puede decir acerca de si el sistema transmite con distorsión o sin distorsión? Justifique su respuesta de manera razonada.
d. Determinar la potencia de la señal de salida y(t) y la representación de su espectro de Series de Fourier complejas exponenciales. Indique también el orden de los armónicos que están presentes en dicha salida.
d. Determinar la potencia de la señal de salida y(t) y la representación de su espectro de Series de Fourier complejas exponenciales. Indique también el orden de los armónicos que están presentes en dicha salida.
Y(ω)=Z(ω)H(ω)]=p11π(ω)Z(ω)
Las frecuencias superiores a 11ω no pasan por el filtro LPF
la relación entre los periodos fundamentales es racional, se tiene que la señal de salida y(t) es periódica.
2T1=3T2=T02(1)=332=2=T0ω0=T02π=22π=π
los armónicos se pueden obtener observando la gráfica de y(ω):
k1 = 2, k2=3
para la potencia de la señal de salida y(t) se puede aplicar la relación de Parseval, siendo Ck los coeficientes de cada cos() para cada ωk, y C0 es cero por no tener componente en ω0=π
strong>Nota: cuando se produzca el siguiente error con Numpy para evaluar una expresión con exponente negativo,
Traceback (most recent call last):
File "D:\MATG1052Ejemplos\Transformadaz\ejercicio....py", line 93, in
fi = f_n(ki)
File "", line 2, in _lambdifygenerated
return (9/59)*4**(-n)*Heaviside(n, 1/2)
ValueError: Integers to negative integer powers are not allowed.
proceda actualizando los valores a evaluar como tipo real (dtype float), tan solo usando en la línea de ki con lo siguiente:
ki = np.arange(0,muestras_fn,1.0)
quedando las instrucciones de la siguiente forma, que si evalua valores para realizar gráficas.
# Transformada z- Fracciones parciales# https://blog.espol.edu.ec/telg1001/lti-dt-transformada-z-xz-fracciones-parciales-con-python/import numpy as np
import sympy as sym
import matplotlib.pyplot as plt
import telg1001 as fcnm
#sym.SYMPY_DEBUG=True# INGRESO
z = sym.Symbol('z')
n = sym.Symbol('n', real=True)
# coeficientes como racional en dominio 'ZZ' enteros
a0 = sym.Rational(3,4)
a1 = sym.Rational(1,8)
Pz = z**2
Qz = z**2-a0*z+a1
#Pz = z*z**2#Qz = (z-1)*(z**2-(a0)*z+a1)
F = Pz/Qz
# para graficar
f_nombre = 'H'# nombre de función[z]: H,X,Y, etc
muestras_fn = 10 # muestras para f[n]# PROCEDIMIENTO
Fz = fcnm.apart_z(F)
Fz_factor = sym.factor(F.evalf())
Fz_factor = fcnm._round_float_is_int(Fz_factor)
# polos y ceros de Hz
[P,Q] = Fz.as_numer_denom()
P = sym.poly(P,z)
Q = sym.poly(Q,z)
P_ceros = sym.roots(P)
Q_polos = sym.roots(Q)
estable_z = fcnm.estabilidad_asintotica_z(Q_polos)
# Inversa de transformada z
fn = 0*n ; Fz_revisar = [] ; Qz2_term =[]
term_sum = sym.Add.make_args(Fz)
for term_k in term_sum:
term_kn = fcnm.inverse_z_transform(term_k,z,n)
iftype(term_kn)==tuple:
fn = fn + term_kn[0]
elif term_kn isnotNone:
fn = fn + term_kn
elif term_kn isNone:
f_noeval = f_noeval + term_k
Qz2 = fcnm.Q_cuad_z_parametros(term_k)
if Qz2:
Qz2_term.append(Qz2)
fn = fn.collect(sym.Heaviside(n))
fn = fn.collect(sym.DiracDelta(n))
fn = fcnm._round_float_is_int(fn)
# SALIDAprint('\n '+f_nombre+'z:')
sym.pprint(F)
print('\n '+f_nombre+'z en fracciones parciales')
sym.pprint(Fz)
print('\n '+f_nombre+'z en factores')
sym.pprint(Fz_factor)
print('\n {Q_polos:veces}:',Q_polos)
print(' {P_ceros:veces}:',P_ceros)
iflen(Qz2_term)>0:
print('\nparametros cuadraticos: ')
for i inrange(0,len(Qz2_term),1):
for unterm in Qz2_term[i]:
print(' termino:',unterm)
fcnm.print_resultado_dict(Qz2_term[i][unterm])
print('\nestabilidad asintótica en z:')
fcnm.print_resultado_dict(estable_z)
print('\n '+f_nombre.lower()+'[n]:')
sym.pprint(fn)
iflen(Fz_revisar)>0:
print('revisar terminos sin transformada de tabla:')
for un_term in Fz_revisar:
print(un_term)
# # GRAFICA -----------
fig_ROC = fcnm.graficar_Fz_polos(Fz_factor,Q_polos,P_ceros,
muestras=101,f_nombre=f_nombre)
fig_Fz = fcnm.graficar_Fs(Fz_factor,Q_polos,P_ceros,
muestras=101,
f_nombre=f_nombre)
# graficar f[n] -------
f_n = sym.lambdify(n,fn.expand(),modules=fcnm.equivalentes)
ki = np.arange(0,muestras_fn,1.0)
fi = f_n(ki)
print('\nseñal discreta '+f_nombre.lower()+'[n]')
print('n :',ki)
print(f_nombre.lower()+'[n]:',fi)
# graficar f[n]
fig_fn, grafxn = plt.subplots()
plt.axvline(0,color='grey')
plt.stem(ki,fi)
plt.grid()
plt.xlabel('n')
plt.ylabel(f_nombre.lower()+'[n]')
etiqueta = r''+f_nombre.lower()+'[n]= $'+str(sym.latex(fn))+'$'
plt.title(etiqueta)
plt.show()
Literal c
revisando los polos y ceros:
ceros : z = 0 y z = 0
polos: z=1/4 y z=1/2
Dado que todos los polos se encuentran dentro del círculo de radio unitario , el sistema es asintóticamente estable, por lo que es BIBO o EASA estable
En la salida, existe un factor de atenuación de 0.04 y un retardo de 87.70°.
Como la señal de entrada se reproduce de manera exacta en su salida a pesar tener amplitud diferente y un retardo en el tiempo.
y restaurando en fracciones parciales al multiplicar por z cada lado
H[z]=599z−41z+592z2−z−92z(25z−4)
los valores no se ajustan al modelo planteado en el enunciado, y existe un polo con radio>1, por lo que el sistema es creciente,y otro polo en posición r<0.
h[n]=aαnμ[n]+bβnμ[n]+cγnμ[n]
obtenga entonces los valores pertinentes.
a= 9/59 = 0.1525
b= … creciente sin cota, con polo mayor a 1
c=… con polo negativo, lo que es un término con signo alternado.
α= 1/4 = 0.25
β = 1/2 + np.sqrt(17)/6 = 1.1871842709362768
γ = 1/2 – np.sqrt(17)/6 = -0.18718427093627676
Resultados iniciales con el algoritmo
Se encuentra que hay un término que no se puede usar para encontrar la transformada z.
Desarrollo con las expresiones iniciales, sin corrección sobre los parámetros que se indican en el enunciado.
Nota: cuando se produzca el siguiente error con Numpy para evaluar una expresión con exponente negativo,
Traceback (most recent call last):
File "D:\MATG1052Ejemplos\Transformadaz\ejercicio03.py", line 93, in
fi = f_n(ki)
File "", line 2, in _lambdifygenerated
return (9/59)*4**(-n)*Heaviside(n, 1/2)
ValueError: Integers to negative integer powers are not allowed.
proceda actualizando los valores a evaluar como tipo real (dtype float), tan solo usando en la línea de ki con lo siguiente:
ki = np.arange(0,muestras_fn,1.0)
quedando las instrucciones de la siguiente forma, que si evalúa valores para realizar gráficas.
# Transformada z- Fracciones parciales# https://blog.espol.edu.ec/telg1001/lti-dt-transformada-z-xz-fracciones-parciales-con-python/import numpy as np
import sympy as sym
import matplotlib.pyplot as plt
import telg1001 as fcnm
#sym.SYMPY_DEBUG=True# INGRESO
z = sym.Symbol('z')
n = sym.Symbol('n', real=True)
# coeficientes como racional en dominio 'ZZ' enteros
a0 = sym.Rational(1,2)
a1 = sym.Rational(5,4)
a2 = sym.Rational(1,36)
a3 = sym.Rational(1,18)
Pz = z**3-a0*z**2
Qz = z**3-a1*z**2+a2*z+a3
F = Pz/Qz
# para graficar
f_nombre = 'H'# nombre de función[z]: H,X,Y, etc
muestras_fn = 10 # muestras para f[n]# PROCEDIMIENTO
Fz = fcnm.apart_z(F)
Fz_factor = sym.factor(F.evalf())
Fz_factor = fcnm._round_float_is_int(Fz_factor)
# polos y ceros de Hz
[P,Q] = F.as_numer_denom()
P = sym.poly(P,z)
Q = sym.poly(Q,z)
P_ceros = sym.roots(P)
Q_polos = sym.roots(Q)
estable_z = fcnm.estabilidad_asintotica_z(Q_polos)
# Inversa de transformada z
fn = 0*n ; f_noeval = 0*n ; Qz2_term =[]
term_sum = sym.Add.make_args(Fz)
for term_k in term_sum:
term_kn = fcnm.inverse_z_transform(term_k,z,n)
iftype(term_kn)==tuple:
fn = fn + term_kn[0]
elif term_kn isnotNone:
fn = fn + term_kn
elif term_kn isNone:
f_noeval = f_noeval + term_k
Qz2 = fcnm.Q_cuad_z_parametros(term_k)
if Qz2:
Qz2_term.append(Qz2)
fn = fn.collect(sym.Heaviside(n))
fn = fn.collect(sym.DiracDelta(n))
# SALIDAprint('\n '+f_nombre+'z:')
sym.pprint(F)
print('\n '+f_nombre+'z en fracciones parciales')
sym.pprint(Fz)
print('\n '+f_nombre+'z en factores')
sym.pprint(Fz_factor)
print('\n {Q_polos:veces}:',Q_polos)
print(' {P_ceros:veces}:',P_ceros)
iflen(Qz2_term)>0:
print('\nparametros cuadraticos: ')
for i inrange(0,len(Qz2_term),1):
for unterm in Qz2_term[i]:
print(' termino:',unterm)
fcnm.print_resultado_dict(Qz2_term[i][unterm])
print('\nestabilidad asintótica en z:')
fcnm.print_resultado_dict(estable_z)
print('\n '+f_nombre.lower()+'[n]:')
sym.pprint(fn)
ifnot f_noeval==sym.S.Zero:
print('revisar terminos sin transformada de tabla:')
print(f_noeval)
# # GRAFICA -----------
fig_ROC = fcnm.graficar_Fz_polos(Fz_factor,Q_polos,P_ceros,
muestras=101,f_nombre=f_nombre)
fig_Fz = fcnm.graficar_Fs(Fz_factor,Q_polos,P_ceros,
muestras=101,
f_nombre=f_nombre)
# graficar f[n] -------
f_n = sym.lambdify(n,fn.expand(),modules=fcnm.equivalentes)
ki = np.arange(0,muestras_fn,1.0)
fi = f_n(ki)
print('\nseñal discreta '+f_nombre.lower()+'[n]')
print('n :',ki)
print(f_nombre.lower()+'[n]:',fi)
# graficar f[n]
fig_fn, grafxn = plt.subplots()
plt.axvline(0,color='grey')
plt.stem(ki,fi)
plt.grid()
plt.xlabel('n')
plt.ylabel(f_nombre.lower()+'[n]')
etiqueta = r''+f_nombre.lower()+'[n]= $'+str(sym.latex(fn))+'$'
plt.title(etiqueta)
plt.show()
restaurando a fracciones parciales, al multiplicar cada lado por z, se obtiene la función de transferencia H[z] completa como componentes en paralelo junto con H1
resultado que se completan con los términos de los otros componentes, al incorporar la expresión con los elementos en paralelo como se desarrolla en el siguiente literal.
Instrucciones en Python
# Transformada z- Fracciones parciales# https://blog.espol.edu.ec/telg1001/lti-dt-transformada-z-xz-fracciones-parciales-con-python/import numpy as np
import sympy as sym
import matplotlib.pyplot as plt
import telg1001 as fcnm
#sym.SYMPY_DEBUG=True# INGRESO
z = sym.Symbol('z')
n = sym.Symbol('n', real=True)
# coeficientes como racional en dominio 'ZZ' enteros
a0 = sym.Rational(11,2).limit_denominator(100)
Pz = -(a0*z+7)
Qz = z**2-z-2
F = Pz/Qz
# para graficar
f_nombre = 'H'# nombre de función[z]: H,X,Y, etc
muestras_fn = 10 # muestras para f[n]# PROCEDIMIENTO
Fz = fcnm.apart_z(F)
Fz_factor = sym.factor(F.evalf())
# polos y ceros de Hz
[P,Q] = F.as_numer_denom()
P = sym.poly(P,z)
Q = sym.poly(Q,z)
P_ceros = sym.roots(P)
Q_polos = sym.roots(Q)
estable_z = fcnm.estabilidad_asintotica_z(Q_polos)
# Inversa de transformada z
fn = 0*n ; Fz_revisar = [] ; Qz2_term =[]
term_sum = sym.Add.make_args(Fz)
for term_k in term_sum:
term_kn = fcnm.inverse_z_transform(term_k,z,n)
iftype(term_kn)==tuple:
fn = fn + term_kn[0]
elif term_kn isnotNone:
fn = fn + term_kn
elif term_kn isNone:
f_noeval = f_noeval + term_k
Qz2 = fcnm.Q_cuad_z_parametros(term_k)
if Qz2:
Qz2_term.append(Qz2)
fn = fn.collect(sym.Heaviside(n))
fn = fn.collect(sym.DiracDelta(n))
#fn = fcnm._round_float_is_int(fn)# SALIDAprint('\n '+f_nombre+'z:')
sym.pprint(F)
print('\n '+f_nombre+'z en fracciones parciales')
sym.pprint(Fz)
print('\n '+f_nombre+'z en factores')
sym.pprint(Fz_factor)
print('\n {Q_polos:veces}:',Q_polos)
print(' {P_ceros:veces}:',P_ceros)
iflen(Qz2_term)>0:
print('\nparametros cuadraticos: ')
for i inrange(0,len(Qz2_term),1):
for unterm in Qz2_term[i]:
print(' termino:',unterm)
fcnm.print_resultado_dict(Qz2_term[i][unterm])
print('\nestabilidad asintótica en z:')
fcnm.print_resultado_dict(estable_z)
print('\n '+f_nombre.lower()+'[n]:')
sym.pprint(fn)
iflen(Fz_revisar)>0:
print('revisar terminos sin transformada de tabla:')
for un_term in Fz_revisar:
print(un_term)
# # GRAFICA -----------
fig_ROC = fcnm.graficar_Fz_polos(Fz_factor,Q_polos,P_ceros,
muestras=101,f_nombre=f_nombre)
fig_Fz = fcnm.graficar_Fs(Fz_factor,Q_polos,P_ceros,
muestras=101,
f_nombre=f_nombre)
# graficar f[n] -------
f_n = sym.lambdify(n,fn.expand(),modules=fcnm.equivalentes)
ki = np.arange(0,muestras_fn,1.0)
fi = f_n(ki)
print('\nseñal discreta '+f_nombre.lower()+'[n]')
print('n :',ki)
print(f_nombre.lower()+'[n]:',fi)
# graficar f[n]
fig_fn, grafxn = plt.subplots()
plt.axvline(0,color='grey')
plt.stem(ki,fi)
plt.grid()
plt.xlabel('n')
plt.ylabel(f_nombre.lower()+'[n]')
etiqueta = r''+f_nombre.lower()+'[n]= $'+str(sym.latex(fn))+'$'
plt.title(etiqueta)
plt.show()
literal b. Ecuación de diferencias
Se realiza la conversión por la suma de cada componente (en paralelo):
Se ubican algunos puntos de referencia sobre el diagrama de bloques para plantear las ecuaciones, dejando para el último el bloque en serie del exponencial e(-3s) o retraso en tiempo
La respuesta al impulso H1(s) tiene polos en s=-3 y s=-4, que se encuentran en el lado izquierdo del plano imaginario s. Por lo que sus componentes en el dominio del tiempo son exponenciales decrecientes, el sistema es asintóticamente estable.
El grado del polinomio P del numerador es menor al grado del polinomio Q del numerador.
Las raíces características o frecuencias naturales del sistema se encuentran dentro del círculo de radio unitario. El sistema es asintóticamente estable, que implica que es BIBO estable.