快速傅里叶算法(FFT)快在哪里?

news2024/9/24 10:17:18

目录

前言

1、DFT算法 

2、FFT算法

2.1 分类

 2.2 以基2 DIT(时间抽取) FFT 算法为例

2.2.1 一次分解 

2.2.2 多次分解

 参考


前言

  对信号分析的过程中,为了能换一个角度观察问题,很多时候需要把时域信号波形变换到频域进行分析,这涉及到对信号求傅里叶变换,在计算机中便于处理的是离散信号,因此需要求信号的离散傅里叶变换,但是离散傅里叶变换(DFT--Discrete Fourier transform)的算法时间复杂度O(n2),为了能提高计算的速度,很多时候我们进行的变换为快速傅里叶变换(FFT--Fast Fourier Transform),其算法时间复杂度O(nlogn),大大提高了计算的速度,那么该快速傅里叶变换算法的快在哪里?中间进行了什么操作,我们下面具体分析。

在之前的一篇文章中我们提到了DFT和FFT的关系

频谱、功率谱、倒频谱_heda3的博客-CSDN博客_倒频谱

1、DFT算法 

DFT的数学计算表达式为:

长度为N的离散时间信号x(n),做N点离散傅里叶变换如下:

  X(k)=\sum_{n=0}^{N-1}x(n)e^{-j\frac{2\pi}{N}kn}=\sum_{n=0}^{N-1}x(n)W_{N}^{kn}

其中k=0,1,2,...N-1

其中W_{N}=e^{-j2\frac{ \pi }{N}}

运算量表述为:

依据上述公式可知,做1点DFT,需要N次复数乘法、N-1次复数加法

做N点DFT,则需要N*N次复数乘法、N*(N-1)次复数加法

当N为256点时,所需运算量65536次复数乘法、65280次复数加法

N=512点时,所需运算量262144次复数乘法、261632次复数加法

N=1024点时,所需运算量1048576次复数乘法、1047552次复数加法

可见当N点从256到1024点变化时,DFT算法的计算量从万级到百万级。

2、FFT算法

2.1 分类

分为按照时间抽取(在时间上将信号长度逐步减少)和按照频率抽取

依据抽取长度分为基2、基4

基2 DIT(时间抽取) FFT  也称为Cooley-Tukey algorithm 库利图基算法

基2 DIF(频率抽取) FFT

基4 FFT

分裂基FFT(包含两种不同基的混合计算)

 2.2 以基2 DIT(时间抽取) FFT 算法为例

基于基2时间抽取将信号划分为两部分分别计算FFT(信号长度N要求为N=2的整数倍):

X(k)=\sum_{n=0}^{N-1}x(n)W_{N}^{kn}=\sum_{n=0}^{N/2-1}x(2n)W_{N}^{k2n}+\sum_{n=0}^{N/2-1}x(2n+1)W_{N}^{k(2n+1)}                          1)

其中k=0,1,2,...N-1

复数运算的特性

W_{N}^{kn}=e^{-j2\frac{ \pi }{N}kn}

对称性: 

 W_{N}^{nk}=W_{N}^{-nk}=W_{N}^{(N-n)k}

周期性:

 W_{N}^{nk}=W_{N}^{(n+N)k}

可约性:

 W_{N}^{nk}=W_{mN}^{mnk} =W_{N/m}^{nk/m}

常见的计算 

W_{N}^{0}=1

W_{N}^{N/2}=-1

W_{N}^{N/4}=-j

2.2.1 一次分解 

依据上述复数运算的特性的可约性,则1)化简为:

X(k)=\sum_{n=0}^{N-1}x(n)W_{N}^{kn}=\sum_{n=0}^{N/2-1}x(2n)W_{N/2}^{kn}+W_{N}^{k}\sum_{n=0}^{N/2-1}x(2n+1)W_{N/2}^{kn}     2)

             X(k)=\sum_{n=0}^{N-1}x(n)W_{N}^{kn}=X_{0}(k)+W_{N}^{k}X_{1}(k)                                                  3)

              其中k=0,1,2,...N-1

利用特性:

W_{N}^{k+N/2}=W_{N}^{N/2}W_{N}^{k}=-W_{N}^{k}

则3)可表述为:

                            X(k)=X_{0}(k)+W_{N}^{k}X_{1}(k)                                                 4)

X(k+N/2)=X_{0}(k)-W_{N}^{k}X_{1}(k)                    

                               其中k=0,1,2,...N/2-1 

用如下的蝶形方式表述为3式和4式:

 两次复数运算:

 一次复数运算:

