关于按时间抽取快速傅里叶(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)的快速深度思考的更多相关文章

  1. 3星|《深度思考:不断逼近问题的本质》:香奈儿前CEO自传

    深度思考:不断逼近问题的本质 作者是前香奈儿CEO,主要内容是作者的自传,从家庭说起,一直到卸任香奈儿CEO. 作者出生于上世纪六七十年代的一个美国中西部的犹太家庭,崇尚自由,讨厌标签.高中的一个暑假 ...

  2. 十分简明易懂的FFT(快速傅里叶变换)

    https://blog.csdn.net/enjoy_pascal/article/details/81478582 FFT前言快速傅里叶变换 (fast Fourier transform),即利 ...

  3. 浅谈FFT(快速傅里叶变换)

    前言 啊摸鱼真爽哈哈哈哈哈哈 这个假期努力多更几篇( 理解本算法需对一些< 常 用 >数学概念比较清楚,如复数.虚数.三角函数等(不会的自己查去(其实就是懒得写了(¬︿̫̿¬☆) 整理了一 ...

  4. Spark Streaming源码解读之JobScheduler内幕实现和深度思考

    本期内容 : JobScheduler内幕实现 JobScheduler深度思考 JobScheduler 是整个Spark Streaming调度的核心,需要设置多线程,一条用于接收数据不断的循环, ...

  5. Spark Streaming源码解读之Job动态生成和深度思考

    本期内容 : Spark Streaming Job生成深度思考 Spark Streaming Job生成源码解析 Spark Core中的Job就是一个运行的作业,就是具体做的某一件事,这里的JO ...

  6. hdu 4609 3-idiots(快速傅里叶FFT)

    比较裸的FFT(快速傅里叶变换),也是为了这道题而去学的,厚的白书上有简单提到,不过还是推荐看算法导论,讲的很详细. 代码的话是照着别人敲的,推荐:http://www.cnblogs.com/kua ...

  7. MySQL 5.7 优化SQL提升100倍执行效率的深度思考(GO)

    系统环境:微软云Linux DS12系列.Centos6.5 .MySQL 5.7.10.生产环境,step1,step2是案例,精彩的剖析部分在step3,step4. 1.慢sql语句大概需要13 ...

  8. FFT【快速傅里叶变换】FWT【快速沃尔什变换】

    实在是 美丽的数学啊 关于傅里叶变换的博客 讲的很细致 图片非常易于理解http://blog.jobbole.com/70549/ 大概能明白傅里叶变换是干吗的了 但是还是不能明白为什么用傅里叶变换 ...

  9. FFT(快速傅里叶变换)

    FFT(快速傅里叶变换) 前置知识 \(1.复数\) \(2.单位根\) \(3.循环结构\) \(4.C++\) 1.复数 \(定义:形如a+bi的数,其中i^2=-1\) \(计算:1.(a+bi ...

随机推荐

  1. LLVM 笔记(二)—— PHI node

    ilocker:关注 Android 安全(新手) QQ: 2597294287 什么是 PHI node? 所有 LLVM 指令都使用 SSA (Static Single Assignment,静 ...

  2. Java 容器(list, set, map)

    java容器类库的简化图: (虚线框表示接口, 实线框表示普通的类, 空心箭头表示特定的类实现了接口, 实心箭头表示某个类可以生成箭头所指的类对象) 继承Collection的主要有Set 和 Lis ...

  3. MIT 6.824 : Spring 2015 lab3 训练笔记

    摘要: 源代码参见我的github:https://github.com/YaoZengzeng/MIT-6.824 Lab3: Paxos-based Key/Value Service Intro ...

  4. css3伪类温故知新

    今天遇到一个问题.要求::after 和 ::before的 content:"content" 能够动态的进行变换,能被JavaScript操作. 百度了下,自己做了实验,发现有 ...

  5. codevs 2594 解药还是毒药

    2594 解药还是毒药 http://codevs.cn/problem/2594/ 题目描述 Description Smart研制出对付各种症状的解药,可是他一个不小心,每种药都小小地配错了一点原 ...

  6. 转 android 从底部弹出一个popuwindow,渐入渐出效果。我这里是用在购物车需要选择购买选项的操作。

    最近要改客户端,需要实现一个从底部弹出的popuwindow,像我这种渣渣android技术,能整出popuwindow但是整不出动画,百度之,记录一下. 从下面这个地址转的 http://blog. ...

  7. 第一个Android应用--签证无忧 上线

    用了大概1个多星期的时间,把一个简单的应用完成,[签证无忧]是基于在我所在公司办理签证的前提下,为方便客户查询进度所开发,后来我加了淘宝的购买链接,这样客人在以后需要时不需要到淘宝查找了. 签证无忧这 ...

  8. 【Python】[进程和线程]多进程,多线程,ThreadLocal,进程VS.线程,分布式进程

    1.多进程,multiprocessing模块,   进程间的通信:Queue[队列],Pipes[管子]2.多线程,    注意:线程公用变量,混乱   解决方法Lock:因为只有一个锁,所以当要执 ...

  9. 利用ucenter整合discuz数据

    由于项目需要,需要用到discuz论坛用户的数据,所以想到利用ucenter获取数据.以下为整合ucenter的过程. 1.首先你需要下载官方demo:http://faq.comsenz.com/l ...

  10. redis-介绍与比较

    <一>. NoSQL简介:    NoSQL是Not-Only-SQL的缩写,是被设计用来替换传统的关系型数据库在某些领域的用,特别针对web2.0站点以及大型的SNS网站,用来满足高并发 ...