MATLAB - 傅里叶变换



傅里叶变换是一种强大的数学工具,用于信号处理、图像处理和许多其他领域。它将时间函数(或信号)分解成其组成频率。在 MATLAB 中,可以使用 fft 函数计算一维信号的傅里叶变换,或使用 fft2 函数计算二维信号(如图像)的傅里叶变换。

傅里叶变换有许多应用,例如信号和图像的滤波、压缩和分析。了解傅里叶变换有助于分析和处理 MATLAB 中各种类型的数据。

使用 fourier() 函数进行傅里叶变换

MATLAB 中的 fourier 函数用于计算周期信号的傅里叶级数系数或非周期信号的傅里叶变换。它可以用于分析时域和频域中信号的频率成分。该函数返回复系数,表示信号在不同频率下正弦分量的幅度和相位。

语法

fourier(f)
fourier(f,transVar)
fourier(f,var,transVar)

语法解释

fourier(f) − 计算函数 f 的傅里叶变换。它使用 symvar 查找自变量,w 是用于变换的变量。

fourier(f,transVar) − 计算函数 f 的傅里叶变换,使用变量 transVar 代替 w 进行变换。

fourier(f,var,transVar) − 计算函数 f 的傅里叶变换。它分别使用 var 作为自变量和 transVar 作为变换变量,而不是默认的 symvar 和 w。

让我们根据上面解释的语法看几个例子。

示例 1:计算函数的傅里叶变换

我们拥有的代码为 -

syms t w
f = exp(-t^2); % Define the function
F = fourier(f); % Calculate the Fourier Transform
disp(F); % Display the result
  • 在此示例中,我们有一个定义为 exp(-t^2) 的函数 f。
  • 我们使用 fourier 函数计算 f 的傅里叶变换。
  • 函数 fourier 使用 symvar 将 t 确定为自变量,将 w 确定为变换变量。
  • 结果 F 是函数 f 的傅里叶变换,使用 disp(F) 显示。

执行后输出为 -

pi^(1/2)*exp(-w^2/4)

示例 2:使用自定义变换变量计算傅里叶变换

我们拥有的代码为 -

syms t u
f = sin(2*pi*t); % Define the function
F = fourier(f, u); % Calculate the Fourier Transform with 
   u as the transformation variable
disp(F); % Display the result
  • 在此示例中,我们有一个定义为 sin(2*pi*t) 的函数 f。
  • 我们使用 fourier 函数,并将变量 u 指定为变换变量,而不是默认的 w。
  • 结果 F 是函数 f 相对于变量 u 的傅里叶变换。
  • 结果使用 disp(F) 显示。

执行后输出为 -

-pi*(dirac(u - 2*pi) - dirac(u + 2*pi))*1i

示例 3:使用自定义变量进行傅里叶变换

我们拥有的代码为 -

syms t omega
f = sin(omega*t); % Define the function
F = fourier(f, t, omega); % Calculate the Fourier Transform with t as 
   the independent variable and omega as the transformation variable
disp(F); % Display the result

我们获得的输出为 -

>> syms t omega
f = sin(omega*t); % Define the function
F = fourier(f, t, omega); % Calculate the Fourier Transform with t as 
   the independent variable and omega as the transformation variable
disp(F); % Display the result

-1i*Inf
 
>> 

使用 fft() 函数进行傅里叶变换

傅里叶变换是一种数学技术,可将信号分解成其组成频率。在 MATLAB 中,可以使用 fft 函数计算一维信号的傅里叶变换。

语法

Y = fft(X)
Y = fft(X,n)
Y = fft(X,n,dim)

语法解释

Y = fft(X) − 使用称为快速傅里叶变换 (FFT) 的快速算法计算 X 的离散傅里叶变换 (DFT)。输出 Y 与 X 大小相同。

  • 如果 X 是向量,则 fft(X) 返回向量的傅里叶变换。
  • 如果 X 是矩阵,则 fft(X) 将 X 的列视为向量并返回每列的傅里叶变换。
  • 如果 X 是多维数组,则 fft(X) 将第一个大小不为 1 的数组维度上的值视为向量并返回每个向量的傅里叶变换。

