DFT 展开式和 FFT推导
C语言的FFT
//----------------------------------------------------------------------------------
//----------------------------------------------------------------------------------
01.void dft()
02.{
03. extern int inv;
04. extern long npt;
05. long k,n;
06. double WN,wk,c,s,XR[size],XI[size];
07. extern complex x[size];
08.
09. WN=2*pi/npt;
10.
11. if(inv==1)
12. WN=-WN;
13.
14. for(k=0;k<npt;++k)
15. {
16. XR[k]=0.0;XI[k]=0.0;
17. wk=k*WN;
18.
19. for(n=0;n<npt;++n)
20. {
21. c=cos(n*wk);s=sin(n*wk);
22. XR[k]=XR[k]+x[n+1].real*c+x[n+1].imag*s;
23. XI[k]=XI[k]-x[n+1].real*s+x[n+1].imag*c;
24. }
25. if(inv==1)
26. {
27. XR[k]=XR[k]/npt;
28. XI[k]=XI[k]/npt;
29. }
30. }
31.
32. for(k=1;k<=npt;++k)
33. {
34. x[k].real=XR[k-1];
35. x[k].imag=XI[k-1];
36. }
37.
38.}
//----------------------------------------------------------------------------------
//----------------------------------------------------------------------------------
离散DFT 的展开式子










图 (a)为实现这一运算的一般方法,它需要两次乘法、两次加减法。考虑到-bW和bW两个乘法仅相差一负号,可将图 (a)简化成图2.7(b),此时仅需一次乘法、两次加减法。图 (b)的运算结构像一蝴蝶通常称作蝶形运算结构简称蝶形结,采用这种表示法,就可以将以上所讨论的分解过程用流图表示。

按照这个办法,继续把N/2用2除,由于N=2M,仍然是偶数,可以被2整除,因此可以对两个N/2点的DFT再分别作进一步的分解。即对{G(k)}和{H(k)}的计算,又可以分别通过计算两个长度为N/4=2点的DFT,进一步节省计算量,见图。这样,一个8点的DFT就可以分解为四个2点的DFT。



如果用反推法,把上图的蝶形运算FFT,展开求出X(0),其结果和DFT的结果完全一致。
DFT 展开式和 FFT推导的更多相关文章
- DFT,DTFT,DFS,FFT区别
学习了数字信号处理之后,被里面的几个名词搞的晕头转向,比如DFT,DTFT,DFS,FFT,FT,FS等,FT和FS属于信号与系统课程的内容,是对连续时间信号的处理,这里就不过多讨论,只解释一 ...
- 基2时域抽取FFT、IFFT的C++实现代码,另附DFT与IDFT的原始实现--转1
介绍网络上的原理介绍非常丰富,具体请自行搜索网络资源. 本算法依靠FFT流图进行布置. 算法 ##进行完所有的原理推导后,我们可以得到如下的16点FFT流图: 通过上图可以看出整个流图输入序列的顺序已 ...
- 信号基础知识--FFT DFT
clc;close all;clear all; f0=10; fs=100; %采样率 t=1/fs:1/fs:2; %共两秒钟,共200个采样点.采样间隔T=1/100 y ...
- 数字信号处理--FFT与蝶形算法
在数字信号处理中常常需要用到离散傅立叶变换(DFT),以获取信号的频域特征.尽管传统的DFT算法能够获取信号频域特征,但是算法计算量大,耗时长,不利于计算机实时对信号进行处理.因此至DFT被发现以来, ...
- FFT的物理意义
来源:学步园 FFT(Fast Fourier Transform,快速傅立叶变换)是离散傅立叶变换的快速算法,也是我们在数字信号处理技术中经常会提到的一个概念.在大学的理工科课程中,在完成高等数学的 ...
- fft ocean注解
针对这两篇教程: http://www.keithlantz.net/2011/10/ocean-simulation-part-one-using-the-discrete-fourier-tran ...
- 信号分析——从傅里叶变化到FFT
我们眼中的世界就像皮影戏的大幕布,幕布的后面有无数的齿轮,大齿轮带动小齿轮,小齿轮再带动更小的. 在最外面的小齿轮上有一个小人——那就是我们自己. 我们只看到这个小人毫无规律的在幕布前表演,却无法预测 ...
- FFT快速傅里叶变换算法
1.FFT算法概要: FFT(Fast Fourier Transformation)是离散傅氏变换(DFT)的快速算法.即为快速傅氏变换.它是根据离散傅氏变换的奇.偶.虚.实等特性,对离散傅立叶变换 ...
- DFT
离散傅里叶变换(Discrete Fourier Transform,缩写为DFT),是傅里叶变换在时域和频域上都呈离散的形式, 将信号的时域采样变换为其DTFT的频域采样.在形式上,变换两端(时域和 ...
随机推荐
- 转载:ecshop自定义销量
转自:http://www.phpally.com/ecshop%E8%87%AA%E5%AE%9A%E4%B9%89%E9%94%80%E9%87%8F/ 本补丁以假乱真,对网站销售有一定帮助,计算 ...
- android学习七(创建自己定义控件)
前面学习的是android的基本控件和布局的使用,可是主要的控件和布局有时候并不能实现复杂的布局.我们来看下各种控件和布局的关系. 可见全部的控件都是直接或者间接的继承自View的,全部的布局都是直接 ...
- uip UDPclient模式通信移植,p本地ort可以是无规
现在移植UDPclient模式,使用广播地址检测. //udp_client.c /********************************************************** ...
- WCF扩展之实现ZeroMQ绑定和protocolBuffer消息编码(二)实现IRequestChannel(2016-03-15 12:35)
这是这个系列的第二篇,其他的文章请点击下列目录 WCF扩展之实现ZeroMQ绑定和protocolBuffer消息编码(一)概要设计 WCF扩展之实现ZeroMQ绑定和protocolBuffer消息 ...
- AutoFac使用方法总结:Part II
事件 AutoFac支持三种事件:OnActivating,OnActivated,OnRelease.OnActivating在注册组件使用之前会被调用,此时可以替换实现类或者进行一些其他的初始化工 ...
- POJ 1915-Knight Moves (单向BFS && 双向BFS 比)
主题链接:Knight Moves 题意:8个方向的 马跳式走法 ,已知起点 和终点,求最短路 研究了一下双向BFS,不是非常难,和普通的BFS一样.双向BFS只是是从 起点和终点同一时候開始搜索,可 ...
- 各种ESB产品比较(转)
介绍了主流商业和开源ESB的发展趋势.可借鉴的地方和其缺点: 主要介绍: Oracle Service Bus WebSphere Message Broker ...
- 集差集 哈希表 比较数据库的照片和server画面上,将server垃圾上的图片删除
SSH 骨架code: public String deleRubbishAd(){ int deleADcount = 0; rubbishADtp = configDao.rubbishADtp( ...
- SRM 620 D2L3: RandomGraph, dp
称号:http://community.topcoder.com/stat? c=problem_statement&pm=13143&rd=15853 參考:http://apps. ...
- C#多线程编程实例 螺纹与窗口交互
C#多线程编程实例 螺纹与窗口交互 代码: public partial class Form1 : Form { //声明线程数组 Thread[] workThreads = new Thread ...