第五章 快速傅里叶变换,2,本章目录,直接计算DFT的问题及改进的途径,按时间抽取的基2-FFT算法,按频率抽取的基2-FFT算法,快速傅里叶逆变换(IFFT)算法,Matlab实现,3,5.1 引言,DFT在实际应用中很重要: 可以计算信号的频谱、功率谱和线性卷积等。 直接按DFT变换进行计算,当序列长度N很大时,计算量非常大,所需时间会很长。 FFT并不是一种与DFT不同的变换,而是DFT的一种快速计算的算法。,,4,5.2 直接计算DFT的问题及改进的途径,DFT的运算量,,设复序列x(n) 长度为N点,其DFT为,k=0,,…,N-1,(1)计算一个X(k) 值的运算量,复数乘法次数:,N,复数加法次数:,N-1,5,5.2.1 DFT的运算量,(2)计算全部N个X(k) 值的运算量,复数乘法次数:,N2,复数加法次数:,N(N-1),(3)对应的实数运算量,,6,,一次复数乘法:,4次实数乘法,2次实数加法,+,一个X(k) :,4N次实数乘法,+,2N+2(N-1)= 2(2N-1)次实数加法,所以,整个N点DFT运算共需要:,N×2(2N-1)= 2N(2N-1),实数乘法次数:,4 N2,实数加法次数:,,7,DFT运算量的结论,,N点DFT的复数乘法次数举例,结论:当N很大时,其运算量很大,对实时性很强的信号处理来说,要求计算速度快,因此需要改进DFT的计算方法,以大大减少运算次数。,,8,,5.2.2 减少运算工作量的途径,主要原理是利用系数 的以下特性对DFT进行分解:,(1)对称性,(2)周期性,(3)可约性,另外,,,9,5.3 按时间抽取的基2-FFT算法,算法原理 按时间抽取基-2FFT算法与直接计算DFT运算量的比较 按时间抽取的FFT算法的特点 按时间抽取FFT算法的其它形式流程图,,10,5.3.1 算法原理,设N=2L,将x(n)按 n 的奇偶分为两组:,,r =0,1,…,,则,,11,,式中,X1(k)和X2(k)分别是x1(n)和x2(n)的N/2的DFT。,另外,式中k的取值范围是:0,1, …,N/2-1 。,,12,,,因此, 只能计算出X(k)的前一半值。,后一半X(k) 值, N/2 , N/2 +1, …,N ?,利用,可得到,同理可得,,13,,考虑到,因此可得后半部分X(k),及前半部分X(k),k=0,1, …,N/2-1,k=0,1, …,N/2-1,,14,蝶形运算,,,蝶形运算式,蝶形运算信号流图符号,因此,只要求出2个N/2点的DFT,即X1(k)和X2(k),再经过蝶形运算就可求出全部X(k)的值,运算量大大减少。,,15,以8点为例第一次按奇偶分解,以N=8为例,分解为2个4点的DFT,然后做8/2=4次蝶形运算即可求出所有8点X(k)的值。,,16,蝶形运算量比较,复数乘法次数:,N2,复数加法次数:,N(N-1),复数乘法次数:,2*(N/2)2+N/2=N2/2+N/2,复数加法次数:,2*(N/2)(N/2-1)+2*N/2=N2/2,N点DFT的运算量,分解一次后所需的运算量=2个N/2的DFT+N/2蝶形:,因此通过一次分解后,运算工作量减少了差不多一半。,,17,进一步按奇偶分解,由于N=2L,因而N/2仍是偶数 ,可以进一步把每个N/2点 子序列再按其奇偶部分分解为两个N/4点的子序列。,以N/2点序列x1(r)为例,则有,,k=0,1,…,,,18,,且,k=0,1,…,,由此可见,一个N/2点DFT可分解成两个N/4点DFT。,同理,也可对x2(n)进行同样的分解,求出X2(k)。,,19,以8点为例第二次按奇偶分解,,20,算法原理,对此例N=8,最后剩下的是4个N/4= 2点的DFT,2点DFT也可以由蝶形运算来完成。以X3(k)为例。,k=0, 1,即,这说明,N=2M的DFT可全部由蝶形运算来完成。,,21,以8点为例第三次按奇偶分解,N=8按时间抽取法FFT信号流图,,22,5.3.2 按时间抽取基2-FFT算法与直接计算DFT运算量的比较,由按时间抽取法FFT的信号流图可知,当N=2L时,共有 级 蝶形运算;每级都由 个蝶形运算组成,而每个蝶形有 次复乘、 次复加,因此每级运算都需 次复乘和 次复加。,L,N/2,N/2,1,2,N,,23,,这样 级运算总共需要:,L,复数乘法:,复数加法:,直接DFT算法运算量,复数乘法:,复数加法:,N2,N(N-1),直接计算DFT与FFT算法的计算量之比为M,,24,FFT算法与直接DFT算法运算量的比较,,,,,25,5.3.3 按时间抽取的FFT算法的特点,序列的逆序排列 同址运算(原位运算) 蝶形运算两节点间的距离 的确定,,26,序列的逆序排列,由于 x(n) 被反复地按奇、偶分组,所以流图输入端的 排列不再是顺序的,但仍有规律可循:,因为 N=2M ,,对于任意 n(0≤n ≤N-1),可以用M个二进制码表示为:,n 反复按奇、偶分解时,即按二进制码的“0” “1” 分解。,序列的逆序排列,,27,倒位序的树状图(N=8),,28,码位的倒位序(N=8),,29,倒位序的变址处理(N=8),,30,同址运算(原位运算),某一列任何两个节点k 和j 的节点变量进行蝶形运算后,得到结果为下一列k、j两节点的节点变量,而和其他节点变量无关。这种原位运算结构可以节省存储单元,降低设备成本。,运算前,运算后,例,同址运算(原位运算),,31,观察原位运算规律,,32,蝶形运算两节点间的距离,以N=8为例:,第一级蝶形,距离为:,第二级蝶形,距离为:,第三级蝶形,距离为:,规律:对于共L级的蝶形而言,其m级蝶形运算的节 点间的距离为,1,2,4,蝶形运算两节点间的距离,,33,的确定,以N=8为例:,的确定,,34,5.4 按频率抽取的基2-FFT算法,算法原理,再把输出X(k)按k的奇偶分组,先把输入按n的顺序分成前后两半,,设序列长度为N=2L,L为整数,前半子序列x(n),后半子序列,,,0≤n≤,0≤n≤,,35,5.4.1 算法原理,由DFT定义得,k=0,1, …,N,,36,,由于,所以,则,k=0,1, …,N,,37,,然后按k的奇偶可将X(k)分为两部分,r=0,1, …,,则式,可转化为,,,38,,令,n=0,1, …,,代入,r=0,1, …,,可得,为2个N/2点的DFT,合起来正好是N点X(k)的值。,,39,蝶形运算,将,称为蝶形运算,与时间抽选基2FFT算法中的蝶形运算符号略有不同。,,40,例 按频率抽取(N=8),例 按频率抽取,将N点DFT分解为两个N/2点DFT的组合(N=8),,41,,与时间抽取法的推导过程一样,由于 N=2L,N/2仍然是 一个偶数,因而可以将每个N/2点DFT的输出再分解为偶数组 与奇数组,这就将N/2点DFT进一步分解为两个N/4点DFT。,N=8,,42,5.4.2 频率抽取法与时间抽取法的异同,频率抽取法输入是自然顺序,输出是倒位序的;时间抽取法正好相反。 频率抽取法的基本蝶形与时间抽取法的基本蝶形有所不同。 频率抽取法运算量与时间抽取法相同。 频率抽取法与时间抽取法的基本蝶形是互为转置的。,,43,5.5 快速傅里叶逆变换(IFFT)算法,IDFT公式,DFT公式,比较可以看出,,,,IDFT多出,,M个1/2可分解到M级蝶形运算中。,,44,例 频率抽取IFFT流图(N=8),,45,快速傅里叶逆变换另一种算法,,46,5.8 Matlab实现,用FFT进行谱分析的Matlab实现 用CZT进行谱分析的Matlab实现,在Matlab中使用的线性调频z变换函数为czt,其调用格式为 X= czt(x, M, W, A) 其中,x是待变换的时域信号x(n),其长度为N,M是变换的长度,W确定变换的步长,A确定变换的起点。若M= N,A= 1,则CZT变成DFT。,,47,5.8.1 用FFT进行谱分析的Matlab实现,例5.1 设模拟信号 ,以 t= 0.01n (n=0: N-1) 进行取样,试用fft函数对其做频谱分析。N分别为:(1) N=45;(2) N=50;(3) N=55;(2) N=60。,程序清单如下,%计算N=45的FFT并绘出其幅频曲线 N=45;n=0:N-1;t=0.01*n; q=n*2*pi/N; x=2*sin(4*pi*t)+5*cos(8*pi*t); y=fft(x,N); figure(1) subplot(2,2,1) plot(q,abs(y)) title('FFT N=45'),,48,例5.1程序清单,%计算N=50的FFT并绘出其幅频曲线 N=50;n=0:N-1;t=0.01*n; q=n*2*pi/N; x=2*sin(4*pi*t)+5*cos(8*pi*t); y=fft(x,N); figure(1) subplot(2,2,2) plot(q,abs(y)) title('FFT N=50'),,49,,%计算N=55的FFT并绘出其幅频曲线 N=55;n=0:N-1;t=0.01*n; q=n*2*pi/N; x=2*sin(4*pi*t)+5*cos(8*pi*t); y=fft(x,N); figure(1) subplot(2,2,3) plot(q,abs(y)) title('FFT N=55'),,50,,%计算N=60的FFT并绘出其幅频曲线 N=60;n=0:N-1;t=0.01*n; q=n*2*pi/N; x=2*sin(4*pi*t)+5*cos(8*pi*t); y=fft(x,N); figure(1) subplot(2,2,4) plot(q,abs(y)) title('FFT N=60'),,51,例5.1程序运行结果,从图中可以看出,这几种情况下均有较好的精度。,,52,例5.1程序运行结果分析,分析:由t=0.01n进行取样可得,采样频率fs=100Hz。而连续信号的最高模拟角频率为Ω=8 π ,由Ω=2 πf可得,最高频率为8 π /2 π=4Hz。因此,满足采样定理的要求。 采样序列为,即,为周期序列,周期N=50。,将程序中plot改为stem函数,则可以更清楚地看出频谱。,,53,例5.1修改程序运行结果,,

