【发布时间】:2011-10-11 07:22:25
【问题描述】:
我需要一些帮助来确认一些基本的 DSP 步骤。我正在实现一些智能手机加速度计传感器信号处理软件,但我之前没有在 DSP 工作过。
我的程序以 32 Hz 的频率实时收集加速度计数据。输出应该是信号的主要频率。
我的具体问题是:
从实时流中,我收集了一个 256 个样本窗口,重叠率为 50%,正如我在文献中所读到的。也就是说,我一次添加 128 个样本来填充 256 个样本的窗口。这是正确的做法吗?
下面的第一张图显示了一个这样的 256 个样本窗口。第二个图显示了我应用 Hann/Hamming window function 后的示例窗口。我读过应用窗口函数是一种典型的方法,所以我继续做了。我应该这样做吗?
第三个窗口显示来自 FFT 库输出的功率谱 (?)。我真的在拼凑我读过的点点滴滴。我是否正确理解频谱上升到采样率的 1/2(在本例中为 16 Hz,因为我的采样率为 32 Hz),并且每个频谱点的值是频谱 [i] = sqrt(real[ i]^2 + 虚数[i]^2)?是这样吗?
假设我在问题 3 中所做的是正确的,我的理解是否正确,即第三张图显示的主要频率约为 3.25 Hz 和 8.25 Hz?我从收集的数据中知道我以大约 3 Hz 的频率运行,所以 3.25 Hz 的峰值似乎是正确的。因此,必须有一些噪声和其他因素导致 8.25 Hz 处的(错误)尖峰。我可以使用任何过滤器或其他方法来消除这个和其他尖峰吗?如果没有,有没有办法从错误尖峰中确定“真实”尖峰?
【问题讨论】:
-
您是如何生成数据的?摇晃手机?你有不同的运行得到 8Hz 吗?没有窗口功能?您的数据看起来很干净,所以我认为窗口函数不是必需的,但数据在现实世界中可能不会那么好,因此可能需要它。
-
您可以在原始数据中看到 8Hz:它们是尖锐的小峰值,有些具有相当大的振幅。知道它们是怎么出现的吗? (与上述关于您生成数据的问题有关。)
-
是的,我认为 8.25 的峰值并不是你所说的“错误”。您是如何获得这些数据的?
-
您确实希望对数据进行窗口化:否则您会因信号的突然开始和结束而得到错误的频率伪影。 0Hz 处的峰值只是信号的直流偏移:它不以原点为中心。基本上,您所做的一切都是正确的,并且您对复杂输出和结果频率的假设是正确的。
-
好的,我没有注意到数据没有归零,所以你确实在 0 Hz 处得到了一个偏移峰值。但这让我觉得你有一些严重的问题,因为你正在分析加速度的绝对值。这就像分析正弦的绝对值:你会得到两倍的频率加上一些伪像频率。
标签: java audio signal-processing accelerometer fft