Bonjour,
j'ai un signal qui représente une note de musique, et je cherche à déterminer de quelle note de musique il s'agit. Pour cela, je fais une fft sur le signal.
J'obtiens donc l'amplitude en fonction de la fréquence.
Maintenant, je pensais récupérer la fréquence dont l'amplitude est la plus grande
Et donc freq est la fréquence de ma note.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 [maxi,freq]=max(abs(fft(signal)))
Seulement, j'obtiens par exemple freq = 268, ce qui correspond à un Do sur le 4eme octave, alors que je devrais obtenir freq = 523 (environ), ce qui correspondrait à un Do sur le 5eme octave.
J'ai donc la bonne note, mais pas le bon octave. Je pense que cela s'explique par le fait qu'une des harmoniques a une amplitude plus grande que la fondamentale.
Mon problème est donc soit de supprimer les harmoniques, soit de multiplier le coefficient de la fondamentale. Dans les deux cas, je ne sais pas comment faire.
Merci de votre aide
Partager