我是靠谱客的博主 还单身御姐,这篇文章主要介绍python 之FFT,现在分享给大家,希望可以做个参考。

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

方法1:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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

最后

以上就是还单身御姐最近收集整理的关于python 之FFT的全部内容,更多相关python内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(67)

评论列表共有 0 条评论

立即
投稿
返回
顶部