基于Python的频谱分析(一)

基于Python的频谱分析(一)

1、傅里叶变换
  傅里叶变换是信号领域沟通时域和频域的桥梁,在频域里可以更方便的进行一些分析。傅里叶主要针对的是平稳信号的频率特性分析,简单说就是具有一定周期性的信号,因为傅里叶变换采取的是有限取样的方式,所以对于取样长度和取样对象有着一定的要求。

2、基于Python的频谱分析
  将时域信号通过FFT转换为频域信号之后,将其各个频率分量的幅值绘制成图,可以很直观地观察信号的频谱。
   具体分析见代码注释。

import numpy as np#导入一个数据处理模块
import pylab as pl#导入一个绘图模块,matplotlib下的模块

sampling_rate = 8000#采样频率为8000Hz
fft_size = 512 #FFT处理的取样长度
t = np.arange(0, 1.0, 1.0/sampling_rate)#np.arange(起点,终点,间隔)产生1s长的取样时间
x = np.sin(2*np.pi*156.25*t) + 2*np.sin(2*np.pi*234.375*t)#两个正弦波叠加,156.25HZ和234.375HZ
# N点FFT进行精确频谱分析的要求是N个取样点包含整数个取样对象的波形。因此N点FFT能够完美计算频谱对取样对象的要求是n*Fs/N(n*采样频率/FFT长度),
# 因此对8KHZ和512点而言,完美采样对象的周期最小要求是8000/512=15.625HZ,所以156.25的n为10,234.375的n为15。
xs = x[:fft_size]# 从波形数据中取样fft_size个点进行运算
xf = np.fft.rfft(xs)/fft_size# 利用np.fft.rfft()进行FFT计算,rfft()是为了更方便对实数信号进行变换,由公式可知/fft_size为了正确显示波形能量
# rfft函数的返回值是N/2+1个复数,分别表示从0(Hz)到sampling_rate/2(Hz)的分。
#于是可以通过下面的np.linspace计算出返回值中每个下标对应的真正的频率:
freqs = np.linspace(0, sampling_rate/2, fft_size/2+1)
# np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
#在指定的间隔内返回均匀间隔的数字
xfp = 20*np.log10(np.clip(np.abs(xf), 1e-20, 1e100))
#最后我们计算每个频率分量的幅值,并通过 20*np.log10()将其转换为以db单位的值。为了防止0幅值的成分造成log10无法计算,我们调用np.clip对xf的幅值进行上下限处理

#绘图显示结果
pl.figure(figsize=(8,4))
pl.subplot(211)
pl.plot(t[:fft_size], xs)
pl.xlabel(u"Time(S)")
pl.title(u"156.25Hz and 234.375Hz WaveForm And Freq")
pl.subplot(212)
pl.plot(freqs, xfp)
pl.xlabel(u"Freq(Hz)")
pl.subplots_adjust(hspace=0.4)
pl.show()

 

3、绘图结果显示

<span>基于Python的频谱分析(一)</span>

如果你放大其频谱中的两个峰值的部分的话,可以看到其值分别为:

>>>xfp[10]
-6.0205999132796251
>>>xfp[15]
-9.6432746655328714e-16

 

即156.25Hz的成分为-6dB, 而234.375Hz的成分为0dB,与波形的计算公式中的各个分量的能量(振幅值/2)符合。
———————
作者:赵至柔
来源:CSDN
原文:https://blog.csdn.net/qq_39516859/article/details/79794549
版权声明:本文为博主原创文章,转载请附上博文链接!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119578.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 博科FC光纤交换机替换zone配置导入导出指导

    博科FC光纤交换机替换zone配置导入导出指导一、旧交换机配置导出。1、笔记本搭建ftp服务,可以在百度下载个ftp软件工具使用,保存的文件路径,用户名及密码例如2、老设备在命令界面操作导出命令switch:admin>configuploadProtocol(scporftp)[ftp]:ftpServerNameorIPAddress[host]:192.168.200.xxFileName[confi…

    2022年5月21日
    52
  • 深入理解JVM的垃圾回收机制

    深入理解JVM的垃圾回收机制上一篇博客介绍了Java运行时内存的各个区域。对于程序计数器、虚拟机栈、本地方法栈这三个部分而言,其生命周期与相关线程有关,随线程而生,随线程而灭。并且这三个区域的内存分配与回收具有确定性,因为当方法结束或者线程结束时,内存就自然跟着线程回收了。因此本篇文章所讲的有关内存分配和回收关注的是Java堆与方法区这两个区域。1、如何判断对象已“死”Java堆中存放着几乎所有的对象实例,垃圾回收器…

    2022年4月29日
    39
  • 统计学 入门基础PDF( Probability Density Function) 和PMF ( Probability Mass Function )

    统计学 入门基础PDF( Probability Density Function) 和PMF ( Probability Mass Function )PMF(概率质量函数):是对 离散随机变量的定义. 是离散随机变量 在各个特定取值的概率. 该函数通俗来说,就是对于一个离散型概率事件来说,使用这个函数来求它的各个成功事件结果的概率.PDF(概率密度函数):是对连续性随机变量的定义.与PMF不同的是PDF在特定点上的值并不是该点的概率,连续随机概率事件只能求一段区域内发生事件的概率,通过对这段区间进

    2022年5月23日
    49
  • Socket无限SocketTimeoutException真凶–WLAN助手

    Socket无限SocketTimeoutException真凶–WLAN助手看到标题你可能不知道我说的是什么鬼东西,但是如果你有类似的经历的话,那么恭喜你,也恭喜我自己,终于解决这个问题了。用过小米、华为等手机的都知道,当我们连接上一个不能上网的WIFI时,系统都会友好的给出“此WLAN无法访问互联网,请更换网络/切换为移动数据网络”等类似的提示,今天我就说下本人在这里面遇到的坑。背景:有个Android项目需要连接硬件设备的WIFI,然后通过socket进行通信…

    2022年10月21日
    3
  • Windows API——SHFileOperation——文件操作

    Windows API——SHFileOperation——文件操作1intSHFileOperation(LPSHFILEOPSTRUCTlpFileOp);如果执行成功返回0.1typedefstruct_SHFILEOPSTRUCT{2HWNDhwnd;//指向发送消息的窗口3UINTwFunc;//执行的操作4LPCTSTRpFrom;//源文件名5LPCTSTRpTo;//目标文件

    2022年7月18日
    16
  • restlet入门搭建hello world[通俗易懂]

    restlet入门搭建hello world[通俗易懂]最近研究rest接口,发现restlet应用挺广泛,不过入门资料很少,去官网下载jar包,根据官网说明搭建了一个简单的restlet工程:1、首先导入jar包org.restlet.jarorg

    2022年8月1日
    17

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号