【发布时间】:2019-04-04 18:05:39
【问题描述】:
我目前正在做一个项目,我记录了手机做周期性运动的加速器幅度,当我在 python 中对其进行可视化并对其进行平滑处理时,这一点非常明显。然而;我正在尝试以编程方式获取信号的频率(mag),到目前为止,我所有的尝试都失败了。 数据存储在一个 csv 中,其中包括几列,但我提取了幅度列,用低通滤波器对其进行平滑处理,然后最后尝试在我的过滤幅度数组上使用 numpy 的 fft 函数,但它没有给我预期的结果。
这是我在平滑后可视化幅度的图像:
如您所见,它是相当周期性的,您可以通过查看它来判断,但我不知道为什么 FFT 无法捕捉到这一点。
我从 numpy 包和 scipy 都尝试过 FFT,两者都给了我相同的结果。
data = genfromtxt("data.csv", dtype=float, delimiter=',', names=True)
y = data['mag']
w = np.fft.fft(y)
freq = np.fft.fftfreq(len(w))
我从freq 得到的输出是“最高”频率为 0 的数组,我不明白。如果相关,我知道我从设备记录数据的采样率为 20 毫秒,并且我已经尝试使用原始数据和平滑数据进行 FFT,但仍然没有运气。
【问题讨论】:
-
频率,而不是频率。傅里叶变换会发现不止一个涉及和叠加。单个频率是正弦或余弦。你的例子不是那样。
-
第零个频率是一个常数;它应该是该系列中的最低术语。我认为这发生在 b/c 你的信号有一个不为零的直流分量。
-
您可以尝试将信号与自身进行卷积以捕获stackoverflow.com/questions/49531952/… 中所示的周期吗?移除 DC 组件是一个很好的提示。
标签: python signal-processing frequency-analysis