DFT简化计算理解(FFT)

 

DFT:

WN=e^(-j*2*pi/N)

DFT复杂度o(N^2)

降低与N^2的依赖 使N = LM  (L^2+m^2 <= N^2)

N点DFT分解为M段L点DFT

一维的N点序列变为(L,M)二维序列,每一行分别进行DFT

举例两种一维到二维的映射关系

n = Ml+m

1 3 5 7 9
2 4 6 8 10

n = l+mL

1 2 3 4 5
6 7 8 9 10

与之所求的DFT 也可存入相对应的(q,p)矩阵中

以第一种(n = Ml+m)为例:k = Mp+q

找书麻烦这里给出推到:

重一维到二维

两种流程:

按列存入信号

计算每行M点DFT

乘以相位因子

计算每一列的L点DFT

按行读取所得数组

图示:

来看下基2_FFT算法:

上图的N/2点的dft可以分解为N/4的而N/4的DFT可以分解为N/8的……直到最后分解为2点的DFT

这儿的2点DFT其实是输出A+B,A-B两个值

为什么可以这样分解呢?其实他就是1个数学式子的’分解‘过程,来看下

N点的DFT是这玩意儿

将序列 奇偶分开

拆开成2km与1两项

X(2m) 可看为f(m)

而这个可看作一个新的N/2点DFT ------------可见N点的DFT已经分解为N/2点DFT

由采样定理,在频域上(N/2以为新的周期)F(k+N/2)=F(k),且,

所以得出下式:

复数乘法运算量 。而原始DFtT的量为N^2,当N够大时几乎减小了一半

注意 的确定,他是 分解出来的

这是举例看下8点DFT的奇偶分解

一级dft(抽第二级奇偶) 二级dft(抽第三极的奇偶) 第三极dft(最终)
0 0 0
4 2 1
2 4 2
6 6 3
1 1 4
5 3 5
3 5 6
7 7 7
     

可用二进制倒序实现 即011100变为001110,感觉镜像啦下

对比下

可看作一个4点DFT,只需求k=0,1的DFT,即可根据关系得出k=2,3

第二级 等于W(4,0),W(1,4)

