6.1.4 Sistema LTI DT – Solución iterativa con simulador Xcos

El ejercicio planteado en Sistema Discreto – Solución iterativa, se desarrolla con el simulador XCOS de Scilab.


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 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 condicion 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 menu 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.

 

6.1.3 Sistema LTI DT – Solución iterativa con Python

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:

LTI DT Solución iterativaEj01

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]

LTI DT Sol iterativa Ej02

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()

6.1.2 Sistema LTI DT – Solución iterativa

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 μ[n] ,para n>=0.

Desarrollo analítico

La expresión se reordena,

y[n] = 0.5 y[n-1] + x[n]

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 = 8

Para n=1,

y[1] = 0.5 y[1-1] + x[1] = 0.5 y[0] + 1^2 = 0.5(8) + 1 = 5

Para n=2,

y[2] = 0.5 y[2-1] + x[2] = 0.5 y[1] +2^2 = 6.5

Para n=3,

y[3] = 0.5 y[3-1] + x[3] = 0.5 y[2] + 3^2 = 0.5 (6.5) + 9 = 12.25

y así sucesivamente.

El algoritmo en Python presenta el resultado en forma gráfica y en forma de valores.

LTI DT Solución iterativaEj01

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 retrazo y naranja para el coeficiente de retrazo:


Ejercicio 2

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

Desarrollo

Se deja como tarea realizar la solución analítica con lapiz 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]

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 correspondiente es:

LTI DT Sol iterativa Ej02

6.1.1 Sistemas LTI Discretos – Ecuaciones de diferencias y Operadores

Referencia: Lathi 3.5 p265, Lathi 3.5 p269

Los sistemas discretos LTID (linear time-invariant, discrete time systems) se analizan de forma semejante a los de tipo continuo, con algunas variantes.

Ecuaciones de Diferencias

Las ecuaciones de diferencia se pueden escribir de dos formas:

  • La primera usa términos con atrasos como y[n-1], y[n-2], x[n-1]…
  • La segunda con terminos de avance como son  y[n+1], y[n+2], x[n+1]…

La forma con atrasos es mas natural, mientras que ser prefieren las forma de avances por motivos de uniformidad con las operaciones de ecuaciones de diferencias.

Una ecuación de diferencias con operador de avances tiene la forma:

y[n+N] + a_1 y[n+N-1] + \text{...} + a_{N-1} y[n+1] + a_N y[n] = = b_{n-M} x[n+M] + b_{N-M+1} x[n+M-1] + \text{...} + + b_{N-1} x[n+1] + b_N x[n]

que es una ecuación de diferencias con orden de magnitud max(N,M). Se asume que el coeficiente de y[n+N] es 1, es decir a0=1, sin perder la generalidad, caso contrario se normaliza.

Notación de operadores E

Para simplificar la escritura en sistemas discretos, las ecuaciones de diferencias usan la notación E  para mostrar una operación de avance de una unidad. La notación de operadores es semejante a la usada en ecuaciones diferenciales que era D.

E x[n] = x[n+1] E^2 x[n] = x[n+2] E^N x[n] = x[n+N]

por lo que una ecuación de diferencias de primer orden se puede escribir como:

y[n+1] - a y[n] = x[n+1] E y[n] - a y[n] = E x[n] (E-a) y[n] = E x[n]

lo que refleja lo antes usado para el manejo de operadores:

Q(E) y[n] = P(E) x[n]

6.1 Sistemas LTI Discretos – Ejemplos y Diagramas de Bloques

Ejemplo 1 – Cuenta de ahorros

Referencia: Lathi ejemplo 3.6 p253, Oppenheim ejemplo 1.10 p40. Acumuladores en Fundamentos de programación

Una persona ahorradora realiza depósitos regularmente en el banco a un intervalo T mensual.  El banco paga intereses registrados en el estado de cuenta en el periodo T y lo envía al depositante.
Siendo:

x[n] depósito realizado en el instante n-ésimo
y[n] saldo de la cuenta al n-ésimo instante inmediato luego de recibir el n-ésimo depósito x[n]
r tasa de interés del periodo T

El saldo y[n] es la suma [i] del saldo anterior y[n-1], los intereses r sobre y[n-1] durante el periodo T y el depósito x[n]. El evento se puede registrar mediante la ecuación:

y[n] = y[n-1] + r y[n-1] + x[n]

reordenando la ecuación:

y[n] = (1+ r) y[n-1] + x[n] y[n] - (1+ r) y[n-1] = x[n]

por facilidad se simplifica, a = 1+r

la ecuación general se escribe como:

y[n] - a y[n-1] = x[n]

Para el caso presentado, la expresión podría escribirse también para manejar retiros de la cuenta si se cambia de signo al valor de x[n]. También debe considerar condiciones iniciales, por ejemplo al abrir la cuenta y[0] = M si es un depósito, o en otro caso Y[0] = -M por si lo que representa es un préstamo.

El índice de tiempo n es una variable arbitraria, se puede sustituir en la referencia por n+1

y[n+1] - a y[n] = x[n+1]

La expresión con n-1 usa un operación de retardo o retraso, mientras que n+1 usa una operación de avance o adelanto.

El operador de retraso n-1 es más natural, pues la operación es causal, realizable en el tiempo. La operación de adelanto n+1 es no causal, no realizable en tiempo. Por facilidad de operación matemática se usa el operador de adelanto.

Diagrama de bloques

Referencia: Oppenheim 2.4.3 p124.

Semejante a lo presentado en sistemas contínuos se tiene,

y[n] = a y[n-1] + x[n]

Aunque los primeros ejemplos dados son de claramente señales discretas en tiempo, las señales contínuas en tiempo pueden también ser procesadas por sistemas discretos usando muestreo. Los diagramas de bloques se elaboran usando Xcos de Scilab que es software abierto.


Ejemplo 2 – Estimación de ventas

Referencia: Lathi ejercicio 3.7 p255, Hsu 2.39 p100

Un vendedor de una editora de libros en un n-ésimo semestre con x[n] estudiantes registrados en un curso vende y[n] copias de un libro.

En promedio, la cuarta parte de los estudiantes al final del semestre revende el libro usado, el libro se mantiene en buenas condiciones por tres semestres.

Escriba la ecuación que relaciona los libros vendidos por la editora y[n], considerando el número de estudiantes registrados x[n] en el n-ésimo semestre, bajo el supuesto que todos los estudiantes compran el libro.

Durante el n-ésimo semestre, los x[n] estudiantes tienen libros compuestos por libros nuevos vendidos y[n] mas los libros de segunda mano de los dos semestres anteriores.

  • Del semestre inmediato anterior, la cuarta parte de los libros nuevos se revendieron, (1/4) y[n-1].
  • Lo mismo sucedió hace dos semestres (1/4) y[n-2] que se vendieron en el semestre anterior (n-1).
  • También 1/4 de los revendidos el semestre anterior, se vuelven a vender, llegando al ciclo final de vida del libro, es decir (1/4)(1/4 y[n-2]) = (1/16) y[n-2].

Siendo así, los x[n] estudiantes tienen libros provenientes de los libros nuevos y revendidos, expresados mediante:

y[n] + \frac{1}{4} y[n-1] + \frac{1}{16} y[n-2] = x[n]

por facilidad de operaciones matemáticas, se desplaza los índices a positivos,

y[n+2] + \frac{1}{4} y[n+1] + \frac{1}{16} y[n] = x[n+2] .

Para diagramar el sistema, se reordena la ecuación original como entrada-salida:

y[n]= -\frac{1}{4} y[n-1] -\frac{1}{16} y[n-2] + x[n]