【问题标题】:Some signal processing /FFT questions一些信号处理/FFT问题
【发布时间】:2011-10-11 07:22:25
【问题描述】:

我需要一些帮助来确认一些基本的 DSP 步骤。我正在实现一些智能手机加速度计传感器信号处理软件,但我之前没有在 DSP 工作过。

我的程序以 32 Hz 的频率实时收集加速度计数据。输出应该是信号的主要频率。

我的具体问题是:

  1. 从实时流中,我收集了一个 256 个样本窗口,重叠率为 50%,正如我在文献中所读到的。也就是说,我一次添加 128 个样本来填充 256 个样本的窗口。这是正确的做法吗?

  2. 下面的第一张图显示了一个这样的 256 个样本窗口。第二个图显示了我应用 Hann/Hamming window function 后的示例窗口。我读过应用窗口函数是一种典型的方法,所以我继续做了。我应该这样做吗?

  3. 第三个窗口显示来自 FFT 库输出的功率谱 (?)。我真的在拼凑我读过的点点滴滴。我是否正确理解频谱上升到采样率的 1/2(在本例中为 16 Hz,因为我的采样率为 32 Hz),并且每个频谱点的值是频谱 [i] = sqrt(real[ i]^2 + 虚数[i]^2)?是这样吗?

  4. 假设我在问题 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


【解决方案1】:
  1. 决定样本大小和重叠始终是频率精度和及时性之间的折衷:样本越大,FFT bin 越多,因此绝对精度越高,但需要的时间越长。我猜您希望定期更新您所检测的频率,并且绝对准确度并不是 重要:因此 256 样本 FFT 似乎是一个不错的选择。重叠会在相同数据上提供更高的分辨率,但会以处理为代价:同样,50% 似乎很好。

  2. 应用窗口将阻止由于样本的突然开始和结束而出现的频率伪影(如果您什么都不做,您实际上是在应用方形窗口)。汉明窗是相当标准的,因为它在具有尖锐信号和低旁瓣之间提供了很好的折衷:一些窗口会更好地抑制旁瓣(检测频率的倍数),但检测到的信号将分布在更多的 bin 上,并且其他人则相反。在小样本量以及信号中的噪声量上,我认为这并不重要:您不妨坚持使用汉明窗。

  3. 完全正确:功率谱是复数值平方和的平方根。您对奈奎斯特频率的假设是正确的:您的比例将上升到 16Hz。我假设您使用的是真正的 FFT 算法,该算法返回 128 个复数值(FFT 将返回 256 个值,但是因为您给它一个真实信号,所以一半将是另一个的精确镜像),所以每个 bin为 16/128 Hz 宽。以对数刻度显示功率谱也很常见,但如果您只是进行峰值检测,这无关紧要。

  4. 确实存在 8Hz 尖峰:我的猜测是移动人口袋里的手机不仅仅是一阶系统,所以你会有其他频率分量,但应该能够检测到首要的。您可以将其过滤掉,但如果您要进行 FFT,那将毫无意义:如果您确定它们是错误的,请忽略这些 bin。

你似乎过得很好。我会提出的唯一建议是对结果进行一些更长时间的启发式方法:查看连续输出并拒绝短期检测到的信号。寻找一个主成分,看看你是否可以在它四处移动时对其进行跟踪。

【讨论】:

    【解决方案2】:

    回答您的几个问题:

    是的,您应该应用窗口函数。这里的想法是,当您开始和停止对真实世界的信号进行采样时,无论如何您正在做的是应用一个尖锐的矩形窗口。 Hann 和 Hamming 窗在减少不需要的频率方面要好得多,所以这是一个好方法。

    是的,最强的频率大约是 3 赫兹和 8 赫兹。我不认为 8 Hz 尖峰是错误的。有了这么短的数据集,您几乎肯定无法控制信号的确切频率。

    【讨论】:

      【解决方案3】:

      对问题 4 的一些见解(来自我连续数月跑步的人的加速度计信号):

      您是在单个加速度计轴通道上运行此分析,还是将它们组合起来以创建加速度幅度?如果您对信号加速度的整体幅度感兴趣,那么您应该结合 x y z 例如 mag_acc = sqrt((x - 0g_offset)^2 + (y - 0g_offset)^2 + (z - 0g_offset)^2)。当设备静止时,该信号应为 1g。如果你只看一个轴,那么你会从主要的跑步运动和手机方向的变化中获得分量,这些分量对你的信号有贡献(因为重力的贡献会四处转换)。因此,如果手机的方向在您从握住它的方式运行时四处移动,它会对信号产生很大的影响,但幅度不会显示方向的变化太大。跑步的人应该在人的步速下有一个非常干净的主导频率。

      【讨论】:

        猜你喜欢
        • 2011-07-01
        • 1970-01-01
        • 2011-04-07
        • 2015-12-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-30
        相关资源
        最近更新 更多