【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函数输出结果完全一致。

相关推荐
chao1898442 小时前
基于改进二进制粒子群算法的含需求响应机组组合问题MATLAB实现
开发语言·算法·matlab
Imxyk2 小时前
P9242 [蓝桥杯 2023 省 B] 接龙数列
c++·算法·图论
炽烈小老头2 小时前
【每天学习一点算法 2026/04/10】Excel表列序号
学习·算法
郝学胜-神的一滴2 小时前
二叉树后序遍历:从递归到非递归的优雅实现
数据结构·c++·程序人生·算法·
宝贝儿好2 小时前
【LLM】第一章:分词算法BPE、WordPiece、Unigram、分词工具jieba
人工智能·python·深度学习·神经网络·算法·语言模型·自然语言处理
渡我白衣2 小时前
运筹帷幄——在线学习与实时预测系统
人工智能·深度学习·神经网络·学习·算法·机器学习·caffe
colus_SEU2 小时前
SVM 的终极视角:合页损失函数 (Hinge Loss) 与正则化
算法·机器学习·支持向量机
汀、人工智能2 小时前
[特殊字符] 第71课:爬楼梯
数据结构·算法·数据库架构·图论·bfs·爬楼梯
MicroTech20252 小时前
微算法科技(NASDAQ :MLGO)量子启发式算法与CNN、Transformer结合,实现端到端彩色图像分割
科技·算法·启发式算法