gpt4 book ai didi

python - 使用 NumPy FFT 计算非整数频率

转载 作者:行者123 更新时间:2023-12-01 01:42:58 24 4
gpt4 key购买 nike

我想使用 NumPy FFT 计算周期性时间序列的频率。例如,假设我的时间序列 y 定义如下:

import numpy as np
freq = 12.3
x = np.arange(10000)
y = np.cos(x * 2 * np.pi * freq / 10000)

如果频率是整数,我可以使用 np.argmax(np.abs(np.fft.fft(y))) 来计算它。但是,如果频率不是整数,如何更精确地计算频率呢?

编辑:澄清一下,我们不应该知道时间序列 y 是如何生成的。上面的代码片段只是一个非整数频率如何出现的人为示例。显然,如果我们已经知道生成时间序列的函数,则不需要 FFT 来确定频率。

最佳答案

您需要为信号提供更高的分辨率

import numpy as np
freq = 12.3
x = np.arange(100000) # 10 times more resolution
y = np.cos(x * 2 * np.pi * freq / 10000) # don't change this

print(np.argmax(np.abs(np.fft.fft(y))) / 10) # divide by 10
# 12.3

x 中的数据点数量需要比除 y 的数量多 10 倍。你可以获得同样的效果,如下所示:

x = np.arange(10000)
y = np.cos(x * 2 * np.pi * freq / 1000)

print(np.argmax(np.abs(np.fft.fft(y))) / 10)
# 12.3

如果你想找到两位小数的频率,分辨率需要提高 100 倍。

freq = 12.34
x = np.arange(10000)
y = np.cos(x * 2 * np.pi * freq / 100) # 100 times more resolution

print(np.argmax(np.abs(np.fft.fft(y))) / 100) # divide by 100
# 12.34

关于python - 使用 NumPy FFT 计算非整数频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51690823/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com