Transformée de Fourier
Répondre à la discussion
Affichage des résultats 1 à 13 sur 13

Transformée de Fourier



  1. #1
    BHM

    Transformée de Fourier


    ------

    Bonjour,
    je ne suis pas sure de poster dans le bon forum étant donné que ma question releve du traitement du signal, aussi bien que de math ou d'algorithmique.

    Voila, pour vous expliquer mon but, c'est très simple, j'essai de coder un petit accordeur simple en java.
    Pour cela, je voudrai utiliser la transformée rapide de Fourier.

    En gros, j'ai récupérer une classe Java sur internet me permettant d'appliquer l'algo sur un tableau de données.
    J'ai générer un piste en PCM avec audacity correspondant a une note simple, le la 440 (la standard d'une guitare), que je passe ensuite a mon algorithme dans le but d'obtenir un spectre de frequence.

    Or, et c'est la que ca me pose soucis, je ne sais pas comment utiliser le resultat.
    J'ai appliquer l'algo sur des plages de 1024 échantillons successives (des blocs de 2 octets) de ma piste et je n'obtiens jamais le meme resultat en sortie, je ne repere pas de "pic" dans les valeurs des données.
    Je ne suis meme pas sur de savoir faire la correspondance entre les données que j'obtiens et le spectre de frequence.

    Dernier point, je n'y connais pas grand en signal et je pense que dans ce cas, ca n'a pas d'importance, mais lorsque je lis les octets de ma piste, je ne parviens pas a reperer de "cycle" récurrent alors que je pensai ca logique étant donné que ma piste n'est constitué que d'une note.

    Voila, si quelqu'un aurait une petite piste, un chemin vers lequel m'aiguillait, ou pourrait m'expliquer plus concretement comment utiliser la FFT, ca m'arrangerait (la littérature sur le sujet étant assez assomante :s)

    Merci d'avance,
    BHM

    -----

  2. #2
    PA5CAL

    Re : Transformé de Fourier

    Bonjour

    De bonnes bases en traitement numérique du signal sont nécessaires pour comprendre la problématique, et aussi certainement la cause de tes déconvenues.

    Par ailleurs, je doute qu'une petite transformée rapide de Fourier te permettre de réaliser un accordeur, compte tenu du manque relatif de précision et de résolution pour discriminer une fréquence.


    Il me semble utile de rappeler qu'une FFT ne calcule pas le spectre continu d'un signal continu, mais évalue seulement une représentation spectrale discrète (non continue) d'un signal discret (échantillonné) sur une fenêtre temporelle limitée (signal tronqué).

    Ainsi, si ton signal de départ à 440Hz (La3) est constitué de 1024 valeurs échantillonnées à la fréquence de 44100Hz (qualité CD audio), alors :
    - la fréquence fondamentale de la FFT est f1=43,066Hz
    - les échantillons représentent environ 10,2 périodes du signal (soit un nombre non entier de périodes) d'environ 100,2 échantillons chacune (soit un nombre non entier d'échantillons)
    - les harmoniques calculées sont des multiples de f1
    - les deux harmoniques les plus proches de la fréquence du signal sont f10=430,664Hz (≈La3 – 1/6 ton) et f11=473,73Hz (≈Sib3 + 1/8 ton)

    Bref, alors qu'un guitariste pourrait accorder son instrument avec une précision proche du hertz en appliquant une méthode de battements, l'emploi d'une FFT avec les chiffres que j'ai donnés aboutit à une incertitude vingt fois plus grande !


    On pourrait améliorer les résultats dans une certaine mesure, mais personnellement, je pense que pour réaliser un accordeur, c'est la méthode choisie qui est à revoir.
    Dernière modification par PA5CAL ; 04/06/2012 à 12h23.

  3. #3
    BHM

    Re : Transformé de Fourier

    Oui, effectivement, j'ai de grosses lacunes en traitement du signal, je ne suis qu'un humble développeur à la base

    Je suis d'accord concernant la précision, mais à vrai dire, je voulai prendre blocs de 1024 échantillons pour les tests, puis une fois fonctionnelle, prendre des blocs de 8192 échantillons.
    Ce qui donnerait f1 = 5.38 Hz et situerait f81 = 436.05 Hz et f82 = 441.43 Hz
    Donc une précision nettement plus acceptable je pense.

    J'ai compris l'histoire des 10.2 échantillons, j'avais pas fait le calcul mais c'est logique, serait-ce plus commonde d'échantillonner le signal a un multiple de la fréquence rechercher (44000 Hz pour l'exemple)?

    Pour finir, je ne sais pas comment a partir des résultats de la FFT, déterminer quel est la note fondamental du signal (je ne suis même pas sur de bien m'exprimer).
    Je pensais qu'en calculant la magnitude (racine(reel² + imaginaire²)) de toutes les fréquences, et en regardant la plus importante j'en déduirai la bonne note mais en l'occurence (test avec 8192 échantillons), la fréquence ayant la plus grande magnitude est f394, soit 2121 Hz, ce que je ne comprend pas.

    Concernant la méthode, j'ai regardé un peu partout sur le net, et meme si plusieurs méthodes sont utilisées, la FFT revient très souvent mais je ne parviens tout de même pas à trouver d'infos sur la méthode utilisée ensuite.
    De plus, l'accordeur n'est qu'un simple projet simple de traitement du son, j'ai d'autre idée qui nécessiteront l'utilisation de la FFT, ce pourquoi j'aimerai comprendre comment elle fonctionne ^^

  4. #4
    lou_ibmix_xi

    Re : Transformé de Fourier

    Deux remarques:
    Il faut que tu sois sûr du format de sortie de ta FFT, suivant l'implémentation de l'algo tu peux avoir les valeurs pour les fréquences négatives avant les valeurs pour les fréquences positives (c'est le cas pour MATLAB, OCTAVE et fftw je suppose), voire pas de fréquences négatives du tout (alors l'entrée doit être réelle, et la sortie possède deux fois moins de points que l'entrée).

    De plus, la fréquence fondamentale n'est pas forcément le pic le plus haut... Donc un algo un peu plus fin doit être nécessaire pour chercher la fréquence fondamentale, par exemple, Fmax fréquence du pic le plus haut, F0 = Fmax/2, puis tant que maximum local à F0/2, alosr F0 = F0/2... Mais ce n'est pas le top non plus si il manque des harmoniques (signaux carrés par exemple)

  5. A voir en vidéo sur Futura
  6. #5
    BHM

    Re : Transformé de Fourier

    Alors concernant l'algo, c'est une implémentation de l'algo Cooley-Tukey d'après les commentaires de la classe que j'utilise.
    Je précise que je me suis appuyé de cette page pour essayer de comprendre : http://www.unilim.fr/pages_perso/jea...ourier/fft.htm
    J'ai lu un paquet de truc, mais cette explication m'a paru plus simple à comprendre pour mon pauvre cerveau fatigué.

    A priori, les fréquences positive sont stockées dans la première partie du tableau, tandis que les négatives sont stockées en deuxieme partie.
    Les données en entrée étant réelles, je ne me sers que de la premiere partie du tableau.

    Je viens de tester avec un son enregistré via un micro (toujours un la 440 (venant de ma jolie seche ^^)) et les résultat obtenu sont complètement différent.
    Je dois avoir mal compris comment extraire les infos du fichier wav généré avec audacity (je pensai pourtant qu'aucun traitement n'était effectué sur le signal et que passé le header, les données était stocké en brut mais bref...)

    La j'obtiens des résultat cohérent, j'ai bien des pics bien distinct, notamment a la fréquence 441 Hz, ce qui est cohérent, mais j'en ai d'autres plus important dans les basses fréquences (vers 110 Hz et 220 Hz).
    Serait-ce du au chuintement du micro ou justement ce sont ces fameuses harmoniques qui posent pb?
    D'instinct, je penserai à commencer a regarder les résultat qu'a partir de 300 Hz mais je ne suis pas sur que ce soit la bonne méthode, étant donné que j'aimerai pouvoir adapter mon accordeur pour des usages plus "éxotiques" ou les basses seront plus importantes.

  7. #6
    lou_ibmix_xi

    Re : Transformé de Fourier

    Je dois avoir mal compris comment extraire les infos du fichier wav généré avec audacity (je pensai pourtant qu'aucun traitement n'était effectué sur le signal et que passé le header, les données était stocké en brut mais bref...)
    Effectivement, ce peut-être un problème dû au format des données, mais je pencherai plutôt sur une omission du "petit-boutient" des données dans un fichier WAV dès que les échantillons font plus d'un octet. Je te conseillerai, pour ce problème particulier, et de manière générale, d'utiliser une bibliothèque de lecture des fichiers WAV, plutôt que d'en coder une toi-même...

  8. #7
    PA5CAL

    Re : Transformé de Fourier

    Citation Envoyé par BHM Voir le message
    Ce qui donnerait f1 = 5.38 Hz et situerait f81 = 436.05 Hz et f82 = 441.43 Hz
    Donc une précision nettement plus acceptable je pense.
    Une précision meilleure, certes. Mais « acceptable » ? Ça dépend de ce que tu cherches à obtenir...

    Citation Envoyé par BHM Voir le message
    J'ai compris l'histoire des 10.2 échantillons, j'avais pas fait le calcul mais c'est logique, serait-ce plus commonde d'échantillonner le signal a un multiple de la fréquence rechercher (44000 Hz pour l'exemple)?
    Pour trouver la fréquence exacte du signal dans le résultat, il faut qu'elle soit un multiple de la fréquence fondamentale de la FFT. Par conséquent, pour une fenêtre de 8192 échantillons, il faudrait que la fréquence d'échantillonnage soit un sous-multiple de 3604480Hz (=8192x440Hz), comme par exemple 43957,073Hz...

    Le mieux, c'est encore de rechercher directement la fréquence de 440Hz, au lieu d'établir un spectre large et finalement approximatif qu'il faudra ensuite de tenter d'analyser.

    Citation Envoyé par BHM Voir le message
    en regardant la plus importante j'en déduirai la bonne note mais en l'occurence (test avec 8192 échantillons), la fréquence ayant la plus grande magnitude est f394, soit 2121 Hz, ce que je ne comprend pas.
    Je te suggère de vérifier ton programme et les conditions d'utilisation de la routine de FFT. Je pense notamment à l'ordre des octets de poids fort/poids faible des mots représentant la valeur des échantillons.

    Citation Envoyé par BHM Voir le message
    Concernant la méthode, j'ai regardé un peu partout sur le net, et meme si plusieurs méthodes sont utilisées, la FFT revient très souvent
    Faut-il préciser qu'on trouve énormément d'âneries sur Internet ?...

  9. #8
    BHM

    Re : Transformé de Fourier

    Une précision meilleure, certes. Mais « acceptable » ? Ça dépend de ce que tu cherches à obtenir...
    Oui, je vois... étant guitariste, je sais bien qu'un petit écart plus un petit écart plus un petit écart.... donne une grosse bouilli au final...
    Mais la le but étant vraiment de m'initier au traitement du son de manière général et pis de me confectionner un petit accordeur sur téléphone portable, le but n'étant pas de trouver un accordage exact mais approximatif pour d'affiner a l'oreille, ce que je trouve plus facile.

    Pour trouver la fréquence exacte du signal dans le résultat, il faut qu'elle soit un multiple de la fréquence fondamentale de la FFT. Par conséquent, pour une fenêtre de 8192 échantillons, il faudrait que la fréquence d'échantillonnage soit un sous-multiple de 3604480Hz (=8192x440Hz), comme par exemple 43957,073Hz...
    Oui je sais pas ou j'ai été le peché celui la, ce me parait ridicule en le relisant '^^

    Le mieux, c'est encore de rechercher directement la fréquence de 440Hz, au lieu d'établir un spectre large et finalement approximatif qu'il faudra ensuite de tenter d'analyser.
    Ca me parait plus interessant en effet, n'y connaissant pas grand chose, aurait tu le nom d'une méthode ou une piste a me fournir?

    Je te suggère de vérifier ton programme et les conditions d'utilisation de la routine de FFT. Je pense notamment à l'ordre des octets de poids fort/poids faible des mots représentant la valeur des échantillons.
    C'était pas le programme mais le fichier que je lisai (un wav), doit y avoir un histoire d'octet de poids faible, ou fort, je sais pas trop comment c'était encoder, je pensai que c'était du raw, quoiqu'il en soit apres un petit affichage graphique des valeurs, je me suis rendu compte que ca ne ressemblait en rien a une onde sinusoïdale tel que ca aurait du l'etre.
    Avec une note enregistré via le micro en "format brut", ca ressemble deja beaucoup plus a une onde. Et j'ai bien mes pics qui apparaissent, mais j'en ai deux qui m'embete (Cf post précédent)

    Faut-il préciser qu'on trouve énormément d'âneries sur Internet ?...
    Bien sur mais il y a aussi des gens compétents...

    Merci pour tes remarques en tout cas.

  10. #9
    BHM

    Re : Transformée de Fourier

    Effectivement, ce peut-être un problème dû au format des données, mais je pencherai plutôt sur une omission du "petit-boutient" des données dans un fichier WAV dès que les échantillons font plus d'un octet. Je te conseillerai, pour ce problème particulier, et de manière générale, d'utiliser une bibliothèque de lecture des fichiers WAV, plutôt que d'en coder une toi-même...
    Oui c'est ce que je vais tenter de faire, histoire de pouvoir comparer avec mon fichier "maison".
    Dernière modification par JPL ; 04/06/2012 à 15h20.

  11. #10
    PA5CAL

    Re : Transformé de Fourier

    Citation Envoyé par BHM Voir le message
    aurait tu le nom d'une méthode ou une piste a me fournir?
    J'ai parlé plus haut par exemple de la méthode par battements utilisée habituellement par les guitaristes. Cette méthode consiste à mélanger le signal entrant avec un signal de référence, et à écouter les battements lents résultants. Le réglage s'effectue en cherchant à annuler ou à réduire fortement la fréquence de ces battements.

    Mathématiquement, cela s'explique par la propriété suivante : pour un signal d'entrée de fréquence fsig et un signal de référence de fréquence fref et de même amplitude A, la somme de ces signaux donne :
    avec la fréquence des battements :
    et une fréquence élevée, qu'on élimine à l'aide d'une détection de crête :

    Dans un genre guère différent, on a le principe de la démodulation d'amplitude (AM) de type « hétérodyne » utilisé en radio, où le mélange consiste en une multiplication au lieu d'une somme. Mathématiquement, cela donne :
    avec la fréquence des battements :
    et une fréquence élevée, qu'on élimine par filtrage :

    Dans ces procédés, on commence par nettoyer le signal d'entrée de ses harmoniques et d'une partie du bruit qui l'accompagne en le filtrant grossièrement à l'aide d'un filtre passe-bande réglé autour de la fréquence attendue (pour cibler les 440Hz, on ne va conserver qu'un spectre allant de 350Hz à 550Hz par exemple), et on filtre le signal résultant (battements) à l'aide d'un filtre passe-bas à basse fréquence. L'analyse consiste en une simple mesure de cette basse fréquence.

    La mesure de fréquence des battements ne donne que l'erreur absolue entre la fréquence d'entrée et la fréquence de référence. Cela peut s'avérer suffisant. Mais si l'on souhaite déterminer si la fréquence d'entrée est trop haute ou trop basse, alors il faut recourir à un traitement supplémentaire, par exemple sous la forme d'une seconde démodulation avec un signal de référence déphasé de 90° par rapport au premier.


    On peut également utiliser le principe de la démodulation de fréquence (FM) par boucle à verrouillage de phase (PLL) ...
    Dernière modification par PA5CAL ; 04/06/2012 à 16h07.

  12. #11
    BHM

    Re : Transformée de Fourier

    Oulahhh, en voyant le terme battement, je suis aller faire un tour sur wikipedia histoire de voir de quoi il retourner et effectivement, c'est bien la méthode que j'utilise moi meme pour accorder ma gratte (à l'oreille).
    Sur cette meme page wikipedia il y a des enregistrement de ces battements avec des frequences de 440 Hz et 440.5 Hz, c'est affolant que le batement soit si visible.
    Moi meme, je pensai en accordant mon instrument que j'etai a plus ou moin quelques Hz, que meme en entendant plus le battement on ne pouvait pas avoir un accordage parfait.... je me suis tromper....
    J'ai l'air fin maintenant avec mes 1.5 Hz de trop, c'est ENORME!!!!

    Donc je vais essayer de voir du coté de ta méthode. Dommage, j'avai enfin réussi a faire un petit analyseur de spectre '^^

    Vais commencer par essayer de comprendre tes équations ^^
    Merci

  13. #12
    PA5CAL

    Re : Transformée de Fourier

    PS: j'ai oublié un terme 1/2 dans la formule de la démodulation AM. Dans le terme de droite, il faut lire :

  14. #13
    lou_ibmix_xi

    Re : Transformée de Fourier

    Pour t'amuser avec tout ça, je te conseillerai d'utiliser OCTAVE, le clône gratuit de MATLAB, c'est ce que je j'utilise pour prototyper des algo avec un peu de math.

Discussions similaires

  1. la transformée de la transformée de Fourier
    Par yuki-kurama dans le forum Mathématiques du supérieur
    Réponses: 7
    Dernier message: 09/03/2012, 20h01
  2. Réponses: 6
    Dernier message: 07/03/2012, 16h35
  3. Transformée de Fourier
    Par invite49b54ac2 dans le forum Mathématiques du supérieur
    Réponses: 12
    Dernier message: 31/08/2011, 16h36
  4. Stft, tfct (Short-Time Fourier Transform, transformée de Fourier à court terme)
    Par invite4ee6cce0 dans le forum Programmation et langages, Algorithmique
    Réponses: 7
    Dernier message: 24/08/2011, 12h17
  5. Transformée de Fourier plus, Transformée de Fourier moins.
    Par Romainco dans le forum Mathématiques du supérieur
    Réponses: 5
    Dernier message: 29/10/2008, 07h10