3.4 Respuesta a estado cero – LTIC

Referencia: Lathi 2.4 pdf124, Oppenheim 2.1 p97/pdf125 , Schaum/Hsu 2.5.B p.60

El estado cero del sistema, «Zero-State», supone no hay energía almacenada, que los capacitores están descargados, que recien sale el equipo de la caja.  Para éste caso, la respuesta del sistema se conoce como respuesta a estado cero, «Zero-State response».

Para los problemas presentados se asume que el sistema es lineal , causal e invariante en el tiempo. En la práctica, muchos de los sistemas son causales, pues su respuesta no inicia antes de aplicar una entrada, es decir, todas las entradas a evaluar empiezan en t=0.

la respuesta del sistema y(t) para un LTIC se determina como:

y(t) = x(t) \circledast h(t) = \int_{-\infty}^{+\infty} x(\tau)h(t-\tau) d\tau

Es importante observar que el integral de convolución se realiza con respecto a τ en lugar de t.

Si la entrada x(t) y el sistema h(t) son causales, la respuesta también será causal.

y(t)=\begin{cases}\int_{0^{-}}^{t} x(\tau)h(t-\tau) d\tau , & t\ge 0\\ 0, & t<0 \end{cases}

El límite inferior del integral se usa como 0, implica aunque se escriba solo 0 se pretende evitar la dificultad cuando x(t) tiene un impulso en el origen.


Ejemplo 01

Referencia:  Lathi ejemplo 2.6 pdf129

Encuentre la corriente y(t) del circuito RLC, cuando todas las condiciones iniciales son cero y en la entrada se tiene la señal x(t) descrita por:

x(t) = 10 e^{-3t} \mu (t)

Además el sistema tiene respuesta a impulso:

h(t) = \big( 2e^{-2t} -e^{-t}\big)\mu (t)

El ejemplo es la continuación del presentado para respuesta a entrada cero, que tiene la ecuación:

(D^2 + 3D +2)y(t) = Dx(t)

Desarrollo Analítico

La respuesta se obtiene aplicando convolución:

y(t) = x(t) \circledast h(t) = [ 10 e^{-3t} \mu (t)] \circledast [(2e^{-2t} - e^{-t}) \mu (t)]

usando la propiedad distributiva de la convolución:

y(t) = [10e^{-3t} \mu (t) \circledast 2e^{-2t} \mu (t)] - [10e^{-3t} \mu (t) \circledast e^{-t} \mu (t)] = 20[e^{-3t}\mu (t) \circledast e^{-2t} \mu (t)] - 10[e^{-3t} \mu(t) \circledast e^{-t} \mu (t)]

Para éste ejercicio se usa la tabla de convoluciones, asi se enfoca en la forma de la señal resultante, el siguiente ejemplo se desarrolla el integral de convolución.

y(t) = 20\frac{e^{-3t} - e^{-2t}}{-3-(-2)}\mu (t) - 10\frac{e^{-3t} - e^{-t}}{-3-(-1)}\mu (t) = -20[e^{-3t} - e^{-2t}]\mu (t) + 5[e^{-3t} - e^{-t}]\mu (t) = [-5e^{-t} + 20e^{-2t} - 15e^{-3t}]\mu (t)

De las gráficas se observa que la entrada es semejante a conectar en la entrada un capacitor con carga, que la pierde en el tiempo.

En la salida se observa el efecto, la parte inicial corresponde a la corriente en el circuito mientras el capacitor de la entrada entrega energía al sistema. Note que en el sistema o circuito se debe ir cargando el capacitor del sistema. Luego, un poco más del segundo 1, la corriente invierte el sentido volviéndose negativa por la carga almacenada en el capacitor del sistema.

La explición breve realizada debería ser comprobada en los experimentos de laboratorio, preferiblemente a escala menor con componentes tipo electrónico.
Proponer como tarea.

Ejemplo 02

Referencia: Lathi Ejemplo 2.5 pdf127

Para un sistema LTIC, si la respuesta al impulso es

h(t) = e^{-2t} \mu (t)

determine la respuesta y(t) para la entrada

x(t) = e^{-t} \mu (t)

Desarrollo Analítico

