Étape 1: L’algorithme
Crédit :
Je ne sais pas qui a inventé l’algorithme, mais de ce que google me dit un statisticien britannique par le nom de George Udny Yule a publié un document à la fin du XIXe siècle en ce qui concerne l’algorithme de l’autocorrélation partielle. En outre il y un tas d’articles publiés par l’IEEE à partir les améliorations citant du début des années 1900 à la méthode pour utilisent en électronique.
AMDF - Voici le maigre :
AMDF (N) = 1/N * somme (j’ai = 0 -> N) de (| ENTREES - x(i+N) |)
AMDF (fonction d’autocorrélation grandeur différence) est en fait tracer des lignes qui se chevauchent sur une fenêtre donnée d’échantillons. Voici ce qui se passe essentiellement :
1.) les données se rassemblent pour former une fenêtre de N * 2 échantillons à l’échelle.
2.) coupe la fenêtre en deux.
3.) au premier semestre sur le dessus de la seconde moitié de superposition.
4.) prendre la valeur absolue de la différence de la zone entre les deux formes d’onde et résumer.
5.) diviser la somme par le nombre d’échantillons.
6.) Répétez les étapes 2 à 6 pour un balayage complet de tous les retards N susceptible de se produire ou être présentes dans une forme d’onde.
7.) si un ton quasi harmonique est présent, l’AMDF sera sortie un faible nombre à ou proche de 0 à certain retard N.
8.) diviser la fréquence d’échantillonnage de votre retard N et vous avez la fréquence plus probable de la tonalité quasi harmonique.
Une grosse note cependant ! L’AMDF ne fonctionne pas sur plus d’un ton à la fois. Vous ne serez pas en mesure de différencier les doubles cordes, plusieurs notes grattés, etc..
Autres algorithmes:
Pour autant que ma recherche m’a pris, il y a quelques autre terrain là-bas des algorithmes de détection. De toute évidence plus, mais je n’a pas chercher trop largement. Je ne les couvrir, mais je les citerai entendre pour vos recherches plus poussées si vous le souhaitez.
Bien sûr, la méthode originale de l’autocorrélation est là-bas qui constitue le fondement de l’AMDF. L’avantage de l’AMDF sur base autocorrélation est que l’AMDF a un tas de soustractions et additions avec une division (qui peut être codée dans une multiplication). Pour l’Arduino Uno qui est natif de 8 bits architecture et n’a pas division de matériel ou de la multiplication, c’est un plus absolu.
Un autre algorithme de détection de hauteur est l’algorithme de Yin. Cet algorithme bénéficie d’un taux d’erreur très faible pourcentage avec chaque étape de l’algorithme décrivant son efficacité afin que vous pouvez implémenter autant ou aussi peu que vous le souhaitez. De témoignages, j’ai lu qu'il n’est pas très par le calcul intensif qui est génial ! Alors oui... Pourquoi je n’ai pas obtenu il y a parce que l’algorithme de Yin a apparemment un brevet sur son utilisation. En outre, si vous recherchez autour, quelqu'un a déjà compilé le code source pour vous en C afin que vous pouvez jouer avec elle. Il y a un article publié sur l’algorithme de Yin, des choses très intéressantes.
Voici le Code Source de Yin, si vous voulez jeter un oeil!: http://mroy.chez-alice.fr/yin/index.html
Voici l’article publié sur l’algorithme : http://recherche.ircam.fr/equipes/pcm/cheveign/pss/2002_JASA_YIN.pdf