快速傅里叶(FFT)的快速深度思考
关于按时间抽取快速傅里叶(FFT)的快速理论深度思考
对于FFT基本理论参考维基百科或百度百科。
首先谈谈FFT的快速何来?大家都知道FFT是对DFT的改进变换而来,那么它究竟怎样改进,它改进的思想在何处呢?明白后,深感奇妙,感悟学习,感悟生活,写下此文,供大家分享之。(文中FFT均讨论按时间抽取快速傅里叶(FFT))
首先我们来一起看看变换公式,DFT ->FFT(整数 ->奇数 + 偶数)

我自己到这结束也没了解它是怎么把时间变少的,从O(N2)(DFT时间深度)到O(N log2 N)(FFT时间深度),智商无能望见谅……
那么我就画了下四点为例的流程图,如下:
FFT四点流图
DFT四点流图
对比DFT和FFT的流图,思考了半天我才醒悟,原来关键词是“中间变量”。
何解?FFT产生了中间变量来得到最后的结果,而DFT直接全部计算得出结果。那么从流图中我们可以发现,FFT对产生的中间变量进行多次引用,也就是说中间变量只算了一次,而被反复利用多次,举个不恰当的例子:“1 + 1 + 1 = 3”,"1 + 1 = 2 ,2 + 1 = 3"这两个结果一样,但是过程2中的中间变量“2”还可以用在“2 + 2 =4”的算式中。这就是关键。所以对于数量级大的计算来说产生中间变量的好处就是避免了对于中间变量的重复运算,使运算过程加快。
对于流图我们发现四点FFT和DFT的运算一样多,都是16条线,那么8点的流图你就会轻易发现运算量就不同了:

