s2Eva2012TI_T3 LTI DT causal, coeficientes de respuesta impulso h[n]

Ejercicio: 2Eva2012TI_T3 LTI DT causal, coeficientes de respuesta impulso h[n]

La ecuación de diferencias descrita se usa para crear el diagrama de bloques.

y[n] - \frac{5}{4} y[n-1] + \frac{1}{36} y[n-2] + \frac{1}{18} y[n-3] = x[n] - \frac{1}{2} x[n-1]

literal a. Respuesta impulso h[n]

La forma para usar transformadas z requiere que se desplar tres unidades.

y[n+3] - \frac{5}{4} y[n+2] + \frac{1}{36} y[n+1] + \frac{1}{18} y[n] = x[n+3] - \frac{1}{2} x[n+2] z^3 Y[z] - \frac{5}{4} z^2 Y[z] + \frac{1}{36} z Y[z] + \frac{1}{18} Y[z] = z^3X[z] - \frac{1}{2} z^2 X[z] (z^3 - \frac{5}{4} z^2 + \frac{1}{36} z + \frac{1}{18}) Y[z] = (z^3 - \frac{1}{2} z^2) X[z] H[z] = \frac{Y[z]}{X[z]} = \frac{z^3 - \frac{1}{2} z^2}{z^3 - \frac{5}{4} z^2 + \frac{1}{36} z + \frac{1}{18}}

las raices del denominador obtenidas con el algoritmo son:

 polos: {-0.1871842709362: 1, 0.2500: 1, 1.187184270936: 1}

 polos Re: [1/2 - sqrt(17)/6, 1/4, 1/2 + sqrt(17)/6]
>>> 

Observación: existe una raíz con distancia al origen superior al radio=1, por lo que habría un termino creciente no acotado.

El modelo se puede plantear como:

H[z] = \frac{z^2(z - \frac{1}{2})}{(z+0.1871842709362)(z-0.25)(z- 1.187184270936)}

usando fraciones parciales modificadas:

\frac{H[z]}{z} = \frac{z(z - \frac{1}{2})}{(z+0.1871842709362)(z-0.25)(z- 1.187184270936)}

Se puede plantear un modelo de respuesta por cada raiz como:

\frac{H[z]}{z} = \frac{k_1}{(z-0.1871842709362)}+\frac{k_2}{(z-0.25)} +\frac{k_3}{(z- 1.187184270936)}

usando el método de Heaviside,

k_1= \frac{z(z - \frac{1}{2})}{\cancel{(z+0.1871842709362)}(z-0.25)(z- 1.187184270936) }\Big|_{z=-0.1871842709362} k_1= \frac{-0.1871842709362(-0.1871842709362 - \frac{1}{2})}{(-0.1871842709362-0.25)(-0.1871842709362- 1.187184270936) } = 0.2140 k_2= \frac{z(z - \frac{1}{2})}{(z+0.1871842709362)\cancel{(z-0.25)}(z- 1.187184270936) }\Big|_{z=0.25} k_2= \frac{0.25(0.25 - \frac{1}{2})}{(0.25+0.1871842709362)(0.25- 1.187184270936)} = .0.1525 k_3= \frac{z(z - \frac{1}{2})}{(z+0.1871842709362)(z-0.25)\cancel{(z- 1.187184270936) }}\Big|_{z=1.187184270936} k_3= \frac{1.187184270936(1.187184270936 - \frac{1}{2})}{(1.187184270936+0.1871842709362)(1.187184270936-0.25)} = 0.6333

reemplazando en la expresión planteada,

\frac{H[z]}{z} = \frac{0.2140}{(z-0.1871842709362)}+\frac{0.1525}{(z-0.25)} +\frac{0.6333}{(z- 1.187184270936)}

y restaurando en fracciones parciales al multiplicar por z cada lado

H[z] = \frac{0.2140z}{(z-0.1871842709362)}+\frac{0.1525z}{(z-0.25)} +\frac{0.6333z}{(z- 1.187184270936)}

lso valores se ajustan al modelo planteado en el enunciado

h[n] = a \alpha^n \mu [n] + b \beta^n \mu[n] + c \gamma^n \mu [n] h[n] = 0.2140(0.1871842709362)^n \mu [n] + 0.1525 (0.25)^n \mu[n] + 0.6333 (1.187184270936)^n \mu [n]

obtenga entonces los valores pertinentes.

a= 0.2140 b= 0.1525 c=0.6333
α= 0.1871842709362 β=0.25 γ=1.187184270936

 

 

 

s2Eva2011TI_T2 LTI DT Determinar H[z] desde bloques

Ejercicio: 2Eva2011TI_T2 LTI DT Determinar H[z] desde bloques

literal a. expresión de la función de transferencia

El diagrama de bloques del enunciado se reordena de la siguiente forma:

El nuevo diagrama muesta que el sistema tiene dos subcomponentes en paralelo.

H[z] = -\frac{(11/2)z +7}{z^2-1z-2} +\frac{z}{2} -\frac{9}{2}

como existen varios componentes, se pueden tratar de forma separada.

H[z] = H_1[z] +\frac{z}{2} -\frac{9}{2} H_1[z] = -\frac{(11/2)z +7}{z^2-z-2}

las raíces del denominador son

polos: {2: 1, -1: 1}
H_1[z] = -\frac{(11/2)z +7}{(z-2)(z+1)}

usando fracciones parciales modificadas

\frac{H_1[z]}{z} = -\frac{(11/2)z +7}{z(z-2)(z+1)} = \frac{k_1}{z}+\frac{k_2}{z-2}+\frac{k_3}{z+1}

usando el algoritmo se tiene:

\frac{H_1[z]}{z} = \frac{3.5}{z}-\frac{3}{z-2}-\frac{0.5}{z+1}

restaurando a fraciones parciales

H_1[z] = 3.5-3\frac{z}{z-2}-0.5\frac{z}{z+1}

la función de tranferencia H[z] completa como componentes en paralelo es:

H[z] = 3.5-3\frac{z}{z-2}-0.5\frac{z}{z+1} +\frac{z}{2} -\frac{9}{2}

usando el algoritmo de la sección X[z] Fracciones parciales modificadas con Python para H1[z]

con entrada:

Pz = -(11/2*z+7)
Qz = z**2-z-2

se obtiene:

 Hz:
-5.5*z - 7
----------
 2        
z  - z - 2

 Hz/z:
 -5.5*z - 7.0 
--------------
  / 2        \
z*\z  - z - 2/

 Hz/z.apart:
   0.5        1.5       3.5
- ----- - ----------- + ---
  z + 1   0.5*z - 1.0    z 

 Hz = (Hz/z)*z
  0.5*z      1.5*z         
- ----- - ----------- + 3.5
  z + 1   0.5*z - 1.0      

 polos:     {2: 1, -1: 1}

 polos Re:  [-1, 2]

