Python_FFT

简单记录一下,免得到时候又去四处找代码。

这部分代码是我朋友写的,在这推荐一下他的博客:

叮叮当当sunny

很强的一位小伙伴,感兴趣的朋友可以看看。

上代码:

import numpy as np
from scipy.fftpack import fft
def FFT(data,Fs):
    n=len(data)
    if n%2!=0:
        n-=1
        # data=data[range(0,n)]  #由于要进行取半处理,所以将n与2取余
        data.pop()
    Y=fft(data)    #快速傅里叶变换
    Fre=np.linspace(0,n-1,n)*Fs/n  #linspace(start,stop,number)
    Fre=Fre[range(0,int(n/2))]
    Amp=np.abs(Y[range(0,int(n/2))])
    Amp=Amp/(n/2)
    Amp[0]=Amp[0]/2
    Amp[-1]=Amp[-1]/2  
    return Fre, Amp

代码注释比较少哈,我加点文字解释说明一下:

第一个参数就是傅里叶分析的波形函数采样的值,第二个参数是单位时间采样点数,是指一秒钟的时间采几个点的数据。

举例说明:

两个周期我给了100个点,所以一个周期就是50个点,假定一个周期有10秒,那么10秒对应的是50个点,1秒就是5个点,一个周期10秒,基频就是0.1,所以如果只分析谐波的话,就是0.3,0.5,0.7之类的。这样对应的基波、三次谐波、五次谐波就都能出来了。

把例子及绘图的代码一并附上:

func1=func[:76]   #取两个周期的点
F,A=FFT(func1,38)
plt.bar(F,A,width=0.4)
x=range(0,15,1)
plt.xlim(0,15)
plt.xticks(x)
plt.xlabel('Harmonic order')
plt.ylabel('Amplitude')

 分解出的结果就长上面的样子。

最后再多说几句,由于FFT的处理需要用到波形的所有数据,故进行处理时,如果原数据存在nan等异常数据时,FFT是出不了结果的,注意对原始数据的清洗。

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值