展开阅读全文

快速傅里叶变换蝶式运算 matlab,FFT快速傅里叶变换(蝶形算法)详解.ppt相关推荐

  1. 粒子群(pso)算法详解matlab代码,粒子群(pso)算法详解matlab代码

    粒子群(pso)算法详解matlab代码 (1)---- 一.粒子群算法的历史 粒子群算法源于复杂适应系统(Complex Adaptive System,CAS).CAS理论于1994年正式提出,C ...

  2. 一篇文章带你快速理解JVM运行时数据区 、程序计数器详解 (手画详图)值得收藏!!!

    受多种情况的影响,又开始看JVM 方面的知识. 1.Java 实在过于内卷,没法不往深了学. 2.面试题问的多,被迫学习. 3.纯粹的好奇. 很喜欢一句话:"八小时内谋生活,八小时外谋发展. ...

  3. 基于深度神经网络的图像分类与训练系统(MATLAB GUI版,代码+图文详解)

    摘要:本博客详细介绍了基于深度神经网络的图像分类与训练系统的MATLAB实现代码,包括GUI界面和数据集,可选择模型进行图片分类,支持一键训练神经网络.首先介绍了基于GoogleNet.ResNet进 ...

  4. matlab对图像操作函数的详解(笔记1)

    matlab对图像操作函数的详解 一. 读写图像文件 1. imread imread函数用于读入各种图像文件,如:a=imread('e:\w01.tif') 注:计算机E盘上要有w01相应的.ti ...

  5. Matlab人脸检测算法详解

    这是一个Matlab人脸检测算法详解 前言 人脸检测结果 算法详解 源代码解析 所调用函数解析 bwlabel(BW,n) regionprops rectangle 总结 前言 目前主流的人脸检测与 ...

  6. MATLAB调用refprop计算物性参数详解

    MATLAB调用refprop计算物性参数详解 欢迎使用Markdown编辑器 欢迎使用Markdown编辑器 REFPROP(REference Fluid PROPerties)是一款国际权威工质 ...

  7. matlab车牌匹配时读取,基于Matlab的车牌识别(完整版)详解.doc

    基于Matlab的车牌识别(完整版)详解.doc 基于Matlab的车牌识别 摘要:车牌识别技术是智能交通系统的重要组成部分,在近年来得到了很大的发展.本文从预处理.边缘检测.车牌定位.字符分割.字符 ...

  8. 一文教你理解傅里叶变换及MATLAB在求傅里叶变换中的应用

    大纲 从积分变换谈起 积分变换的基本概念 积分变换的来源 傅里叶级数 傅里叶级数的相关基础概念 傅里叶级数的基石--三角函数系及其正交性 三角函数系 三角函数系的正交性 傅里叶级数的含义 傅里叶系数的 ...

  9. JAVA框架——struts(一)struts快速入门,struts访问流程,struts配置文件详解,动态方法调用

    一. Struts2框架概述 是一种基于MVC模式的轻量级web框架.本质是一个Servlet.作为控制器建立模型与视图的数据交互.Struts2以WebWord为核心,采用拦截器的机制处理客户的请求 ...

  10. 车牌识别与计算机编程,基于MATLAB的车牌识别程序详解.ppt

    基于MATLAB的车牌识别程序详解 自定义一个字符函数,用来从车牌区域中提取出7个字符,其中利用切割函数来进行切割. 程序:function [word,result]=getword(d) word ...

