Referencia: Oppenheim 1.6.6 p53, Lathi 1.7-1 p97, Hsu 1.5.E p18
En un sistema lineal cumple con el principio de superposición que se compone de la propiedad de aditividad y de la escalabilidad.
La superposición puede ser un resultado deseado, por ejemplo en un sistema de audio que no añada «distorsiones» a lo que ingresa por un micrófono y se reproduce en los parlantes.
Un sistema lineal cumple la propiedad de aditividad, si la respuesta a una suma de señales en la entrada es igual a la suma de las salidas de las señales anteriores.
x_1(t) + x_2(t) \rightarrow y_1(t) + y_2(t) La propiedad de escalabilidad u homogeneidad muestra una relación de «amplificación» o «atenuación» representada por una constante.
Para los ejemplos, las constantes a usar son α y β que podrían ser reales o complejas.
La propiedad de escalabilidad implica que una amplificación o atenuación puede ser aplicada antes o después del sistema, el resultado debería ser semejante.
La propiedad de superposición se plantea como una combinación de las propiedades anteriores:
en el tiempo contínuo:
\alpha x_1(t) + \beta x_2 (t) \rightarrow \alpha y_1(t) + \beta y_2(t)en tiempo discreto:
\alpha x_1[n] + \beta x_2 [n] \rightarrow \alpha y_1[n] + \beta y_2[n]Nota: De ser necesario, revisar los conceptos para Sympy en el curso de Métodos Numéricos: Fórmulas y funciones simbólicas con Python – Sympy
Ejemplo 1. Un micrófono inductivo, sistema que deriva x(t)
Referencia: Lathi 1.11 b p103.
Para el sistema dado, determine si cumple la propiedad de aditividad y escalabilidad para revisar si es un sistema lineal:
y(t) = \frac{\delta}{\delta t}x(t)
La salida del sistema es solo la derivada de la señal de entrada. Al sumar dos entradas diferentes antes del sistema, representada como w(t), se produce el mismo resultado que la suma de las salidas del sistema para las señales de entrada individuales.
Suponiendo como entradas las señales f(t) = sin(t), graficada en azul, g(t) = cos(t) en color naranja, al aplicarse cada una al sistema, se obtienen las gráficas de salida usando los mismos colores para facilidad de comparación.
Para el análisis, se añade una entrada adicional w(t) = α f(t) + β g(t) que en la gráfica es de color verde para entrada y salida.
Se obtiene la expresión para el sistema α y[f(t)] + β y[g(t)] (color rojo) y se observa si son iguales con y[w(t)], de ser iguales, el sistema es lineal.
El desarrollo analítico se encuentra en el libro guía en la referencia, por lo que se adjunta la parte algorítmica para la gráfica con Python, y se obtienen también las expresiones para los resultados correspondientes con Sympy:
yf = cos(t) yg = -sin(t) yw = -3*sin(t) + 2*cos(t) yfg = -3*sin(t) + 2*cos(t)
Un ejemplo de aplicación para un sistema que deriva una entrada es un micrófono dinámico o de bobina, usado como preferencia por sus propiedades en locución de radio.
Referencia: Micrófonos dinámicos de bobina móvil: la guía detallada. Micrófono Rocks. https://microfono.rocks/microfonos-dinamicos-de-bobina-movil-la-guia-detallada/
Diferencias entre un Micrófono Dinámico y de Condensador – StudioMusic.cl
Ejemplo 2. Sistema con salida (x(t))2
Referencia: Oppenheim 1.18 p54
Para un sistema cuya entrada x(t) y salida y(t) se encuentra relacionada por:
y(t) = x^2(t)Desarrolle las expresiones para determinar si el sistema es lineal, semejante al ejemplo del texto guía.
Se adjunta el resultado realizado con el algoritmo en Python, modificando las expresiones para y = x**2
mostrando que el sistema es NO lineal.
2 yf = sin (t) 2 yg = cos (t) 2 yw = (2*sin(t) + 3*cos(t)) 2 2 yfg = 2*sin (t) + 3*cos (t)
Ejemplo 3. Sistema t(x(t))
Referencia: Oppenheim 1.17 p54
Considere un sistema cuya entrada x(t) y salida y(t) se encuentra relacionada por:
y(t) = t x(t)Para determinar si S es o no lineal, se consideran dos entradas arbitrarias iguales a las del ejercicio anterior, haciendo w(t) = α f(t) y β g(t)
Desarrolle las expresiones para determinar si el sistema es lineal
Se adjunta el resultado realizado con el algoritmo en Python, modificando las expresiones para y = t*x
mostrando que el sistema es lineal.
yf = t*sin(t) yg = t*cos(t) yw = 2*t*sin(t) + 3*t*cos(t) yfg =2*t*sin(t) + 3*t*cos(t)
Instrucciones con Sympy-Python
Sympy facilita generar las expresiones de las señales de entrada al pasar por el sistema. De ser necesario, revise los conceptos para Sympy en el curso de Métodos Numéricos: Fórmulas y funciones simbólicas con Python – Sympy
En Sympy se puede derivar una expresión usando sym.diff()
. Sin embargo para un sistema que aplica derivadas, las expresiones de salida se generan sin aplicar la derivada pues primero se sustituye la variable x
con la expresión de la entrada y luego se aplica sym.Derivative(x,t)
. Para que se ejecute la derivada se tiene la instrucción doit()
.
En caso que la señal de entrada sea una expresión mas compleja que la de los ejemplos, se recomienda usar la instrucción a la expresión .expand()
.
expand()
genera términos más simples de la expresión que facilitan el análisis por algoritmos con Python.
# Sistema Lineal prueba # Revisa propiedad de aditividad y escalabilidad # Lathi ej1.11 p103 import numpy as np import sympy as sym import matplotlib.pyplot as plt # INGRESO t = sym.Symbol('t', real=True) x = sym.Symbol('x', real=True) # señales de entrada f = sym.sin(t) g = sym.cos(t) alpha = 1 beta = 1 # sistema, aplica a entrada # expresión sin evaluar y = sym.diff(x,t, evaluate=False) # intervalo de t[a,b] para graficar a = 0 b = 2*np.pi muestras = 41 # PROCEDIMIENTO # señales suma de entradas w = alpha*f + beta*g # Sistema sobre señal de entrada # se evalua la expresión con doit() yf = y.subs(x,f).doit() yg = y.subs(x,g).doit() yw = y.subs(x,w).doit() yfg = alpha*yf+ beta*yg # Para gráfica ti = np.linspace(a,b,muestras) # señales de entrada ft = sym.lambdify(t,f) gt = sym.lambdify(t,g) wt = sym.lambdify(t,w) # señales de salida yft = sym.lambdify(t,yf) ygt = sym.lambdify(t,yg) ywt = sym.lambdify(t,yw) yfgt = sym.lambdify(t,yfg) # evalua entradas ti fi = ft(ti) gi = gt(ti) wi = wt(ti) # evalua salidas ti yfi = yft(ti) ygi = ygt(ti) ywi = ywt(ti) yfgi = yfgt(ti) # SALIDA print('yf:') sym.pprint(yf) print('yg:') sym.pprint(yg) print('yw:') sym.pprint(yw) print('yfg:') sym.pprint(yfg) # grafica plt.subplot(211) # entradas plt.plot(ti,fi,'--', label='f(t)') plt.plot(ti,gi,'--', label='g(t)') plt.plot(ti,wi, label='w(t)') plt.axhline(0) plt.xlabel('ti') plt.ylabel('entradas') untitulo = 'Sistemas Linealidad ' + str(y) plt.title(untitulo) plt.legend() plt.grid() plt.subplot(212) # salidas plt.plot(ti,yfi,'--', label='y(f(t))') plt.plot(ti,ygi,'--', label='y(g(t))') plt.plot(ti,ywi, label='y(w(t))') etqLatex = r'$ \alpha y[f(t)]+\beta y[g(t)] $' plt.plot(ti,yfgi,'.', label=etqLatex) plt.axhline(0) plt.xlabel('ti') plt.ylabel('salidas') plt.legend() plt.grid() plt.show()
Referencia: Derivadas con Sympy. Expresión sin evaluar y evaluación de expresión con Derivative. https://docs.sympy.org
Conceptos para Sympy en el curso de Métodos Numéricos: Fórmulas y funciones simbólicas con Python – Sympy