Je travaille sur un programme de réglage de piano et une partie de celui-ci nécessite une détection de hauteur en temps réel. Voici le schéma que j'ai jusqu'à présent qui fonctionne dans une certaine mesure, mais pourrait probablement utiliser un certain raffinement.
Je capture de l'audio PCM mono, 44,1 kHz, 16 bits en morceaux de 2 à 14 échantillons. Je combine les 4 derniers échantillons dans un tampon de longueur 2 ^ 16, applique une fenêtre Hann au tampon et exécute une FFT dessus. Ensuite, je classe les résultats de la FFT dans deux résolutions. Tout d'abord, je divise en 200 compartiments, puis exécute l'algorithme de détection de hauteur HPS à cette granularité. Je n'ai pas besoin d'obtenir une fréquence exacte ici, je veux juste m'approcher. Ensuite, je divise en 12 000 seaux, ce qui me donne une résolution de 1 cent de 10 Hz à 10 kHz. Une fois que je connais une fréquence approximative à partir de l'algorithme 200 HPS bin, je recherche cette plage du cas de 12000 bin pour un pic pour obtenir une fréquence plus exacte.
Cela semble fonctionner correctement pour les notes au milieu du clavier. Ce qui se passe avec les notes basses, c'est environ 1,5s de mauvaise identification de la note comme d'habitude la 2e ou la 3e partielle de la note réelle, puis une identification correcte de la note.
Dans tous les tracés spectraux que j'ai créés pour voir ce qui se passe, il y a plus de largeur aux pics que j'attendrais. Cette largeur est visuellement quelque peu cohérente du casier de 200 casiers à 12 000 casiers. Je m'attendais à ce que les pics soient plus étroits dans le cas des 200 bacs.
Donc, le traitement du signal est nouveau pour moi, il peut donc y avoir des problèmes que je ne pense pas pouvoir poser, mais en termes de questions spécifiques, la taille des échantillons est-elle suffisante pour cette tâche? Hann est-il le bon choix de fenêtre? Dois-je également lisser les données avant la FFT? Quelle est la sensibilité de HPS au nombre de bacs? Je pensais que si j'utilisais beaucoup de bacs, l'inharmonicité ne ferait pas en sorte que les partiels chevauchent leurs principes fondamentaux avec l'approche simple de l'algorithme HPS consistant à diviser par 2, 3, 4, etc.
Réponses:
Similaire à ce fil:
Existe-t-il un algorithme pour trouver une fréquence sans DFT ou FFT?
La FFT n'est pas un moyen particulièrement efficace de construire un tuner. De meilleures méthodes (et moins chères) incluent l'auto-corrélation, les boucles verrouillées par phases et les boucles verrouillées par retard, etc.
Un exemple est d'utiliser le suivi des maxima et des minima locaux pour affiner grossièrement la fréquence fondamentale, puis utiliser un oscillateur local et une boucle à verrouillage de phase pour suivre cette fréquence avec précision. Cela peut suivre un fondamental en mouvement pendant l'accord rapidement, en continu et avec une grande précision même si la fréquence est basse et si le fondamental est faible.
la source
Une recherche de «logiciel d'accordage de piano» ou d'articles similaires produira un grand nombre de hits - certains bons, d'autres moins bons.
Chaque type d'instrument de musique possède des caractéristiques acoustiques / physiques / environnementales uniques qui affectent son son. Et cela peut devenir compliqué, comme le suggèrent des milliers de livres et de documents de recherche (par exemple: tonalité, caractéristiques d'attaque / désintégration, inharmonicité, etc.).
La détection de la hauteur est elle-même un domaine très vaste. Ce qui suit n'est qu'une infime partie de ce qui est disponible: aperçu article 1 et pile échange post et aperçu article 2
En ce qui concerne vos questions spécifiques: 1) votre taille d'échantillon semble exagérée - en fonction du SNR et de la stabilité de la forme d'onde, vous pouvez obtenir une précision haute fréquence en utilisant d'autres méthodes en utilisant moins de cycles. (certaines méthodes sont basées sur la FFT). Et vous pouvez capturer une attaque / décroissance avec un long temps d'échantillonnage, 2) toute fenêtre autre que rectangulaire élargira la largeur du faisceau dans le domaine fréquentiel, mais cela ne signifie pas que vous ne devriez pas en utiliser une - Hann semble commun avec HPS , d'après ce que j'ai vu, 3) comme indiqué dans le premier lien ci-dessus, le HPS ne fonctionne pas très bien à basse fréquence, et l'inharmonicité vous affectera sur les cordes inférieures. En ce qui concerne votre méthode globale, sans avoir à écrire beaucoup de pages, je peux seulement dire que je le ferais différemment, en fonction de la gamme de fréquences et des harmoniques que je traitais.
la source
Une autre réponse suggère PLL. Je pense que vous devriez rester à l'écart de la PLL: la plupart des publications sur le suivi de hauteur se concentrent sur l'auto-corrélation (recherche de "YIN Pitch Tracking" - YIN est un algorithme de suivi de hauteur moderne basé sur l'auto-corrélation) et FFT. Je crois que PLL est plus adapté pour suivre de minuscules fluctuations de fréquence, comme avec la radio.
L'autocorrélation est un bon point de départ. Il est rapide, efficace et précis. Cependant, il existe des astuces pour rendre la FFT très précise et rapide (la plupart des techniques qui utilisent la FFT ne font que regarder l'amplitude, mais vous pouvez également utiliser les informations de phase), donc si vous êtes familier avec les FFT, vous pouvez également utiliser cette technique.
Si vous utilisez l'une de ces techniques, je vous suggère de préfiltrer avec un passe-bas pour réduire les harmoniques et vous concentrer sur le fondamental. Avec la FFT, vous pouvez, à la place ou en plus, utiliser des astuces comme regarder le premier maximum local.
Cela peut être un bon point de départ pour le filtrage, etc. Il vous donnera également quelques conseils pour éviter de faire trop de travail, et il renvoie au code source: http://blog.bjornroche.com/2012/07/07/frequency-detection-using-fft-aka-pitch.html
Ce livre contient des sections qui expliquent à la fois le YIN et la FFT à l'aide des informations de phase: http://www.amazon.com/DAFX-Digital-Udo-ouml-lzer/dp/0470665998
Enfin, vous devrez comprendre les spécificités des pianos. Je ne sais pas si l'accordeur lui-même doit faire quelque chose de spécial WRT, par exemple, l'accordage étiré, ou si cela dépend de la personne qui accorde le piano, mais vous devrez au moins comprendre ce genre de choses. Une autre affiche a suggéré de regarder les harmoniques désaccordées, mais le problème principal est d'identifier et d'accorder les fondamentaux, de sorte que les harmoniques désaccordées ne devraient pas avoir d'importance tant que vous identifiez correctement les fondamentales.
la source
Les larges pics que vous voyez peuvent être le résultat de phénomènes physiques et non d'un artefact de traitement du signal. En général, des pics étroits dans un résultat FFT représentent une sinusoïde non modulée exactement périodique dans la fenêtre dans le domaine temporel. Mais les vibrations des cordes de piano ne sont pas si stationnaires. Ils évoluent avec le temps, créant une modulation notable.
Plusieurs effets: plusieurs cordes de piano par note échangeront de l'énergie à travers la table d'harmonie; l'énergie vibratoire totale se dégradera avec le temps; les modes de vibration peuvent être légèrement inharmoniques pour commencer; la fréquence exacte de vibration de chaque mode (harmonique) peut changer avec la décroissance de l'amplitude en raison de la rigidité et du diamètre des cordes non nuls; et chaque harmonique peut se désintégrer à un rythme différent, etc.
Vous devrez peut-être décider laquelle de ces multiples modulations vous voulez appeler "le pitch" (des livres sur l'audiologie peuvent vous aider) et trouver une méthode pour mieux le suivre à l'intérieur du "large pic" de la FFT.
la source
Avec les notes basses des pianos, en particulier pour les montants, le spectre a tendance à s'étirer (la distance entre le fondamental et le premier harmonique est un peu plus qu'une octave, etc.). C'est ce qui donne aux pianos leur son de percussion, la note la plus basse sur les montants plus anciens ressemblera souvent plus à un bruit sourd qu'à une note, et si je comprends bien, c'est pourquoi les montants Cheep ont leur son de percussion honky tonk particulier. En raison de ces bons accordeurs de piano (les gens ne sont pas des algorithmes) accorderont les pianos par les harmoniques plus basses que le fondamental pour les notes basses, l'oreille humaine a tendance à se concentrer sur l'interaction des harmoniques inférieures pour ces notes. L'étirement de la série harmonique pourrait également être à l'origine des pics du spectre plus larges que prévu.
la source