使用 MATLAB 进行离散傅里叶变换及其逆变换

matlabdata analysisprogramming

离散傅里叶变换和逆离散傅里叶变换是用于分析频域中的函数和信号的两个数学运算。DFT 和 IDFT 都广泛用于数字信号处理领域,以合成和分析数字信号。让我们分别讨论一下离散傅里叶变换 (DFT) 和逆离散傅里叶变换 (IDFT)。

什么是离散傅里叶变换 (DFT)?

在数学中,离散傅里叶变换 (DFT) 是一种转换技术,用于将离散数据点序列从时域转换为频域。

DFT 基本上将时域中表示的离散数据点序列转换为频域中表示的复数序列。因此,离散傅里叶变换是一种数学技术,用于将数字信号表示为不同频率的正弦分量的总和。

计算时间域中序列的离散傅里叶变换的标准方程为:

$$\mathrm{X(k)=\displaystyle\sum\limits_{n=0}^{N−1} x(n).e^{−j^\frac{2{\pi}nk}{N}}}$$

其中,x(n) 是时间域中的输入序列,X(k) 是频域中的输出序列,N 是输入序列的长度。

现在,让我们简要介绍一下逆离散傅里叶变换 (IDFT)。

什么是逆离散傅里叶变换 (IDFT)?

逆离散傅里叶变换(IDFT) 是一种数学运算,用于将频域中表示的数字信号转换到时域。因此,逆离散傅里叶变换只是离散傅里叶变换(DFT)的逆运算。

逆离散傅里叶变换主要用于从频域信号中恢复原始信号。

从数学上讲,逆离散傅里叶变换使用以下标准方程计算,

$$\mathrm{X(n)=\frac{1}{N}\displaystyle\sum\limits_{k=0}^{N−1} x(k).e^{j^\frac{2{\pi}nk}{N}}}$$

因此,离散傅里叶变换(DFT)和逆离散傅里叶变换(IDFT)是两个相关的数学运算,广泛应用于工程和技术领域,用于信号处理、图像处理、滤波、降噪以及执行许多其他任务。

现在,让我们讨论如何计算离散傅里叶变换和逆离散傅里叶变换使用 MATLAB 进行傅里叶变换。

如何使用 MATLAB 查找离散傅里叶变换?

在 MATLAB 中,很容易找到给定数字信号的离散傅里叶变换 (DFT)。我们可以使用 MATLAB 的内置函数"fft"来查找给定信号的离散傅里叶变换。

下面逐步解释查找给定信号的离散傅里叶变换 (DFT) 的过程 -

  • 步骤 (1) - 定义、创建或导入输入信号。

  • 步骤 (2) - 使用"fft"函数计算信号的离散傅里叶变换。

  • 步骤 (3) - 创建频率轴来绘制幅度和相位谱。

  • 步骤 (4) - 绘制 DFT 的幅度谱。

  • 步骤 (5) - 绘制DFT。

示例 (1)

现在,让我们考虑一些示例,使用 MATLAB 计算给定输入信号的离散傅里叶变换。

% MATLAB 程序用于计算信号的 DFT
% 创建样本信号
fs = 500; % 信号的采样频率(单位为 Hz)
T = 1/fs; % 信号的采样周期(单位为秒)
N = 500; % 信号的长度
t = (0:N-1)*T; % 时间向量
f = 50; % 输入信号的频率(单位为 Hz)
x = cos(2*pi*f*t); % 余弦信号波

% 计算 x 的离散傅里叶变换
X = fft(x);

% 创建频率轴
F = fs*(0:(N/2))/N;

% 绘制 DFT 的幅度谱
MS = 2*abs(X(1:N/2 + 1))/N; % 计算幅度谱
figure;
plot(F, MS);
title('DFT 的幅度谱');
xlabel('频率(单位:Hz)');
ylabel('幅度');

% 绘制 DFT 的相位谱
PS = angle(X(1:N/2 + 1)); % 计算相位谱
figure;
plot(F, PS);
title('DFT 的相位谱');
xlabel('频率(单位:Hz)');
ylabel('相位');

输出

(1). DFT 的幅度谱 −

(2). DFT 的相位谱 −

示例 (2)

让我们考虑另一个示例程序来计算随机生成的输入信号的离散傅里叶变换。

% MATLAB 程序计算随机序列的 DFT
% 创建随机输入序列
N = 200; % 输入序列的长度
x = randn(1, N);

% 计算序列 x 的 DFT
X = fft(x);

% 创建频率
F = (0:N-1) / N;

% 绘制 DFT 的幅度谱
MS = abs(X); % 计算幅度谱
figure;
stem(F, MS);
title('DFT 的幅度谱');
xlabel('频率');
ylabel('幅度');

% 绘制 DFT 的相位谱
PS = angle(X); % 计算相位谱
figure;
stem(F, PS);
title('DFT 的相位谱');
xlabel('频率');
ylabel('相位');

输出

(1). DFT 的幅度谱 −

(2). DFT 的相位谱 −

现在让我们探索如何使用 MATLAB 查找逆离散傅里叶变换 (IDFT)。

如何查找逆离散傅里叶变换?

在 MATLAB 中,有一个内置函数"ifft",用于计算频域中给定序列的逆离散傅里叶变换。

计算频域序列的逆离散傅里叶变换的分步过程说明如下 −

  • 步骤 (1) − 创建或导入频域序列域。

  • 步骤 (2) - 使用"ifft"函数计算逆离散傅里叶变换。

  • 步骤 (3) - 绘制重建信号的实部和虚部。

因此,使用 MATLAB 查找逆离散傅里叶变换的过程是一个简单的过程。

示例 (3)

现在,让我们考虑一些示例,以了解如何在频域中计算给定序列的逆离散傅里叶变换。

% MATLAB 程序查找随机序列的 IDFT
% 在频域中创建样本随机序列
N = 200; % 序列的长度
X = randn(1, N) + 1i * randn(1, N); % 频域中的随机序列

% 计算离散傅里叶逆变换
x = ifft(X); % 重建原始序列

% 创建时间轴
t = 0 : N-1;

% 在时间域中绘制重建序列的实部
subplot(2, 1, 1);
stem(t, real(x)); % 绘制序列的实部
title('重建信号的实部');
xlabel('时间');
ylabel('振幅');

% 在时间域中绘制重建序列的虚部
subplot(2, 1, 2);
stem(t, imag(x)); % 绘制序列的虚部
title('重建信号的虚部');
xlabel('时间');
ylabel('振幅');

输出

结论

这都是关于离散傅里叶变换 (DFT) 和逆离散傅里叶变换 (IDFT),以及使用 MATLAB 进行计算。DFT 和 IDFT 都是数字信号处理中使用的强大数学工具。 DFT 允许我们将时域序列转换为频域序列,而 IDFT 允许我们将频域序列转换为时域序列。

在 MATLAB 中,我们可以分别使用内置函数"fft"和"ifft"执行 DFT 和 IDFT。总的来说,MATLAB 提供了一种通过使用简单的内置函数来查找给定序列的 DFT 和 IDFT 的直接方法。在本文的以上部分中,我们描述了如何使用 MATLAB 计算 DFT 和 IDFT。


相关文章