1. Ejercicio
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 μ[n] , para n>=0.
1.1 Desarrollo analítico

La expresión se reordena,
y[n] = 0.5 y[n-1] + x[n]Lo que permite realizar el diagrama de bloques y la expresión para el algoritmo iterativo.
Se usan las condiciones iniciales para n=0 y la condición y[-1]=16
y[0] = 0.5 y[0-1] + x[0] = 0.5 y[-1] + 0^2 = 0.5(16) + 0 = 8Para n=1,
y[1] = 0.5 y[1-1] + x[1] = 0.5 y[0] + 1^2 = 0.5(8) + 1 = 5Para n=2,
y[2] = 0.5 y[2-1] + x[2] = 0.5 y[1] +2^2 = 6.5Para n=3,
y[3] = 0.5 y[3-1] + x[3] = 0.5 y[2] + 3^2 = 0.5 (6.5) + 9 = 12.25y así sucesivamente.
El algoritmo en Python presenta el resultado en forma gráfica y en forma de valores.

los resultados numéricos son:
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. ]]
>>>

El diagrama realizado para la ecuación tiene dos partes, el generador de señal en azul y la parte del sistema en color gris para el retraso y naranja para el coeficiente de retraso.
Al diagrama se le añade la expresión para x[n]=n2 μ[n], que completa el diagrama del ejercicio.
1.2 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
# condiciones iniciales ascendente ...,y[-2],y[-1]
y0 = [16.]
# para la grafica
muestras = 10
etiqueta ='y[n]=0.5y[n-1]+x[n]'
# 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=etiqueta,
markerfmt='go',
linefmt='green')
plt.xlabel('n')
plt.ylabel('y[n]')
plt.axvline(0,color='gray')
plt.legend()
plt.grid()
plt.show()
1.3 Bloques con Xcos
El simulador requiere establecer una señal de tiempo para coordinar lo que sucede en cada bloque que depende del tiempo para generar una salida.
El contador requiere una señal de reloj para actualizar el valor de salida. El bloque de gráfica también se sincroniza con el reloj y el bloque de atraso también usa el reloj para determinar si usa los valores iniciales.
Las operaciones matemáticas como ganancia, suma y base a un exponente no usan reloj.

El parámetro de condición inicial se configura en el bloque de retraso (1/z)

La señal de entrada requiere dos bloques: el contador y el bloque de base elevado a potencia.
El bloque del contador se configura considerando los tiempos de observación:

El bloque de potencia se configura el exponente,

Control de muestreo se realiza en el reloj, con periodo 1 e inicio en cero

El intervalo de muestreo se establece en las propiedades del osciloscopio de salida,

La gráfica de salida se obtiene con el botón de "PLAY" y se ajusta en el menú de "Edit/Axes properties" para presentar muestras con puntos de tamaño 6 y color rojo, sin lineas, con estilo de barra.

los datos de la gráfica se pueden observar en la viñeta "data",

Se presenta el procedimiento en pasos básicos, luego se pueden añadir mas detalles.
2. Ejercicio
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
2.1 Desarrollo analítico
Se deja como tarea realizar la solución analítica con lápiz y papel, se continua con el uso del algoritmo para la solución.
Si la ecuación se reescribe de la forma:
y[n+2] = y[n+1] - 0.24y[n] + x[n+2] - 2x[n+1]y se desplaza en el tiempo con retrasos, para adaptarla al algoritmo presentado en el ejemplo anterior.
y[n] = y[n-1] - 0.24y[n-2] + x[n] - 2x[n-1]Que corresponde a la ecuación a usar en el algoritmo.
Las condiciones iniciales ordenadas son inicial= [1,2]
se emplea el mismo algoritmo, adaptando la fórmula par x[n] y y[n],teniendo los resultados siguientes:
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]]
>>>
la gráfica resultante es:

2.2 Algoritmo en Python
# Sistema LTID. Solución iterativa
# Ejercicio Lathi ejemplo 3.12 p267
import numpy as np
import matplotlib.pyplot as plt
# INGRESO
# condiciones iniciales ascendente ...,y[-2],y[-1]
y0 = [1,2]
# para la gráfica
muestras = 10
etiqueta = 'y[n]=yi[k-1]-0.24*yi[k-2]+xi[k]-2*xi[k-1]'
# 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=etiqueta,
markerfmt='go',
linefmt='green')
plt.xlabel('n')
plt.ylabel('y[n]')
plt.axvline(0,color='gray')
plt.legend()
plt.grid()
plt.show()