寻找在微控制器上运行的简单模式匹配算法的想法

时间:2010-03-29 18:21:52

标签: algorithm design-patterns microcontroller matching

我正在开发一个识别简单音频模式的项目。我有两个数据集,每个数据集由4到32个音符/持续时间对组成。一组是预定义的,另一组是来自传入的数据流。两个强相关数据集的长度通常不同,但大致相同的“形状”。我的目标是针对两个数据集的相关性/匹配程度进行某种排序。

我已将输入频率转换为音高并移动输入数据流的音高,使其平均音高与预定义数据集的音高相匹配。我还拉伸/压缩传入数据集的持续时间以匹配预定义集的总持续时间。以下是两个应该被排名为强相关的数据的图形示例:

http://s2.postimage.org/FVeG0-ee3c23ecc094a55b15e538c3a0d83dd5.gif

(抱歉,作为新用户,我无法直接发布图片)

我在8位微控制器上这样做,因此资源很少。速度不是问题,处理中的第二或第二个不是交易破坏者。

如果有一个明显的解决方案我不会感到惊讶,我只是盯着这个问题太久了。有什么想法吗?

提前致谢...

2 个答案:

答案 0 :(得分:0)

无法看到图形,但是......将光谱划分为多个分档。你可能已经这样做了,但它们可能太精细了。根据您的应用,考虑将频谱划分为16或32个频段,可能是对数,因为这是我们听到的。然后,比较每个箱中功率的比率。例如,比较第一样品中500Hz至1000Hz的比例与第二样品中的相同比例。这消除了样本幅度不等的任何问题。

答案 1 :(得分:0)

通常使用convolution函数完成1D信号匹配。但是,这可能是处理器密集型的。

可以使用的更简单的算法是首先检查两个信号的每个音符的持续时间是否大致相等。然后,如果检查两个信号的下一个频率模式是相同的。下一频率模式的意思是将有序频率列表分解为下一个频率是高还是低的有序列表。因此,从500Hz到1000Hz到700Hz到400Hz的任何东西都会变成高 - 低 - 低。这可能足够好,具体取决于您的目的。