也即是N点DFT包含:2个 N/2点DFT和N/2个蝶形运算,一个蝶形运算包含一次复数乘法和两次复数加法

上述:做N点DFT,则需要N*N次复数乘法、N*(N-1)次复数加法

则2个N/2点DFT,则需要2*(N/2*N/2)=N^{^{2}}/2次复数乘法,2*(N/2)*(N/2-1)=N(N/2-1)次复数加法运算;蝶形运算次数:N/2次复数乘法,N次复数加法。

因此总的复数乘法计算:N(N+1)/2    总的复数加法次数:N^{^{2}}/2

通过上述的一次分解前后的运算量分析,可见经过一次分解后(信号按照奇偶数将N点DFT划分为N/2点DFT,并将两个N/2点DFT组合的方式),其运算量降低了一半,计算效率得到了提升。

2.2.2 多次分解

当N一直分解下去直到DFT的点数为2时,最小的计算单元为一个基本的蝶形运算,因此由于信号长度最初定义为N=2的整数倍,也即是N=2^{^{M}},因此N点DFT运算可以分解为M级蝶形运算,每一级为N/2个蝶形运算。

通过上述的FFT计算方法,则N点FFT运算需要M*N/2个蝶形运算,复数乘法次数:

N/2*M=N/2*log_{2}^{N}

复数加法次数:

   N/2*2*M=N*log_{2}^{N}

 

当N点从256到1024点变化时,FFT算法的计算量从千级到万级。可见FFT运算速度较DFT得到较大的提升。

    现在我们可以明显知道FFT到底快在哪里,因为经过对信号的逐级分解,将大点DFT划分为小点DFT计算,也即是N点FFT若基于基2抽取方法,则需要log_{2}^{N}级分解,N点DFT最终划分为2点DFT计算,并结合指数运算的特性,减少冗余计算,使得运算量大为减小。

 参考

【1】《数字信号处理》

【2】如何利用FFT(基2时间以及基2频率)信号流图求序列的DFT

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/340802.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

有什么免费好用的全球天气api?

简单介绍几个,选你觉得合适的就行。(下面推荐的国内外的都有,访问速度会有些差别) 高德天气 API -天气查询-API文档-开发指南-Web服务 API | 高德地图API知心天气 API -HyperData 数据产品简介 心知天气和风天气 API -和风天气开…

AI_News周刊:第一期

2023.02.06—2023.02.12 关于ChatGPT的前言: 在去年年末,OpenAI的ChatGPT在技术圈已经火了一次,随着上周它的二次出圈,ChatGPT算得上是人工智能领域的一颗明星,它在聊天机器人领域有着不可忽视的影响力。其准确、快速…

webpack.config.js哪里找?react项目关闭eslint监测

目录 webpack.config.js哪里找? react项目关闭eslint监测 webpack.config.js哪里找? 在React项目中,当我们需要修改一些配置时,发现找不到webpack.config.js,是我们创建的项目有问题吗,还需新创建项目的项…

【html】模仿C站动态发红包界面,css+div+js实现布局和交互(适合入门)

最近有些小伙伴咨询博主说前端布局好难,其实都是熟能生巧! 模仿C站动态发红包界面,cssdiv实现布局,纯javascript实现交互效果 目录 1、界面效果 2、界面分析 2.1、整体结构 2.2、标题 2.3、表单 2.4、按钮 3、代码实现 3.…

【Kafka】【七】主题和分区的概念

主题和分区的概念 主题Topic 主题-topic在kafka中是⼀个逻辑的概念,kafka通过topic将消息进⾏分类。不同的topic会被订阅该topic的消费者消费。 但是有⼀个问题,如果说这个topic中的消息⾮常⾮常多,多到需要⼏T来存,因为消息是…

Spring Security in Action 第十二章 OAuth 2是如何工作的?

本专栏将从基础开始,循序渐进,以实战为线索,逐步深入SpringSecurity相关知识相关知识,打造完整的SpringSecurity学习步骤,提升工程化编码能力和思维能力,写出高质量代码。希望大家都能够从中有所收获&#…

实战打靶集锦-005-HL

**写在前面:**记录一次曲折的打靶经历。 目录1. 主机发现2. 端口扫描3. 服务枚举4. 服务探查4.1 浏览器访问4.2 目录枚举4.3 探查admin4.4 探查index4.5 探查login5 公共EXP搜索6. 再次目录枚举6.1 探查superadmin.php6.2 查看页面源代码6.3 base64绕过6.4 构建反弹…

JointBERT代码复现详解【下】

