快速傅里叶变换(FFT)的原理及公式

  非周期性连续时间信号x(t)的傅里叶变换可以表示为

式中计算出来的是信号x(t)的连续频谱。但是,在实际的控制系统中能够得到的是连续信号x(t)的离散采样值x(nT)。因此需要利用离散信号x(nT)来计算信号x(t)的频谱。

  有限长离散信号x(n),n=0,1,…,N-1的DFT定义为:

  可以看出,DFT需要计算大约N2次乘法和N2次加法。当N较大时,这个计算量是很大的。利用WN的对称性和周期性,将N点DFT分解为两个N/2点的 DFT,这样两个N/2点DFT总的计算量只是原来的一半,即(N/2)2+(N/2)2=N2/2,这样可以继续分解下去,将N/2再分解为N/4点 DFT等。对于N=2m 点的DFT都可以分解为2点的DFT,这样其计算量可以减少为(N/2)log2N次乘法和Nlog2N次加法。图1为FFT与DFT-所需运算量与计算点数的关系曲线。由图可以明显看出FFT算法的优越性。

将x(n)分解为偶数与奇数的两个序列之和,即

x1(n)和x2(n)的长度都是N/2,x1(n)是偶数序列,x2(n)是奇数序列,则

  其中X1(k)和X2(k)分别为x1(n)和x2(n)的N/2点DFT。由于X1(k)和X2(k)均以N/2为周期,且WN k+N/2=-WN k,所以X(k)又可表示为:

  上式的运算可以用图2表示,根据其形状称之为蝶形运算。依此类推,经过m-1次分解,最后将N点DFT分解为N/2个两点DFT。图3为8点FFT的分解流程。

  FFT算法的原理是通过许多小的更加容易进行的变换去实现大规模的变换,降低了运算要求,提高了与运算速度。FFT不是DFT的近似运算,它们完全是等效的。

关于FFT精度的说明:

因为这个变换采用了浮点运算,因此需要足够的精度,以使在出现舍入误差时,结果中的每个组成部分的准确整数值仍是可辨认的。为了FFT的舍入误差,应该允许增加几倍log2(log2N)位的二进制。以256为基数、长度为N字节的数可以产生大到(256)2N阶的卷积分量,所以为了正确存储,需要16+log2N位精度,若数i是浮点尾数的二进制位数,则有条件: 

如果i=24,对于任意感兴趣(N>256)的N值,单精度是不合适的;如果i=53,也就是采用双精度,则允许N大于106,相当于几百万十进制位。所以,用FFT作大数乘法时,向量数组选用双精度类型。

原文:http://www.cnblogs.com/Lyush/articles/3219196.html

傅里叶变换时间复杂度相关推荐

  1. 离散傅里叶变换python_使用python实现离散时间傅里叶变换

    以下内容引用链接:https://blog.csdn.net/baidu_37352210/article/details/79596633 (注意:通过如下内容可知,将序列信号进行傅里叶变换后,得到 ...

  2. 国科大数字图像处理(复习与整理)

    图像处理复习笔记: 1.证明一个系统是线性系统 2.证明函数卷积的傅里叶变换等于函数傅氏变换后的乘积 3.采样定理与混叠 4.直方图均衡化 第一节课知识点 第二节课知识点 第三节课知识点 第四节课知识 ...

  3. 量子Fourier变换

    文章目录 前言 一.离散傅里叶变换 二.量子傅里叶变换 1.量子傅里叶变化简述 2.量子傅里叶变换的乘积表示 3.量子傅里叶变换的相关例子 3.1两个量子Fourier变换 3.2矩阵形式 4.量子傅 ...

  4. FFT快速傅里叶变换以O(NlogN)的时间复杂度实现大数乘

    任意一个整数均能表示成An*10^(n-1) + An-1*10^(n-2) + ... + A2*10^2 + A1*10 + A0的形式,视10为自变量X,则化为一个多项式.两数相乘转化为两多项式 ...

  5. 再谈 BigInteger - 使用快速傅里叶变换

    我在"浅谈 BigInteger"的随笔中实现了一个 Skyiv.Numeric.BigInteger 类,那时乘法是使用常规的 O(N2) 的算法,所以比 .NET Framew ...

  6. 乘法运算-快速傅里叶变换

    貌似一种新的乘法快速计算方法已经提交论文,理论上可以达到大数乘法的效率极限. 文章链接:多项式乘法到快速傅里叶变换:此文介绍的非常详细,极力推荐. 文章链接:使用快速傅里叶变换计算大整数乘法:快速傅里 ...

  7. 快速傅里叶变换(FFT)相关内容汇总

    (原稿:https://paste.ubuntu.com/p/yJNsn3xPt8/) 快速傅里叶变换,是求两个多项式卷积的算法,其时间复杂度为$O(n\log n)$,优于普通卷积求法,且根据有关证 ...

  8. C++实现 (FFT)一维快速傅里叶变换

    一维离散傅里叶变换的公式为: 如果直接基于该定义进行编程实现,则算法时间复杂度为O(N2).具体的编程实现我们已经在<C++实现一维离散傅里叶变换>中介绍过了. 当一维信号长度达到几十万个 ...

  9. 【音频处理】离散傅里叶变换

    前言 最近复现音乐驱动舞蹈的文章<Dancing-to-Music Character Animation>,用到了与傅里叶变换很相似的称为常Q变换的方法去分割音乐,所以对傅里叶变换做了一 ...

最新文章

  1. 刻意练习:LeetCode实战 -- Task11. 删除链表的倒数第N个节点
  2. cms查询系统(一)背景以及需求分析与设计
  3. SQL日常维护的语句
  4. 如何用淘宝助理上传宝贝装修模板
  5. 云服务器装teamviewer
  6. python实现连接池技术
  7. 微信小程序-中英文文本换行的小问题
  8. Android游戏开发学习笔记(三):视频的播放
  9. 如何修复计算机的无限功能,Win10系统自动修复时出现无限死循环或提示无法修复怎么办 如何禁用自动修复服务...
  10. 世人谓我太疯癫,我笑世人看不穿
  11. 电脑如何备份文件,怎么同步?
  12. 前端加载自定义字体及速度优化
  13. springboot整合redis后整合es,报错Failed to instantiate [org.elasticsearch.client.transport.TransportClient]
  14. 201671030109 韩艳艳 实验三作业互评与改进报告
  15. cad详图怎么画_CAD原始结构图如何绘制?
  16. 诺贝尔奖项陆续公布 中国相关研究已居世界高端
  17. 7月30日云栖精选夜读 | 王坚博士:进入空气稀薄地带
  18. 一建有什么刷题软件,怎么备考?
  19. 为什么win7 flash player安装不了怎么办
  20. java timertask 初始化_定时器实现方式之TimerTask、Timer

热门文章

  1. cx_oracle windows缺少100 dll,Windows10无法运行QQ提示缺少MSVCR100.dll的解决方案
  2. php 开发微信h5,微信h5页面开发遇到那些坑
  3. nfs文件服务器读取文件夹,NFS文件服务器.ppt
  4. java和C中基本数据类型的所占字节数对比
  5. 二次元老婆生成器,想要什么样的老婆就靠自己勤劳的双手啦
  6. IDEA 2021.3 正式发布:支持远程开发、故障排查、Java和Spring等多项优化改进
  7. 皮一皮:这是谁的脚???
  8. 皮一皮:有钱人的品味实在不懂...
  9. 它又来了!Fastjson 被发现其用于安全控制的开关autotype限制可被绕过...你方了没?...
  10. 共享资源的保护:锁机制