>>> 

resultado que se completan con los términos de los otros componentes.

literal b. Ecuación de diferencias

Se realiza la conversión por la suma de cada componente (en paralelo):

Para y1[n]:

Y_1[z] = H_1[z]X[z] = \Big[-\frac{(11/2)z +7}{z^2-z-2}\Big] X[z] Y_1[z] [z^2-z-2]= -(11/2)zX[z] -7X[z] y[n+2] - y[n+1] -2y[n] = -\frac{11}{2} x[n+1] -7x[n]

Para y2[n]:

Y_2[z] = H_2[z]X[z] = \frac{z}{2}X[z] y[n] = \frac{1}{2}x[n+1]

Para y3[n]:

Y_3[z] = H_3[z]X[z] = -\frac{9}{2} X[z] y[n] = -\frac{9}{2} x[n]

se suman las expresiones obtenidas de Y1[z] + Y2[z]+Y3[z]

y[n+2] - y[n+1] -2y[n] +y[n] + y[n]= -\frac{11}{2} x[n+1] -7x[n] +\frac{1}{2}x[n+1]-\frac{9}{2} x[n]

la ecuación de diferencias simplificada es;

y[n+2] - y[n+1] = -5 x[n+1] -\frac{23}{2} x[n]

El sistema global se puede reescribir nuevamente en z como

z^2Y[z] - zY[z] = -5 zX[z] -\frac{23}{2} X[z] z(z-1)Y[z] = (-5 z -\frac{23}{2}) X[z]

se tiene que el sistema tienen polos en 0 y 1, que se encuentran dentro del radio 1 del plano z.

literal d. Respuesta al impulso H[z]

H[z] se obtiene a partir de la última ecuación

H[z] = \frac{Y[z]}{H[z]} = -\frac{5 z +\frac{23}{2}}{z(z-1)}

aplicando fracciones parciales modificadas:

\frac{H[z]}{z} = -\frac{5 z +\frac{23}{2})}{z^2(z-1)} \frac{H[z]}{z} = 16.5 \frac{1}{z} +11.5\frac{1}{z^2} -16.5 \frac{1}{z-1}

restaurando fracciones parciales al multiplicar por z

H[z] = 16.5 +11.5 \frac{1}{z} -16.5 \frac{z}{z-1}

usando la tabla de transformada z se tiene:

h[n] = 16.5\delta [n] +11.5 \mu [n-1] - 16.5 \mu[n]

usando el algoritmo:

 Hz:
-5*z - 11.5
-----------
 z*(z - 1) 

 Hz/z:
-5.0*z - 11.5
-------------
    / 2    \ 
  z*\z  - z/ 

 Hz/z.apart:
   16.5   16.5   11.5
- ----- + ---- + ----
  z - 1    z       2 
                  z  

 Hz = (Hz/z)*z
  16.5*z          11.5
- ------ + 16.5 + ----
  z - 1            z  

 polos:     {1: 1, 0: 1}

 polos Re:  [0, 1]
>>> 

Instrucciones en Python

# Transformada z- Fracciones parciales
# Polos únicos, repetidos y complejos
# Lathi Ejercicio 5.3c pd495
# blog.espol.edu.ec/telg1001
import sympy as sym
import numpy as np

# INGRESO
z = sym.Symbol('z')

Pz = -(5*z+23/2)
Qz = z*(z-1)

# PROCEDIMIENTO
P = Pz.as_poly(z)
Q = Qz.as_poly(z)
Xz = Pz/Qz

# Raices Denominador
Q_raiz = sym.roots(Q)
Q_raizRe = sym.real_roots(Q)
rcompleja = len(Q_raiz)-len(Q_raizRe)

# Raices reales, únicas y repetidas
if (rcompleja<=0 and len(Q_raizRe)>0):
    # fracciones parciales modificadas
    Xzz = (P/Q)/z
    Xzm = Xzz.apart()
    # fracciones parciales restaurada
    terminos = Xzm.args
    Xzp = 0*z
    for untermino in terminos:
        Xzp = Xzp + untermino*z

def parametro_cuadratico(untermino):
    unparametro ={}
    # revisa denominador cuadratico
    [numerador,denominador] = (untermino).as_numer_denom()
    gradoD = 0
    coeficientesD = denominador
    gradoN = 0
    coeficientesN = numerador
    if not(denominador.is_constant()):
        denominador = denominador.as_poly()
        gradoD = denominador.degree()
        coeficientesD = denominador.coeffs()
    if not(numerador.is_constant()):
        numerador = numerador.as_poly()
        gradoN = numerador.degree()
        coeficientesN = numerador.coeffs()
    if gradoD == 2 and gradoN==2:
        a = float(coeficientesD[1])/2
        gamma2 = float(coeficientesD[2])
        gamma = np.sqrt(gamma2)
        A = float(coeficientesN[0])
        B = float(coeficientesN[1])
        rN = (A**2)*gamma2 + B**2 - 2*A*a*B
        rD = gamma2 - a**2
        r = np.sqrt(rN/rD)
        beta = np.arccos(-a/gamma)
        thetaN = A*a-B
        thetaD = A*np.sqrt(gamma2-a**2)
        theta = np.arctan(thetaN/thetaD)
        unparametro = {'r':r,
                       'gamma':gamma,
                       'beta':beta,
                       'theta':theta}
    return (unparametro)

# Terminos cuadraticos
parametros = [] # denominador cuadratico
if (rcompleja>0 and len(Q_raizRe)>0):
    # fracciones parciales modificadas
    Xzz = (P/Q)/z
    Xzm = Xzz.apart()
    # fracciones parciales restaurada
    terminos = Xzm.args
    Xzp = 0*z
    for untermino in terminos:
        Xzp = Xzp + untermino*z
        unparam = parametro_cuadratico(untermino*z)
        if len(unparam)>0:
            parametros.append(unparam)
if (rcompleja>0 and len(Q_raizRe)==0):
    Xzp = P/Q
    parametros.append(parametro_cuadratico(P/Q))

# SALIDA
print('\n Hz:')
sym.pprint(Xz)
if (len(Q_raizRe)>0):
    print('\n Hz/z:')
    sym.pprint(Xzz)
    print('\n Hz/z.apart:')
    sym.pprint(Xzm)
    print('\n Hz = (Hz/z)*z')
    sym.pprint(Xzp)
    print('\n polos:    ', Q_raiz)
print('\n polos Re: ', Q_raizRe)
if len(parametros)>0:
    for unparam in parametros:
        print('parametros cuadraticos: ')
        for cadauno in unparam.keys():
            print(cadauno,'\t',unparam[cadauno])

s2Eva2010TI_T1 LTI DT Bloques de H[z] para ecuación de diferencias

Ejercicio: 2Eva2010TI_T1 LTI DT Bloques de H[z] para ecuación de diferencias

litera a. La función de transferencia H(z)

