python - 如何使用 scipy FFT 限制频率范围
问题描述
我正在使用 FFT 找到信号的频率。我只对 1 到 4 Hz 之间的特定频率范围感兴趣。
我有这个代码来计算频率:
from scipy.fft import rfft, rfftfreq, irfft
plt.plot(d)
plt.show()
N = len(d)
yf = rfft(d)
xf = rfftfreq(N, 1 / sample_rate) # 29
plt.plot(xf, np.abs(yf))
plt.show()
结果是:
如何修改我的代码,以便xf
仅yf
对应于我想要的 1-4 Hz 范围内的频率,而不是图中看到的 0-15?
解决方案
您可以使用xlim
的功能matplotlib
来修改x axis
.
这是您可以参考的示例代码。
from scipy.fft import fft, fftfreq
import numpy as np
# Number of sample points
N = 600
# sample spacing
T = 1.0 / 800.0
x = np.linspace(0.0, N*T, N, endpoint=False)
y = np.sin(50.0 * 2.0*np.pi*x) + 0.5*np.sin(80.0 * 2.0*np.pi*x)
yf = fft(y)
xf = fftfreq(N, T)[:N//2]
import matplotlib.pyplot as plt
plt.plot(xf, 2.0/N * np.abs(yf[0:N//2]),'b')
plt.plot()
plt.grid()
plt.show()
plt.plot(xf, 2.0/N * np.abs(yf[0:N//2]),'b')
plt.xlim(0,100) # you need this
plt.grid()
plt.show()
推荐阅读
- python - 在 MongoDB 中搜索文档时如何使用两个字段的总和?
- java - 我收到一个错误,运算符 + 未定义参数类型 int[] int
- angular - 与依赖于 API 数据的 DOM 操作相关的问题
- javascript - 如何在 contenteditable div 中用 span 包围用户输入?
- snowflake-cloud-data-platform - 使用自动摄取 Snowpipes 时,是否有消除重复记录的最佳做法?
- python - 使用 google colab 同时更改代码中的相同单词
- java - 使用 JSOUP 登录 Github
- node-red - 节点红色仪表板未使用模板自动更新
- c# - 将 Visual Studio 2019 从 16.9.7 更新到 16.10.2 后出现 .NET UWP XamlParseException 错误
- reinforcement-learning - 使用 RLlib 时,如何防止我在评估运行期间收到的奖励总和间隔重复?