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://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://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 中傅里叶变换卷积定理的所有内容。

更新于: 2023年8月7日

642 次查看

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告