El diagrama mostrado se reordena y añade anotaciones para facilitar la escritura de la ecuación de diferencias:

Dado que hay dos bloques (1/z) o de retraso hacia abajo, se identifica que los polinomios son de segundo orden (N=2).

Los coeficientes de retraso se leen de arriba hacia abajo como a0,-a1,-a2 ordenados en la siguiente tabla:

coeficientes
retraso adelanto
a0 = 1 b0 = 0
a1 = -(1.6) = -1.6 b1 = 4
a2 = -(-0.63) = 0.63 b2 = -4

Se aplica lo mismo para los coeficientes de adelanto y se completa el modelo para los polinomios del numerador y denominador:

H[z] = \frac{b_0 z^N +b_1 z^{N-1} + \text{ ... } + b_{N-1} z + b_N}{z^N + a_1 z^{N-1} +\text{ ... } + a_{N-1}z +a_N} H[z] = \frac{4z-4}{z^2 -1.6 z + 0.63}

Con el polinomio del denominador Qz  se encuentran las raíces

polos: {0.70: 1, 0.90: 1}

se aplican fracciones parciales modificadas al dividir cada lado para z,

\frac{H[z]}{z} = \frac{4}{z}\frac{z-1}{(z-0.7)(z-0.9)} = \frac{k_1}{z-0.7} +\frac{k_2}{z-0.9}+\frac{k_3}{z}

aplicando el método de Heaviside:

k_1 = \frac{4}{z}\frac{z-1}{\cancel{(z-0.7)}(z-0.9)}\Big|_{z=0.7} = \frac{4}{0.7}\frac{(0.7)-1}{((0.7)-0.9)} = 8.5714 k_2 = \frac{4}{z}\frac{z-1}{(z-0.7)\cancel{(z-0.9)}}\Big|_{z=0.9} = \frac{4}{0.9}\frac{(0.9)-1}{((0.9)-0.7)} = -2.2222 k_3 = \frac{4}{\cancel{z}}\frac{z-1}{(z-0.7)(z-0.9)}\Big|_{z=0} = 4\frac{(0)-1}{((0)-0.7)((0)-0.9)} = -6.3492 \frac{H[z]}{z} = \frac{8.5714}{z-0.7} -\frac{2.2222}{z-0.9}-\frac{6.3492}{z}

restaurando a fracciones parciales al multiplicar por z

H[z] = \frac{8.5714z}{z-0.7} -\frac{2.2222z}{z-0.9}-6.3492

usando la tabla de transformadas z

h[n] = 8.5714 (0.7)^n \mu[n] -2.2222(0.9)^n \mu[n] -6.3492 delta[n]

Algoritmo en Python

Usando el algoritmo de la sección X[z] Fracciones parciales modificadas con Python

con entrada:

Pz = 4*z-4
Qz = z**2-1.6*z+0.63

y resultado:

 Hz:
     4*z - 4     
-----------------
 2               
z  - 1.6*z + 0.63

 Hz/z:
         4*z - 4         
-------------------------
  /     2               \
z*\1.0*z  - 1.6*z + 0.63/

 Hz/z.apart:
8.57142857142857   2.22222222222222   6.34920634920635
---------------- - ---------------- - ----------------
  1.0*z - 0.7        1.0*z - 0.9             z        

 Hz = (Hz/z)*z
8.57142857142857*z   2.22222222222222*z                   
------------------ - ------------------ - 6.34920634920635
   1.0*z - 0.7          1.0*z - 0.9                       

 polos:     {0.700000000000000: 1, 0.900000000000000: 1}

 polos Re:  [7/10, 9/10]
>>> 

Observaciones:

Las raíces características o frecuencias naturales del sistema se encuentran dentro del círculo de radio unitario. El sistema es asintóticamente estable, que implica que es BIBO estable.

literal c. Ecuación de diferencias

H[z] = \frac{4z-4}{z^2 -1.6 z + 0.63} Y[z](z^2 -1.6 z+ 0.63) = (4z-4)X[z] y[n+2] - 1.6 y[n+1] + 0.63y[n] = 4x[n+1]-4x[n]

literal d. entrada x[n]

x(t) = cos(1500t) = cos (2πf) con intervalo de muestreo Ts = 0.0015 = 1/fs.

De la señal de entrada se tiene que 2πf=1500, por lo que f = 1500/(2π)

Para un buen muestreo de la señal de entrada, se debe cumplir la frecuencia de Nyquist, es decir fs>2f

fs = \frac{1}{0.0015} = 666.66 \text{ ; } f= \frac{1500}{2 \pi}=238.73 fs > 2*f = 2(238.73) = 477.46

que cumple con la frecuencia mínima de muestreo y no se presentan inconenientes para el funcionamiento de la señal por submuestreo

Instrucciones en Python

# Transformada z- Fracciones parciales
# Polos únicos, repetidos y complejos
# Lathi Ejercicio 5.3c pd495
# blog.espol.edu.ec/telg1001
import sympy as sym
import numpy as np

# INGRESO
z = sym.Symbol('z')

Pz = 4*z-4
Qz = z**2-1.6*z+0.63

# PROCEDIMIENTO
P = Pz.as_poly(z)
Q = Qz.as_poly(z)
Xz = Pz/Qz

# Raices Denominador
Q_raiz = sym.roots(Q)
Q_raizRe = sym.real_roots(Q)
rcompleja = len(Q_raiz)-len(Q_raizRe)

# Raices reales, únicas y repetidas
if (rcompleja<=0 and len(Q_raizRe)>0):
    # fracciones parciales modificadas
    Xzz = (P/Q)/z
    Xzm = Xzz.apart()
    # fracciones parciales restaurada
    terminos = Xzm.args
    Xzp = 0*z
    for untermino in terminos:
        Xzp = Xzp + untermino*z

def parametro_cuadratico(untermino):
    unparametro ={}
    # revisa denominador cuadratico
    [numerador,denominador] = (untermino).as_numer_denom()
    gradoD = 0
    coeficientesD = denominador
    gradoN = 0
    coeficientesN = numerador
    if not(denominador.is_constant()):
        denominador = denominador.as_poly()
        gradoD = denominador.degree()
        coeficientesD = denominador.coeffs()
    if not(numerador.is_constant()):
        numerador = numerador.as_poly()
        gradoN = numerador.degree()
        coeficientesN = numerador.coeffs()
    if gradoD == 2 and gradoN==2:
        a = float(coeficientesD[1])/2
        gamma2 = float(coeficientesD[2])
        gamma = np.sqrt(gamma2)
        A = float(coeficientesN[0])
        B = float(coeficientesN[1])
        rN = (A**2)*gamma2 + B**2 - 2*A*a*B
        rD = gamma2 - a**2
        r = np.sqrt(rN/rD)
        beta = np.arccos(-a/gamma)
        thetaN = A*a-B
        thetaD = A*np.sqrt(gamma2-a**2)
        theta = np.arctan(thetaN/thetaD)
        unparametro = {'r':r,
                       'gamma':gamma,
                       'beta':beta,
                       'theta':theta}
    return (unparametro)

