gpt4 book ai didi

python - 实际加速度计数据的功率谱密度显示 0 Hz 处的异常值

转载 作者:太空宇宙 更新时间:2023-11-04 09:28:01 27 4
gpt4 key购买 nike

我以大约 50 Hz 的频率(每 0.02 秒一次,正如 Android 所允许的那样...)收集加速度计数据

这是 10 秒数据窗口的幅度图,我想在其上估计功率谱密度:

Magnitudes of accelerometer data

像这样应用 scipy.signal.periodogram 之后

fs = 50
f, Pxx_den = signal.periodogram(x, fs)
plt.semilogy(f, Pxx_den)
plt.show()

我得到了以下图表,显示了 0 Hz 的大纲: enter image description here

这个大纲是预期的吗?我想为机器学习算法提供 3 个最高的 PSD,但大纲为 0 让我觉得出了点问题。或者事实并非如此?应用 FFT 还会导致 0 Hz 处的高振幅。

最佳答案

这是由于 signal.periodigram 默认执行的去趋势化操作。

去趋势是从数据中删除常数项或线性项(通常),默认为常数去趋势。这有效地减去了估计 PSD 的每个数据部分的平均值。减去均值相当于从频谱中去除直流或零频分量。

我生成了假数据,只是高斯噪声,y 偏移为 5,与您的数据类似。您可以从下图中看到,去趋势删除了零频分量,而设置 detrend=False 则保留了它。但是请记住,去除趋势实际上可能很有用。您可能关心也可能不关心,这取决于您感兴趣的分析类型。

from scipy import signal
import numpy as np
import matplotlib.pyplot as plt

x = np.random.randn(1000,) * 2.0 + 5.0 # White noise data, with y-offset
fs = 50.0
f, detrended_psd = signal.periodogram(x, fs)
_, psd = signal.periodogram(x, fs, detrend=False)
fig, ax = plt.subplots()
ax.semilogy(f, detrended_psd, linewidth=3.0, label='Detrended')
ax.semilogy(f, psd, linewidth=1.0, label='Not detrended')
fig.tight_layout()
ax.set_xlabel('Frequency (Hz)')
ax.set_ylabel('PSD')

enter image description here

关于python - 实际加速度计数据的功率谱密度显示 0 Hz 处的异常值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56827434/

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