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

数字信号处理课程老师要求做的一个小程序,在此分享~

%***************基2的DIF&DIT-FFT算法************************
%****************——徐**——*****************************
%
%*****************分组:第三组******************************
clc;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%频率f1、f2输入
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
YN='Y';
while(strcmp(YN'Y'))
f1=input('请输入频率f1的值(200<=f1<300):');
while((f1<200) || (f1>=300))disp('输入的频率不满足"200<=f1<300"的条件,请重新输入:');f1=input('f1:');
end
f2=input('请输入频率f2的值(300<=f2<400f1+f2>600):');
while((f2<300) || (f2>=400))disp('输入的频率不满足"300<=f2<400"的条件,请重新输入:');f2=input('f2:');
end
while (f1+f2<=600) %判断输入的f1、f2是否满足条件disp('输入的频率不满足"f1+f2>600"的条件,请重新输入:');f1=input('请输入频率f1的值(200<=f1<300):');while((f1<200) || (f1>=300))disp('输入的频率不满足"200<=f1<300"的条件,请重新输入:');f1=input('f1:');endf2=input('请输入频率f2的值(300<=f2<400f1+f2>600):');while((f2<300) || (f2>=400))disp('输入的频率不满足"300<=f2<400"的条件,请重新输入:');f2=input('f2:');end
end
disp('请选择求解FFT的算法(输入DIT或者DIF),注意输入字母大写');
select=input('你的选择:''s');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%确定长度N的值
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fT=1000;
F1=(300-f1);
F2=(f2-300);
if(F1<F2)F=F1;
elseF=F2;
end
N1=(fT/F);
i=3;
while ((2^i)<N1)i=i+1;
end
N=2^(i);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%得到离散时序列x[n]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
x=zeros(1N);
for n=1:Nx(n)=1.5*cos(2*pi*f1*n/N)+cos(2*pi*300*n/N)+0.5*cos(2*pi*f2*n/N);
end
%画出x[n]的图像
k=1:1:N;
y=1.5*cos(2*pi*f1*k/N)+cos(2*pi*300*k/N)+0.5*cos(2*pi*f2*k/N);
subplot(211);stem(ky'filled');xlabel('n');ylabel('x[n]');title('x[n]的采样图');
m=log2(N);
if(strcmp(select'DIT'))%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%基2的DIT-FFT算法%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%change=bin2dec(fliplr(dec2bin([1:N]-1m)))+1;Y1=x(change);for s=1:mNr=2^s;u=1;WN=exp(-1j*2*pi/Nr);for j=1:Nr/2for k=j:Nr:Nkp=k+Nr/2;g=Y1(kp)*u;Y1(kp)=Y1(k)-g;Y1(k)=Y1(k)+g;endu=u*WN;endendY=Y1;elseif(strcmp(select'DFT'))%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%基2的DIF-FFT算法%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Y2=x;WN=exp(-1j*2*pi/N);for s=1:m    for j=1:2^(m-s+1):N-1for k=1:2^(m-s)p=j+k;q=p+2^(m-s);r=2^(s-1)*mod(p2^(m-s+1));%g=Y(kp)*u;)Y2(p)=Y2(p)+Y2(q);Y2(q)=(Y2(p)+Y2(q))*WN^r;endu=u*WN;endendNI=N/2;for I=1:N-1if I<NIt=Y2(I+1);Y2(I+1)=Y2(NI+1);Y2(NI+1)=t;endT=N/2;while(NI>=T)NI=NI-T;T=T/2;endNI=NI+T;end%    change=bin2dec(fliplr(dec2bin([1:N]-1m)))+1;
%    Y=Y2(change);Y=Y2;
end
subplot(212);stem(changereal(Y)'filled');xlabel('K');ylabel('x[K]');title('x[K]');
disp('是否要继续进行计算?【输入:Y(是)或者N(否)】')
YN=input('是?否?''s');
end

然后进行验证DIF、DIT两种方法的结果是否相同:

  1. 选择DIT法:

    运行结果:

2.选择DIF法:

运行结果:

由上面的验证可知程序的可行性与正确性。
欢迎交流~

DIT和DIF实现快速傅里叶变换的FFT相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

  7. 快速傅里叶变换(FFT)和逆快速傅里叶变换(IFFT)

    多项式表示法与卷积 多项式有两种表示方法 系数表示法 点值表示法 系数表示法 就是最普通的表示方法,如 f(x)=a0x0+a1x1+a2x2+......+an−1xn−1f(x) = a_0x^0 ...

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

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

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

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

最新文章

  1. C语言第一次博客作业
  2. 《黑客与画家》读后感:你对技术一无所知(一些金句)
  3. datasnap 如何监控客户端的连接情况
  4. 【小松教你手游开发】【unity实用技能】计算目标物体是否在自己的扇形视野范围...
  5. Django-路由控制
  6. 计时器Chronometer和时钟(AnalogClock和DigitalClock)
  7. java验证码的实现
  8. ui设计未来十年前景_UI设计的10条诫命
  9. 急用物料怎么办???
  10. 【软件】OBS无法捕捉显示屏
  11. windows 编程随笔——输出文本WM_PAINT消息|有效矩形和无效矩形
  12. Cmder的安装和设置
  13. Pandownload作者被抓后,我决定用docker搭建一款私有网盘
  14. 通过代码自定义cell
  15. 三星S7edge刷极光ROM的总结
  16. PHP+Swoole实现微信小程序客服即时通信聊天功能
  17. 高数_第2章多元函数微分学__偏导数的几何应用_空间曲线的切线与法平面
  18. USB对拷线Linux,USB对拷线设置教程
  19. VS Code中点击Tab键突然不能缩进了
  20. 0基础能学“软件测试”吗?好学吗?怎么学?

热门文章

  1. 你是不是像令狐冲一样,看到对方全身上下都是破绽
  2. Word 2016表格三线表制作
  3. Java笔记09——常用类
  4. Varnish配置,Error 503解决之道
  5. 成像系统分辨率的理论
  6. JS: 参数传递(值传递和引用传递)
  7. 自制网关切换器实例(转)
  8. 大数据征信的“是与非”
  9. 用松鼠顺利地部署您的应用程序
  10. 【Vue知识点- No2.】vue脚手架、基础API