# Terminos cuadraticos
parametros = [] # denominador cuadratico
if (rcompleja>0 and len(Q_raizRe)>0):
    # fracciones parciales modificadas
    Xzz = (P/Q)/z
    Xzm = Xzz.apart()
    # fracciones parciales restaurada
    terminos = Xzm.args
    Xzp = 0*z
    for untermino in terminos:
        Xzp = Xzp + untermino*z
        unparam = parametro_cuadratico(untermino*z)
        if len(unparam)>0:
            parametros.append(unparam)
if (rcompleja>0 and len(Q_raizRe)==0):
    Xzp = P/Q
    parametros.append(parametro_cuadratico(P/Q))

# SALIDA
print('\n Hz:')
sym.pprint(Xz)
if (len(Q_raizRe)>0):
    print('\n Hz/z:')
    sym.pprint(Xzz)
    print('\n Hz/z.apart:')
    sym.pprint(Xzm)
    print('\n Hz = (Hz/z)*z')
    sym.pprint(Xzp)
    print('\n polos:    ', Q_raiz)
print('\n polos Re: ', Q_raizRe)
if len(parametros)>0:
    for unparam in parametros:
        print('parametros cuadraticos: ')
        for cadauno in unparam.keys():
            print(cadauno,'\t',unparam[cadauno])

s2Eva2009TII_T2 LTI DT Dado h[n], y[n] determine x[n]

Ejercicio: 2Eva2009TII_T2 LTI DT Dado h[n], y[n] determine X[n]

literal a. Expresión de x[n]

Con los datos de h[n] y y[n], se obtienen las transformadas H[z] y Y[z],

h[n] = 2 \Big( \frac{1}{3} \Big)^n \mu [n-1] = 2 \Big( \frac{1}{3} \Big)^1\Big( \frac{1}{3} \Big)^{-1}\Big( \frac{1}{3} \Big)^n \mu [n-1] h[n] = \frac{2}{3} \Big( \frac{1}{3} \Big)^{n-1} \mu [n-1]

la transformada z es:

H[z] = \frac{2}{3} \frac{1}{z-\frac{1}{3}}

Para la señal de salida Yc[z] conocida:

y_c[n] = (-2)^{n} \mu [n-1] = (-2)^1(-2)^{n-1} \mu [n-1] y_c[n] = -2 (-2)^{n-1} \mu [n-1]

[/latex]

la transformada z es:

Y_c[z] = -2\frac{1}{z+2}

La señal de entrada x[n]

x[n] = a\delta [n] + b (c)^{n-1} \mu [n-1] X[z] = a + b \frac{1}{z-c}

La señal de salida  Y[z] esperada en dominio z se obtiene como Y[z] = H[z]X[z], la expresión se escribe como:

y_e [z] = \Bigg[\frac{2}{3} \frac{1}{z-\frac{1}{3}}\Bigg] \Bigg[a + b \frac{1}{z-c}\Bigg] = \frac{2}{3} \Bigg[\frac{a}{z-\frac{1}{3}} + \frac{b}{(z-c)(z-\frac{1}{3})}\Bigg] = \frac{2}{3} \Bigg[\frac{a(z-c) + b}{(z-c)(z-\frac{1}{3})}\Bigg] y_e [z] = \frac{2}{3} \Bigg[\frac{a(z-c) + b}{(z-c)(z-\frac{1}{3})}\Bigg] = \frac{2}{3} \Bigg[\frac{az - ac + b}{(z-c)(z-\frac{1}{3})}\Bigg]

igualando las expresiones con Y[z] conocida con Y[z] esperada:

Y_c[z] = Y_e[z] -2\frac{1}{z+2} = \frac{2}{3} \Bigg[ \frac{az - ac + b}{(z-c)(z-\frac{1}{3})} \Bigg] -3\frac{1}{z+2} = \frac{az - ac + b}{(z-c)(z-\frac{1}{3})}

para que el denominador quede (z+2), se iguala el término con (z-c), con lo que c=-2

-3\frac{1}{z+2} = \frac{az-a(-2) + b}{(z+2)(z-\frac{1}{3})} -3 = \frac{az+2a + b}{(z-\frac{1}{3})} -3 (z-\frac{1}{3}) = az +2a + b -3 z + 1 = az + 2a + b

comparando el término z, se tiene que a=-3, quedando solo la parte constante para determinar el valor de b

2a + b = 1 2(-3) + b = 1

se tiene que b= 7

teniendo la expresión de la entrada como:

x[n] = -3\delta [n] + 7 (-2)^{n-1} \mu [n-1]

literal b. Ecuacion de diferencias H[z]

Se inicia con los datos de H[z]

H[z] = \frac{X[z]}{Y[z]} = \frac{2}{3} \frac{1}{z-\frac{1}{3}} \Big(z-\frac{1}{3} \Big) Y[z] = \frac{2}{3}X[z] zY[z]-\frac{1}{3} Y[z] = \frac{2}{3}X[z] y[n+1]-\frac{1}{3} y[n] = \frac{2}{3}x[n]

literal c. Diagrama de bloques

Para el diagrama de bloques se desplaza para despejar y[n]

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

H[z] = \frac{X[z]}{Y[z]} = \frac{2}{3} \frac{1}{z-\frac{1}{3}}

Observaciones:

Las raíces características o frecuencias naturales del sistema H[z]  se encuentran dentro del círculo de radio unitario. El sistema es asintóticamente estable, que implica que es BIBO estable.

 

 

 

s2Eva2016TII_T4 resolver en dominio de frecuencia

Ejercicio: 2Eva2016TII_T4 resolver en dominio de frecuencia

Partiendo de,

y(t) = x(t) \circledast h(t) Y(\omega) = X(\omega) H(\omega) Y\Big(\frac{\omega}{3}\Big) = X\Big(\frac{\omega}{3}\Big) H\Big(\frac{\omega}{3}\Big)

se tiene también que:

g(t) = x(3t) \circledast h(3t) G(\omega) = \frac{1}{3}X\Big(\frac{\omega}{3}\Big)\text{ } \frac{1}{3}H\Big(\frac{\omega}{3}\Big) = \frac{1}{9}X\Big(\frac{\omega}{3}\Big)H\Big(\frac{\omega}{3}\Big) = \frac{1}{9}Y\Big(\frac{\omega}{3}\Big) G(\omega) = \frac{1}{3} \Bigg[\frac{1}{3}Y\Big(\frac{\omega}{3}\Big)\Bigg] g(t) = \frac{1}{3} y(3t)

A = 1/3
B = 3

 

s2Eva2016TII_T3 LTI DT sistemas en serie