BERT for Joint Intent Classification and Slot Filling代码复现【下】 链接直达:JointBERT代码复现详解【上】 四、模型训练与评估 Trainer training:梯度更新evaluate:评估序列标注任务如何得到预测结果、评估函数 1.初始化准备 def …

【Unity3D】Shader常量、变量、结构体、函数

1 源码路径 Unity Shader 常量、变量、结构体、函数一般可以在 Unity Editor 安装目录下面的【Editor\Data\CGIncludes\UnityShader】目录下查看源码,主要源码文件如下: UnityCG.cgincUnityShaderUtilities.cgincUnityShaderVariables.cginc 2 Shader 常…

大数据技术架构(组件)33——Spark:Spark SQL--Join Type

2.2.2、Join Type2.2.2.1、Broadcast Hash Join (Not Shuffled)就是常说的MapJoin,join操作在map端进行的。场景:join的其中一张表要很小,可以放到Driver或者Executor端的内存中。原理:1、将小表的数据广播到所有的Executor端,利用collect算子…

微信小程序 数据绑定 Mustache语法怎么使用?

1.数据绑定的基本原则 ①在data中定义数据 ②在WXML中使用数据、 在页面对应的 .js 文件中。把数据定义到data对象中即可 在WXML文件中使用{{}}两个花括号加变量名称进行调用 以上使用方法,下面我么来实操 Mustache语法主要使用场景如下: 文本内容绑定 组件属性绑定…

Service

目录 文章目录目录本节实战1、Service1.Service概念2.Service存在的意义3.Pod与Service的关系2、三种IP3、定义 Service4、kube-proxy1.iptables2.ipvsiptables vs ipvs5、Service常见类型1.ClusterIP2.NodePort3.LoadBalancer4.ExternalName5.externalIPs6、Endpoints 与 Endp…

Java基础常见面试题(三)

String 字符型常量和字符串常量的区别? 形式上: 字符常量是单引号引起的一个字符,字符串常量是双引号引起的若干个字符; 含义上: 字符常量相当于一个整型值( ASCII 值),可以参加表达式运算;字符串常量代表一个地址值…

STC15读取内部ID示例程序

STC15读取内部ID示例程序🎉本案例基于STC15F2K60S2为验证对象。 📑STC15 ID序列介绍 STC15系列STC最新一代STC15系列单片机出厂时都具有全球唯一身份证号码(ID号)。最新STC15系列单片机的程序存储器的最后7个字节单元的值是全球唯一ID号,用…

使用阿里云IoT Studio建立物模型可视化界面

使用阿里云IoT Studio建立物模型可视化界面 上一篇文章介绍了如何使用ESP-01S上报数据到物模型:https://blog.csdn.net/weixin_46251230/article/details/128996719 这次使用阿里云IoT Studio建立物模型的Web页面 阿里云IoT Studio: https://studio.i…

02 图像通道处理

1 通道提取与合并 在数字图像处理中,图像通道是指一个图像中的颜色信息被分离为不同的颜色分量。常见的图像通道包括RGB通道、灰度通道、HSV通道等。 RGB通道是指将图像分离为红色、绿色和蓝色三个颜色通道,每个通道表示相应颜色的亮度。这种方式是最常…

RuntimeError: CUDA out of memory

今天在训练模型的时候突然报了显存不够的问题,然后分析了一下,找到了解决的办法,这里记录一下,方便以后查阅。 注:以下的解决方案是在模型测试而不是模型训练时出现这个报错的! RuntimeError: CUDA out of…

基于JavaEE的智能化跨境电子商务平台的设计

技术:Java、JSP、框架等摘要:伴随着近年来互联网的迅猛发展,网上零售逐渐成为了一种影响广泛、方便快捷的购物渠道。我国网上零售业发展的步伐很快。在如今经济全球化的影响下,消费者的网购行为趋于开放化、多元化,对于…

设计模式-中介者模式详解

定义 中介模式的英文翻译是 Mediator Design Pattern。在 GoF 中的《设计模式》一书中,它是这样定义的: Mediator pattern defines a separate (mediator) object that encapsulates the interaction between a set of objects and the objects delega…

chatGPT都可以干什么呢?来一睹风采吧

文章目录1. 写代码2. 写文案3. 写剧本4. 写歌诗5. 写报告6. 查公式7. 写对联8. 写文章9. 做表格10. 做计划11. 等等1. 写代码 2. 写文案 3. 写剧本 4. 写歌诗 5. 写报告 这妥妥的翻译文,数据完全不对。 6. 查公式 傅里叶变换的时域性质有如下几点: 对…