Y = fft(X,n) − 计算 X 的 n 点离散傅里叶变换 (DFT)。

  • 如果 X 是向量且短于 n,则将零添加到 X 的末尾以使其长度为 n。
  • 如果 X 是向量且长于 n,则 X 将缩短为长度 n。
  • 如果 X 是矩阵,则每列都像向量一样处理。
  • 如果 X 是多维数组,则第一个大小不为 1 的维度将像向量一样处理。

Y = fft(X,n,dim) − 沿 X 的指定维度 dim 计算傅里叶变换。

  • 如果 X 是矩阵,则 fft(X,n,2) 计算每行的 n 点傅里叶变换。
  • 如果 X 是多维数组,则沿指定的维度 dim 计算傅里叶变换。

让我们根据上面解释的语法看几个例子。

示例 1:计算离散傅里叶变换 (DFT)

我们拥有的代码为 -

% Create a simple signal
x = [1, 2, 3, 4];

% Calculate the Discrete Fourier Transform (DFT) of the signal
y = fft(x);

% Display the original signal and its DFT
disp('Original Signal:');
disp(x);

disp('Discrete Fourier Transform:');
disp(y);
  • 在此示例中,我们有一个简单的一维信号 x,包含四个值 [1, 2, 3, 4]。
  • 我们使用 fft 函数计算信号的离散傅里叶变换 (DFT),并将结果存储在 y 中。
  • fft 函数使用称为快速傅里叶变换 (FFT) 的快速算法计算 DFT。
  • 输出 y 与输入信号 x 大小相同,包含信号的傅里叶变换。

执行后,我们得到的输出如下所示 -

Original Signal:
     1     2     3     4

Discrete Fourier Transform:
  10.0000 + 0.0000i  -2.0000 + 2.0000i  -2.0000 + 0.0000i  -2.0000 - 2.0000i

示例 2:计算 n 点离散傅里叶变换 (DFT)

我们拥有的代码为 -

% Create a simple signal
x = [1, 2, 3, 4];

% Calculate the 8-point Discrete Fourier Transform (DFT) of the signal
y = fft(x, 8);

% Display the original signal and its DFT
disp('Original Signal:');
disp(x);

disp('8-point Discrete Fourier Transform:');
disp(y);
  • 在此示例中,我们有一个简单的一维信号 x,包含四个值 [1, 2, 3, 4]。
  • 我们使用 fft 函数以及参数 8 来计算信号的 8 点离散傅里叶变换 (DFT),并将结果存储在 y 中。
  • 由于 x 的长度小于 8,因此将零添加到 x 的末尾以使其长度为 8。
  • 输出 y 是信号的 8 点 DFT。

执行后,我得到的输出为 -

Original Signal:
   1   2   3   4
8-point Discrete Fourier Transform:
 Columns 1 through 3:

   10.0000 +       0i   -0.4142 -  7.2426i   -2.0000 +  2.0000i

 Columns 4 through 6:

    2.4142 -  1.2426i   -2.0000 +       0i    2.4142 +  1.2426i

 Columns 7 and 8:

   -2.0000 -  2.0000i   -0.4142 +  7.2426i

示例 3:沿指定维度计算傅里叶变换

我们拥有的代码如下所示 -

% Create a 2x4 matrix
X = [1, 2, 3, 4; 5, 6, 7, 8];

% Compute the Fourier transform along the second dimension (columns)
Y = fft(X, [], 2);

% Display the original matrix and its Fourier transform
disp('Original Matrix:');
disp(X);

disp('Fourier Transform Along Columns:');
disp(Y);
  • 在此示例中,我们有一个具有两行和四列的 2x4 矩阵 X。
  • 我们使用带有参数 2 的 fft 函数来计算 X 的第二维(列)上的傅里叶变换,并将结果存储在 Y 中。
  • X 的每一列都被视为一个向量,并且独立计算每一列的傅里叶变换。
  • 输出 Y 是一个 2x4 矩阵,包含 X 的各列的傅里叶变换。

执行后,我们得到的输出如下所示 -

Original Matrix:
   1   2   3   4
   5   6   7   8
Fourier Transform Along Columns:
   10 +  0i   -2 +  2i   -2 +  0i   -2 -  2i
   26 +  0i   -2 +  2i   -2 +  0i   -2 -  2i
广告