Ejercicio: 2Eva2016TII_T3 LTI DT sistemas en serie

literal a

S1: w[n] = \frac{1}{2}w[n-1] + x[n] S2: y[n] = \alpha y[n-1] + \beta w[n] SG: y[n] = -\frac{1}{8}y[n-2] + \frac{3}{4}y[n-1]+x[n]

usando transformada z:

S1:

W(z) = \frac{1}{2} z^{-1} W(z) + X(z) W(z) - \frac{1}{2} z^{-1} W(z) = X(z) W(z)\Big[1 - \frac{1}{2} z^{-1} \Big] = X(z) W(z) = \frac{ X(z)}{\Big[1 - \frac{1}{2} z^{-1} \Big]}

S2:

Y(z) = \alpha z^{-1} Y(z) + \beta W(z) Y(z) - \alpha z^{-1} Y(z) = \beta W(z) Y(z) \Big[1 - \alpha z^{-1} \Big] = \beta W(z)

sustituyendo la ecuacion de S1 para W(z)

Y(z) \Big[1 - \alpha z^{-1} \Big] = \beta \frac{ X(z)}{\Big[1 - \frac{1}{2} z^{-1} \Big]} Y(z) \frac{1}{\beta} \Big[1 - \alpha z^{-1} \Big]\Big[1 - \frac{1}{2} z^{-1} \Big] = X(z) Y(z) \Big[ \frac{1}{\beta} - \frac{1/2+\alpha}{\beta} z^{-1}+ \frac{1}{2} \frac{\alpha}{\beta} z^{-2}\Big]= X(z)

SG:

Y(z) = -\frac{1}{8} z^{-2} Y(z) + \frac{3}{4} z^{-1}Y(z)+X(z) Y(z)+\frac{1}{8} z^{-2} Y(z) - \frac{3}{4} z^{-1}Y(z) = X(z) Y(z)\big[ 1 - \frac{3}{4} z^{-1} +\frac{1}{8} z^{-2} \Big] = X(z)

comparando con la ecuación de S2

\frac{1}{\beta} = 1 \beta = 1 \frac{1}{2} \frac{\alpha}{\beta} = \frac{1}{8} \alpha = \frac{2\beta}{8} = \frac{1}{4}

comprobar con

- \frac{1/2+\alpha}{\beta} = \frac{3}{4}

se confirma que  α = 1/4 y β=1

la función de transferencia es:

Y(z)\Big[ 1 - \frac{3}{4} z^{-1} +\frac{1}{8} z^{-2} \Big] = X(z) \frac{Y(z)}{X(z)} = \frac{1}{\Big[ 1 - \frac{3}{4} z^{-1} +\frac{1}{8} z^{-2} \Big]} H(z) = \frac{z^2}{z^2 - \frac{3}{4} z +\frac{1}{8}} \frac{H(z)}{z} = \frac{z}{z^2 - \frac{3}{4} z +\frac{1}{8}}

usando las raices para:

z^2 - \frac{3}{4} z +\frac{1}{8} = \Big[ z-\frac{1}{4}\Big] \Big[z-\frac{1}{2}\Big]

y la parte derecha de la ecuación:

\frac{z}{\Big[ z-\frac{1}{4}\Big] \Big[z-\frac{1}{2}\Big]} = \frac{C_1}{z-\frac{1}{4}}+\frac{C_2}{z-\frac{1}{2}}

despejando para C1 y haciendo z=1/4,

C_1 = \frac{z}{\Big[z-\frac{1}{2}\Big]} = \frac{\frac{1}{4}}{\Big[\frac{1}{4}-\frac{1}{2}\Big]} = -1

despejando para C2 y haciendo z=1/2,

C_2 = \frac{z}{\Big[z-\frac{1}{4}\Big]} = \frac{\frac{1}{2}}{\Big[\frac{1}{2}-\frac{1}{4}\Big]} = 2

se H(z) se resume en,

H(z) = - \frac{z}{z - \frac{1}{4}} +2\frac{z}{z-\frac{1}{2}}

Para obtener h[n] usando la antitransformada,

h[n]=z^{-1} \Big[ H(z) \Big] h[n]=z^{-1} \Big[- \frac{z}{z - \frac{1}{4}} +2\frac{z}{z-\frac{1}{2}} \Big] h[n]= 2 \Big[ \frac{1}{2}\Big]^n \mu [n] + \Big[ \frac{1}{4}\Big]^n \mu [n] h[n]= \Bigg[ 2 \Big[ \frac{1}{2}\Big]^n + \Big[ \frac{1}{4}\Big]^n \Bigg] \mu [n]

siendo la forma de la respuesta un impulso, es un sistema IIR.


Algoritmo en Python

Usando la expresión H(z) se obtiene:

 Hz:
          2        
         z         
-------------------
 2                 
z  - 0.75*z + 0.125

 Hz/z:
           z           
-----------------------
     2                 
1.0*z  - 0.75*z + 0.125

 Hz/z.apart:
       1             2.0    
- ------------ + -----------
  1.0*z - 0.25   1.0*z - 0.5

 Hz = (Hz/z)*z
       z            2.0*z   
- ------------ + -----------
  1.0*z - 0.25   1.0*z - 0.5

 polos:     {0.250000000000000: 1, 0.500000000000000: 1}

 polos Re:  [1/4, 1/2]
>>> 

Instrucciones en Python

# Transformada z- Fracciones parciales
# Polos únicos, repetidos y complejos
# Lathi Ejercicio 5.3c pd495
# blog.espol.edu.ec/telg1001
import sympy as sym
import numpy as np

# INGRESO
z = sym.Symbol('z')

Pz = z**2
Qz = z**2-(3/4)*z+1/8

# PROCEDIMIENTO
P = Pz.as_poly(z)
Q = Qz.as_poly(z)
Xz = Pz/Qz

# Raices Denominador
Q_raiz = sym.roots(Q)
Q_raizRe = sym.real_roots(Q)
rcompleja = len(Q_raiz)-len(Q_raizRe)

# Raices reales, únicas y repetidas
if (rcompleja<=0 and len(Q_raizRe)>0):
    # fracciones parciales modificadas
    Xzz = (P/Q)/z
    Xzm = Xzz.apart()
    # fracciones parciales restaurada
    terminos = Xzm.args
    Xzp = 0*z
    for untermino in terminos:
        Xzp = Xzp + untermino*z

