位置: IT常识 - 正文

使用python进行傅里叶FFT 频谱分析(python进行傅立叶变换)

编辑:rootadmin
使用python进行傅里叶FFT 频谱分析 目录 一、一些关键概念的引入 1.1.离散傅里叶变换(DFT) 1.2快速傅里叶变换(FFT) 1.3.采样频率以及采样定率1.4.如何理解采样定理 二、使用scipy包实现快速傅里叶变换 2.1.产生原始信号——原始信号是三个正弦波的叠加2.2.快速傅里叶变换2.3.FFT的原始频谱2.4.将振幅谱进行归一化和取半处理三、完整代码

推荐整理分享使用python进行傅里叶FFT 频谱分析(python进行傅立叶变换),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:python进行快速傅里叶变换,f'python,pythonfor怎么用,python fuzzywuzzy,python进行傅立叶变换,python 快速傅里叶,python fuzzing,python fuzz,内容如对您有帮助,希望把文章链接给更多的朋友!

一、一些关键概念的引入

1.1、离散傅里叶变换(DFT)

    离散傅里叶变换(discrete Fourier transform) 傅里叶分析方法是信号分析的最基本方法,傅里叶变换是傅里叶分析的核心,经过它把信号从时间域变换到频率域,进而研究信号的频谱结构和变化规律。可是它的致命缺点是:计算量太大,时间复杂度过高,当采样点数过高的时候,计算缓慢,由此出现了DFT的快速实现,即下面的快速傅里叶变换FFT。

1.2、快速傅里叶变换(FFT)

       计算量更小的离散傅里叶的一种实现方法。快速傅氏变换(FFT),是离散傅氏变换的快速算法,它是根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的

1.3、采样频率以及采样定理

采样频率,也称为采样速度或者采样率,定义了每秒从连续信号中提取并组成离散信号的采样个数,它用赫兹(Hz)来表示。采样频率的倒数是采样周期或者叫做采样时间,它是采样之间的时间间隔。通俗的讲采样频率是指计算机每秒钟采集多少个信号样本。

采样定理 ,又称香农采样定理,奈奎斯特采样定理,是信息论,特别是通信与信号处理学科中的一个重要基本结论。采样定理指出,若是信号是带限的,而且采样频率高于信号带宽的两倍,那么,原来的连续信号能够从采样样本中彻底重建出来。

定理的具体表述为:在进行模拟/数字信号的转换过程当中,当采样频率fs大于信号中最高频率fmax的2倍时,即  fs>2*fmax

采样以后的数字信号完整地保留了原始信号中的信息,通常实际应用中保证采样频率为信号最高频率的2.56~4倍;

1.4、如何理解采样定理?

      在对连续信号进行离散化的过程当中,不免会损失不少信息,就拿一个简单地正弦波而言,若是我1秒内就选择一个点,很显然,损失的信号太多了,光着一个点我根本不知道这个正弦信号究竟是什么样子的,天然也没有办法根据这一个采样点进行正弦波的还原,很明显,我采样的点越密集,那越接近原来的正弦波原始的样子,天然损失的信息越少,越方便还原正弦波。故而

       采样定理说明采样频率与信号频率之间的关系,是连续信号离散化的基本依据。 它为采样率创建了一个足够的条件,该采样率容许离散采样序列从有限带宽的连续时间信号中捕获全部信息。

二、使用scipy包实现快速傅里叶变换

      本节不会说明FFT的底层实现,只介绍scipy中fft的函数接口以及使用的一些细节。

2.1、产生原始信号——原始信号是三个正弦波的叠加

import numpy as npfrom scipy.fftpack import fft,ifftimport matplotlib.pyplot as pltfrom matplotlib.pylab import mplmpl.rcParams['font.sans-serif'] = ['SimHei'] #显示中文mpl.rcParams['axes.unicode_minus']=False #显示负号#采样点选择1400个,由于设置的信号频率份量最高为600赫兹,根据采样定理知采样频率要大于信号频率2倍,因此这里设置采样频率为1400赫兹(即一秒内有1400个采样点,同样意思的)x=np.linspace(0,1,1400) #设置须要采样的信号,频率份量有200,400和600y=7*np.sin(2*np.pi*200*x) + 4*np.sin(2*np.pi*400*x)+6*np.sin(2*np.pi*600*x)plt.figure()plt.plot(x,y) plt.title('原始波形')plt.figure()plt.plot(x[0:50],y[0:50]) plt.title('原始部分波形(前50组样本)')plt.show()

这里原始信号的三个正弦波的频率分别为,200Hz、400Hz、600Hz,最大频率为600赫兹。根据采样定理,fs至少是600赫兹的2倍,这里选择1400赫兹,即在一秒内选择1400个点。

