La convolución de dos señales de tiempo en MATLAB

MATLAB ofrece funciones de dominio de tiempo o de frecuencia.
Por chris daniels

Convolución

La operación de convolución se define como la integral o suma en casos discretos, sobre un rango de funciones f(T) * g(t-T) con respecto a T. Mientras se mueve el rango de una función f, cada punto es multiplicado por una segunda función en g. En el dominio del tiempo, la convolución es una operación de computación intensiva, sin embargo, después de transformarlo en el dominio de la frecuencia mediante la transformación de Fourier, la convolución se simplifica a multiplicaciones.


Función integrada

Las funciones "conv(), o su variante bidimensional "conv2()", puede usarse con facilidad y eficiencia para convolucionar señales en MATLAB. Normalmente se asume que las señales están en el dominio temporal o espacial, de forma opuesta al dominio de la frecuencia. Los dos primeros argumentos son las dos señales a convolucionar, o una señal y un filtro. El tercer argumento es un argumento de forma que define el tamaño de la salida. Las opciones válidas son "full", "same" o "valid" ("lleno", "igual" o "válido").

mixed_signal = conv(signal1, signal2, 'same'); new_image = conv2(image1, image2, 'full');


Dominio del tiempo

Realizar la convolución en el dominio del tiempo puede ser útil para entender como funciona esta operación:

%por dos señales 1-D, f y g my_length = length(f) + length(g) - 1; result = zeros(my_length, 1 );

for i = 1:my_length for j = 1:length(f) if( (i-j+1) > 0 && (i-j+1) < length(g) ) result(i) = f(j) * g(i-j+1); end end end


Dominio de la frecuencia

Las señales en el dominio de tiempo pueden transformarse al dominio de la frecuencia usando la transformación de Fourier. MATLAB implementa un transformación de Fourier rápida usando la función "ffft()". En el dominio de la frecuencia, dos señales pueden mezclarse usando una multiplicación por puntos mediante el operador ".*".

%por dos señanles, f y g F = fft( f ); G = fft( g ); U = F .* G; u = ifftshift( ifft( U ) );