DFT到FFT的理解的更多相关文章

  1. FS,FT,DFS,DTFT,DFT,FFT的联系和区别

    DCT变换的原理及算法 文库介绍 对于初学数字信号处理(DSP)的人来说,这几种变换是最为头疼的,它们是数字信号处理的理论基础,贯穿整个信号的处理. 学习过<高等数学>和<信号与系统 ...

  2. 一个蒟蒻对FFT的理解(蒟蒻也能看懂的FFT)

    建议同学们先自学一下"复数(虚数)"的性质.运算等知识,不然看这篇文章有很大概率看不懂. 前言 作为一个典型的蒟蒻,别人的博客都看不懂,只好自己写一篇了. 膜拜机房大佬 HY 一. ...

  3. Matlab 之 FFT的理解和应用

    网上看了一些大牛的关于FFT的见解,加上自己的一点儿理解,针对以下这几个问题来加深对FFT的理解. 不知道大家有没有类似以下几点的困惑: 问题的提出 对于1秒钟输出的连续信号,使用采样率Fs不同,就会 ...

  4. FS,FT,DFS,DTFT,DFT,FFT的联系和区别 数字信号处理

    DCT变换的原理及算法 文库介绍 对于初学数字信号处理(DSP)的人来说,这几种变换是最为头疼的,它们是数字信号处理的理论基础,贯穿整个信号的处理. 学习过<高等数学>和<信号与系统 ...

  5. [信号与系统]傅里叶变换、DFT、FFT分析与理解

    目录 一.前言 二.傅里叶变换 1.傅里叶级数 2.傅里叶级数系数求解 2.1.求解方法 2.2.三角函数的正交性 2.3.系数求解过程 2.4.关于傅里叶级数的个人感悟 3.引入复指数 4.总结 三 ...

  6. FFT算法理解与c语言的实现

    完整内容迁移至 http://www.face2ai.com/DIP-2-3-FFT算法理解与c语言的实现/ http://www.tony4ai.com/DIP-2-3-FFT算法理解与c语言的实现 ...

  7. 【总结】对FFT的理解 / 【洛谷 P3803】 【模板】多项式乘法(FFT)

    题目链接 \(\Huge\text{无图,慎入}\) \(FFT\)即快速傅里叶变换,用于加速多项式乘法. 如果暴力做卷积的话就是一个多项式的每个单项式去乘另一个多项式然后加起来,时间复杂度为\(O( ...

  8. DTFT、DFT、FFT

    对于一般的周期信号可以用一系列(有限个或者无穷多了)正弦波的叠加来表示.这些正弦波的频率都是某一个特定频率的倍数如5hz.2*5hz.3*5hz--(其中的 5hz 叫基频).这是傅立叶级数的思想.所 ...

  9. 【转】离散傅里叶变换-DFT(FFT)基础

    转:https://blog.csdn.net/zhangxz259/article/details/81627341 什么是离散傅里叶变换 matlab例子 本文是从最基础的知识开始讲解,力求用最通 ...

随机推荐

  1. zk 06之:ZooKeeper命令、命令行工具及简单操作

    常用命令ZooKeeper 支持某些特定的四字命令字母与其的交互.它们大多是查询命令,用来获取 ZooKeeper 服务的当前状态及相关信息.用户在客户端可以通过 telnet 或 nc 向 ZooK ...

  2. 生成器+列表生成式,生成器可以节省内存,随时调取函数运行,以及实现多线程运行函数,__next__()和.send(参数)的区别,a,b=b,a+b其实是元祖的用法,出现异常状态用try...except StopIteration来处理

    列表生成式:是代码更简洁. 也可以是函数,比如func(i) 生成器:generator 列表生成式,是中括号,改成小括号,就是生成器: 如果你用列表生成式,生成一亿个数据:这里会卡好久,会生成一亿个 ...

  3. Oracle常见的表连接的方法

    1 排序合并连接SMJ Sort merge join 排序合并总结: 1 通常情况下,排序合并连接的效率远不如hash join,前者适用范围更广,hj只使用于等值连接,smj范围更广(<,& ...

  4. C#根据字体名通过注册表获取该字体文件路径(win10)两种方法推荐第二种

    方法一: 直接先上源码: private System.Collections.Generic.SortedDictionary<string, string> ReadFontInfor ...

  5. MVC 公共类App_Code不识别

    .Net MVC需要写公共类的时候 右击添加 App_Code 文件夹,新建类—>右击类—>属性,生成操作 —>选择 —>编译 .net MVC项目本身是个应用程序,所以其实不 ...

  6. Debug 的使用

    R 命令:查看.修改寄存器的内容 -r:查看寄存器的内容 CS=0AF9,IP=0100,也就是说内存 0AF9:0100 处的指令为 CPU 当前要读取.执行的指令 Debug 也列出了 CS:IP ...

  7. C Primer Plus学习笔记(十)- 字符串和字符串函数

    getchar() 和 putchar() getchar() 函数不带任何参数,它从输入队列中返回下一个字符 下面的语句读取下一个字符输入,并把该字符的值赋给变量 ch ch =getchar(); ...

  8. linux中keepalived实现nginx高可用配置

    linux中keepalived实现nginx高可用配置 安装keepalived 运行如下命令即可 tar -zxvf keepalived-2.0.8.tar.gz -C /usr/src cd ...

  9. Centos安装php高版本

    安装 1.检查当前是否有安装php  rpm -qa|grep php 如果有安装PHP,那么请先删除这些安装包:  yum remove php* 2.安装php源 Centos 5 安装php源: ...

  10. 在java中RandomAccessFile类的作用:对指定文件可以进行读写的操作