Matlab快速傅里叶变换程序(FFT)编写
Matlab快速傅里叶变换程序(FFT)编写
(不利用Matlab内置fft)
最近在学习数字信号处理,正好到快速傅里叶变换,写一个基于基2FFT算法的傅里叶变换。利用原理:DIT-FFT(时域抽取法基2FFT)。
DIT-FFT:
设序列x(n)的长度为N,且满足N=2^M,M为自然数。
①按n的奇偶把x(n)分解为两个N/2的子序列。
②对x(n)做DFT,经过化简可以得到
X(k)=X1(k)+W^k;
X(k+N/2)=X1(k)+W^kX2(k);
k=0,1,…,N/2-1;
由此得到一个蝶形运算符号:
③这是DIT-FFT基本原理,按照N值的大小,还可进一步进行分解运算,可分解M次,将N点DFT分解为N个1点DFT和M级蝶形运算,而1点DFT就是时域序列本身。
DFT与FFT运算量比较:
N点DFT:复数乘法CM=NN
复数加法CA=N(N-1)
N点FFT: 复数乘法CM=MN/2
复数加法CA=MN
N=2^M
代码:
function H=ditfft2(xn,M)
%DIT-FFT快速傅里叶变换程序
%程序名称:ditfft
%程序作者:grace_fight 2018/10/29b=length(xn); %调整补零
if(b<2^M)xn=[xn,zeros(1,(2^M)-b)];
end
b=length(xn); %补零后xn长度
A=zeros(1,b); %xn转换数组
N=2^M; %计算点数
nxd=bin2dec(fliplr(dec2bin([1:N]-1,M)))+1;%倒序排列序号
xn=xn(nxd); %倒序xn
for i=1:N %N个1点DFT,xn本身,赋值到数组AA(i)=xn(i);
end
for L = 1:M %DIT-FFT变换,M级蝶形变换B = 2^(L-1); %两个输入数据距离for J = 0:B-1; %旋转因子处理P=2^(M-L)*J;for k=(J+1):2^L:N; %本次蝶形运算跨越时间W=exp(-j*2*pi*P/N); %对应旋转因子T=A(k)+A(k+B)*W; %进行蝶形运算A(k+B)=A(k)-A(k+B)*W;A(k)=T;endend
end
H=A; %输出H为A
测试代码:
%测试程序
clear; %清屏
clc;
xn=[1 1 1 1]; %要转换的序列
M=5; %转换级数
B=fft(xn,32); %matlab内置fft变换,用于对比
subplot(2,1,1); %内置fft变换图像
[a1,b1]=size(B);
o1=1:b1; %内置fft变换坐标
stem(o1,abs(B),'.'); %绘图
H=ditfft2(xn,M); %手工编写ditfft2函数
subplot(2,1,2); %绘制手工编写的fft图像
[a1,b2]=size(H);
o2=1:b2; %ditfft2变换坐标
stem(o2,abs(H),'.') %绘图
运行结果:
参考:《数字信号处理第四版》高西全 丁玉美
Matlab快速傅里叶变换程序(FFT)编写相关推荐
- MATLAB 离散傅里叶变换(DFT)、逆离散傅里叶变换(IDFT)、快速傅里叶变换(FFT)的实现
离散傅里叶变换(DFT).逆离散傅里叶变换(IDFT)的实现 代码如下,其中xn为时序序列 clc;clear; xn=[7,6,5,4,3,2]; Xk=dft(xn,6); x=idft(Xk,6 ...
- 快速傅里叶变换_计算物理基础:第八章-快速傅里叶变换(FFT)
参考北京师范大学的<计算物理基础> 第八章-快速傅里叶变换 计算物理基础_中国大学MOOC(慕课)www.icourse163.org 1.快速傅里叶变换 1.1 离散傅里叶变换及其变换 ...
- 11.频域里的卷积——介绍,傅里叶变换和卷积,快速傅里叶变换(FFT)_1
目录 介绍 傅里叶变换和卷积 FFT 介绍 我们将继续讨论频率分析以及如何用频率分量的概念来研究图像.如果你还记得上次我们讲过的基于频率的图像分解的概念.我们通过给你们看这张照片来回忆它(如图).这是 ...
- 快速傅里叶变换 (FFT)基础
参考博文 频谱分析是一种将复杂信号分解为较简单信号的技术. 首先来很清楚几个概念: FT(Fourier Transformation): 傅里叶变换.其时域信号.频域信号都是连续的. DTFT(Di ...
- 数字信号处理知识点总结(四):快速傅里叶变换(FFT)
本篇文章主要介绍快速傅里叶变换(FFT)的优化原理,基-2FFT算法的推导.实现及用FFT实现的线性卷积. 主要参考知乎[精品讲义]-快速傅里叶变换(Fast Fourier Transformati ...
- DIT和DIF实现快速傅里叶变换的FFT
DIT和DIF实现快速傅里叶变换的FFT 数字信号处理课程老师要求做的一个小程序,在此分享~ %***************基2的DIF&DIT-FFT算法***************** ...
- 【学习笔记】超简单的快速傅里叶变换(FFT)(含全套证明)
整理的算法模板合集: ACM模板 目录 一.概念概述 二.前置知识 1. 多项式 2. 复数 4. 欧拉公式证明 3. 复数的单位根 / 单位向量 三.FFT 算法概述 四.离散傅里叶变换(DFT) ...
- 快速傅里叶变换(FFT)详解
快速傅里叶变换(FFT)详解 (这是我第一次写博,不喜勿喷...) 关于FFT已经听闻已久了,这次终于有机会在Function2的介绍下来了解一下FFT了. 快速傅里叶变换(Fast Fourier ...
- 快速傅里叶变换(FFT)的C#实现及详细注释
快速傅里叶变换(FFT)的C#实现及详细注释 ----------------------------------------------------------------------------- ...
最新文章
- 2040张图片训练出的ViT,准确率96.7%,连迁移性能都令人惊讶 | 南京大学
- 浅析优化网站导航设计的几种常用方法
- python if main_Python:if __name__ == '__main__'
- 前端新人如何有效地提高自己
- Spring3.0_调试错误集
- http://www.myeclipseide.com/ 官网打不开的问题!myeclipse 官网!
- 第一次网络渗透实验报告
- HTML设置图片为页面背景
- Apache SeaTunnel(Incubating) 2.2.0-beta 版本发布!API 重构,连接器与引擎解偶
- 如何防止短信验证码被恶意点击
- 212.样本量和测序深度的Alpha多样性稀释曲线
- tl r4238 虚拟服务器,TL-R4238快速安装设置指南图文教程
- Xmy的第二次python(文件操作)
- Event Bubbling Exampl
- golang Leaf 游戏服务器框架简介
- 作为一个精神病人是一种怎样的体验?
- mysql中where语句的不等于操作
- 随手记安全吗?随手记手把手教你分析理财平台安全性
- dagger2-基础篇
- python程序语言和机器人控制系统_机器人十大流行编程语言,机器人编程系统以及方法...