MATLAB 傅里叶变换中的卷积定理
根据 傅里叶变换的卷积定理 ,两个信号在时域中的卷积等价于在频域中的乘法。因此,如果两个信号在时域中进行卷积,它们在频域中进行傅里叶变换后的乘积结果将相同。
例如,如果x(t)和h(t)是两个时域信号,并且它们的傅里叶变换分别为X(ω)和H(ω)。那么,它们在时域中的卷积可以表示为:
f(t) = x(t) * h(t)
这里,符号’*’表示两个信号的卷积。
并且,在频域中它们的傅里叶变换的乘积为,
F(ω) = X(ω).H(ω)
根据卷积定理,函数f(t)和F(ω)通过傅里叶变换及其反变换相关联,如下所示。
F(ω) = fft(x(t) * h(t))
和
f(t) = ifft(X(ω).H(ω))
在这里,’fft’是一个用于对输入信号进行傅立叶变换的MATLAB函数,’ifft’是另一个用于执行傅立叶逆变换的MATLAB函数。
总体而言,傅立叶变换的卷积定理允许我们在频域中执行输入信号的卷积运算,这其实就是简单的乘法。
现在,让我们考虑一些MATLAB程序,通过使用傅立叶变换的卷积定理来在时域和频域中执行卷积运算。
示例
% MATLAB program to demonstrate the use of Convolution Theorem of Fourier Transform
% Define two input signals
x = [2 4 6 8];
y = [0.4 0.4 0.4 0.4];
% Calculate the lengths of the input signals
L1 = length(x);
L2 = length(y);
% Calculate the length of the convolution result
L = L1 + L2 - 1;
% Perform zero-padding of the input signals to the length of the convolution result
a = [x zeros(1, L-L1)];
b = [y zeros(1, L-L2)];
% Perform the Fourier Transform of the padded signals a and b
X = fft(a);
Y = fft(b);
% Perform the convolution in the time domain
CT = conv(x, y);
% Perform the convolution in the frequency domain using the Convolution Theorem
CF = ifft(X .* Y);
% Display the results
disp('Convolution of x and y in the time domain is:');
disp(CT);
disp('Convolution of x and y in the frequency domain using the Convolution Theorem is:');
disp(CF);
输出
Convolution of x and y in the time domain is:
0.8000 2.4000 4.8000 8.0000 7.2000 5.6000 3.2000
Convolution of x and y in the frequency domain using the Convolution Theorem is:
0.8000 2.4000 4.8000 8.0000 7.2000 5.6000 3.2000
说明
在这个MATLAB程序中,我们定义了两个存储在变量‘x’和‘y’中的输入信号。然后,我们计算输入信号和卷积结果的长度,并将它们存储在变量‘L1’、‘L2’和‘L’中。接下来,我们对信号‘x’和‘y’进行零填充,以使其长度与卷积结果相匹配,并将零填充后的信号存储在变量‘a’和‘b’中。
然后,我们使用‘fft’函数获得零填充信号‘a’和‘b’的傅里叶变换。接下来,我们使用‘conv’函数在时域中对信号‘x’和‘y’进行卷积,并将结果存储在变量‘CT’中。
然后,我们在频域中对‘X’和‘Y’进行乘法运算,并使用‘ifft’函数计算乘积的反傅里叶变换以获得卷积结果。
最后,我们使用‘disp’函数显示结果。从输出中,我们可以观察到在时域中获得的结果,即‘CT’和使用卷积定理得到的频域‘CF’是相同的。
示例
% MATLAB program to perform convolution in the spatial domain
% Read the input image
img = imread('https://www.tutorialspoint.com/assets/questions/media/14304-1687425236.jpg');
% Convert the image to grayscale if necessary
if size(img, 3) == 3
img = rgb2gray(img);
end
% Define averaging filter
filter = ones(10) / 50;
% Perform convolution in the spatial domain
C = conv2(double(img), filter, 'same');
% Display the original and filtered images
subplot(1, 2, 1); imshow(img); title('Original Image');
subplot(1, 2, 2); imshow(C, []); title('Convolved Image');
输出
解释
在这个MATLAB程序中,我们使用’imread’函数读取输入图像,并将其存储在变量’img’中。接下来,我们检查输入图像是否为灰度图像。如果不是,则使用’rgb2gray’函数将其转换为灰度图像。然后,我们将平均滤波器定义为一个10×10矩阵,其中所有元素都设置为1/50,它表示一个简单的均值滤波器。
然后,我们使用’conv2’函数对图像进行空间域卷积。在这里,我们还使用’double()’函数将图像转换为双精度以进行浮点数计算。
最后,我们使用’imshow’函数显示原始图像和卷积后的图像。这里,'[]’用于自动缩放卷积后的图像值。
示例
% MATLAB program to perform convolution in frequency domain
% Read the input image
I = imread('https://www.tutorialspoint.com/assets/questions/media/14304-1687425236.jpg');
% Convert the colored image to grayscale if necessary
if size(I, 3) == 3
I = rgb2gray(I);
end
% Define averaging filter
filter = ones(10) / 50;
% Calculate the Fourier Transform of the image and the filter
Img_FT = fftshift(fft2(I));
Flt_FT= fftshift(fft2(filter, size(I, 1), size(I, 2)));
% Perform convolution in the frequency domain
C = ifft2(ifftshift(Img_FT .* Flt_FT));
% Display the Fourier Transforms of the image, filter, original image, and convolved image
FT_Image = abs(log(Img_FT));
FT_Filter = abs(log(Flt_FT));
subplot(1, 4, 1), imshow(FT_Image, []); title('FT Image');
subplot(1, 4, 2), imshow(FT_Filter, []); title('FT Filter');
subplot(1, 4, 3), imshow(I, []); title('Original Image');
subplot(1, 4, 4), imshow(C, []); title('Convolved Image');
输出
说明
在这个MATLAB代码中,我们首先使用”imread”函数读取输入图像,并将输入图像存储在”I”变量中。然后,如果需要,我们将图像转换为灰度图像,这里我们使用”rgb2gray”函数。
接下来,我们将平均滤波器”filter”定义为一个10×10矩阵,所有元素都设置为1/50,它是一个简单的盒状滤波器。
之后,我们使用”fft2″函数计算输入图像和滤波器的傅里叶变换。在这里,我们还使用”fftshift”函数将零频率分量移到中心,以便更好地可视化。
接下来,我们在频率域中对傅里叶变换图像”Img_FT”和傅里叶变换滤波器”Flt_FT”进行乘法运算。此外,我们使用”ifft2″和”ifftshift”函数计算逆傅里叶变换以获得卷积图像。
最后,我们使用”imshow”函数显示傅里叶变换图像、傅里叶变换滤波器、原始图像和卷积图像。这里,”[]”用于自动缩放图像的值。
因此,这就是MATLAB中傅里叶变换的卷积定理的所有内容。