通过android中的声音识别敲击(拍手)

时间:2014-12-11 10:10:04

标签: android audio signal-processing

在我的任务中,我们的Android移动应用程序需要识别敲击声(敲击移动设备表面时)才能打开应用程序。

我尝试了一些方法,但它只能识别大约80%的敲门声(有时候我敲电话但它不会返回敲击声)并且有时它会识别其他声音如敲门声,如元音' a' ;

以下是我们使用的3种方法 -

1。通过高通过滤器识别:

2。使用13kHz到18kHz之间的总和(refer this article):

第3。使用库(refer link

所有这些努力只能识别大约80%的敲击声,有时候它会将其他声音识别为敲击声。

我不确定敲击特性以及如何准确识别敲击(当我完全拍手机时它会识别敲击声)。非常感谢任何帮助!

1 个答案:

答案 0 :(得分:3)

  
      
  1. 通过高通过滤器识别
  2.   

与敲打没关系

  
      
  1. 使用13kHz至18kHz的量级之和(参见本文):
  2.   

这是一个合理的方向,但你需要添加更多功能,特别是附近其他帧的能量。

  

使用库

不相关

所有方法都不起作用,因为它们与敲击属性无关。要正确检测爆震,你需要弄清楚它与其他声音的区别:

  1. Knock的时间很短
  2. 敲击频率在频谱的较高部分。
  3. 所以你需要实现以下算法:

    • 拆分帧上的音频
    • 为每个帧创建FFT变换
    • 分析每帧和相邻帧的FFT变换并制作 确定以下内容:
      • 框架的光谱能量集中在上部
      • 帧的能量显着高于相邻帧的能量

    一旦看到这两个功能,就可以发出有关检测到爆震的信号。

    参考参考knock谱图:

    Knock spectrogram

    此处还介绍了一个相关的解释算法:

    Given an audio stream, find when a door slams (sound pressure level calculation?)

    如果您想进一步区分声音,例如识别器点击和来自拍手的门铃,那么您可能希望为频谱实现分类器。您需要收集更多拍手和不同声音的示例,并在FFT值上应用机器学习工具包。 SVM应该可以很好地完成这项任务。