python 之FFT

 获取信号的频域信息,FFT是可行性方案,本文有两种求FFT 的方法,个人觉得第一种方法比较好,简单一点。第二种方法比较复杂。

方法1:

from scipy.fftpack import fft
import matplotlib.pyplot as plt
import numpy as np
# Number of sample points
N =600
# sample spacing
fs=800
T = 1.0 / 800.0
x = np.linspace(0.0, N*T, N)# (0.0   ,采样点*周期数   ,   采样点)
y = np.sin(50.0 *x) + 0.5*np.sin(80.0 * 2.0*np.pi*x)
yf = fft(y)
print("yf:",yf)
xf = np.linspace(0.0, 1.0/(2.0*T), N//2)#  目的是获取频率  print("N//2",N//2) 保证是整数,频谱图的频率一般是不会高于采样率的。 
#plt.plot(xf, 2.0/N * np.abs(yf[0:N//2]))
plt.plot(xf, np.abs(yf[0:N//2])*2.0/N)#   因为幅值有正负, 所以有abs
plt.grid()
plt.show()



方法2:

from scipy.fftpack import fft
import matplotlib.pyplot as plt
import numpy as np

import pylab as pl

sampling_rate = 8000
fft_size = 512
t = np.arange(0, 1.0, 1.0/sampling_rate)
x = np.sin(2*np.pi*156.25*t)  + 2*np.sin(2*np.pi*234.375*t)
xs = x[:fft_size]
xf = np.fft.rfft(xs)/fft_size
freqs = np.linspace(0, sampling_rate/2, fft_size/2+1)
xfp = 20*np.log10(np.clip(np.abs(xf), 1e-20, 1e100))
pl.figure(figsize=(8,4))
pl.subplot(211)
pl.plot(t[:fft_size], xs)
pl.xlabel(u"时间(秒)")
pl.title(u"156.25Hz和234.375Hz的波形和频谱")
pl.subplot(212)
pl.plot(freqs, xfp)
pl.xlabel(u"频率(Hz)")
pl.subplots_adjust(hspace=0.4)
pl.show()

 转载:https://docs.huihoo.com/scipy/scipy-zh-cn/frequency_process.html

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值