DIT和DIF实现快速傅里叶变换的FFT
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两种方法的结果是否相同:
- 选择DIT法:
运行结果:
2.选择DIF法:
运行结果:
由上面的验证可知程序的可行性与正确性。
欢迎交流~
DIT和DIF实现快速傅里叶变换的FFT相关推荐
- 数字信号处理知识点总结(四):快速傅里叶变换(FFT)
本篇文章主要介绍快速傅里叶变换(FFT)的优化原理,基-2FFT算法的推导.实现及用FFT实现的线性卷积. 主要参考知乎[精品讲义]-快速傅里叶变换(Fast Fourier Transformati ...
- 【学习笔记】超简单的快速傅里叶变换(FFT)(含全套证明)
整理的算法模板合集: ACM模板 目录 一.概念概述 二.前置知识 1. 多项式 2. 复数 4. 欧拉公式证明 3. 复数的单位根 / 单位向量 三.FFT 算法概述 四.离散傅里叶变换(DFT) ...
- 快速傅里叶变换_计算物理基础:第八章-快速傅里叶变换(FFT)
参考北京师范大学的<计算物理基础> 第八章-快速傅里叶变换 计算物理基础_中国大学MOOC(慕课)www.icourse163.org 1.快速傅里叶变换 1.1 离散傅里叶变换及其变换 ...
- 快速傅里叶变换(FFT)详解
快速傅里叶变换(FFT)详解 (这是我第一次写博,不喜勿喷...) 关于FFT已经听闻已久了,这次终于有机会在Function2的介绍下来了解一下FFT了. 快速傅里叶变换(Fast Fourier ...
- 快速傅里叶变换(FFT)的C#实现及详细注释
快速傅里叶变换(FFT)的C#实现及详细注释 ----------------------------------------------------------------------------- ...
- 11.频域里的卷积——介绍,傅里叶变换和卷积,快速傅里叶变换(FFT)_1
目录 介绍 傅里叶变换和卷积 FFT 介绍 我们将继续讨论频率分析以及如何用频率分量的概念来研究图像.如果你还记得上次我们讲过的基于频率的图像分解的概念.我们通过给你们看这张照片来回忆它(如图).这是 ...
- 快速傅里叶变换(FFT)和逆快速傅里叶变换(IFFT)
多项式表示法与卷积 多项式有两种表示方法 系数表示法 点值表示法 系数表示法 就是最普通的表示方法,如 f(x)=a0x0+a1x1+a2x2+......+an−1xn−1f(x) = a_0x^0 ...
- 快速傅里叶变换 (FFT)基础
参考博文 频谱分析是一种将复杂信号分解为较简单信号的技术. 首先来很清楚几个概念: FT(Fourier Transformation): 傅里叶变换.其时域信号.频域信号都是连续的. DTFT(Di ...
- MATLAB 离散傅里叶变换(DFT)、逆离散傅里叶变换(IDFT)、快速傅里叶变换(FFT)的实现
离散傅里叶变换(DFT).逆离散傅里叶变换(IDFT)的实现 代码如下,其中xn为时序序列 clc;clear; xn=[7,6,5,4,3,2]; Xk=dft(xn,6); x=idft(Xk,6 ...
最新文章
- C语言第一次博客作业
- 《黑客与画家》读后感:你对技术一无所知(一些金句)
- datasnap 如何监控客户端的连接情况
- 【小松教你手游开发】【unity实用技能】计算目标物体是否在自己的扇形视野范围...
- Django-路由控制
- 计时器Chronometer和时钟(AnalogClock和DigitalClock)
- java验证码的实现
- ui设计未来十年前景_UI设计的10条诫命
- 急用物料怎么办???
- 【软件】OBS无法捕捉显示屏
- windows 编程随笔——输出文本WM_PAINT消息|有效矩形和无效矩形
- Cmder的安装和设置
- Pandownload作者被抓后,我决定用docker搭建一款私有网盘
- 通过代码自定义cell
- 三星S7edge刷极光ROM的总结
- PHP+Swoole实现微信小程序客服即时通信聊天功能
- 高数_第2章多元函数微分学__偏导数的几何应用_空间曲线的切线与法平面
- USB对拷线Linux,USB对拷线设置教程
- VS Code中点击Tab键突然不能缩进了
- 0基础能学“软件测试”吗?好学吗?怎么学?