java – 从连续麦克风流中实时识别非语音,非音乐声音

我正在寻找与特定声音相对应的事件,例如车门砰击,或者可能是烤面包机吐出的吐司.

系统需要比“响亮的噪声探测器”更复杂;它需要能够将特定声音与其他大声噪声区分开来.

识别不需要是零延迟,但处理器需要跟上始终打开的麦克风的连续输入数据流.

>这项任务与语音识别有很大不同,或者我可以使用语音识别库/工具包来识别这些非语音声音吗?
>鉴于要求我只需要匹配一个声音(而不是声音库之间的匹配),我可以做任何特殊的优化吗?

This answer表示匹配的过滤器是合适的,但我对细节很朦胧.由于目标声音的变化,我不相信目标声音样本和麦克风流之间的音频波形数据的简单互相关将是有效的.

我的问题也类似于this,没有引起太多关注.

最佳答案
我发现了一篇关于这个主题的有趣论文

> Vehicle Sound Signature Recognition by
Frequency Vector Principal Component Analysis
by Huadong Wu,Mel Siegel和Pradeep Khosla(IEEE Transactions on Instrumentation and Measurement,Vol.48,No.5,1999年10月
)

它也应该适用于您的应用,如果不是比车辆声音更好.

在分析培训数据时,它……

>取样200ms
>对每个样本进行傅里叶变换(FFT)
>频率向量上是否有Principal Component Analysis

>计算此类所有样本的平均值
>从样本中减去均值
>计算平均协方差矩阵的特征向量(每个向量的外积与其自身的平均值)
>存储平均值和最显着的特征向量.

然后对声音进行分类,它……

>取样200ms(S).
>对每个样本进行傅里叶变换.
>从频率向量(F)中减去类(C)的均值.
>将频率向量与C的每个特征向量相乘,给出每个特征向量的数字.
>从F中减去每个数的乘积和相应的特征向量.
>获取结果向量的长度.
>如果此值低于某个常数,则S被识别为属于C类.

转载注明原文:java – 从连续麦克风流中实时识别非语音,非音乐声音 - 代码日志