【问题标题】:Detecting a loud impulse sound检测响亮的脉冲声
【发布时间】:2015-12-07 18:42:51
【问题描述】:

我正在尝试在 rasp pi 上设计一个系统,该系统可以检测到像拍手一样的突然响亮的声音。我能够实时捕获输入声音样本(使用简单的 python 程序),但需要一种有效的方法来在这些在线样本上运行我的算法以指示尖峰。我对用于此类应用程序的过滤器不太熟悉。有什么建议么?

【问题讨论】:

  • 您能否对 rms 值进行移动平均,如果输入高于该值的某个阈值,它将被视为“尖峰”?
  • 我正在考虑使用循环缓冲区来收集输入
  • @adanot 阈值是非恒定的,因此峰值仅与其过去和未来的样本相关。仍然你的想法是有道理的,在最简单的实现中,可以查看 SecondBeforeLast、Last 和 Current 样本,如果 Last > Current && Last > SecondBeforeLast,它可以被认为是一个尖峰。我认为如果采样率错误并且我们可能会不断错过峰值,这很容易出错。

标签: raspberry-pi filtering signal-processing raspberry-pi2


【解决方案1】:
  1. 应用高通,高于 1 kHz 似乎工作得相当好。拍手应主要包含高频成分。
  2. 计算有效值,例如对高通的输出求平方,在最后 100 个样本上取平均值以进行平滑
  3. 在某个时间窗口内标准化,例如最后 N 个样本。确保你使这个窗口比你的均方根移动平均线长。对于您当前的样本,减去此缓冲区的平均值并除以缓冲区中的标准偏差。通过这种方式,您可以检测窗口中信噪比的相对变化,这些变化与当前幅度无关。
  4. 选择一个阈值 SNR 来宣布拍手

【讨论】:

    猜你喜欢
    • 2016-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-06
    • 2012-05-15
    • 1970-01-01
    • 2020-02-23
    • 2021-05-13
    相关资源
    最近更新 更多