El ejercicio planteado en Sistema Discreto – Solución iterativa, se desarrolla con un algoritmo en Python.
Ejercicio 1
Referencia: Lathi ejemplo 3.11 p266
Un sistema LTID tiene la siguiente expresión:
y[n] - 0.5 y[n-1] = x[n]
con condiciones iniciales y[-1]=16 y entrada causal x[n] = n2 ,para n≥0.
El algoritmo tiene el siguiente resultado:
muestras: 10
[[ n, xi, yi]]
[[ -1. 0. 16. ]
[ 0. 0. 8. ]
[ 1. 1. 5. ]
[ 2. 4. 6.5 ]
[ 3. 9. 12.25]
[ 4. 16. 22.12]
[ 5. 25. 36.06]
[ 6. 36. 54.03]
[ 7. 49. 76.02]
[ 8. 64. 102.01]
[ 9. 81. 132. ]]
>>>
Algoritmo en Python
Las condiciones iniciales se ingresan como un vector con valores de posición ascendente. También es necesario indicar el número de muestras a observar. esto permite construir el vector de salida yi.
Las fórmulas de entrada y salida se muestran en la sección «calcula los siguientes valores»
# Sistema LTID. Solución iterativa
# Ejercicio Lathi ejemplo 3.11 p266
import numpy as np
import matplotlib.pyplot as plt
# INGRESO
muestras = 10
# condiciones iniciales ascendente ...,y[-2],y[-1]
y0 = [16.]
# PROCEDIMIENTO
m0 = len(y0)
m = muestras + m0
# vectores
n = np.arange(-m0,muestras,1)
xi = np.zeros(m, dtype=float)
yi = np.zeros(m, dtype=float)
# añade condiciones iniciales
xi[0:m0] = 0
yi[0:m0] = y0
# calcula los siguientes valores
for k in range(m0,m,1):
xi[k] = n[k]**2
yi[k] = 0.5*yi[k-1]+xi[k]
# tabla de valores
tabla = np.concatenate([[n],[xi],[yi]], axis=0)
tabla = np.transpose(tabla)
# SALIDA
np.set_printoptions(precision=2)
print('muestras: ', muestras)
print('[[ n, xi, yi]]')
print(tabla)
# Gráfica
plt.subplot(211)
plt.stem(n,xi,label='x[n]=n**2')
plt.xlabel('n')
plt.ylabel('x[n]')
plt.axvline(0,color='gray')
plt.legend()
plt.grid()
plt.subplot(212)
plt.stem(n,yi,label='y[n]=0.5y[n-1]+x[n]',
markerfmt='go',
linefmt='green')
plt.xlabel('n')
plt.ylabel('y[n]')
plt.axvline(0,color='gray')
plt.legend()
plt.grid()
plt.show()
Ejercicio 2
Se aplica el mismo algoritmo a otro ejercicio para comparar resultados con lo realizado en forma analítica.
Referencia: Lathi ejemplo 3.12 p267
Resolver de forma iterativa,
y[n+2] - y[n+1] +0.24y[n] = x[n+2] - 2x[n+1]
con las condiciones iniciales de y[-1] = 2, y[-2] =1 y entrada causal x[n]=n que inicia en n=0
Para usar la ecuación en el algoritmo, se desplaza dos posiciones en ambos lados de la ecuacion para despejar y[n]
y[n] - y[n-1] +0.24y[n-2] = x[n0] - 2x[n-1]
y[n] = y[n-1] -0.24y[n-2] + x[n0] - 2x[n-1]
muestras: 10
[[ n, xi, yi]]
[[ -2. 0. 1. ]
[ -1. 0. 2. ]
[ 0. 0. 1.76]
[ 1. 1. 2.28]
[ 2. 2. 1.86]
[ 3. 3. 0.31]
[ 4. 4. -2.14]
[ 5. 5. -5.21]
[ 6. 6. -8.7 ]
[ 7. 7. -12.45]
[ 8. 8. -16.36]
[ 9. 9. -20.37]]
>>>
Algoritmo en Python
# Sistema LTID. Solución iterativa
# Ejercicio Lathi ejemplo 3.12 p267
import numpy as np
import matplotlib.pyplot as plt
# INGRESO
muestras = 10
# condiciones iniciales ascendente ...,y[-2],y[-1]
y0 = [1,2]
# PROCEDIMIENTO
m0 = len(y0)
m = muestras + m0
# vectores
n = np.arange(-m0,muestras,1)
xi = np.zeros(m, dtype=float)
yi = np.zeros(m, dtype=float)
# añade condiciones iniciales
xi[0:m0] = 0
yi[0:m0] = y0
# calcula los siguientes valores
for k in range(m0,m,1):
xi[k] = n[k]
yi[k] = yi[k-1]-0.24*yi[k-2]+xi[k]-2*xi[k-1]
# tabla de valores
tabla = np.concatenate([[n],[xi],[yi]], axis=0)
tabla = np.transpose(tabla)
# SALIDA
np.set_printoptions(precision=2)
print('muestras: ', muestras)
print('[[ n, xi, yi]]')
print(tabla)
# Gráfica
plt.subplot(211)
plt.stem(n,xi,label='x[n]=n')
plt.xlabel('n')
plt.ylabel('x[n]')
plt.axvline(0,color='gray')
plt.legend()
plt.grid()
plt.subplot(212)
plt.stem(n,yi,label='y[n]=yi[k-1]-0.24*yi[k-2]+xi[k]-2*xi[k-1]',
markerfmt='go',
linefmt='green')
plt.xlabel('n')
plt.ylabel('y[n]')
plt.axvline(0,color='gray')
plt.legend()
plt.grid()
plt.show()