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=M
N
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)编写相关推荐

  1. MATLAB 离散傅里叶变换(DFT)、逆离散傅里叶变换(IDFT)、快速傅里叶变换(FFT)的实现

    离散傅里叶变换(DFT).逆离散傅里叶变换(IDFT)的实现 代码如下,其中xn为时序序列 clc;clear; xn=[7,6,5,4,3,2]; Xk=dft(xn,6); x=idft(Xk,6 ...

  2. 快速傅里叶变换_计算物理基础:第八章-快速傅里叶变换(FFT)

    参考北京师范大学的<计算物理基础> 第八章-快速傅里叶变换 计算物理基础_中国大学MOOC(慕课)​www.icourse163.org 1.快速傅里叶变换 1.1 离散傅里叶变换及其变换 ...

  3. 11.频域里的卷积——介绍,傅里叶变换和卷积,快速傅里叶变换(FFT)_1

    目录 介绍 傅里叶变换和卷积 FFT 介绍 我们将继续讨论频率分析以及如何用频率分量的概念来研究图像.如果你还记得上次我们讲过的基于频率的图像分解的概念.我们通过给你们看这张照片来回忆它(如图).这是 ...

  4. 快速傅里叶变换 (FFT)基础

    参考博文 频谱分析是一种将复杂信号分解为较简单信号的技术. 首先来很清楚几个概念: FT(Fourier Transformation): 傅里叶变换.其时域信号.频域信号都是连续的. DTFT(Di ...

  5. 数字信号处理知识点总结(四):快速傅里叶变换(FFT)

    本篇文章主要介绍快速傅里叶变换(FFT)的优化原理,基-2FFT算法的推导.实现及用FFT实现的线性卷积. 主要参考知乎[精品讲义]-快速傅里叶变换(Fast Fourier Transformati ...

  6. DIT和DIF实现快速傅里叶变换的FFT

    DIT和DIF实现快速傅里叶变换的FFT 数字信号处理课程老师要求做的一个小程序,在此分享~ %***************基2的DIF&DIT-FFT算法***************** ...

  7. 【学习笔记】超简单的快速傅里叶变换(FFT)(含全套证明)

    整理的算法模板合集: ACM模板 目录 一.概念概述 二.前置知识 1. 多项式 2. 复数 4. 欧拉公式证明 3. 复数的单位根 / 单位向量 三.FFT 算法概述 四.离散傅里叶变换(DFT) ...

  8. 快速傅里叶变换(FFT)详解

    快速傅里叶变换(FFT)详解 (这是我第一次写博,不喜勿喷...) 关于FFT已经听闻已久了,这次终于有机会在Function2的介绍下来了解一下FFT了. 快速傅里叶变换(Fast Fourier ...

  9. 快速傅里叶变换(FFT)的C#实现及详细注释

    快速傅里叶变换(FFT)的C#实现及详细注释 ----------------------------------------------------------------------------- ...

最新文章

  1. 2040张图片训练出的ViT,准确率96.7%,连迁移性能都令人惊讶 | 南京大学
  2. 浅析优化网站导航设计的几种常用方法
  3. python if main_Python:if __name__ == '__main__'
  4. 前端新人如何有效地提高自己
  5. Spring3.0_调试错误集
  6. http://www.myeclipseide.com/ 官网打不开的问题!myeclipse 官网!
  7. 第一次网络渗透实验报告
  8. HTML设置图片为页面背景
  9. Apache SeaTunnel(Incubating) 2.2.0-beta 版本发布!API 重构,连接器与引擎解偶
  10. 如何防止短信验证码被恶意点击
  11. 212.样本量和测序深度的Alpha多样性稀释曲线
  12. tl r4238 虚拟服务器,TL-R4238快速安装设置指南图文教程
  13. Xmy的第二次python(文件操作)
  14. Event Bubbling Exampl
  15. golang Leaf 游戏服务器框架简介
  16. 作为一个精神病人是一种怎样的体验?
  17. mysql中where语句的不等于操作
  18. 随手记安全吗?随手记手把手教你分析理财平台安全性
  19. dagger2-基础篇
  20. python程序语言和机器人控制系统_机器人十大流行编程语言,机器人编程系统以及方法...

热门文章

  1. 2023年PMP考试教材有哪些?(含pmp资料)
  2. MyBatis SQL语句详解
  3. 用手机蓝牙锁定计算机,拿起手机就能自动锁定电脑 这个技巧能保护你的隐私...
  4. Open3D ROR滤波
  5. 数据库系统知识总结(一):数据库系统基础知识
  6. 批改网破解“禁止粘贴”
  7. element-ui input限制输入数字
  8. Oracle 分析函数over,列转行函数pivot理解及综合运用(报表中的小计和合计)
  9. 快速检测助力智能工厂 直线度测量仪使用方法
  10. linux 中了挖矿病毒