当前位置: 首页 > news >正文

快速傅里叶变换简介及python实现

快速傅里叶变换简介及python实现

  • 一、傅里叶变换简介
    • 1.1傅里叶级数(Fourier Serie)
    • 1.2傅里叶变换(Fourier Transform,FT)
    • 1.3快速傅里叶变换(Fast Fourier Transform,FFT)
  • 二、快速傅里叶变换python实现
    • 2.1关键说明
    • 2.2代码实现
    • 2.3代码说明

一、傅里叶变换简介

1.1傅里叶级数(Fourier Serie)

在数学和信号分析处理等多个领域中,法国数学家傅里叶提出的傅里叶级数和变换理论被广泛使用,该理论的核心思想可概括为:在一定条件下,任何一个复杂函数可以表示为不同频率的正弦函数之和,如下图所示,图中最底部的函数是上面4个函数之和:
在这里插入图片描述

不同频率的正弦函数之和就是傅里叶级数,公式如下:
在这里插入图片描述
在这里插入图片描述
f(t)是连续变量t的函数,Cn是系数。

1.2傅里叶变换(Fourier Transform,FT)

傅里叶变换可分为连续傅里叶变换和离散傅里叶变换,分别针对的分析对象是连续信号或离散信号
连续傅里叶变换(Continuous Fourier Transform,CFT)主要用于分析真实世界的连续信号,正变换和反变换公式如下:
在这里插入图片描述
在这里插入图片描述
f(t)是连续变量t的连续函数,F(u)是傅里叶变换函数。

离散傅里叶变换(Discrete Fourier Transform,DFT)主要用于处理对真实世界取样得到的离散信号,例如一维振动信号,二维数字图像。正变换和反变换公式如下:
在这里插入图片描述
在这里插入图片描述
在现实信号分析处理中,主要使用的是离散傅里叶变换,而为了提高计算效率,在离散傅里叶变换的基础上提出了快速傅里叶变换。

1.3快速傅里叶变换(Fast Fourier Transform,FFT)

快速傅里叶变换是计算离散傅里叶变换的快速算法,基本思想是利用DFT复指数的对称性和周期性等特性,将长序列分解为短序列的DFT实现整个序列的DFT,比较常用的基2FFT算法,可将算法复杂度降至DFT的对数级别

基2FFT算法可分为按时间抽取和按频率抽取,按时间抽取可使用蝶形结构的流程图表示,如下图:
在这里插入图片描述
上图是将原始序列按照奇偶进行分解,分解成两组,而这两组又可以分别继续进行分解,最终实现对数级算法复杂度。
计算公式如下:
在这里插入图片描述

二、快速傅里叶变换python实现

2.1关键说明

本节使用python编写一个完整的按时间抽取的基2FFT算法,而与python中现成的FFT函数包区别如下:

  1. 代码在执行效率上不如现成的函数包;
  2. 要求输入序列长度为2的指数次幂,否则会输出错误结果,而现有的FFT函数包如numpy的FFT函数可接受任意长度的序列;
  3. 本节代码的主要用途是帮助更好地理解算法原理

2.2代码实现

def FastFourierTransform_1D(origin_seq):def butterfly(tmp_seq):tmp_len = len(tmp_seq)half_len = tmp_len // 2x1 = tmp_seq[0:half_len]x2 = tmp_seq[half_len:tmp_len]new_data_seq = np.arange(tmp_len, dtype = complex)for k in range(half_len):weight = np.exp(-2j * np.pi * k / tmp_len)new_data_seq[k] = x1[k] + weight * x2[k]new_data_seq[half_len + k] = x1[k] - weight * x2[k]return new_data_seqseq_len = len(origin_seq)if seq_len == 1:return origin_seqseq_even = FastFourierTransform_1D(origin_seq[0::2])seq_odd = FastFourierTransform_1D(origin_seq[1::2])fft_seq = butterfly(np.concatenate((seq_even, seq_odd)))return fft_seq

2.3代码说明

代码主体是一个一维FFT变换函数FastFourierTransform_1D,接收输入的变量origin_seq应为一维numpy数组,返回输出的是FFT变换后的序列。

  1. 代码主体使用递归形式,调用自身,对序列进行奇偶分解;
  2. 奇偶序列分解计算FFT之后,通过子函数butterfly计算出原始序列的FFT;
  3. butterfly函数内部按照1.3小节公式进行计算,计算过程使用复数计算。
http://www.dtcms.com/a/428357.html

相关文章:

  • 网站的实现怎么写重庆网站seo方法
  • 公司建设网站费用会计分录哈尔滨建筑工程招聘信息
  • 猫眼网站建设适合小县城开的加盟店
  • 网站开发 系统需求文档个性化定制网站
  • IDEA+SpringBoot实现远程DEBUG到本机
  • 网站建设与维护 目录开发公司前期手续流程
  • 物品奖励系统介绍
  • 广州站西手表公司彩页设计制作
  • sat4j中参数作用
  • 网站建设课程有哪些收获西安注册公司虚拟地址
  • 哪家做网站性价比高朋友圈自己做的网站
  • 建设网站需要掌握什么编程语言川菜餐馆网站建设模板美食餐厅企业建站php源码程序
  • 网上商城公司网站建设方案被网上教开网店的骗了怎么办
  • 网站域名无法访问国外建站工具
  • SurfaceFlinger BufferQueue(三) DequeueBuffer
  • AI智能体(Agent)大模型入门【4】--下载训练好的大模型部署到本地上
  • 网站tkd怎么做学做烘培的网站
  • 肇庆网站制作费用wordpress 开源主题
  • 【开题答辩全过程】以 NBA球星管理系统为例,包含答辩的问题和答案
  • asp.net中文官方网站江门市网站建设公司
  • 网站开发费用报价单硬件开发学什么专业
  • 网站外链怎么购买建设网站基本步骤
  • 临沧网站建设公司佛山网站建设公司价格
  • 惠海 48V 60V 80V 降 3.3V 5V 9V 12V电动车/摩托车整车芯片解决方案(下)
  • 做网站用小动画网络公司 建站 官方网站
  • 储卡器底部塑料壳外部细节建模实战分享|附完整视频教程
  • android源码下载网站宁波seo关键词费用
  • 福州做网站哪家最好不利于优化网站的因素
  • 矩阵运算:深度学习的数学基石与手工实现解析
  • 自己做的网站网站搜索潍坊程序设计网站建设公司