2010-03-29 13 views
2

Je travaille sur un projet de reconnaissance de motifs audio simples. J'ai deux ensembles de données, chacun composé de 4 à 32 paires de notes/durée. Un ensemble est prédéfini, l'autre provient d'un flux de données entrant. La longueur des deux ensembles de données fortement corrélés est souvent différente, mais à peu près la même "forme". Mon but est de trouver une sorte de classement quant à la corrélation entre les deux ensembles de données.Je cherche des idées pour un algorithme de correspondance de motifs simple à exécuter sur un microcontrôleur

J'ai converti les fréquences entrantes en tangage et décalé le pas du flux de données entrant afin que sa hauteur moyenne corresponde à celle de l'ensemble de données prédéfini. J'étire/compresse également les durées du jeu de données entrant pour correspondre à la durée globale de l'ensemble prédéfini. Voici deux exemples graphiques de données qui doivent être classés comme fortement corrélées:

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

(Désolé, en tant que nouvel utilisateur, je ne pouvais pas poster directement des images) Je fais cela sur un Microcontrôleur 8 bits, donc les ressources sont minimes. La vitesse est moins un problème, une seconde ou deux de traitement n'est pas un briseur d'affaire.

Cela ne me surprendrait pas s'il y a une solution évidente, j'ai juste regardé le problème trop longtemps. Des idées?

Merci à l'avance ...

+0

le lien de l'image ne fonctionne pas – stmax

Répondre

0

ne pouvait pas voir le graphique, mais ... Diviser le spectre dans les poubelles. Vous avez probablement déjà déjà fait cela, mais ils peuvent être trop bien. En fonction de votre application, envisagez de diviser le spectre en, disons 16 ou 32 bins, peut-être logarithmiquement, puisque c'est ainsi que nous entendons. Ensuite, comparez les ratios de la puissance dans chaque bac. Par exemple, comparer le rapport de 500 Hz à 1000 Hz dans le premier échantillon avec ce même rapport dans le deuxième échantillon. Cela élimine tout problème d'amplitudes inégales des échantillons.

0

La correspondance du signal 1D est souvent effectuée avec la fonction convolution. Cependant, ceci peut être un processeur intensif.

Un algorithme plus simple qui pourrait être utilisé est de vérifier d'abord si les durées de chaque note les deux signaux sont à peu près égaux. Ensuite, si vous vérifiez le modèle de fréquence suivante des deux signaux sont les mêmes. Ce que je veux dire par le modèle de fréquence suivante est de décomposer la liste ordonnée de fréquences en une liste ordonnée indiquant si la fréquence suivante est supérieure ou inférieure. Donc, quelque chose qui va de 500Hz à 1000Hz à 700Hz à 400Hz deviendrait simplement Higher-Lower-Lower. Cela peut être assez bon, selon vos objectifs.