最新文章

  1. .Net2.0 使用ConfigurationManager读写配置文件
  2. 用python让excel飞起来 pdf_老外用100个巨型吹风机, 想要靠它们飞起来, 你猜结果怎样...
  3. 通过APNIC获取各运营商IP网段
  4. HTML技巧100例(三)
  5. Android视频开发基础(二)
  6. Error: failed to unmarshal json. invalid character '\'' looking for beginning of value解决方案
  7. “引才入湘”大行动正式启动,CSDN携手万兴科技助力长沙打造人才品牌
  8. python必备基础代码-Python基础练习之用户登录实现代码分享
  9. 使用RDP报表工具实现交叉报表
  10. 11种服务器编程语言对比(附游戏服务器框架) 2020.06
  11. 爬虫---批量下载美女图片
  12. python脚本打包成exe+配置文件
  13. requests模块练习1
  14. 荧光标记毛细管电泳应用---InDel标记筛选与验证
  15. 和华明诚:提高店铺关注的操作方法
  16. 码农翻身 各章节链接
  17. Hydro李天放:为了区块链我曾拒绝了李开复
  18. for循环的一个小面试题(请问循环要循环几次?)
  19. Android修改默认屏幕亮度
  20. 开发必备神器,你值得拥有!

热门文章

  1. origin 2018安装教程与安装包
  2. 3d建模渲染效果图步骤
  3. 3dsMax批量设置可编辑样条线的视口渲染
  4. 69. Sqrt(x)
  5. 单位个人计算机 数据备份,个人所得税软件数据备份,您必须知道的5件事
  6. c语言孪生素数问题_c语言 孪生素数
  7. 英格索兰扳手网口通信协议EOR原理
  8. 【字体分享】来一波免费的漂亮英文手写体(上)
  9. 如何将网页保存保存为PDF格式?或者打印网页
  10. Matlab注释多行和取消多行注释的快捷键