原始的函数图像以下:

由图可见,因为采样点太过密集,无法查看,切片前100组数据:

二、快速傅里叶变换

其实scipy和numpy同样,实现FFT很是简单,仅仅是一句话而已,函数接口以下:

from scipy.fftpack import fft,ifftfrom numpy import fft,ifft# 其中fft表示快速傅里叶变换,ifft表示其逆变换。具体实现以下:fft_y=fft(y) #快速傅里叶变换print(len(fft_y))print(fft_y[0:5])'''运行结果以下:1400[-4.18864943e-12+0.j 9.66210986e-05-0.04305756j 3.86508070e-04-0.08611996j 8.69732036e-04-0.12919206j 1.54641157e-03-0.17227871j]'''

咱们发现如下几个特色:

使用python进行傅里叶FFT 频谱分析(python进行傅立叶变换)

(1)变换以后的结果数据长度和原始采样信号是同样的

(2)每个变换以后的值是一个复数,为a+bj的形式,那这个复数是什么意思呢?

     复数a+bj在坐标系中表示为(a,b),故而复数具备模和角度,快速傅里叶变换具备

      “振幅谱”,“相位谱”,它其实就是经过对快速傅里叶变换获得的复数结果进一步求出来的,

      那这个直接变换后的结果是否是就是我须要的,固然是须要的,在FFT中,获得的结果是复数,

(3)FFT获得的复数的模(即绝对值)就是对应的“振幅谱”,复数所对应的角度,就是所对应的“相位谱”,如今能够画图了。

三、FFT的原始频谱

N=1400x = np.arange(N) # 频率个数abs_y=np.abs(fft_y) # 取复数的绝对值,即复数的模(双边频谱)angle_y=np.angle(fft_y) #取复数的角度plt.figure()plt.plot(x,abs_y) plt.title('双边振幅谱(未归一化)')plt.figure()plt.plot(x,angle_y) plt.title('双边相位谱(未归一化)')plt.show()

显示结果以下:

 

注意:咱们在此处仅仅考虑“振幅谱”,再也不考虑相位谱。

咱们发现,振幅谱的纵坐标很大,并且具备对称性,这是怎么一回事呢?

关键:关于振幅值很大的解释以及解决办法——归一化和取一半处理

好比有一个信号以下:

Y=A1+A2*cos(2πω2+φ2)+A3*cos(2πω3+φ3)+A4*cos(2πω4+φ4)

通过FFT以后,获得的“振幅图”中,

第一个峰值(频率位置)的模是A1的N倍,N为采样点,本例中为N=1400,此例中没有,由于信号没有常数项A1

第二个峰值(频率位置)的模是A2的N/2倍,N为采样点,

第三个峰值(频率位置)的模是A3的N/2倍,N为采样点,

第四个峰值(频率位置)的模是A4的N/2倍,N为采样点,

依次下去......

考虑到数量级较大,通常进行归一化处理,既然第一个峰值是A1的N倍,那么将每个振幅值都除以N便可

FFT具备对称性,通常只须要用N的一半,前半部分便可。

四、将振幅谱进行归一化和取半处理

先进行归一化

normalization_y=abs_y/N #归一化处理(双边频谱)plt.figure()plt.plot(x,normalization_y,'g')plt.title('双边频谱(归一化)',fontsize=9,color='green')plt.show()

结果为:

如今咱们发现,振幅谱的数量级不大了,变得合理了,接下来进行取半处理:

half_x = x[range(int(N/2))] #取一半区间normalization_half_y = normalization_y[range(int(N/2))] #因为对称性,只取一半区间(单边频谱)plt.figure()plt.plot(half_x,normalization_half_y,'b')plt.title('单边频谱(归一化)',fontsize=9,color='blue')plt.show()这就是咱们最终的结果,须要的“振幅谱”。3、完整代码import numpy as npfrom scipy.fftpack import fft,ifftimport matplotlib.pyplot as pltfrom matplotlib.pylab import mplmpl.rcParams['font.sans-serif'] = ['SimHei'] #显示中文mpl.rcParams['axes.unicode_minus']=False #显示负号#采样点选择1400个,由于设置的信号频率份量最高为600赫兹,根据采样定理知采样频率要大于信号频率2倍,因此这里设置采样频率为1400赫兹(即一秒内有1400个采样点,同样意思的)x=np.linspace(0,1,1400) #设置须要采样的信号,频率份量有200,400和600y=7*np.sin(2*np.pi*200*x) + 5*np.sin(2*np.pi*400*x)+3*np.sin(2*np.pi*600*x)fft_y=fft(y) #快速傅里叶变换N=1400x = np.arange(N) # 频率个数half_x = x[range(int(N/2))] #取一半区间abs_y=np.abs(fft_y) # 取复数的绝对值,即复数的模(双边频谱)angle_y=np.angle(fft_y) #取复数的角度normalization_y=abs_y/N #归一化处理(双边频谱) normalization_half_y = normalization_y[range(int(N/2))] #因为对称性,只取一半区间(单边频谱)plt.subplot(231)plt.plot(x,y) plt.title('原始波形')plt.subplot(232)plt.plot(x,fft_y,'black')plt.title('双边振幅谱(未求振幅绝对值)',fontsize=9,color='black') plt.subplot(233)plt.plot(x,abs_y,'r')plt.title('双边振幅谱(未归一化)',fontsize=9,color='red') plt.subplot(234)plt.plot(x,angle_y,'violet')plt.title('双边相位谱(未归一化)',fontsize=9,color='violet')plt.subplot(235)plt.plot(x,normalization_y,'g')plt.title('双边振幅谱(归一化)',fontsize=9,color='green')plt.subplot(236)plt.plot(half_x,normalization_half_y,'blue')plt.title('单边振幅谱(归一化)',fontsize=9,color='blue')plt.show()

本文链接地址:https://www.jiuchutong.com/zhishi/292403.html 转载请保留说明!

上一篇:皮丘拉湖畔的乌代布尔城市宫殿,印度 (© Chaiyun Damkaew/Getty Images)

