从 Arduino 中的 FFT 检测特定模式

Detecting a specific pattern from a FFT in Arduino

我有一个来自麦克风的 FFT 输出,我想从中检测特定动物的嚎叫(它在特征频谱中嚎叫)。有什么方法可以在 Arduino 中实现模式识别算法吗?

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

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

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

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

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

再次增强置信区间,您将希望针对每个未知信号对已知源动物嚎叫的多个不同音频片段执行上述所有操作,因此现在您有一个三维参数景观...你可以看到你可以聚集的每个额外维度都会提供更多牵引力,从而获得更准确的结果

从容易区分的已知音频和截然不同的未知音频开始……比如已知音频信号的 50 Hz 正弦曲线音调与未知音频信号的 8000 Hz 正弦波音调……然后尝试使用已知的单音弹奏吉他并使用未知的小号……然后使用实际的音频剪辑

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

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