Cómo comprobar una convolución problema integral numéricamente

Aquí es una solución detallada analítico a un problema integral de convolución, seguido por la verificación numérica detallada, utilizando PyLab de la cáscara interactivo IPython (la versión QT en particular). La intención de la solución numérica es demostrar cómo las herramientas informáticas pueden verificar las soluciones analíticas a los problemas de convolución.

Video: Utilizando el teorema de la convolución para resolver un problema con valor inicial

Configurar PyLab

Para comenzar con PyLab y la IPython shell interactivo, se puede establecer fácilmente las herramientas en Mac OS, Windows y Ubuntu Linux.

Video: INTEGRAL DEFINIDA - Ejercicio 1

Configuración en Ubuntu Linux es quizás el más fácil, ya que sólo puede utilizar el Ubuntu Software Center. En Mac OS y Windows, se puede utilizar una instalación en contínuo, que instala la mayoría de todo lo que necesita a la vez. Echa un vistazo a la versión gratuita de Enthought, pero otros están disponibles en la web.

Verificar convolución en tiempo continuo

Este es un ejemplo de convolución empleando señales de extensión finita. soluciones analíticas completas se incluyen, pero la atención se centra en la verificación numérica, en particular, utilizando PyLab y el módulo de código personalizado de libre disposición ssd.py antes mencionado.

Considere la integral de convolución para dos señales de tiempo continuo x(t) y marido(t) mostrado.

[Ilustración de Mark Wickert, PhD]

Para llegar a la solución analítica, es necesario dividir el problema en cinco casos, o intervalos de tiempo t donde se puede calcular la integral para formar una solución contigua a trozos. Cuando se pone estos cinco intervalos contiguos entre sí, usted tiene una solución completa para todos los valores de t:

Video: integral de convolucion

A partir del estudio de las integrales de convolución, se descubre que se puede escribir con el apoyo o el intervalo activo para los productos y(t) En términos de los intervalos de apoyo para cada una de las señales de entrada. Este resultado indica que el intervalo de soporte de salida se extiende desde la suma de los valores de partida para x(t) y marido(t) Y termina en los valores de final. Por lo tanto, el intervalo de soporte para y(t) Es como máximo


Video: 8. Convolución continua

En este ejemplo, cada caso es tratar como un paso en la solución que sigue:

  • Caso 1: Se empieza con t + 1 lt; 0, o equivalentemente t lt; -1. El producto de formas de onda marido(λ) y x(t - λ) no se solapan en el integrando integral de convolución, por lo que para el caso 1 la integral es simplemente y(t) = 0 para t lt; -1.

  • Caso 2: Considere el siguiente intervalo a la derecha de la caja 1. Este caso está formado por la condición de las articulaciones del borde de la señal en t + 1 ≥ 0 y t + 1 lt; 3, que es equivalente a la escritura -1 ≤ t lt; 2. El integrando de la integral de convolución es de 2 x 3 con los límites de integración que va desde 0 a t + 1.

    Tu encuentras y(t) En este intervalo mediante la evaluación de la integral de convolución:

  • Caso 3: El siguiente intervalo en la serie es t + 1 ≥ 3 y t - 4 lt; 0 o 2 ≤ t lt; 4. El integrando es de nuevo 2 x 3, pero ahora los límites de integración ejecutar desde 0 a 3. Evaluación de los rendimientos integral de convolución de la siguientes:

  • Caso 4: El intervalo final que implica la superposición de la señal se produce cuando t - 4 ≥ 0 y t - 4 lt; 3, lo que implica que 4 ≤ t ≤ 7. Los límites de integración ejecutan desde t - 4 a 3, por lo que el resultado integral de convolución es

  • Caso 5: Se puede ver que cuando t - 4 gt; 3 o t gt; 7, no hay solapamiento entre las señales del integrando, por lo que la salida es y(t) = 0, t gt; 7.

La recogida de las diferentes piezas de la solución, se tiene lo siguiente:

Verificación de esta solución con Python implica dos pasos: (1) el trazado de la solución analítica y (2) comparándola con la trama de la solución numérica, utilizando funciones que se encuentran en el módulo de código ssd.py. Aquí están los detalles para completar estos pasos:

  1. Crear una función a trozos en Python que a continuación se puede evaluar en un rango definido por el usuario de los valores de tiempo.

    Se puede escribir esta función justo en la cáscara IPython como se muestra aquí:

    en [68]: Def pulse_conv (t): ...: y = ceros (len (t)) # inicializar matriz de salida ...: para k, tk en enumerate (t): # make valores de y (t) ...: si tk gt; = -1 y tk lt; 2: ...: y [k] = 6 * tk + 6 ...: tk elif gt; = 2 y tk lt; 4: ...: y [k] = 18 ...: tk elif gt; = 4 y tk lt; = 7: ...: y [k] = 42 - 6 * tk ...: retorno y

    Tenga en cuenta que el lenguaje Python es sensible a los guiones, así que presta atención a los guiones al introducir este código en IPython. La buena noticia es que IPython entiende las necesidades de Python y hace un buen trabajo de sangría bloque de código automáticamente.

  2. evaluar numéricamente la convolución creando en primer lugar las representaciones de las formas de onda reales de la convolución y luego realizar la convolución numérica.

    Para acceder a las funciones en el módulo ssd.py, debe importar el módulo en su sesión de IPython, usando En [69]: SSD importación.

    A continuación, puede acceder a las funciones en el módulo utilizando el prefijo de espacio de nombres SSD. La función Y, ny = ssd.conv_integral (x1, TX1, x2, tx2, extensión = ( ‘f’, ‘f’)) realiza la convolución real.

    Se carga versiones de tiempo de muestreo de las señales de convolucionarse en los argumentos x1 y x2, con TX1 y tx2 siendo los ejes de tiempo correspondientes. Los cuatro de estas variables son NumPy ndarrays. La función devuelve el resultado de convolución y seguido por Nueva York, como una tupla de Python. Las formas de los pulsos rectangulares se crean con la función ssd.rect (n, tau) y el eje de desplazamiento de tiempo en los argumentos de la función.

    Poniendo todo junto, el código de forma numérica la aproximación de la integral de convolución de salida es el siguiente (sólo declaraciones de código crítico se muestra):

    en [89]: T = arange (-8,9, 0,01) En [90]: Xc1 = 2 * ssd.rect (t-1.5,5) En [91]: HC1 = 3 * ssd.rect (t-1.5,3) En [93]: Subtrama (211) En [94]: Plot (t, XC1) En [99]: Subtrama (212) En [100]: Plot (t, HC1) En [101]: Savefig ( `c1_intputs.pdf`) En [115]: Yc1_num, tyc1 = ssd.conv_integral (XC1, t, HC1, t) Soporte de salida: (-16,00, 17,98) En [116]: Subtrama (211) En [117]: Plot (t, pulse_conv (t)) En [123]: Subtrama (212) En [125]: Plot (tyc1, yc1_num) En [130]: Savefig ( `c1_outputs.pdf`)

    La siguiente figura muestra gráficos de las señales x(t) y marido(t).

    [Ilustración de Mark Wickert, PhD]

Por último, la representación numérica de y(t) Se representa junto con la solución analítica se muestra.

[Ilustración de Mark Wickert, PhD]

Desde una perspectiva de trama, las dos soluciones están de acuerdo, por lo que se confirma la solución analítica.

Artículos Relacionados