实际加速度计数据的功率谱密度在0赫兹时显示异常值

2024-05-29 03:51:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我收集了频率约为50赫兹的加速计数据(每0.02秒,完全按照Android允许的频率…)

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

Magnitudes of accelerometer data

申请后周期图像这样

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

我得到了下面的图,显示了0赫兹的大纲视图: enter image description here

是否需要此大纲视图?我想提供一个机器学习算法与3个最高的psd,但大纲视图为0使我认为,有什么地方出了问题。或者不是这样吗?应用FFT也可以在0hz时产生高振幅。在


Tags: 数据图像视图signalplt功率fsandroid
1条回答
网友
1楼 · 发布于 2024-05-29 03:51:39

这是由于默认情况下signal.periodigram执行的去趋势化。在

Detrending是从数据中删除一个常量或线性项(通常),默认为常量detrend。这是有效地减去估计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

相关问题 更多 >

    热门问题