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