Détection de hauteur de piano

8

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.

DrTodd13
la source
La transformation constante-Q serait-elle utile pour cette application? wellesley.edu/Physics/brown/pubs/cq1stPaper.pdf
Atul Ingle
Juste curieux: quel type d'appareil matériel utilisez-vous pour la prise de signal, un micro classique?
amphibient
J'utilise un microphone Samson CO1U.
DrTodd13

Réponses:

6

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.

Hilmar
la source
Eh bien, j'utilisais la FFT ailleurs dans le programme pour les mesures d'inharmonicité et les calculs d'appariement partiels. Il était donc plus facile pour moi de le réutiliser à cette fin également. Je ne suis pas trop préoccupé par le bon marché, mais si les boucles verrouillées par phases sont meilleures, je les vérifierai. Étant donné que ce n'est pas mon domaine d'expertise, la mise en œuvre de certaines de ces choses peut sembler indéniable.
DrTodd13
2

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.

Kevin McGee
la source
Certaines des variantes du cepstre semblent intéressantes à essayer, je vais donc commencer par cela. Je devrais peut-être jeter la partie des échantillons qui correspond à la "attaque" / coup de marteau. Quelqu'un sait-il combien de temps il faut à la note pour atteindre un état stable ou existe-t-il un moyen de caractériser l'état initial pour que je puisse le filtrer?
DrTodd13
L'information est là, mais elle peut être difficile à trouver - regardez, par exemple, ce fil du forum «piano world» sur les caractéristiques «d'attaque»: pianoworld.com/forum/ubbthreads.php/topics/1125286/What% 20is
Kevin McGee
2

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.

Bjorn Roche
la source
Belle information, merci! Ce qui m'a intéressé, c'est un article intitulé "Accordage des instruments de musique basé sur l'entropie". Il utilise une mesure d'entropie pour calculer un accordage pour un piano donné en fonction des inharmonicités spécifiques du piano. J'essayais d'abord de dupliquer les résultats du papier puis de partir de là. Une fois / si cela réussit, je peux utiliser ce que ce post est sur le point d'accorder le piano à l'accordage calculé. Lorsque vous parlez d'utiliser la phase FFT, est-ce une sortie qui est généralement rejetée que je pourrais utiliser ou quelque chose interne? J'utilise le package FFT de quelqu'un d'autre.
DrTodd13
Je ne connais pas ces techniques (cela semble intéressant cependant). Je commencerais par des techniques standard avant de passer dans ce domaine. Bien que je choisirais une technique standard qui ressemble le plus à la technique avancée que vous souhaitez émuler.
Bjorn Roche
Les sorties FFT sont généralement dans des parties réelles et imaginaires. Vous pouvez traduire cela en magnitude et en phase de la manière habituelle (réel + imaginaire et mag & phase sont tous deux des représentations valides de nombres complexes). Comment utiliser cela pour le suivi de la hauteur est subtil - vous devrez lire le livre DAFX pour les deets.
Bjorn Roche
2

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.

hotpaw2
la source
1

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.

Nathan Day
la source
Eh bien, l'inharmonie n'est pas synonyme de variabilité. L'inharmonicité entraînerait le pic à un point différent, mais je ne vois pas pourquoi cela rendrait le pic plus large. Peut-être que la largeur du pic est due à la variance inhérente du signal au fil du temps et donc le raccourcissement de la période d'échantillonnage réduirait la variance?
DrTodd13