关于按时间抽取快速傅里叶(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. 【转】How to hire——创业公司应该如何招人

    How to hire After startups raise money, their next biggest problem becomes hiring.  It turns out it’ ...

  2. vim 命令详解

    vi: Visual Interface 可视化接口vim: VI iMproved VI增强版 全屏编辑器,模式化编辑器 vim模式: 编辑模式(命令模式) 输入模式 末行模式 模式转换: 编辑-- ...

  3. Linux 负载监控脚本

    #!/bin/bash Date=`echo $(date +%Y\-%m\-%d\ %H:%M:%S)`HostName=`hostname`IP=`ifconfig eth0 | grep &qu ...

  4. [Django]登陆界面以及用户登入登出权限

    前言:简单的登陆界面展现,以及用户登陆登出,最后用户权限的问题 正文: 首先需要在settings.py设置ROOT_URLCONF,默认值为: ROOT_URLCONF  = 'www.urls'# ...

  5. Cookie无法读取

    问题描述:用谷歌调试可以看到,但是用js去读取的时候,一直提示undefined

  6. [No000041]如果你被ruby惯坏了,不如试试python3-在Windows下安装ipython

    说明:我比较喜欢绿色软件,因此,下载的是python3为zip包.所以执行命令时请注意当前路径. 先安装pip (请去官网下载get-pip.py 地址: https://pip.pypa.io/en ...

  7. C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 面向全国标准省市县行政数据基础之上的组织机构管理

    由于信息系统庞大.各种业务子系统.各种开发语言开发的业务逻辑.各种年代维护的代码.各种参差不齐的历史遗留信息系统,面向全国的业务系统,面向某个领域的汽运管理信息系统,面向内部的业务系统,面向外部的各种 ...

  8. 物联网(莹石云)WIFI一键配置原理分析(zz)

    最近打算做一款自己的无线传输模块用来实现光伏电站的数据接入,希望可以尽量简化接入流程,其中wifi密码的配置就是一个比较麻烦的事情,想到最近使用萤石摄像头时,wifi密码配置似乎很简单,他们是怎么做到 ...

  9. HashMap遍历的两种方式

    第一种: Map map = new HashMap(); Iterator iter = map.entrySet().iterator(); while (iter.hasNext()) {    ...

  10. Linux ubuntu安装

    http://www.ubuntu.org.cn/download/alternative-downloads 下载地址: http://releases.ubuntu.com/ 国内镜像: http ...