【3.2】FFT/IFFT变换的数学原理概述与MATLAB仿真

目录

1.FFT的基本原理

[1.1 DFT](#1.1 DFT)

[1.2 FFT](#1.2 FFT)

2.通过matlab编程方式实现FFT/IFFT(不用matlab自带的fft函数)


1.FFT的基本原理

离散傅里叶变换(DFT)是时域离散信号→频域离散信号的核心变换,快速傅里叶变换(FFT)是DFT的快速算法(基于分治思想,将复杂度从O(N2)降至 O(Nlog2​N));逆快速傅里叶变换(IFFT)是频域→时域的逆变换,与FFT数学原理高度相似,仅存在系数和共轭符号的差异。

1.1 DFT

给定长度为N的时域序列x[n](n=0,1,...,N−1),其DFT变换X[k]为:

逆变换IDFT公式:

其中旋转因子(核心复指数):

1.2 FFT

基2-FFT前提:序列长度N=2^M(M为正整数,不足时补0)。其核心思想:奇偶分解,将长序列DFT分解为两个短序列DFT,递归分解直到长度为1。

IFFT与FFT仅两个区别:

因此实现FFT后,仅需微小修改即可实现IFFT。

2.通过matlab编程方式实现FFT/IFFT(不用matlab自带的fft函数)

FFT函数编写程序如下:

%基2-FFT(递归实现,无内置FFT函数)

function X = my_fft(x)

% 输入:x - 时域序列(长度必须为2^M,自动补0)

% 输出:X - 频域序列(DFT结果)

x = x(:); % 转为列向量

N = length(x); % 序列长度

% 补0到最近的2的整数次幂(基2FFT要求)

M = ceil(log2(N));

N_fft = 2^M;

x = [x; zeros(N_fft - N, 1)];

% 递归终止条件:长度为1时,DFT等于自身

if N_fft == 1

X = x;

return;

end

% 1. 奇偶分解

x_even = x(1:2:end); % 偶数项

x_odd = x(2:2:end); % 奇数项

% 2. 递归计算子序列FFT

X_even = my_fft(x_even);

X_odd = my_fft(x_odd);

% 3. 蝶形运算(核心公式)

X = zeros(N_fft, 1);

for k = 1 : N_fft/2

% 旋转因子 W_N^k = e^(-j*2pi*(k-1)/N_fft) (公式直接实现)

W = exp(-1j * 2 * pi * (k-1) / N_fft);

% 蝶形公式

X(k) = X_even(k) + W * X_odd(k);

X(k + N_fft/2) = X_even(k) - W * X_odd(k);

end

end

IFFT过程编写程序如下:

%实现 IFFT(基于FFT,仅修改共轭和系数)

function x = my_ifft(X)

% 输入:X - 频域序列

% 输出:x - 时域序列

N = length(X);

% IFFT核心:1. 对共轭做FFT 2. 除以N

x = (1/N) * my_fft(conj(X));

x = real(x); % 消除浮点误差,取实部

end

主函数程序如下:

复制代码
clear; clc; close all;

% 生成测试时域信号
N = 8;                  % 序列长度(2^3,满足基2FFT)
n = 0:N-1;
x = sin(2*pi*1*n/N) + 0.5*cos(2*pi*2*n/N);  % 复合正弦信号

% 调用自定义FFT/IFFT
X_my = my_fft(x)
x_my = my_ifft(X_my)

% 调用MATLAB内置函数(对比验证)
X_mat = fft(x)
x_mat = ifft(X_mat)

运行结果如下:

可以看到,通过编程实现的FFT/IFFT输出结果和matlab自带的FFT函数输出结果完全一致。

相关推荐
_深海凉_1 天前
LeetCode热题100-寻找两个正序数组的中位数
算法·leetcode·职场和发展
旖-旎1 天前
深搜练习(电话号码字母组合)(3)
c++·算法·力扣·深度优先遍历
谭欣辰1 天前
C++快速幂完整实战讲解
算法·决策树·机器学习
Mr_pyx1 天前
【LeetHOT100】随机链表的复制——Java多解法详解
算法·深度优先
AIFarmer1 天前
【无标题】
开发语言·c++·算法
AGV算法笔记1 天前
CVPR 2025 最新感知算法解读:GaussianLSS 如何用 Gaussian Splatting 重构 BEV 表示?
算法·重构·自动驾驶·3d视觉·感知算法·多视角视觉
勤劳的进取家1 天前
数据链路层基础
网络·学习·算法
Advancer-1 天前
第二次蓝桥杯总结(上)
java·算法·职场和发展·蓝桥杯
ん贤1 天前
加密算法(对称、非对称、哈希、签名...)
算法·哈希算法
superior tigre1 天前
78 子集
算法·leetcode·深度优先·回溯