Instituto Politécnico Nacional Unidad Profesional interdisciplinaria de ingeniería Campus Tlaxcala Procesamiento de Señales. Informe 2: Convolución. Alumno: Alex Eduardo Cervantes Fong. Docente: Antonio Castillo 15 de abril de 2024. 1. Resumen 2. Introducción 3. Desarrollo 3.1. Conmutatividad 3.1.1. Demostración conmutatividad 3.1.2. Ejemplo conmutatividad 3.2. Asociatividad 3.2.1. Demostración asociatividad 3.2.2. Ejemplo 3.3. Distributiva 3.3.1. Demostración distrivutividad 3.3.2. Ejemplo 3.4. Matriz discreta 3.5. Matriz convolucional 3.5.1. Ejemplo matriz convolucional 3.6. Ejemplo Arduino 4. Conclusiones 5. Referencias 1. Resumen En este informe, se explicaran las propiedades de la convolución discreta, como su conmutatividad, asociatividad y distributividad, con la demostración matemática y un ejmplo practico de cada una. Nos centraremos específicamente en la convolución discreta, donde la convolución se aplica a datos discretos, además se profundizara sobre método donde se emplea una matriz de convolución discreta para llegar al resultado de una convolución. Y por último, observaremos un ejemplo de implementación en la plataforma Arduino, demostrando cómo la convolución discreta se traduce en soluciones tangibles para problemas del mundo real. La convolución discreta es un concepto fundamental en el procesamiento de señales y el aprendizaje automático, utilizado en una amplia gama de aplicaciones En el contexto de las redes neuronales convolucionales, la convolución desempeña un papel crucial en la extracción de características de datos complejos, lo que permite el aprendizaje de representaciones significativas y la realización de tareas de clasificación y reconocimiento con alta precisión. Comprender los principios y técnicas de la convolución discreta es esencial para nosotros estudiantes de inteligencia artificial, ya que nos capacita para diseñar, implementar y mejorar modelos de CNNs y aplicarlos en diversos problemas del mundo real. 2. Introducción La convolución discreta es una variante de la convolución que se aplica a señales discretas, como secuencias numéricas o imágenes digitales. Se utiliza en una variedad de campos, incluyendo el procesamiento de señales y la inteligencia artificial. Entre sus propiedades más importantes se encuentran la conmutatividad, asociatividad y distributividad. La conmutatividad significa que el orden en el que se convolucionan dos funciones no afecta el resultado final, lo que proporciona flexibilidad en su aplicación. Por otro lado, la asociatividad implica que la convolución de tres funciones puede realizarse en cualquier orden sin cambiar el resultado. Además, la distributividad establece que la convolución distribuye sobre la suma, lo que facilita el tratamiento de señales compuestas por múltiples componentes. En este contexto, la convolución se realiza mediante la superposición y multiplicación de una función (kernel) sobre la señal de entrada, seguida de la suma de los productos resultantes. Para realizar la convolución discreta en una computadora, se utiliza una matriz de convolución discreta, que contiene los coeficientes del kernel. Un ejemplo discreto en Arduino podría ser la aplicación de un filtro de media móvil a una serie temporal de datos sensoriales para suavizar el ruido y extraer tendencias. El objetivo de este informe es poder comprender la convolución discreta, características, propiedades, maneras de resolverla e implementaciones, centrándose en su importancia en el procesamiento de señales y su aplicación en redes neuronales convolucionales (CNNs), un componente fundamental en el campo de la inteligencia artificial. A través de una explicación y ejemplos prácticos, este informe técnico nos ayudara a comprender y aplicar la convolución de manera efectiva y posteriormente aplicarlo en nuestra área de IA donde se necesite entrenamiento de modelos de aprendizaje automático. 3. Desarrollo 3.1. Conmutatividad La propiedad de conmutatividad establece que el orden en el que se convolucionan dos funciones no altera el resultado final. Matemáticamente, esto se expresa como: 𝑓 (𝑡) ∗ 𝑔(𝑡) = 𝑔(𝑡) ∗ 𝑓 (𝑡). Donde 𝑓 𝑦 𝑔 son las funciones que se están convolucionando. Esta propiedad es fundamental en el análisis de sistemas lineales, donde la entrada y la respuesta del sistema pueden intercambiarse sin afectar el resultado. 3.1.1. Demostración: ∞ (𝑓1 ∗ 𝑓2 ) [𝑛] = ∑ 𝑓1 [𝑘1 ]𝑓2[𝑛 − 𝑘1 ] 𝑘1 =−∞ ∞ ∑ 𝑓1[𝑛 − 𝑘2 ] 𝑓2 [𝑘2 ] = 𝑘1 =−∞ = (𝑓2 ∗ 𝑓1 ) [𝑛] 3.1.2. Ejemplo: % Definimos las tres secuencias discretas f1 = [1 2 3 4 5]; f2 = [0 1 0.5 0.25]; % Calculamos las convoluciones individuales conv_f1_f2 = conv(f1, f2); % (f1 * f2) conv_f2_f1 = conv(f2, f1); % (f2 * f1) % Los resultados con los siguientes disp(conv_f1_f2) disp(conv_f2_f1) +--------+--------+--------+--------+--------+--------+--------+--------+--------+ | 0 | 1.0000 | 2.5000 | 4.2500 | 6.0000 | 7.7500 | 3.5000 | 5.5000 | 1.2500 | +--------+--------+--------+--------+--------+--------+--------+--------+--------+ | 0 | 1.0000 | 2.5000 | 4.2500 | 6.0000 | 7.7500 | 3.5000 | 5.5000 | 1.2500 | +--------+--------+--------+--------+--------+--------+--------+--------+--------+ Así que podemos comprobar que la propiedad conmutativa se cumple en la convolución 3.2. Asociatividad La propiedad de asociatividad implica que el agrupamiento de las funciones a convolucional no afecta el resultado final. Es decir, para tres funciones 𝑓, 𝑔 𝑦 ℎ la convolución 𝑓 (𝑡) ∗ (𝑔(𝑡) ∗ ℎ(𝑡)) = (𝑓(𝑡) ∗ 𝑔(𝑡)) ∗ ℎ(𝑡) . Esta propiedad es esencial en la simplificación de operaciones complejas y facilita el análisis de sistemas con múltiples etapas de procesamiento. 3.2.1. Demostración: ∞ (𝑓1 ∗ (𝑓2 ∗ 𝑓3 ))[𝑛] = ∑ ∞ ∑ 𝑓1 [𝑘1 ] 𝑓2 [𝑘2 ]𝑓3 ((𝑛 − 𝑘1 ) − 𝑘2 ) 𝑘1 =−∞ 𝑘2 =−∞ ∞ ∞ ∑ 𝑓1 [𝑘1] 𝑓2 (( 𝑘1 − 𝑘2 ) − 𝑘1 ) 𝑓3 [𝑛 − (𝑘1 + 𝑘2 )] = ∑ 𝑘1 =−∞ 𝑘2 =−∞ ∞ = ∑ ∞ ∑ 𝑓1 [𝑘1] 𝑓2 [ 𝑘2 − 𝑘1 ] 𝑓3 [𝑛 − (𝑘1 + 𝑘2 )] 𝑘1 =−∞ 𝑘2 =−∞ = ((𝑓1 ∗ 𝑓2 ) ∗ 𝑓3 ) [𝑛] 3.2.2 Ejemplo: % Definimos las tres secuencias discretas f1 = [1 2 3 4 5]; f2 = [0 1 0.5 0.25]; f3 = [1 -1 1]; % Calculamos las convoluciones individuales conv_f2_f3 = conv(f2, f3); % Convolución de f2 y f3 conv_f1_f2 = conv(f1, f2); % Convolución de f1 y f2 % Calculamos la convolución asociada de f1 * (f2 * f3) conv_associative1 = conv(f1, conv_f2_f3); % Calculamos la convolución asociada de (f1 * f2) * f3 conv_associative2 = conv(conv_f1_f2, f3); % Los resultados con los siguientes disp(conv_associative1) disp(conv_associative2) +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+ | 0 | 1.0000 | 1.5000 | 2.7500 | 4.2500 | 6.0000 | 1.7500 | 5.5000 | 2.2500 | 1.2500 | +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+ | 0 | 1.0000 | 1.5000 | 2.7500 | 4.2500 | 6.0000 | 1.7500 | 5.5000 | 2.2500 | 1.2500 | +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+ Así que podemos comprobar que la propiedad asociativa se cumple en la convolución 3.3 Distributividad La convolución exhibe la propiedad de distributividad con respecto a la suma de funciones. Esto significa que la convolución de una función 𝑓 con la suma de dos funciones 𝑔 𝑦 ℎ es igual a la suma de las convoluciones de 𝑔 con 𝑓 𝑦 𝑔 con ℎ . Matemáticamente, esto se expresa como 𝑓 ∗ (𝑔 + ℎ) = 𝑓 ∗ 𝑔 + 𝑓 ∗ ℎ. Esta propiedad es fundamental en el diseño de sistemas de filtrado, donde múltiples filtros se aplican a una señal de entrada. 3.3.1 Demostración: ∞ (𝑓1 ∗ (𝑓2 + 𝑓3 ))[𝑛] = ∑ 𝑓1 (𝑘 ) (𝑓2 (𝑛 − 𝑘 ) + 𝑓3 (𝑛 − 𝑘)) 𝑘=−∞ ∞ ∞ = ∑ 𝑓1 (𝑘 ) 𝑓2 (𝑛 − 𝑘 ) + 𝑓3 (𝑛 − 𝑘)) + ∑ 𝑓1 (𝑘 ) 𝑓3 (𝑛 − 𝑘 ) 𝑘=−∞ 𝑘=−∞ = (𝑓1 ∗ 𝑓2 + 𝑓1 ∗ 𝑓3 )[𝑛] 3.3.2 Ejemplo: % Definimos las secuencias discretas f1 = [1, 2, 3, 4]; f2 = [0, 1, 0.5, 0.25]; f3 = [1, -1, 1, 0]; % Calculamos las convoluciones individuales conv_f2 = conv(f1, f2); conv_f3 = conv(f1, f3); % Calculamos la parte izquierda de la ecuación distributiva conv_left = conv(f1, f2 + f3); % Calculamos la parte derecha de la ecuación distributiva conv_right = conv_f2 + conv_f3; % Los resultados con los siguientes disp(conv_left) disp(conv_right) +--------+--------+--------+--------+--------+--------+--------+ | 1.0000 | 2.0000 | 4.5000 | 7.2500 | 5.0000 | 6.7500 | 1.0000 | +--------+--------+--------+--------+--------+--------+--------+ | 1.0000 | 2.0000 | 4.5000 | 7.2500 | 5.0000 | 6.7500 | 1.0000 | +--------+--------+--------+--------+--------+--------+--------+ Así que podemos comprobar que la propiedad distributiva se cumple en la convolución 3.4. Convolución discreta La convolución discreta es una operación matemática utilizada para combinar dos señales discretas, también conocidas como funciones discretas o secuencias, para producir una tercera señal discreta que describe cómo una de las señales afecta a la otra a medida que una se desplaza a lo largo del tiempo o del espacio. ∞ 𝑓1 (𝑡) ∗ 𝑓2 (𝑡) = ∑ 𝑓1 (𝑘 ) + 𝑓2 (𝑛 − 𝑘) 𝑘=−∞ Aquí, para cada valor de n, multiplicamos cada elemento de 𝑓1 por el correspondiente elemento 𝑓2 , pero desplazado en 𝑛, y luego sumamos los resultados. Esto se hace para todos los valores posibles de 𝑘, lo que implica una combinación de todas las posibles formas en que las dos secuencias pueden superponerse. Una característica importante de la convolución discreta es que puede ser implementada eficientemente utilizando técnicas como la convolución lineal o la convolución circular, dependiendo del contexto y los requisitos específicos del problema. 3.5. Matriz de convolución discreta La matriz de convolución discreta, también conocida como matriz de Toeplitz, se utiliza en el contexto de la convolución discreta entre dos funciones discretas. Si que tenemos una función discreta 𝑥 de 𝑚 elementos y un sistema discreto ℎ de 𝑛 elementos. Si 𝑦 es la convolución de ambos, que tiene 𝑚 + 𝑛 − 1 elementos, entonces podemos definir una matriz 𝐴, la matriz de convolución, tal que 𝑦 = 𝑥𝐴. Es Esta matriz 𝐴 es una matriz de Toeplitz, lo que significa que sus elementos en cada diagonal son iguales. La forma de la matriz de Toeplitz está determinada por los coeficientes del sistema discreto ℎ. Los elementos de la primera fila de la matriz 𝐴 corresponden a los coeficientes de ℎ , seguidos de ceros. Los elementos de las filas subsiguientes están desplazados, replicando los elementos de la primera fila. La matriz de Toeplitz 𝐴 es muy útil como nos podremos imaginar, debido a que en vez de realizar todas las operaciones que conlleva la convolución la matriz nos Toeplitz permite calcular la convolución 𝑦 únicamente multiplicando la matriz 𝐴 por el vector 𝑥 . Esto simplifica el cálculo y proporciona una representación matricial compacta de la operación de convolución. 3.5.1 Ejemplo: Matriz convolucional Funciones discretas 𝑥 = [3, 4, 5, 6]; ℎ = [1, 2, 3]; Matriz Toeplitz 1 0 𝐴= [ 0 0 2 1 0 0 3 2 1 0 0 3 2 1 0 0 3 2 0 0 ] 0 3 Multipliación matricial (𝑥 ∙ 𝐴) 1∗3 0∗4 𝑥𝐴 = [ 0∗5 0∗6 2∗3 1∗4 0∗5 0∗6 3 0 𝑥𝐴 = [ 0 0 9 8 5 0 6 4 0 0 3∗3 2∗4 1∗5 0∗6 0 0 12 0 10 15 6 12 0∗3 3∗4 2∗5 1∗6 0∗3 0∗4 3∗5 2∗6 0∗3 0∗4 ] 0∗5 3∗6 0 0 ] 0 18 Vector resultante (ℎ ∗ 𝑥) = 𝑥 ∙ 𝐴 = [3 10 22 28 27 18] 3.6. Ejemplo discreto Arduino: Filtro de media móvil para suavizar la señal del sensor Este filtro es un ejemplo de convolución discreta donde la entrada es la señal del sensor y el kernel es una serie de unos divididos por el número de puntos en el kernel (en este caso, la ventana del filtro). Este filtro suaviza las fluctuaciones rápidas en la señal de entrada al promediarlas con valores anteriores, reduciendo así el ruido y las variaciones abruptas en la lectura del sensor. const int numReadings = 10; // Número de lecturas para suavizar int readings[numReadings]; // Array para almacenar las lecturas int readIndex = 0; // Índice de la lectura actual int total = 0; // Suma total de las lecturas int average = 0; // Promedio void setup() { Serial.begin(9600); for (int thisReading = 0; thisReading < numReadings; thisReading++) { readings[thisReading] = 0; } } void loop() { // Resta la última lectura: total = total - readings[readIndex]; // Lee del sensor: readings[readIndex] = analogRead(sensorPin); // Añade la lectura al total: total = total + readings[readIndex]; // Avanza al siguiente índice de posición: readIndex = readIndex + 1; // Si estamos al final del array, vuelve al principio: if (readIndex >= numReadings) { readIndex = 0; } // Calcula el promedio: average = total / numReadings; // Envía el promedio al ordenador Serial.println(average); delay(1); // Retardo entre lecturas para estabilidad } 4. Conclusiones La convolución discreta, un concepto esencial en el ámbito del procesamiento de señales y la visión por computadora, se destaca por su capacidad para analizar y transformar datos de manera eficiente. Al profundizar en un informe técnico que explora sus propiedades, es crucial comprender no solo su definición y aplicación, sino también las bases matemáticas que subyacen a su funcionamiento. A través de demostraciones matemáticas rigurosas, se puede apreciar la lógica detrás de la convolución discreta y cómo interactúa con diferentes tipos de señales y sistemas. E el informe técnico también puede incluir ejemplos prácticos que ilustren la aplicación de la convolución discreta en el mundo real. Un ejemplo común es la aplicación de la matriz de convolución para realizar operaciones de filtrado en imágenes digitales. Este proceso implica deslizar una matriz de pesos sobre la imagen original para resaltar características específicas o suavizar la imagen. En conclusión, el informe técnico sobre la convolución discreta no solo proporciona una comprensión profunda de sus propiedades matemáticas, sino que también demuestra su aplicación práctica en una variedad de contextos, desde el procesamiento de imágenes hasta la ingeniería de señales. Esta herramienta versátil y poderosa es fundamental en numerosas áreas técnicas y sigue siendo objeto de investigación y desarrollo continuo en la ciencia y la tecnología contemporáneas. 5. Referencias Libretexts. (2022b, noviembre 1). 4.3: Convolución de tiempo discreta. LibreTexts Español.https://espanol.libretexts.org/Ingenieria/Se%C3%B1ales_y_Sistemas_(Bara niuk_et_al.)/04%3A_An%C3%A1lisis_de_dominio_de_tiempo_de_sistemas_discre tos_de_tiempo/4.03%3A_Convoluci%C3%B3n_de_Tiempo_Discreta Santos, M. D. (2023b, noviembre 10). ¿Qué es la convolución de señales y cómo funciona? - Polaridad.es. Polaridad.es. https://polaridad.es/que-es-convolucion-desenales/?expand_article=1 Colaboradores de Wikipedia. (2023c, marzo 12). Convolución. Wikipedia, la Enciclopedia Libre. https://es.wikipedia.org/wiki/Convoluci%C3%B3n Team, D. S. (2020b, abril 1). Convolución. DATA SCIENCE. https://datascience.eu/es/matematica-y-estadistica/convolucion/