首页 > 解决方案 > 从 Arduino 中的 FFT 检测特定模式

问题描述

我有一个麦克风的 FFT 输出,我想从中检测特定动物的嚎叫(它在特征频谱中嚎叫)。有没有办法在 Arduino 中实现模式识别算法来做到这一点?

我已经有它的 FFT 部分使用 128 个样本 @2kHz 采样率。

标签: audioarduinopattern-matchingaudio-fingerprinting

解决方案


查找音频指纹......基本上你探测FFT调用的频域输出并拍摄频率范围的快照以及每个频率的幅度然后在已知动物信号和未知信号之间进行比较并输出这些差异的测量值.

当未知信号是您的实际已知信号时,这种差异自然会接近零

这是另一层:为了获得更好的保真度,而不是对整个可用音频执行单个 FFT,请执行多次 FFT 调用,每个调用都使用样本的子集......对于每个调用,将样本窗口进一步滑入音频剪辑......假设您的音频剪辑是 2 秒,但在这里您只向您的 FFT 调用发送价值 200 毫秒的样本,这为您提供了至少 10 个这样的 FFT 结果集,而不是只有一个,如果您吞下整个音频剪辑......这给了您时间特异性的概念,它是一个额外的维度,用于推导出已知信号和未知信号之间更丰富的数据差异......实验看看它是否有助于滑动窗口只是一点点而不是将每个窗口首尾相连

明确地说,你有一个频率范围,比如说分布在 X 轴上,然后沿着 Y 轴你有每个频率在不同时间点的幅度值,因为你根据上面的段落改变你的样本窗口时从你的音频剪辑中提取......所以现在你有一个二维数据点网格

再次加强置信区间,您将希望在已知源动物嚎叫的几个不同音频剪辑中针对您的每个未知信号执行上述所有操作,因此现在您拥有一个三维参数景观......您可以看到每个额外的您可以召集的尺寸将提供更大的牵引力,从而获得更准确的结果

从容易区分的已知音频开始与非常不同的未知音频开始...例如,已知音频信号的 50 Hz 正弦曲线音与未知的 8000 Hz 正弦波...然后尝试您已知的吉他单次弹奏使用未知的小号...然后继续使用实际的音频剪辑

Audacity 是业界优秀的免费音频工具 - 它可以轻松绘制 WAV 文件以显示其时域信号或 FFT 频谱图...... Sonic Visualiser 也是一款顶级工具

这不是一个简单的灵丹妙药,但是您添加到解决方案中的每一层都可以为您提供更好的结果……这是您正在制作的过程,而不是要挤压的单一维度触发器。


推荐阅读