def parametro_cuadratico(untermino):
    unparametro ={}
    # revisa denominador cuadratico
    [numerador,denominador] = (untermino).as_numer_denom()
    gradoD = 0
    coeficientesD = denominador
    gradoN = 0
    coeficientesN = numerador
    if not(denominador.is_constant()):
        denominador = denominador.as_poly()
        gradoD = denominador.degree()
        coeficientesD = denominador.coeffs()
    if not(numerador.is_constant()):
        numerador = numerador.as_poly()
        gradoN = numerador.degree()
        coeficientesN = numerador.coeffs()
    if gradoD == 2 and gradoN==2:
        a = float(coeficientesD[1])/2
        gamma2 = float(coeficientesD[2])
        gamma = np.sqrt(gamma2)
        A = float(coeficientesN[0])
        B = float(coeficientesN[1])
        rN = (A**2)*gamma2 + B**2 - 2*A*a*B
        rD = gamma2 - a**2
        r = np.sqrt(rN/rD)
        beta = np.arccos(-a/gamma)
        thetaN = A*a-B
        thetaD = A*np.sqrt(gamma2-a**2)
        theta = np.arctan(thetaN/thetaD)
        unparametro = {'r':r,
                       'gamma':gamma,
                       'beta':beta,
                       'theta':theta}
    return (unparametro)

# Terminos cuadraticos
parametros = [] # denominador cuadratico
if (rcompleja>0 and len(Q_raizRe)>0):
    # fracciones parciales modificadas
    Xzz = (P/Q)/z
    Xzm = Xzz.apart()
    # fracciones parciales restaurada
    terminos = Xzm.args
    Xzp = 0*z
    for untermino in terminos:
        Xzp = Xzp + untermino*z
        unparam = parametro_cuadratico(untermino*z)
        if len(unparam)>0:
            parametros.append(unparam)
if (rcompleja>0 and len(Q_raizRe)==0):
    Xzp = P/Q
    parametros.append(parametro_cuadratico(P/Q))

# SALIDA
print('\n Hz:')
sym.pprint(Xz)
if (len(Q_raizRe)>0):
    print('\n Hz/z:')
    sym.pprint(Xzz)
    print('\n Hz/z.apart:')
    sym.pprint(Xzm)
    print('\n Hz = (Hz/z)*z')
    sym.pprint(Xzp)
    print('\n polos:    ', Q_raiz)
print('\n polos Re: ', Q_raizRe)
if len(parametros)>0:
    for unparam in parametros:
        print('parametros cuadraticos: ')
        for cadauno in unparam.keys():
            print(cadauno,'\t',unparam[cadauno])


Literal c

revisando los polos y ceros:

ceros : z = 0  y z = 0

polos: z=1/4 y z=1/2
Dado que todos los polos se encuentran dentro del círculo de radio unitario , el sistema es asintóticamente estable, por lo que es BIBO o EASA estable

literal d

S(z) = \Big[ \frac{z}{z-1} \Big] \frac{z^2}{z^2-\frac{3}{4}z + \frac{1}{8}} S(z) = \frac{z^3}{(z-1)(z-1/4)(z-1/2)} \frac{S(z)}{z} = \frac{z^2}{(z-1)(z-1/4)(z-1/2)}

aplicando el mismo método anterior, se tiene:

Pz = z*z**3
Qz = (z-1)*(z**2-(3/4)*z+1/8)

con resultado:

 Hz:
               4             
              z              
-----------------------------
        / 2                 \
(z - 1)*\z  - 0.75*z + 0.125/

 Hz/z:
                 3                
                z                 
----------------------------------
     3         2                  
1.0*z  - 1.75*z  + 0.875*z - 0.125

 Hz/z.apart:
      0.0833333333333333        1        2.66666666666667
1.0 + ------------------ - ----------- + ----------------
         1.0*z - 0.25      1.0*z - 0.5        z - 1

 Hz = (Hz/z)*z
        0.08333333333333*z        z        2.666666666667*z
1.0*z + ------------------ - ----------- + ----------------
            1.0*z - 0.25       1.0*z - 0.5       z - 1

 polos:     {0.2500: 1, 0.5000: 1, 1.0000: 1}

 polos Re:  [1/4, 1/2, 1]
>>>
S(z) = \frac{1}{3}\frac{z}{z-1/4} -2\frac{z}{z-1/2} + \frac{8}{3}\frac{z}{z-1}

aplicando la transformada inversa

s(n)= \Bigg[ \frac{1}{3}\Big[ \frac{1}{4} \Big]^n -2\Big[\frac{1}{2} \Big]^n + \frac{8}{3} \Bigg] \mu [n]

 

s2Eva2016TII_T2 LTI CT Circuito RC respuesta de frecuencia H(ω), impulso h(t)

Ejercicio: 2Eva2016TII_T2 LTI CT Circuito RC respuesta de frecuencia H(ω), impulso h(t)

literal a

v_1 (t) = v_R (t) +v_C (t) v_1 (t) = R i(t) +v_2 (t) i(t) = C \frac{\delta v_2 (t)}{\delta t} v_2(t) = RC \frac{\delta v_2 (t)}{\delta t} +v_2 (t) V_1 (\omega) = j \omega RC V_2 (\omega) + V_2(\omega) = V_2(\omega) [1+j\omega RC] H(\omega) = \frac{V_2 (\omega)}{V_1(\omega)} = \frac{1}{1+j\omega RC} = \frac{1}{1+j\frac{\omega}{\omega_c}} \omega _c = \frac{1}{RC} H(\omega) =\frac{V_2(\omega)}{V_1(\omega)} = \frac{1}{1+j\frac{\omega}{2}} \begin{cases} |H(\omega) = \frac{1}{\sqrt{1+\big( \frac{\omega}{2}\big)^2}} \\ \theta_{H(\omega)} = -tg^{-1} \big( \frac{\omega}{2}\big) \end{cases} \omega _c = \frac{1}{RC}

literal c

La respuesta impulso del filtro LPF, se obtiene mediante:

h(t) = \mathcal{F}^{-1} \Big[ H(\omega) \Big] = \mathcal{F}^{-1} \Big[ \frac{1}{1+j(\omega /2)} \Big] =2\mathcal{F}^{-1} \Big[ \frac{1}{j\omega +2} \Big] h(t)=2e^{2t}\mu (t)

literal d

Método 1: usando la respuesta de frecuencia

\begin{cases} |H(\omega) = \frac{1}{\sqrt{1+\big( \frac{\omega}{2}\big)^2}} \\ \theta_{H(\omega)} = -tg^{-1} \big( \frac{\omega}{2}\big) \end{cases} \begin{cases} |H(50) = \frac{1}{\sqrt{1+\big( \frac{50}{2}\big)^2}} = \frac{1}{\sqrt(626)} \\ \theta_{H(\omega)} = -tg^{-1} \big( \frac{50}{2}\big) = -87.7\end{cases} v_2(t) = |H(50)| \sin \big(50t+\theta_{H(50)} \big) v_2(t) = \frac{1}{\sqrt(626)} \sin \big(50t-87.7) \big)

método 2:

V_2(\omega ) = V_1(\omega) H(\omega) V_1 (\omega) = \mathcal{F}[v_1(t) ] = \mathcal{F} [ \sin (50t) ] = j \pi \delta (\omega +50) - j \pi \delta (\omega-50) V_2 (\omega) = V_1(\omega) H(\omega) V_2 (\omega) = \Big[ j \pi \delta (\omega +50) - j \pi \delta (\omega-50) \Big] \Big[ \frac{1}{1+j(\omega/2)} \Big] = j \pi \Big[ \delta (\omega + 50)\frac{1}{1+j(\omega /2)} - \delta (\omega - 50)\frac{1}{1+j(\omega /2)}\Big] = j \pi \Big[ \delta (\omega + 50)\frac{1}{1+j(50 /2)} - \delta (\omega - 50)\frac{1}{1+j(50 /2)}\Big] = j \pi \Big[ \delta (\omega + 50)\frac{1+j25}{626} - \delta (\omega - 50)\frac{1-j25}{626}\Big] = j \frac{\pi}{626} \Big[ \delta (\omega + 50) - \delta (\omega - 50) + j25 \delta (\omega + 50) + j25 \delta (\omega - 50)\Big] = \frac{1}{626} \Big[ j\pi \delta (\omega + 50) - j \pi \delta(\omega - 50)\Big] - \frac{25}{626} \Big[ \pi \delta (\omega + 50) +\pi \delta(\omega - 50)\Big] v_2(t) = \mathcal{F}^{-1} [V_2 (\omega)] = \frac{1}{626} \mathcal{F}^{-1}\Bigg[ \Big[ j\pi \delta (\omega + 50) - j \pi \delta(\omega - 50)\Big] - 25 \Big[ \pi \delta (\omega + 50) +\pi \delta(\omega - 50)\Big] \Bigg] v_2(t) = \frac{1}{626} \Big[ \sin (50t) - 25 \cos (50t) \Big]

usando fasores:

v_2(t) = \frac{1}{626} \cos (50t-177.709) = \frac{1}{626} \sin (50t-87.70)

En la salida, existe un factor de atenuación de 0.04 y un retardo de 87.70°.
Como la señal de entrada se reproduce de manera exacta en su salida a pesar tener amplitud diferente y un retardo en el tiempo.

s2Eva2010TI_T3 LTI CT simplificar H(s) por Bloques

Ejercicio: 2Eva2010TI_T3 LTI CT simplificar H(s) por Bloques

Se ubican algunos puntos de referencia sobre el diagrama de bloques para plantear las ecuaciones, dejando para el último el bloque en serie del exponencial e(-3s) o retraso en tiempo

W_1(s) = X(s) W_2(s) = W_1(s)-\frac{6}{s+5} W_4(s) W_2(s) = X(s)- -\frac{6}{s+5} W_4(s) W_3(s) = \frac{1}{s} W_2(s) = \frac{1}{s} \Big[ X(s) -\frac{6}{s+5} W_4(s) \Big] W_3(s) = \frac{1}{s} X(s) -\frac{6}{s(s+5)} W_4(s) W_4(s) = W_3(s) +\frac{1}{s+4}X(s)

Se plantea la simplificación de H(s) =W4(s)/X(s), dejando el término exponencial o retraso de tiempo para el final. Por lo que se despeja W4(s)

W_4(s) = \frac{1}{s} X(s) -\frac{6}{s(s+5)} W_4(s) +\frac{1}{s+4}X(s) W_4(s) +\frac{6}{s(s+5)} W_4(s) = \frac{1}{s} X(s) +\frac{1}{s+4}X(s) \Big[1 +\frac{6}{s(s+5)}\Big] W_4(s) = \Big[ \frac{1}{s} +\frac{1}{s+4} \Big] X(s) \frac{s(s+5)+6}{s(s+5)} W_4(s) = \frac{(s+4)+s}{s(s+4)} X(s) \frac{s^2+5s+6}{s+5} W_4(s) = \frac{2(s+2)}{s+4} X(s) \frac{(s+2)(s+3)}{s+5} W_4(s) = \frac{2(s+2)}{s+4} X(s) \frac{s+3}{s+5} W_4(s) = \frac{2}{s+4} X(s) \frac{W_4(s)}{X(s)} = \frac{2(s+5)}{(s+4)(s+3)}

La respuesta al impulso H1(s) tiene polos en s=-3 y s=-4, que se encuentran en el lado izquierdo del plano imaginario s. Por lo que sus componentes en el dominio del tiempo son exponenciales decrecientes, el sistema es asintóticamente estable.

El grado del polinomio P del numerador es menor al grado del polinomio Q del numerador.

Separando en fracciones parciales para H1(s) :

H_1(s) =\frac{2(s+5)}{(s+4)(s+3)} H_1(s) = \frac{k_1}{s+4} +\frac{k_2}{s+3} = k_1 =\frac{2(s+5)}{\cancel{(s+4)}(s+3)}\Bigg|_{s=-4} = \frac{2(-4+5)}{(-4+3)} = \frac{2(1)}{-1} = -2 k_2 =\frac{2(s+5)}{(s+4)\cancel{(s+3)}} \Bigg|_{s=-3} = \frac{2(-3+5)}{(-3+4)} = \frac{2(2)}{1} = 4 H_1(s) = -\frac{2}{s+4} +\frac{4}{s+3} =

Finalmente, añadiendo el término exponencial, que es el retraso en tiempo del sistema:

H(s) = \Big[-\frac{2}{s+4} +\frac{4}{s+3} \Big] e^{-3s}

s2Eva2010TI_T3 polos

se observa el comportamiento de H(s) junto a los polos en la parte real e imaginaria:

s2Eva2010TI_T3 polos H(s)

el resultado con el algoritmo para el literal a es:

 H(s) = P(s)/Q(s):
/    2       4  \  -3*s
|- ----- + -----|*e    
\  s + 4   s + 3/      
 H(s) en factores:
           -3*s
2*(s + 5)*e    
---------------
(s + 3)*(s + 4)

 h(t) :
