J'essaie de mettre en œuvre un jeu de chant qui analysera les entrées micro brutes et dira au joueur à quel point il chante. Cela doit être fait en temps réel.
J'ai rencontré beaucoup de discussions posant la même question, mais je n'en ai pas encore assez fini, probablement en raison de mon manque d'expérience dans le domaine et de mes connaissances en mathématiques superficielles. J'ai implémenté un algorithme basé sur l'article du pitch pitch du site DSPDimension: http://www.dspdimension.com/admin/pitch-shifting-using-the-ft/
J'extrait la vraie fréquence et l'amplitude comme l'explique l'article, mais je ne sais pas trouver la fréquence fondamentale avec cela. J'ai essayé d'obtenir le bin avec la plus grande ampleur mais cela ne me donne que de bons résultats pour des signaux de hauteur plus élevée, peu importe le facteur de suréchantillonnage que j'utilise, j'obtiens toujours de mauvaises données pour les signaux à basse fréquence. Cette approche est-elle complètement fausse ou suis-je sur la bonne voie, mais je manque quelque chose?
Merci d'avance,
EDIT: J'ai oublié de mentionner que je ne suis intéressé que par la classe de pitch, donc c'est ok si le fondamental manque, mais j'ai une forte tonalité dans l'échantillon.
EDIT2: Merci à tous, je viens de terminer une version de l'algorithme qui fonctionne comme un charme. Le problème d'estimation de faible hauteur était dû à mon test d'entrée. Quand j'ai chanté la note, elle correspondait correctement. De plus, je considère maintenant toutes les harmoniques, pas seulement le pic le plus élevé.
la source
Réponses:
C'est parce que les harmoniques sont plus grandes que les fondamentales. Tracez votre spectre et vous verrez. Une meilleure méthode pour trouver le véritable fondamental est l'autocorrélation. Ensuite, vous "glissez" la forme d'onde au-delà d'elle-même et trouvez des retards auxquels la forme d'onde s'aligne avec elle-même.
http://www.phon.ucl.ac.uk/courses/spsci/matlab/lect10.html
Voulez-vous vraiment qu'ils chantent la note exacte, ou est-ce correct s'ils chantent une octave au-dessus ou en dessous en fonction de leur registre vocal?
la source
Oui, l'utilisation d'un estimateur de fréquence de crête pour la hauteur est incorrecte. La hauteur tonale est un phénomène psychoacoustique, la détection ou l'estimation de la hauteur tonale est donc différente de l'estimation de fréquence. Il y a eu beaucoup de méthodes d'estimation de la hauteur données dans les réponses précédentes à des questions similaires ici. Il y a plus d'un choix.
En voici un: /programming/4227420/matlab-missing-fundamental-from-an-fft/4231322#4231322 , et un autre: Conseils pour améliorer la détection de la hauteur
AJOUT # 1: Des questions similaires à celle-ci sont posées si souvent que j'ai rédigé un article de blog plus long sur le sujet: http://www.musingpaw.com/2012/04/musical-pitch-is-not-just-fft- fréquence.html
la source