gpt4 book ai didi

python - 如何从时间序列中去除频率成分?

转载 作者:行者123 更新时间:2023-11-28 19:09:44 27 4
gpt4 key购买 nike

我有下面的时间序列

enter image description here

我想检查周期以便删除它们(作为时间序列通常预处理的一部分),所以我应用 FFT。

# Number of samplepoints
N = len(y)
# sample spacing
T = 1.0 # 1 day
x = np.linspace(0.0, N*T, N)
yf = scipy.fftpack.fft(y)
xf = np.linspace(0.0, 1.0/(2.0*T), N/2)
components = 2.0/N * np.abs(yf[:N//2])

fig, ax = plt.subplots(1, 1, figsize=(10, 5))
ax.plot(xf, components)

这导致了下图。

enter image description here

我想删除四个最重要的组件。为此,我正在实现以下公式。

enter image description here

max_components = sorted(components, reverse=True)[:4]
idx_max_comp = []

for comp in max_components:
for i in range(len(components)):
if components[i] == comp:
idx_max_comp.append(i)
break

cycle_signal = np.zeros(len(y))
for idx in idxs:
a, b = (2.0/N) * np.real(yf[idx]), (2.0/N) * np.imag(yf[idx])
fi = xf[idx]
cycle_signal += (a * np.cos(2 * np.pi * fi * x)) + (b * np.sin(2 * np.pi * fi * x))

y = y - cycle_signal

但是当我再次应用 FFT 时,很容易发现它不起作用。

enter image description here

为什么?

最佳答案

我认为问题如下:

T = 1.0 # 1 天

如果您每天有一个样本,则采样频率定义为每秒的样本数,您的采样频率为 f = (1/24*60*60),大约为 11.57407 uHz(微赫兹),您的奈奎斯特频率将为 5.787035 uHz,大约为 2 天。这意味着您不能比每两天检查一次周期更频繁。

关于python - 如何从时间序列中去除频率成分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41968846/

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