FFT:8*3*2 = 48 条,DFT:8*8 = 64 条。对于更大数量级,效果就更明显了。回头看变换式,也能清晰看到在第一、二步:分奇偶,没有任何优化;最后一步:我们就可以看到优化过程:产生了中间变量。
反复思考:其实在DFT中我们也会计算得到相同结果,说明我们做了相同工作,所以我们工作量是一样的,只是我们把像FFT那样产生的中间变量多次计算,就像我上面举的例子,你把“1 + 1 =2”多次计算了,而这个明明已经算过了的,这就是我们的时间消耗点。
那么回头全局观察总结一下:我们在计算一个共同结果或完成一个共同的长远目标时,我们最好是分成多步完成。(这就是我最想说的一个从中悟到的思维问题。因为我探究这问题就是从“想弄明白为‘啥就能加速’,这个神奇的思维是什么”开始的,产生“中间变量”)。而且我信奉思维构造上层建筑,所以我很关注一些问题解决的本质思维问题,这个问题也是最近学FFT突然想到的,希望大家能和我一起学习交流,恳求您的悉心教导。
反观生活:其实我们发现我们点的“科技树”就是这样;我们写的API,写的库函数就是这样。它们都是这个思维的引用者,确实加快了速度,不是吗!
突发奇想:我以前准备举个多元化的例子,发现不行,不符合。这个例子是“一双鞋,鞋带中国制造,鞋底巴西,鞋上层美国”(此例胡说的,博主不懂具体,只是高中政治书回忆起的),这个例子的分步,但是并不是串行,是并行结构,这个方法的前提就是各部分大家都知道目标和底层运行过程,不知道有什么算法可以和这个思想一样。博主写到这自己发现说糊涂了,晕了,大家见谅着看吧,抱歉- - 。
快速傅里叶(FFT)的快速深度思考的更多相关文章
- 3星|《深度思考:不断逼近问题的本质》:香奈儿前CEO自传
深度思考:不断逼近问题的本质 作者是前香奈儿CEO,主要内容是作者的自传,从家庭说起,一直到卸任香奈儿CEO. 作者出生于上世纪六七十年代的一个美国中西部的犹太家庭,崇尚自由,讨厌标签.高中的一个暑假 ...
- 十分简明易懂的FFT(快速傅里叶变换)
https://blog.csdn.net/enjoy_pascal/article/details/81478582 FFT前言快速傅里叶变换 (fast Fourier transform),即利 ...
- 浅谈FFT(快速傅里叶变换)
前言 啊摸鱼真爽哈哈哈哈哈哈 这个假期努力多更几篇( 理解本算法需对一些< 常 用 >数学概念比较清楚,如复数.虚数.三角函数等(不会的自己查去(其实就是懒得写了(¬︿̫̿¬☆) 整理了一 ...
- Spark Streaming源码解读之JobScheduler内幕实现和深度思考
本期内容 : JobScheduler内幕实现 JobScheduler深度思考 JobScheduler 是整个Spark Streaming调度的核心,需要设置多线程,一条用于接收数据不断的循环, ...
- Spark Streaming源码解读之Job动态生成和深度思考
本期内容 : Spark Streaming Job生成深度思考 Spark Streaming Job生成源码解析 Spark Core中的Job就是一个运行的作业,就是具体做的某一件事,这里的JO ...
- hdu 4609 3-idiots(快速傅里叶FFT)
比较裸的FFT(快速傅里叶变换),也是为了这道题而去学的,厚的白书上有简单提到,不过还是推荐看算法导论,讲的很详细. 代码的话是照着别人敲的,推荐:http://www.cnblogs.com/kua ...
- MySQL 5.7 优化SQL提升100倍执行效率的深度思考(GO)
系统环境:微软云Linux DS12系列.Centos6.5 .MySQL 5.7.10.生产环境,step1,step2是案例,精彩的剖析部分在step3,step4. 1.慢sql语句大概需要13 ...
- FFT【快速傅里叶变换】FWT【快速沃尔什变换】
实在是 美丽的数学啊 关于傅里叶变换的博客 讲的很细致 图片非常易于理解http://blog.jobbole.com/70549/ 大概能明白傅里叶变换是干吗的了 但是还是不能明白为什么用傅里叶变换 ...
- FFT(快速傅里叶变换)
FFT(快速傅里叶变换) 前置知识 \(1.复数\) \(2.单位根\) \(3.循环结构\) \(4.C++\) 1.复数 \(定义:形如a+bi的数,其中i^2=-1\) \(计算:1.(a+bi ...
随机推荐
- Jackson轻易转换JSON
原文http://www.cnblogs.com/hoojo/archive/2011/04/22/2024628.html Jackson可以轻松的将Java对象转换成json对象和xml文档,同样 ...
- 【转载】Linux中常用操作命令
说明:开始学习linux系统,为了方便查看,特转载一篇Linux中常用操作命令,转载地址:http://www.cnblogs.com/laov/p/3541414.html 正文: Linux简介及 ...
- BI商务智能对于企业的意义
BI商务智能之所以越来越重要,是因为无知是现代企业的最大威胁.不知不觉的风险是巨大的,而一知半解可能比一无所知危害更大,因为我们会带着错误的念头做出决定和采取行动,同时还自鸣得意地认为自己是真理的化身 ...
- POJ2001Shortest Prefixes[Trie]
Shortest Prefixes Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 17683 Accepted: 768 ...
- bzoj[1087][SCOI2005]互不侵犯King
Description 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. Input 只有一行,包 ...
- C# 读取EXCEL文件的三种经典方法
1.方法一:采用OleDB读取EXCEL文件: 把EXCEL文件当做一个数据源来进行数据的读取操作,实例如下: public DataSet ExcelToDS(string Path) { stri ...
- JSON.net 在实体类中自定义日期的格式
定义日期格式转换类,其继承 IsoDateTimeConverter,代码如下: public class DateTimeConverter : IsoDateTimeConverter { pub ...
- ajax 请求另一个html页面的指定的一部分 加载到本页面div
$.ajax( { url: url, //这里是静态页的地址 type: "GET", //静态页用get方法,否则服务器会抛出405错误 success: function(d ...
- [LeetCode] Implement Trie (Prefix Tree)
Implement a trie with insert, search, and startsWith methods. Note:You may assume that all inputs ar ...
- jqgrid
官方主页 http://www.jqgrid.com/目前最新版本:jqGrid 3.7 Beta在线文档: http://www.secondpersonplural.ca/jqgriddocs/i ...