用于检测音频“咔哒”声的 DSP 硬件

信息处理 过滤器 声音的 硬件实现 硬件
2022-02-16 07:14:15

我正在努力在工厂类型设置中隔离特定的音频点击。经过初步分析,我确定设置在 500 和 800Hz 之间的 2 极高通滤波器最适合我。

由于人为交互而发生点击的时间可以是随机的。点击的形状是“尖峰”形状。我在这个工作站上没有这些图像,但如果有帮助的话,我可以在下周得到它们。因此,当用户将连接器插入在一起时,该过程并不是完全自动化的,但是目标是限制人为错误,以便尽可能少地与此实现进行交互。

总会有 3 次点击。Click A 和 Click B 非常明显,但 Click C 非常安静,并且到目前为止,使用非常昂贵的相机系统来直观地捕捉 Click C。

潜在的麦克风:链接

但是,我很好奇推荐使用哪种 DSP 硬件来快速有效地分析此类波形。

旁注:由于易于使用和调整,我倾向于 IIR,如果这是一个不正确的假设,请纠正我。

2个回答

可能最简单(也是最准确)的方法是上面建议的匹配过滤器方法。基本上,您可以独立记录每次点击,并将其用作针对麦克风信号的匹配过滤器。如果点击次数始终相同,则点击 A 在匹配过滤器 A 上的响声非常强烈。与 B 和 C 相同。

要实现匹配滤波器,您可以获得一个带有处理器或 DSP 芯片的开发套件。实现解决方案需要一些编码(可能是 C)。在大学里,我研究过“TMS320C6713 DSP Starter Kit (DSK)”,但你可以试试 Arduino 或 Beagleboard。您的系统可能不会非常复杂。至于麦克风,你可以得到一个比较简单的,连接到开发套件上的 3.5mm 插孔。http://www.amazon.com/Pyle-Pro-PDMIC58-Professional-Handheld-Microphone/dp/B003GEBGA0/ref=sr_1_4?s=electronics&ie=UTF8&qid=1440204270&sr=1-4&keywords=microphone+3.5mm

匹配滤波器的工作原理是将输入信号乘以预期的数据流。

示例:如果单击 A 持续 1mS 并且您的采样率为 44.1kHz,您将有一个 44 样本匹配滤波器(单击可能会短得多)。您可以将其存储在代码中,并将您的输入信号与此匹配的滤波器相乘。

MATLAB示例代码: https ://stackoverflow.com/a/19471009/3920284

乘以输入流时获得的最大值将对应于点击发生的时间。您可以像示例一样设置阈值。

随着时间的推移可能会发生变化的一件事是您的点击声音:随着硬件的老化,点击声音会有所不同,因为可能会发生磨损。

有关匹配过滤器方法的更多详细信息:

匹配滤波器与互相关是一回事。输入 A 是您希望点击听起来像的模板,输入 B 是实时音频流。您将它们相互关联,这将产生低水平的噪音,除非有匹配,然后它会产生一个大的尖峰。

进行互相关的最有效方法是使用 FFT 方法。首先,用静音填充模板 A,直到它与块的长度相同,然后获取模板 A 的 FFT 并存储它。您只需执行一次。

然后连续读取现场声音数据块,并以重叠的方式处理块(这样,如果它发生在块之间的一半,你就不会错过点击)。例如,合并块 1 和块 2 并作为一个整体处理,然后合并块 2 和块 3 并作为一个整体处理,然后是块 3 和 4,等等。

对于您创建的每个(大)块,计算 FFT,然后(复数)将其与模板 A 的 FFT 相乘,然后进行逆变换以获得互相关。如果它有一个很大的尖峰,你就找到了匹配。如果没有,请忽略它。

多通道版本:

这只有在组装总是发生在空间的同一点时才有效。

在该区域周围以 3D 模式设置 2 或 3 个麦克风,同时记录所有麦克风的咔嗒声,这可能会对它们产生不同的延迟,因为它们与咔嗒声的距离不同(尽管这不是必需的) . 将这些波形保存为您的模板,确保保持它们各自相对于彼此的延迟。如上所述在实时数据上运行匹配的过滤器(每个通道一个)。太空中的那个点有比赛时,所有 3 个匹配的过滤器都会在同一时间点产生大的尖峰。通过相加或相乘(我不知道理论上哪个更好)组合 3 个匹配的滤波器输出以获得特定位置的波形匹配,这将拒绝来自其他位置的相似声音和来自目标位置的不同声音。或者如果位置有点马虎,只需在一定时间内寻找3个尖峰。