下一篇:日落时分正在迁徙的斑纹角马群,肯尼亚马赛马拉野生动物保护区 (© Denis-Huot/Minden Pictures)(日落之前是什么时辰)

  • 畅玩7C怎么截屏(华为荣耀畅玩7怎么截图怎么截)

    畅玩7C怎么截屏(华为荣耀畅玩7怎么截图怎么截)

  • WPS officeV11.1.0.11045版本

    WPS officeV11.1.0.11045版本

  • iphone单手操作怎么关闭(iphone单手模式怎么触发)

    iphone单手操作怎么关闭(iphone单手模式怎么触发)

  • 快手怎么设置心情状态(快手哪里设置)

    快手怎么设置心情状态(快手哪里设置)

  • 抖音如何隐藏发布时间(抖音如何隐藏发消息的ip地址)

    抖音如何隐藏发布时间(抖音如何隐藏发消息的ip地址)

  • 抖音音浪怎么分成(抖音音浪怎么分配)

    抖音音浪怎么分成(抖音音浪怎么分配)

  • 抖音误点了不感兴趣怎么办(抖音误点了不感兴趣)

    抖音误点了不感兴趣怎么办(抖音误点了不感兴趣)

  • 通过蓝牙共享网络是什么意思(通过蓝牙共享网络给汽车)

    通过蓝牙共享网络是什么意思(通过蓝牙共享网络给汽车)

  • 微信长截图怎么截华为(微信长图截屏怎么弄)

    微信长截图怎么截华为(微信长图截屏怎么弄)

  • 荣耀20多长(荣耀20多长多宽)

    荣耀20多长(荣耀20多长多宽)

  • 笔记本电脑部分按键失灵(笔记本电脑部分软件显示模糊)

    笔记本电脑部分按键失灵(笔记本电脑部分软件显示模糊)

  • 淘宝直播间人数数据真实吗(淘宝直播间人数是真的吗)

    淘宝直播间人数数据真实吗(淘宝直播间人数是真的吗)

  • 华为手机很久不用无法启动(华为手机很久不用忘记密码怎么办)

    华为手机很久不用无法启动(华为手机很久不用忘记密码怎么办)

  • 手机钉钉可以共享屏幕吗(手机钉钉可以共享吗)

    手机钉钉可以共享屏幕吗(手机钉钉可以共享吗)

  • 外国人注册微信需要别人辅助吗(外国人注册微信需要实名认证吗)

    外国人注册微信需要别人辅助吗(外国人注册微信需要实名认证吗)

  • 计算器左上角f怎么取消(计算器左上角f什么意思)

    计算器左上角f怎么取消(计算器左上角f什么意思)

  • 手机号不缴费多久注销(手机号不交费会怎么样)

    手机号不缴费多久注销(手机号不交费会怎么样)

  • dps文件在手机里怎么打开(手机怎么把dps文件转化成ppt)

    dps文件在手机里怎么打开(手机怎么把dps文件转化成ppt)

  • ps滤镜在哪里(ps滤镜在哪里找出来)

    ps滤镜在哪里(ps滤镜在哪里找出来)

  • 小米mir3是千兆路由器吗(小米mir3是千兆路由吗)

    小米mir3是千兆路由器吗(小米mir3是千兆路由吗)

  • iphone11pro怎么设置墙纸(iphone11pro怎么设置微信加密)

    iphone11pro怎么设置墙纸(iphone11pro怎么设置微信加密)

  • 京东退货钱会退回微信吗(京东退货钱会退回微信需要多久)

    京东退货钱会退回微信吗(京东退货钱会退回微信需要多久)

  • 小米9pro充电速度(小米9pro充电慢怎么回事)

    小米9pro充电速度(小米9pro充电慢怎么回事)

  • 为什么微信表情变成一排了(为什么微信表情特效不显示)

    为什么微信表情变成一排了(为什么微信表情特效不显示)

  • 怎么看微信使用年龄(怎么看微信使用痕迹)

    怎么看微信使用年龄(怎么看微信使用痕迹)

  • 三星note8有红外线功能吗(三星note8红外线)

    三星note8有红外线功能吗(三星note8红外线)

  • 华为p30设置返回键(华为p30设置返回键怎么设置)

    华为p30设置返回键(华为p30设置返回键怎么设置)

  • 抖音里的字幕是怎么打上去的(抖音里字幕是怎么打的)

    抖音里的字幕是怎么打上去的(抖音里字幕是怎么打的)

  • Mac启动U盘怎么制作 u盘制作mac安装盘教程图文详细介绍(mac 如何u盘启动)

    Mac启动U盘怎么制作 u盘制作mac安装盘教程图文详细介绍(mac 如何u盘启动)

  • 缴纳当月的增值税
  • 全国增值税专用发票计算机稽核网络系统工程
  • 外贸企业出口退税计算公式
  • 农村合作社怎么挣钱
  • 计提工会经费的基数是什么
  • 不动产官网查询
  • 财务报表申报有税额吗
  • 金税盘费服务费记入什么科目
  • 预缴企业所得税怎么做会计分录
  • 经营范围预付卡是什么
  • 租的办公室要交税么
  • 应交税费应交增值税减免税款
  • 出口退税信息系统
  • 所得税费用税率规定
  • 营改增后税金由哪几项费用组成
  • 淘宝的电子发票怎么看
  • 白酒五行属火还是水
  • 税务变更
  • 暂估销售收入怎么做分录
  • 个人到财务挂账怎么做账
  • 水电费发票可以开吗
  • 公司党支部的费用入账
  • 汇兑结算方式可以分为
  • windows7中右键的作用
  • 应付职工薪酬账户结构
  • php写post接口
  • 未办理装修手续
  • linux直接运行jar
  • 融资租赁的租金是什么意思
  • 公司股票 收税
  • 委托加工物资加工费
  • 伊吕波赛道
  • 项目筹建期间费用计入什么科目
  • php网站能实现什么效果
  • 出口退税备案是代理的需要主办会计身份证复印件吗
  • 广告系统源码
  • 天猫一般纳税人如何纳税
  • 什么是劳务派遣制员工
  • 2.MyBatis
  • 材料采购成本是什么科目
  • mysql乱码产生原因
  • mongodb 合并数据库
  • 房地产企业开发成本科目明细
  • 电子发票如何作废,具体怎么操作
  • 城市维护建设税,教育费附加,地方教育费附加
  • sqlserver修改数据库密码
  • 合伙企业年底如何做账
  • 金融企业有
  • 暂估入库的账务处理含税吗
  • 车船税交不交印花税
  • 本期预付的费用属于本期费用吗
  • 加油充值卡能报销吗
  • 酒店客人损坏物品不赔偿怎么报警
  • 红字发票是怎么开的
  • 款项已支付是什么科目?
  • 企业对处于不同位置的产品或服务制定不同的价格
  • 工资的计算方法有几种
  • sqlserver数据库恢复
  • MySQL去除重复数据
  • 永久关闭windows de
  • os x10.11el capitan公测版beta2官方下载地址
  • WinCinemaMgr.exe - WinCinemaMgr是什么进程
  • 装win7ahci
  • 电脑及网络维护
  • rapimgr.exe - rapimgr进程是什么文件.有哪些作用
  • ixapplet.exe - ixapplet是什么进程 有何作用
  • Linux系统怎么设置窗口关闭按键在右侧
  • 如何配置sendmail
  • linux如何修改网关地址
  • linux oracle数据库登录
  • linux管道定义
  • js控制鼠标位置
  • python如何读取字符串的一个一个字符
  • js获取表单元素
  • javascript学习指南
  • javascript的
  • 【Android】利用Notification操作设备的通知栏
  • 增值税税控开票软件升级
  • 记账凭证编制的依据可以用
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设