从 Arduino 中的 FFT 中检测特定模式



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

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

查找音频指纹...本质上,您探测FFT呼叫的频域输出,并拍摄频率范围的快照以及每个频率的幅度,然后将其与已知动物信号和未知信号进行比较,并输出这些差异的测量值。

当然,当未知信号是你实际的已知信号时,这种差异将接近于零

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

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

再次为了加强置信区间,您需要在已知源动物对每个未知信号嚎叫的几个不同音频剪辑中执行上述所有操作,所以现在您有一个三维参数景观......如您所见,您可以聚集的每个额外维度都将提供更多牵引力,从而获得更准确的结果

从易于区分的已知音频开始,与非常不同的未知音频......说已知音频信号的 50 Hz 正弦曲线音与未知音频信号的 8000 Hz 正弦波......然后尝试像你已知的吉他一样,使用未知的说小号...... 然后继续使用实际的音频剪辑

Audacity 是业内出色的免费音频工作马 - 它可以轻松绘制 WAV 文件以显示其时域信号或 FFT 频谱图......声波可视化器也是一个顶级工具。

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

最新更新