Para éste ejercicio se desarrollará la integral de convolución. La entrada y respuesta al impulso se convierte a:

x(\tau) = e^{-\tau} u(\tau) h(t-\tau) = e^{-2(t-\tau)} u(t-\tau)

recuerde que la integración es respecto a τ enel intervalo 0≤τ≤t.

y(t) = \begin{cases} \int_{0}^{t} e^{-\tau}u(\tau) e^{-2(t-\tau)}u(t-\tau) d\tau , & t\ge 0 \\0, & t \lt 0 \end{cases}

Los valores de u(τ) =1 debido a se convierte a 0 para τ<0 y en el caso de u(t-τ)=1 se conviertea 0 cuando τ≥t.

y(t) = \int_{0}^{t}e^{-\tau} e^{-2(t-\tau)} d\tau = \int_{0}^{t} e^{-\tau} e^{-2t} e^{2\tau} d\tau = e^{-2t} \int_{0}^{t} e^{\tau} d\tau = e^{-2t} e^{\tau} \Big|_0^t

Evaluado en el rango de integración:

= e^{-2t} (e^{t} - 1) = e^{-t} - e^{-2t}

para t≥0, y además como y(t) = 0 para t<0

y(t) = (e^{-t} - e^{-2t})u(t)

3.5 Respuesta a impulsos – discreto

Referencia: Lathi 3.8 pdf193, Oppenheim 2.1.2 p77/pdf105, Schaum 2.6.C p62,

Una señal discreta de entrada x[n] se representa como una superposición de versiones escaladas de un conjunto de impulsos unitarios desplazados δ[n-k], cada uno con valor diferente de cero en un solo punto en el tiempo, especificado por el valor de k.

La respuesta de un sistema lineal y[n] a x[n] es la superposición de las respuestas escaladas del sistema a cada uno de estos impulsos desplazados.

Si usamos hk[n] como la respuesta del sistema lineal al impulso unitario desplazado por δ[n-k]. La respuesta y[n] del sistema lineal a la entrada x[n] en la ecuacion será la combinación lineal ponderada de las respuesta básicas.

y[n] = \sum_{k=-\infty}^{+\infty} x[k]h_{k}[n]

Si se conoce la respuesta de un sistema lineal al conjunto de impulsos unitarios desplazados, podemos construir una respuesta a una entrada arbitraria.

Si el sistema lineal también es invariante en el tiempo, entonces estas respuestas a impulsos unitarios desplazados en el tiempo son todas las versiones desplazadas en el tiempo unas de otras.

h[n] es la salida del sistem LTI cuando δ[n] es la entrada. Entonces para un sistema LTI la ecuación se vuelve.

y[n] = \sum_{k=-\infty}^{+\infty} x[k]h[n-k]

El resultado se conoce como la «suma de convolución» o «suma de superposición» y la operación miembro derecho de la ecuación se llama convolución de las secuencias x[n] y h[n] que se representa de manera simbólica como:

y[n] = x[n]*h[n]

Ejemplo

Referencia: Openheim Ejemplo 2.4 p85/pdf113

Considere una entrada x[n] y una respuesta al impulso unitario h[n] dada por:

x[n] = (u[n]-u[n-5])
h[n] = αn (u[n]-u[n-7])

con α>1.  Para el ejercicio, α=1.5.

Nota: si α es un entero, por ejemplo 2, usar α=2.0, para que la operación potencia se realice con números reales, como entero se puede saturar y dar error.


Al aplicar la suma de convolución obtiene:

Para aplicar el algoritmo se requiere definir u[n], por ser parte de las funciones x[n] y h[n]. Dado que la operación requiere valores fuera del rango muestreado para n, la sección suma convolución utiliza las funciones en lugar de los vectores xi, hi.

La función está definida en un intervalo simétrico, por lo que el rango de trabajo [a,b] se mantiene de la forma [-b,b] en las intrucciones.

# Ejemplo Oppenheim Ejemplo 2.3 p83/pdf111
import numpy as np

# INGRESO
# Rango [a,b], simétrico a 0
b = 15 ; a = -b

alfa = 1.5
u = lambda n: np.piecewise(n,n>=0,[1,0])