/   9  -3*t      12  -4*t\                 
\4*e *e     - 2*e  *e    /*Heaviside(t - 3)

polosceros:
exp(-3*s) : {'Q_polos': {-3: 1, -4: 1}, 'P_ceros': {-5: 1}, 'Hs_k': 2*(s + 5)/((s + 3)*(s + 4))}
Q_polos : {-3: 1, -4: 1}
P_ceros : {-5: 1}

Estabilidad de H(s):
 n_polos_real : 2
 n_polos_imag : 0
 enRHP : 0
 unicos : 0
 repetidos : 0
 asintota : estable

literal b. mostrar h(t)

H(s) = \Big[-\frac{2}{s+4} +\frac{4}{s+3} \Big] e^{-3s}

Usando la tabla de transformadas de Laplace, para la línea 5 y la propiedad de desplazamiento en t, se obtiene:

h(t) = \Big[-2 e^{-4(t-3)} +4e^{-3(t-3)} \Big] \mu(t-3)

literal c. Y(s) con entrada exponencial decreciente

La señal de salida Y(s)=H(s)X(s) ante una entrada X(s)=1/(s+5) que es la transformada de Laplace de x(t)=e-5t μ(t)

Y(s) = H(s)x(s) = \Big[\frac{2(s+5)}{(s+4)(s+3)}\Big]\Big[\frac{1}{s+5}\Big] e^{-3s} Y(s) = \frac{2}{(s+4)(s+3)}e^{-3s}

Tarea: Realizar el desarrollo analítico y revisar los resultados del algoritmo

al realizar las fracciones parciales, se obtiene:

Y(s) = \Big[-\frac{2}{s+4} +\frac{2}{s+3} \Big] e^{-3s}

Con transformada inversa de Laplace, usando nuevamete la tabla de transformadas de Laplace, para la línea 5 y la propiedad de desplazamiento en t, se obtiene:

y(t) = \Big(-2 e^{-4(t-3)} +2e^{-3(t-3)}\Big) \mu (t-3)

s2Eva2010TI_T3 y(t)

El resultado del algoritmo para el literal c del ejercicio es:

 X(s): 
  1  
-----
s + 5

Respuesta entrada cero ZIR H(s) y condiciones iniciales
term_cero : 0
ZIR :
0
yt_ZIR :
0

 ZSR respuesta estado cero:
ZSR :
/    2       2  \  -3*s
|- ----- + -----|*e    
\  s + 4   s + 3/      
yt_ZSR :
/   9  -3*t      12  -4*t\                 
\2*e *e     - 2*e  *e    /*Heaviside(t - 3)

 Y(s)_total = ZIR + ZSR:
/    2       2  \  -3*s
|- ----- + -----|*e    
\  s + 4   s + 3/      

 y(t)_total = ZIR + ZSR:
/   9  -3*t      12  -4*t\                 
\2*e *e     - 2*e  *e    /*Heaviside(t - 3)
>>>

Instrucciones en Python

Usando los bloques desarrollados en la Unidad 4 Sistemas LTI – Laplace  y las funciones resumidas como telg1001.py que pueden ser usados en cada pregunta.

# Y(s) Respuesta total con entada cero y estado cero
# Qs Y(s) = Ps X(s) ; H(s)=Ps/Qs
# http://blog.espol.edu.ec/telg1001/
import sympy as sym
import matplotlib.pyplot as plt
import telg1001 as fcnm

# INGRESO
s = sym.Symbol('s')
t = sym.Symbol('t', real=True)
d = sym.DiracDelta(t)
u = sym.Heaviside(t)

# Literal a. H(s) y estabilidad
Hs = 2*(s+5)/((s+4)*(s+3)) * sym.exp(-3*s)
#Hs = 1+0*s cuando es constante

# literal c. X(s) Señal de entrada
xt = sym.exp(-5*t)*u

# condiciones iniciales, [y'(0),y(0)] orden descendente
t0 = 0
cond_inicio = [0, 0] # estado cero no se usan

# Grafica, intervalo tiempo [t_a,t_b]
t_a = 0 ; t_b = 5
muestras = 101  # 51 resolucion grafica

# PROCEDIMIENTO
Hs = fcnm.apart_exp(Hs) # fracciones parciales
Hs_fc = fcnm.factor_exp(Hs) # en factores
Hs_Qs2 = fcnm.Q_cuad_parametros(Hs_fc)

polosceros = fcnm.busca_polosceros(Hs)
Q_polos = polosceros['Q_polos']
P_ceros = polosceros['P_ceros']

estable = fcnm.estabilidad_asintotica(Q_polos)

# H(t) respuesta al impulso
ht = 0*s
term_suma = sym.Add.make_args(Hs)
for term_k in term_suma:
    ht_k = sym.inverse_laplace_transform(term_k,s,t)
    # simplifica log(exp()) ej: e**(-2s)/(s**2)
    if ht_k.has(sym.log):
        ht_k = sym.simplify(ht_k,inverse=True)
    ht  = ht + ht_k
lista_escalon = ht.atoms(sym.Heaviside)
ht = sym.expand(ht,t) # terminos suma
ht = sym.collect(ht,lista_escalon)

# PROCEDIMIENTO Respuesta ZIR, ZSR
Xs = fcnm.laplace_transform_suma(xt)

# ZIR_s respuesta entrada cero de s
sol_ZIR = fcnm.respuesta_ZIR_s(Hs,cond_inicio)
ZIR = sol_ZIR['ZIR']
yt_ZIR = sol_ZIR['yt_ZIR']

# ZSR respuesta estado cero, Y(s) a entrada X(s)
sol_ZSR = fcnm.respuesta_ZSR_s(Hs,Xs)
ZSR = sol_ZSR['ZSR']
yt_ZSR = sol_ZSR['yt_ZSR']

# Respuesta total Y(s) y y(t)
Ys = ZIR + ZSR
Ys = fcnm.apart_exp(Ys)
yt = yt_ZIR + yt_ZSR
lista_escalon = yt.atoms(sym.Heaviside)
yt = sym.collect(yt,lista_escalon)

# SALIDA
print(' H(s) = P(s)/Q(s):')
sym.pprint(Hs)
print(' H(s) en factores:')
sym.pprint(Hs_fc)
if len(Hs_Qs2)>0:
    print('\nH(s) parámetros cuadraticos:')
    fcnm.print_resultado_dict(Hs_Qs2)

print('\n h(t) :')
sym.pprint(ht)

print('\npolosceros:')
fcnm.print_resultado_dict(polosceros)

print('\nEstabilidad de H(s):')
for k in estable:
    print('',k,':',estable[k])

print('\n X(s): ')
sym.pprint(Xs)
print('\nRespuesta entrada cero ZIR H(s) y condiciones iniciales')

if not(sol_ZIR == sym.nan): # existe resultado
    fcnm.print_resultado_dict(sol_ZIR)
else:
    print(' insuficientes condiciones iniciales')
    print(' revisar los valores de cond_inicio[]')

print('\n ZSR respuesta estado cero:')
fcnm.print_resultado_dict(sol_ZSR)

print('\n Y(s)_total = ZIR + ZSR:')
sym.pprint(Ys)
print('\n y(t)_total = ZIR + ZSR:')
sym.pprint(yt)

# Graficas polos, H(s), con polos h(t) --------
muestras_H = 201
figura_s  = fcnm.graficar_Fs(Hs_fc,Q_polos,P_ceros,f_nombre='H',solopolos=True)
figura_Hs = fcnm.graficar_Fs(Hs_fc,Q_polos,P_ceros,muestras=muestras_H,f_nombre='H')
figura_ht = fcnm.graficar_ft(ht,t_a,t_b,muestras,f_nombre='h')
# GRAFICAS y(t),x(t),h(t) ---------------------
figura_ft = fcnm.graficar_xh_y(xt,ht,yt,t_a,t_b,muestras)
plt.show()