低频噪声中短高频声音的识别(objc/c)

Posted

技术标签:

【中文标题】低频噪声中短高频声音的识别(objc/c)【英文标题】:Recognition of a short high frequency sound in low frequency noise (objc/c) 【发布时间】:2011-03-04 19:50:18 【问题描述】:

我目前正在创建一个应用程序,该应用程序使用高频声音向其他设备发出准备就绪信号。

(发射器):设备会发出短促的 20khz 左右的声音。

(接收器):另一台设备将在距发射器一小段距离(大约 10 米)处收听此频率的声音。该设备从麦克风接收音频数据

背景噪音会相当响亮,从 0 到 10khz(大约人类语音范围)不等,并且会由一小群人产生。

我需要接收设备能够检测到 20khz 的声音,从噪音中分离出来,

并知道收到它的时间。

任何有关适当算法、库甚至更好的 C 或代码的帮助

非常感谢 Objc 来检测这种高频声音。

【问题讨论】:

【参考方案1】:

20 kHz 可能会推动它,因为 (a) 大多数声卡在 18 - 20 kHz 处具有低通(抗混叠)滤波器,并且 (b) 大多数扬声器和麦克风在 20 kHz 处往往响应不佳。您可能想考虑说 15 kHz 吗?

实际的检测部分应该很简单——只需在音调频率上实现一个窄带通滤波器,整流输出和低通滤波器(例如 10 Hz)。

【讨论】:

感谢您的宝贵意见。我想我可以使用 15khz。您对我如何实现这一点有任何指示吗?我以前从未做过声音分析。 @nonono:DSP 是一个很大的主题,但是您可以很容易地实现一个简单的窄带滤波器。最常见和最简单的实现之一是 Goertzel 过滤器:en.wikipedia.org/wiki/Goertzel_algorithm,它应该足以满足您的需求。【参考方案2】:

您可能需要研究 FFT(快速傅立叶变换)。该算法将允许您分析波形并将其转换为频谱以供进一步分析。

【讨论】:

老兄,完全矫枉过正。只需为该频率实现一个 FIR 带通滤波器,然后测量结果信号的功率。当它超过一个阈值时,就是那个音调。 @datenwolf 所说的 - FFT 对于检测已知频率的单音来说太过分了 - Goertzel 或简单的单极带通滤波器更合适。【参考方案3】:

如果这适用于 Mac OS 或 ios,我会开始研究 Core Audio 的音频单元。

1 这是 Apple 的 Core Audio Overview。

2 一些AudioUnits for Mac OS

3 或iOS AudioUnit Hosting

【讨论】:

【参考方案4】:

iPhone 扬声器根本不会发出那种高频的声音。

【讨论】:

以上是关于低频噪声中短高频声音的识别(objc/c)的主要内容,如果未能解决你的问题,请参考以下文章

图像增强之空间域锐化

WEB AUDIO API 产生雨水噼啪声

针对于高频低频图像的理解

傅里叶变换系数高频和低频

JavaScript中短时间高频次触发事件的优化

PIE SDK傅里叶变换