x = lambda n: u(n)-u(n-5)
h = lambda n: (alfa**n)*(u(n)-u(n-7))


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

# Suma de Convolucion x[n]*h[n]
muestras = len(xi)
yi = np.zeros(muestras, dtype=float)
for i in range(0,muestras):
    suma=0
    for k in range(0,muestras):
        suma = suma + x(ni[k])*h(ni[i]-ni[k])
    yi[i]= suma

# yi = np.convolve(xi,hi,'same')

# SALIDA - GRAFICA
import matplotlib.pyplot as plt

plt.figure(1)
plt.suptitle('Suma de Convolución 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-')
plt.ylabel('x[n]*h[n]')
plt.xlabel('n')

plt.show()

La suma convolución se encuentra también disponible con Numpy en np.convolve(), la  sección de suma convoluacion se puede reemplazar y obtener los mismos resultados. Considere que para éste caso se usan los vectores xi y hi.

yi = np.convolve(xi,hi,'same')

el algoritmo se puede aplicar a otros ejercicio para comprobar los resultados.

Continúe con el ejercicio 2.5 del libro.

LTI en dominio frecuencia

Oppenheim Ejemplo 4.15 (p.345 pdf)

Ejemplo: Considere un sistema continuo LTI con respuesta al impulso:

h(t) = δ(t-t0)

La respuesta en frecuencia es la transformada de Fourier :

H(jω) = e-jωt0

A cualquier entrada x(t) con transformada X(jω) , la salida en dominio de la frecuencia es:

Y(jω) = H(jω)X(jω) = e-jωt0 X(jω)

que usando la propiedad de desplazamiento:

y(t)=x(t-t0)

Oppenheim Ejemplo 4.18 (p.346 pdf)

El Filtrado selectivo en frecuencia se puede representar en un filtro PASA-BAJO ideal:

H(jω) = { 1    |ω|< ωc
        { 0    |ω|> ωc

cuya respuesta en el dominio de la frecuencia es:

h(t) = sen(ωc t)/πt

Como ejemplo: para una frecuencia fs=20 y usando la transformada para una función par se obtiene:

Observaciones: h(t) no es cero para t<0, en consecuencia el filtro pasabajos ideal no es causal. NO es fácil aproximarse mucho a un filtro ideal con componentes reales, por lo que se contruye ms facilmente un filtro no ideal.

Transformada Laplace

Para una señal X(t), Su transformada de Laplace esta definida como:

X(s) = \int_{-\infty}^{\infty} x(t) e^{-st} \delta t

la señal x(t) es la inversa de la transformada X(s), que se obtiene como:

x(t) = \frac{1}{2πj} \int_{c-j\infty}^{c+j\infty} x(t) e^{st} \delta t

donde c es una constante seleccionada para asegurar la convergencia de la integral.

Los pares de ecuaciones conocidos como «Pares de la transformada de Laplace» se escriben simbólicamente como:

X(s) = L[x(t)] x(t) = L^{-1}[X(s)]

y propiedades como

L[a_1 x_1(t) + a_2 x_2 (t)] = a_1 X_1(s) + a_2 X_2 (s)

que muestra la linealidad de la transformada

Región de convergencia (ROC)

También conocida como región de existencia, es el grupo de valores de s, en la region del plano complejo, para los cuales la integral de la transformada converge.

Ejemplo

referencia: Lathi ejemplo 4.1. pdf231

Para una señal x(t) = e-atu(t), encuentre la transformada X(s) y su región de convergencia (ROC)

X(s) = \int_{-\infty}^{\infty} e^{-at} \mu (t) e^{-st} \delta t

pero tomando en cuenta que u(t)=0 para t<0 y u(t)=1 para t≥0:

X(s) = \int_{0}^{\infty} e^{-at} \mu(t) e^{-st} \delta t X(s) = \int_{0}^{\infty} e^{-at} e^{-st} \delta t = \int_{0}^{\infty} e^{-(s+a)t} \delta t = \frac{1}{s+a} \Big|_{0}^{\infty}

Si s es un número complejo y t →∞, el término exponencial no necesariamente desaparece.

El número complejo se puede expresar como:

z = α + jβ
e-zt = e-(α + jβ)t = e-αte-jβt.

El valor |e-jβt| = 1 sin importar el valor de βt.
Entonces si t→∞, e-zt →0 solo si α>0
y e-zt →∞ en el caso que α<0.

La región de convergencia (ROC) de X(s) es que la parte real s>-a.

Tabla de transformadas de Laplace (wikipedia)

Tabla de transformadas y propiedades de Laplace (Universidad de Córdova)

Propiedad de diferenciación

\frac{\delta x}{\delta t} \Leftrightarrow sX(s) - x(0^{-}) \frac{d^2x}{dt^2} \Leftrightarrow s^2X(s) - sx(0^{-}) - x'(0^{-}) \frac{\delta^3x}{\delta t^3} \Leftrightarrow s^3 X(s) - s^2 x(0^{-}) - sx'(0^{-}) - x''(0^{-})

Transformada Laplace Ejercicio01

Ejemplo 1:

Referencia: Oppenheim ejemplo 9.37 p718/pdf746, semejante al ejercicio sistema-modelo LTI Lathi 1.8-1 pdf/p.80. Oppenheim problema 2.61c pdf/p.191

Suponga un sistema LTI causal que se describe mediante la ecuación diferencial:

\frac{d^2y(t)}{dt} + 3 \frac{dy(t)}{dt} + 2y(t) = x(t)

junto con la condición de reposo inicial:

H(s) = \frac{1}{s^2 + 3s +2}

Suponga que x(t) = α μ(t) , entonces la entrada del sistema es x(s) = α

Siempre que las señales de entrada son cero para t<0, la convolución es la multiplicación de los términos. (no aplica para valores t<0)

y(s) = H(s) X(s) = \Big[\frac{1}{s^2 + 3s +2} \Big]\Big[\frac{\alpha}{s}\Big] y(s) = \frac{\alpha}{2}\frac{1}{s} - \alpha\frac{1}{s+1} +\frac{\alpha}{2}\frac{1}{s+2}

por lo que aplicando la anti transformada:

y(t) = \alpha \Big [ \frac{1}{2} - e^{-t} + \frac{1}{2} e^{- 2t} \Big] u(t)

Usando Python y Sympy

Para crear la expresión polinómica simple, no usamos el factor α, que se añade luego de obtener el resultado, se obtiene:

    a         a      a 
--------- - ----- + ---
2*(s + 2)   s + 1   2*s

resultado al que hay que multiplicar por la constante α todos sus términos.

las instrucciones son:

# Oppenheim ejemplo 9.37 p718/pdf746
import sympy as sym

s = sym.Symbol('s')
a = sym.Symbol('a')
Hs = (1/(s**2+3*s+2))*(a/s)
separa = Hs.apart(s)

sym.pprint(separa)

Ejemplo 2

Referencia: Oppenheim ejemplo 9.38 p719/747

Considere el sistema caracterizado por la ecuación diferencial con condiciones iniciales.

\frac{d^2y(t)}{dt^2} + 3 \frac{dy(t)}{dt} + 2y(t) = x(t) y(0^{-}) = \beta \text{, } y'(0^{-}) = \gamma

sea x(t) = αμ(t)

Aplicando la transformada de laplace en ambos lados de la ecuación con condiciones iniciales y aplicando la propiedad de diferenciación:

\frac{d^2y(t)}{dt^2} = s^2Y(s) - y(0^{-})s - y'(0^{-}) = s^2Y(s) - \beta s - \gamma \frac{dy(t)}{dt} = sY(s) - \beta

resultados que se insertan en la ecuacion original:

[s^{2}Y(s) - \beta s - \gamma] + 3[sY(s) - \beta] + 2Y(s) = \frac{\alpha}{s}

para simplificar como:

[s^{2}+3s +2] Y(s) - \beta s - (\gamma + 3 \beta) = \frac{\alpha}{s} [s^{2}+3s +2] Y(s) = \frac{\alpha}{s}+ \beta s + (\gamma + 3 \beta) (s+1)(s+2)Y(s) = \frac{\alpha}{s}+ \beta s + (\gamma + 3 \beta) Y(s) = \frac{\alpha}{s(s+1)(s+2)}+ \frac{\beta s}{(s+1)(s+2)} + \frac{(\gamma + 3 \beta)}{(s+1)(s+2)}

se encuentra que:

Y(s) = \frac{\beta (s+3)}{(s+1)(s+2)} + \frac{\gamma}{(s+2)(s+2)} + \frac{\alpha}{s(s+2)(s+2)}

donde Y(s) es la transformada unilateral de Laplace de y(t)

el último término, representa la respuesta del sistema LTI causal y la condición de reposo inicial, conocido también como la respuesta en estado cero.

Una interpretación análoga se aplica a los primeros dos términos del miembro derecho de la ecuación, que representa la respuesta del sistema cuando la entrada es cero (α=0) , conocida también como respuesta a entrada cero.

Observe que la respuesta a entrada cero es una función lineal de los valores de las condiciones iniciales. Demostrando que la respuesta es la superposición del estado cero y respuesta a entrada cero.

si α=2, β = 3 y γ=-5, al realizar la expansión en fracciones parciales encontramos que:

Y(s) = \frac{1}{s} - \frac{1}{s+1} + \frac{3}{s+2}

con la aplicación de las tablas de transformadas se obtiene:

y(t) = \Big[ 1 - e^{-t} + 3 e^{-2t} \Big] \mu (t) \text{, para } t\gt 0

usando Python y Sympy

se puede trabajar la ecuación para obtener:

ecuacion de entrada
    2                                   a
Ys*s  + 3*Ys*s + 2*Ys - b*s - 3*b - g = -
                                        s
ecuacion Ys:  
        2               
 a + b*s  + 3*b*s + g*s 
[----------------------]
      / 2          \    
    s*\s  + 3*s + 2/    
fracciones parciales de Ys: 
 a    a - 2*b - 2*g   a - 2*b - g
--- + ------------- - -----------
2*s     2*(s + 2)        s + 1   
sustituye a=2, b= 3 y g=-5
  3       1     1
----- - ----- + -
s + 2   s + 1   s
>>>

con las siguientes instrucciones, presentadas por cada sección de la parte de desarrollo analítico, para ir comparando los resultados.

# Oppenheim ejemplo 9.38 p719/747
import sympy as sym

s,a,b,g  = sym.symbols('s a b g')
Ys = sym.Symbol('Ys')

d2y = (s**2)*Ys - b*s - g
dy  = s*Ys - b

ecuacion = sym.Eq(d2y + 3*dy + 2*Ys, a/s)
ecuacionYs = sym.solve(ecuacion,Ys)
parciales = ecuacionYs[0].apart(s)

solucion = parciales.subs({a:2,b:3,g:-5})

print('ecuacion de entrada')
sym.pprint(ecuacion)
print('ecuacion Ys:  ')
sym.pprint(ecuacionYs)
print('fracciones parciales de Ys: ')
sym.pprint(parciales)
print('sustituye a=2, b= 3 y g=-5')
sym.pprint(solucion)

La definición de la ecuacion se realiza usando las variables como símbolos, incluyendo Y(s) como Ys. En éste ejercicio no existe X(s), por lo que no se la incluyó.

Luego se busca la expresión solución para Ys, por simplicidad se la cambia a fracciones parciales, asi es más sencillo usar la tabla de transformadas de Laplace.

Para una solución con los valores de a,b y g, se usa un diccionario {} con las parejas de variables y sus valores. Compare los resultados con lo expuesto en la parte teórica.

FFT de una señal coseno

Señal de entrada: x(t)= cos(ω0 t)
ω0 = (2π fs) en radianes, para el ejemplo fs=20 Hz

x(ω) =π[δ(ω-ω0)+δ(ω+ω0)] con eje en radianes.
La gráfica se muestra en Hz. fs0/2π
Se muestran las partes:
– real e imaginaria de la transformada y
– magnitud y fase

Script de python para usar la transformada rapida de Fourier.
En la seccion de función de entrada, se muestra para cuatro funciones: coseno, constante, impulso y sinc. Para usar una de ellas se elimina el simbolo de comentario (##)

# Transformadas Rapida de Fourier
# entrada funcion par
# Propuesta: edelros@espol.edu.ec
import numpy as np
import scipy.fftpack as fourier
import matplotlib.pyplot as plt

# Definir la funcion de Entrada par
def entradax(t,fs):
    # función matemática CAMBIAR AQUI
    x=np.cos(2*np.pi*fs*t)

##    x=1  #constante
    
##    x=0   # impulso
##    if abs(t)<(1/fs):
##        x=1

##    if t==0:  #para sinc aumentar k=8
##        t=(1/fs)/100000
##    x=(np.sin(2*np.pi*fs*t)/(np.pi*t))

    # función matemática CAMBIAR AQUI
    return(x)

# PROGRAMA
# INGRESO
fs=20       #float(input('frecuencia Señal Hz:'))
ancho=1     #ancho del intervalo
t0=0        #intervalo de t
tn=ancho*1/fs
resolucion=1    #resolucion de transformada

# PROCEDIMIENTO
n= 1024*resolucion 
dt=(tn-t0)/n   # intervalo de muestreo
# Analógica Referencia para mostrar que es par
t=np.arange(-tn,tn,dt)  # eje tiempo analógica
m=len(t)
xanalog=np.zeros(m, dtype=float)
for i in range(0,m):
    xanalog[i]=entradax(t[i],fs)

# FFT: Transformada Rapida de Fourier
# Analiza la parte t>=0 de xnalog muestras[n:2*n]
# Transformada de Fourier
xf=fourier.fft(xanalog[n:2*n])
xf=fourier.fftshift(xf)
# Rango de frecuencia para eje
frq=fourier.fftfreq(n, dt)
frq=fourier.fftshift(frq)

# x[w] real
xfreal=(1/n)*np.real(xf)
# x[w] angulo
xfimag=(1/n)*np.imag(xf)
# x[w] magnitud
xfabs=(1/n)*np.abs(xf)
# x[w] angulo en radianes
xfangle=np.angle(xf)# np.unwrap(np.angle(xf))


#SALIDA
plt.figure(1)   # define la grafica
plt.suptitle('Señal de Entrada')
plt.ylabel('xanalog[t]')
plt.xlabel('tiempo')
plt.plot(t,xanalog)
plt.margins(0,0.05)
plt.grid()

plt.figure(2)   # define la grafica
plt.suptitle('Transformada Rápida Fourier FFT')
ventana=ancho*0.01 # ventana de frecuencia alrededor f=0
ra=int((n/2)*(1-ventana)) #rango de indices
rb=int((n/2)*(1+ventana))+1
a=frq[ra] #rango de ejes uniformes entre graficos
b=frq[rb]
c=np.min([-0.05,1.1*np.min(xfreal)])
d=1.1*np.max(xfabs)
ejes=[a,b,c,d]

plt.subplot(221)    # grafica de 2x2, subgrafica 1
plt.ylabel('x[f] real')
plt.xlabel(' frecuencia (Hz)')
plt.axis(ejes)
plt.stem(frq[ra:rb],xfreal[ra:rb])
plt.grid()

plt.subplot(223)    # grafica de 2x2, subgrafica 2
plt.ylabel('x[f] imag')
plt.xlabel(' frecuencia (Hz)')
c=np.min([-0.05,1.1*np.min(xfimag)])
ejes=[a,b,c,d]
plt.axis(ejes)
plt.stem(frq[ra:rb],xfimag[ra:rb])
plt.grid()

plt.subplot(222)    # grafica de 2x2, subgrafica 3
plt.ylabel('x[f] magnitud')
plt.xlabel(' frecuencia (Hz)')
c=np.min([-0.05,1.1*np.min(xfabs)])
ejes=[a,b,c,d]
plt.axis(ejes)
plt.stem(frq[ra:rb],xfabs[ra:rb])

plt.grid()

plt.subplot(224)    # grafica de 2x2, subgrafica 4
plt.ylabel('x[f] fase radianes')
plt.xlabel(' frecuencia (Hz)')
c=1.1*np.min(xfangle)
d=1.1*np.max(xfangle)
ejes=[a,b,c,d]
plt.axis(ejes)
plt.stem(frq[ra:rb],xfangle[ra:rb])
plt.grid()

plt.show()

En el caso del seno(ω0 t), las graficas resultantes son:


con transformada:

continuar el ejercicio con las otras funciones.