6.5 LTI DT - Respuesta estado cero ZSRn con Python



1. Respuesta estado cero ZSRn

Referencia: Lathi 3.8 p280

respuesta Estado Cero Discreto ZSRn

Es la respuesta de un sistema cuando el estado es cero. se inicia con que la entrada x[n] es la suma de componentes δ[n]

x[n] = x[0] \delta[n] + x[1] \delta[n-1] + x[2] \delta[n-2] + \text{…} + x[-1] \delta[n+1] + x[-2] \delta[n+2] + \text{…} x[n] = \sum_{m=-\infty}^{\infty} x[m] \delta[n-m]

En un sistema lineal, conociendo su respuesta impulso, responde a cualquier entrada como la suma de sus componentes.

y[n] = \sum_{m=-\infty}^{\infty} x[m] h[n-m] = x[n] \circledast h[n]

Revisar: Propiedades de suma de convolución



2. Ejercicio. Respuesta estado cero ZSRn

Referencia: Lathi Ejemplo 3.21 p286

Determine la respuesta a estado cero de un sistema LTID descrito por la ecuación de diferencias mostrada,

y[n+2] - 0.6 y[n+1] - 0.16 y[n] = 5x[n+2]

Si la entrada es x[n] = 4-n u[n]



3. Desarrollo Analítico

Para realizar el diagrama, se desplaza la ecuación en dos unidades

y[n] - 0.6 y[n-1] - 0.16 y[n-2] = 5x[n] y[n] = 0.6 y[n-1] + 0.16 y[n-2] + 5x[n]

las condiciones iniciales es estado cero son todas cero.

Respuesta Estado Cero Ej01 ZSRn

La entrada puede expresada como:

x[n] = 4^{-n} \mu [n] = \Big( \frac{1}{4} \Big)^n \mu [n] x[n] = 0.25^{n} \mu [n]

la respuesta al impulso del sistema se encontró en el ejemplo de la sección anterior:

h[n] = [ (-0.2)^n +4 (0.8)^n ] \mu [n]

Por lo que:

y[n] = x[n] \circledast h[n] = 0.25^{n} \mu [n] \circledast \Big[ (-0.2)^n +4 (0.8)^n \Big] \mu [n] = 0.25^{n} \mu [n] \circledast (-0.2)^n \mu [n] + 0.25^{n} \mu [n] \circledast 4 (0.8)^n \mu [n]

usando la tabla de convolución de sumas para tener:

y[n] = \Bigg[ \frac{0.25^{n+1}-(-0.2)^{n+1}}{0.25-(-0.2)} + 4 \frac{0.25^{n+1} - 0.8^{n+1}}{0.25-0.8}\Bigg] \mu [n] = \Bigg[2.22 \Big[ 0.25^{n+1} - (-0.2)^{n+1}\Big] + - 7.27 \Big[ 0.25^{n+1} - (0.8)^{n+1}\Big]\Bigg] \mu [n] = \Big[ -5.05 (0.25)^{n+1} - 2.22(-0.2)^{n+1} + 7.27 (0.8)^{n+1} \Big] \mu [n]

recordando que ϒn+1 = ϒ(ϒ)n se puede expresar,

y[n] = \Big[-1.26 (0.25)^{n} + 0.444 (-0.2)^{n} +5.81(0.8)^{n}\Big] \mu [n]

4. Desarrollo numérico con Python

La respuesta a estado cero se encuentra en forma numérica con la expresión:

y[n] = x[n] \circledast h[n]

que en Numpy es np.convolve() y facilita el cálculo de la convolución de sumas. El tema de convolución con Python se desarrolla en la siguiente sección.

La respuesta del algoritmo se presenta en la gráfica:

Respuesta Estado Cero Ej01a

En el algoritmo se compara la solución numérica yi[n] con la solución analítica yia[n], obteniendo un error del orden 10-3 dado por el truncamiento de dígitos en ambos métodos.

 error numerico vs analítico: 
 maximo de |error|:  0.006000000000000227
 errado: 
[-0.          0.         -0.          0.         -0.          0.
 -0.          0.         -0.          0.         -0.         -0.
 -0.          0.          0.         -0.006      -0.0058     -0.00509
 -0.0041445  -0.00334173 -0.00267831 -0.0021442  -0.00171569 -0.00137264
 -0.00109813 -0.00087851 -0.00070281 -0.00056225 -0.0004498  -0.00035984
 -0.00028787]


5. Algoritmo en Python

El algoritmo continúa como un anexo a los algoritmos de respuesta a entrada cero e impulso.

# Sistema LTID. Respuesta entrada cero, 
# Respuesta a impulso
# resultado con raices Reales
# ejercicio lathi ejemplo 3.121 p286
import numpy as np
import sympy as sym

# INGRESO
# Respuesta de estado cero ------------------------
# Rango [a,b], simetrico a eje vertical
b = 15 ; a = -b
u = lambda n: np.piecewise(n,[n>=0,n<0],[1,0])
x = lambda n: (0.25)**(n)*u(n)
h_n = lambda n: (-0.2)**n+4*(0.8)**n
h = lambda n: h_n(n)*u(n)

# PROCEDIMIENTO
ni = np.arange(a,b+1,1)
xi = x(ni)
hi = h(ni)

# Suma de Convolucion x[n]*h[n]
yi = np.convolve(xi,hi,'same')

# compara respuesta numerica con resultado analitico
ya = lambda n: (-1.26*(0.25**n)+0.444*((-0.2)**n)+5.81*(0.8**n))*u(n)
yia = ya(ni)

errado = yia-yi
erradomax = np.max(np.abs(errado))
        
# SALIDA
print('respuesta estado cero: ')
print('\n error numerico vs analitico: ')
print(' maximo de abs(error): ', erradomax)
print(' errado: ')
print(errado)


6. Gráfica en Python

# GRAFICA -----------
import matplotlib.pyplot as plt

plt.figure(1)
plt.suptitle('Suma de Convolucion x[n]*h[n]')

plt.subplot(311)
plt.stem(ni,xi, linefmt='b--',
         markerfmt='bo',basefmt='k-')
plt.ylabel('x[n]')

plt.subplot(312)
plt.stem(ni,hi, linefmt='b--',
         markerfmt='ro',basefmt='k-')
plt.ylabel('h[n]')

plt.subplot(313)
plt.stem(ni,yi, linefmt='g-.',
         markerfmt='mo', basefmt='k-',
         label='yi')
plt.stem(ni,yia, linefmt='y-.',
         markerfmt='*', basefmt='k-',
         label='yia')

plt.ylabel('x[n]*h[n]')
plt.xlabel('n')
plt.legend()

plt.tight_layout()
plt.show()



Unidades SS