Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1529 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Algorithme pour la FFT

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Algorithme pour la FFT

n°1661316
sarsipius
Posté le 20-12-2007 à 16:32:04  profilanswer
 

salut tout le monde
 
Je commence sérieusement à désespérer de trouver un jour comment faire et je viens solliciter votre aide
 
J'ai besoin d'identifier la puissance de l'harmonique à 50Hz d'un signal
Je pensais le faire facilement avec la FFT mais je n'y comprends rien !
 
Est-ce que quelqu'un pourrait m'indiquer une libraire facilement utilisable pour faire une FFT ?
 
Merci de votre aide


---------------
Mon feedback
mood
Publicité
Posté le 20-12-2007 à 16:32:04  profilanswer
 

n°1661325
carden 752
Posté le 20-12-2007 à 16:48:56  profilanswer
 

Bonjour,  
 
Tu cherches quelque chose de bien spécifique, toutefois, je pense que le meux c'est que tu developpe un prog en fonction du modele de calcul de la FFT.  
 
A mon avis, regarde comment est fait le calcul de la FFT sur les oscillos, je c que c tres rapide dans certains cas.
 
Bon courage, je ne pourrais peut etre pas bcp plus t'aider

n°1661332
sarsipius
Posté le 20-12-2007 à 16:56:03  profilanswer
 

je cherche juste à faire une fft... il n'y a pas grand chose de spécifique
 
une fois que j'aurais les coefficients je devrais pouvoir identifier le pic à 50Hz et calculer sa puissance


---------------
Mon feedback
n°1661649
nerisson
Pic-pic
Posté le 21-12-2007 à 08:35:08  profilanswer
 

Chez Apache peut être:
http://commons.apache.org/math/


---------------
Light is right
n°1662516
wapcamer
Posté le 23-12-2007 à 02:36:15  profilanswer
 

drap'
Qq il y a de spécial à 50hz?
 
Matlab serait pas plus adapté pr ce genre du choses, ou t'as vraiment besoin de Java ?


---------------
Voir les RAW sous Android: https://market.android.com/details? [...] .RawVision Blog Photo: http://photouch.me Applications mobiles: http://caketuzz.com Wapcam Project: http://wapcam.mobi
n°1662647
jagstang
Pa Capona ಠ_ಠ
Posté le 23-12-2007 à 19:04:19  profilanswer
 

wapcamer a écrit :

drap'
Qq il y a de spécial à 50hz?
 
Matlab serait pas plus adapté pr ce genre du choses, ou t'as vraiment besoin de Java ?


réseau électrique ?


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
n°1662648
jagstang
Pa Capona ಠ_ಠ
Posté le 23-12-2007 à 19:05:08  profilanswer
 

sarsipius a écrit :

je cherche juste à faire une fft... il n'y a pas grand chose de spécifique
 
une fois que j'aurais les coefficients je devrais pouvoir identifier le pic à 50Hz et calculer sa puissance


 
et ça :  
http://www.cs.princeton.edu/introc [...] .java.html
 


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
n°1662752
sligor
Posté le 24-12-2007 à 10:22:52  profilanswer
 

Je ne vois pas l'intérêt de faire une FFT pour un seul coefficient (l'harmonique en l'occurrence).
Autant calculer ce coefficient directement  

n°1663278
sarsipius
Posté le 27-12-2007 à 09:49:49  profilanswer
 

vas y sligor lâche toi
si tu as une autre proposition je suis preneur


---------------
Mon feedback
n°1663292
sligor
Posté le 27-12-2007 à 10:29:54  profilanswer
 

C'est quoi le but ? C'est pour mesurer quoi ?

mood
Publicité
Posté le 27-12-2007 à 10:29:54  profilanswer
 

n°1663887
sarsipius
Posté le 29-12-2007 à 11:03:29  profilanswer
 

ça me paraissait pourtant clair vu ce que j'ai expliqué dans le topic de tête : évaluer la puissance du pic à 50Hz
 
si tu peux me le calculer sans passer par une FFT dis moi comment faire ? ;)


---------------
Mon feedback
n°1663888
sligor
Posté le 29-12-2007 à 11:08:38  profilanswer
 

sarsipius a écrit :

ça me paraissait pourtant clair vu ce que j'ai expliqué dans le topic de tête : évaluer la puissance du pic à 50Hz
 
si tu peux me le calculer sans passer par une FFT dis moi comment faire ? ;)


Ca voudrias dire que tu as un signal déjà un signal en watt comme unité en entrée, ce dont je doute, je voulais dire physiquement c'est quoi l'expérience, c'est quoi le capteur ? Il vient d'où le signal ?
 
Sinon c'est quoi ton niveau en maths ? Est-ce que tu sais ce qu'est (à cocher):
[ ]un nombre complexe
[ ]Le module d'un nombre complexe
[ ]Une exponentielle complexe


Message édité par sligor le 29-12-2007 à 11:11:47
n°1664673
sarsipius
Posté le 02-01-2008 à 11:47:17  profilanswer
 

merci sligor mais apparemment tu ne comprends pas ce dont j'ai besoin
 
pendant ce temps j'ai avancé et j'ai récupéré et adapté un morceau de code me permettant de calculer une FFT
 
http://www.codeproject.com/KB/reci [...] print=true
 
j'ai un signal composé de 5000 échantillons
comme le signal qui doit être passé en entrer doit avoir un nombre d'échantillons égal à une puissance de 2, je passe les 4096 premiers échantillons
 
je récupère donc 4096 valeurs après calcul de la FFT et ce que je ne comprends pas c'est le lien avec les fréquences...
 
je pensais que j'obtiendrais quelque chose avec en abscisses les fréquences en Hz et en ordonnées les puissances en dB mais apparemment ce n'est pas le cas
 
comment je peux passer de mes 4096 valeurs calculées avec les FFT à des valeurs en dB en fonction des fréquences ?
 
merci


---------------
Mon feedback
n°1664680
sligor
Posté le 02-01-2008 à 11:51:51  profilanswer
 

sarsipius a écrit :

merci sligor mais apparemment tu ne comprends pas ce dont j'ai besoin
 
pendant ce temps j'ai avancé et j'ai récupéré et adapté un morceau de code me permettant de calculer une FFT
 
http://www.codeproject.com/KB/reci [...] print=true
 
j'ai un signal composé de 5000 échantillons
comme le signal qui doit être passé en entrer doit avoir un nombre d'échantillons égal à une puissance de 2, je passe les 4096 premiers échantillons
 
je récupère donc 4096 valeurs après calcul de la FFT et ce que je ne comprends pas c'est le lien avec les fréquences...
 
je pensais que j'obtiendrais quelque chose avec en abscisses les fréquences en Hz et en ordonnées les puissances en dB mais apparemment ce n'est pas le cas
 
comment je peux passer de mes 4096 valeurs calculées avec les FFT à des valeurs en dB en fonction des fréquences ?
 
merci


Répond à mes questions, je suis désolé mais si tu ne sais pas ce que tu mesures tu ne peux pas convertir en dB. Sinon ça sert à rien de calculer 4096 valeurs alors que tu n'as besoin que d'une seule.

n°1664684
sarsipius
Posté le 02-01-2008 à 12:03:19  profilanswer
 

j'ai un signal composé de 5000 échantillons enregsitrés sur 10 secondes
je veux mesurer la "puissance" en dB du pic à 50Hz
 
tu ferais ça comment toi à part avec Fourier ?!
 
et sinon à tes 3 questions je réponds positivement...


---------------
Mon feedback
n°1664700
sligor
Posté le 02-01-2008 à 12:58:57  profilanswer
 

sarsipius a écrit :

j'ai un signal composé de 5000 échantillons enregsitrés sur 10 secondes
je veux mesurer la "puissance" en dB du pic à 50Hz
 
tu ferais ça comment toi à part avec Fourier ?!
 
et sinon à tes 3 questions je réponds positivement...


Ton signal c'est un son numérique si j'ai bien compris.
Tu fais du Fourrier que sur une seule fréquence, pas la peine de s'emmerder avec de la FFT, la transformée de Fourier discrète est aussi rapide pour calculer un unique coefficient et en plus elle est beaucoup plus simple.
 
http://fr.wikipedia.org/wiki/Trans [...] cr%C3%A8te
 
http://upload.wikimedia.org/math/1/7/0/170d04aa731095f46c9334dfb364a71d.png
 
Tu n'a donc qu'à calculer S(k) pour k=50*N/(fréquence d'échantillonage) (il y a une simplification avec les N dans la formule dessous)
Choisis N de façon à avoir k entier, le plus grand possible pour avoir une meilleure précision mais cela demande une mesure plus longue (a toi de faire le choix entre précision/nombre d'échantillons qui te convient)
 
Pour avoir la puissance tu prends le module de (S(k)/N)
Pour convertir en dB c'est 20log(module(S(j)/N)) + A
Avec A une constante qui permet de définir ton niveau 0 ( et oui le dB est une unité relative)
 
 

n°1664712
sarsipius
Posté le 02-01-2008 à 13:36:19  profilanswer
 

non il ne s'agit pas d'un son numérique mais peu importe
 
le N est fixe et je ne peux pas le modifier... il est à 500Hz
 
je vais essayer ce que tu me proposes là
 
merci


---------------
Mon feedback
n°1664715
sligor
Posté le 02-01-2008 à 13:39:45  profilanswer
 

sarsipius a écrit :

non il ne s'agit pas d'un son numérique mais peu importe
 
le N est fixe et je ne peux pas le modifier... il est à 500Hz
 
je vais essayer ce que tu me proposes là
 
merci


Attention N c'est le nombre d'échantillons(sans unité), ce n'est pas la fréquence d'échantillonage F !


Message édité par sligor le 02-01-2008 à 13:39:58
n°1664717
sarsipius
Posté le 02-01-2008 à 13:44:12  profilanswer
 

ok pardon j'ai lu trop vite


---------------
Mon feedback
n°1664850
sarsipius
Posté le 02-01-2008 à 16:53:17  profilanswer
 

ça a l'air de pas trop mal fonctionner avec la DFT
 
merci sligor


---------------
Mon feedback
n°1665048
sarsipius
Posté le 03-01-2008 à 08:33:30  profilanswer
 

j'ai encore une question concernant la FFT pour ne pas rester bête
 
quand j'utilise le lemme de Danielson-Lanczos pour calculer la FFT je récupère 4096 valeurs puisque je fournis en entrée 4096 échantillons
comment je peux passer au spectre en fréquence/dB ?
ça doit être en fonction de la fréquence d'échantillonnage et du nombre d'échantillons mais je ne trouve rien à ce sujet...


---------------
Mon feedback
n°1666145
wapcamer
Posté le 04-01-2008 à 22:06:10  profilanswer
 

tu fais -20log(ordonnée) et tu as la puissa,ce en dB


---------------
Voir les RAW sous Android: https://market.android.com/details? [...] .RawVision Blog Photo: http://photouch.me Applications mobiles: http://caketuzz.com Wapcam Project: http://wapcam.mobi
n°1666314
sarsipius
Posté le 05-01-2008 à 10:11:32  profilanswer
 

ça ne m'avance pas du tout ça...


---------------
Mon feedback
n°1667329
sligor
Posté le 07-01-2008 à 19:01:38  profilanswer
 

sarsipius a écrit :

j'ai encore une question concernant la FFT pour ne pas rester bête
 
quand j'utilise le lemme de Danielson-Lanczos pour calculer la FFT je récupère 4096 valeurs puisque je fournis en entrée 4096 échantillons
comment je peux passer au spectre en fréquence/dB ?
ça doit être en fonction de la fréquence d'échantillonnage et du nombre d'échantillons mais je ne trouve rien à ce sujet...


Tu à 4096 valeurs S(k) avec k=0..4095
 
k=frequence*(Nombre d'échantillon)/(fréquence d'échantillonage)
donc dans ton cas frequence=k*(frequence d'échantillonage)/4096
 
Aprés ta valeur en db=-20log(S(k))+Constante ou db=-10log(S(k))+Constante, selon ce que tu mesures (mais comme tu ne veux pas le dire je ne pas pas t'aider pour ça), la constante dépends également ce que tu mesures car il y a plein de sous unité de mesure du decibel, je te laisse regarder cette section pour t'en convaincre:
http://en.wikipedia.org/wiki/Decib [...] asurements

n°1680736
verdy_p
Posté le 01-02-2008 à 21:08:32  profilanswer
 

La FFT calcule, si je ne m'abuse, une suite de puissance pour chaque intervalle de fréquence, mais sa valeur est *complexe*. Il faut d'abord convertir ça en module avant d'en prendre le log.
 
Ensuite les décibels sont toujours mesurés par rapport à une puissance unitaire: ils mesurent un ratio entre deux puissances. Suivant la puissance de base du signal, P0, le rapport P/P0 est celui dont on prend le logarithme, ce qui fait que les bels (et décibels, dix fois la valeurs en bels) diffèrent d'une constante.
Enfin la puissance P (module de la valeur complexe de FFT) dépend à l'intervalle entre les fréquences, avec un cofacteur dont il faut adapter l'effet: essayez en prenant moitié moins d'échantillon sur un signal sinusoïdal pur et vous verrez l'effet que cela peut avoir sir la fréquence d'échantillonngag n'est pas alignée sur un multiple exact de la fréquence réelle du signal pur. Il y a une correction à apporter pour en déduire la puissance réelle (estimée selon une moyenne car la phase n'est pas connue et est fixée arbitrairement par l'échantillonnage). En pratique cela veut dire que la FFT minor légèrement la puissance réelle, et d'autant plus que le nomber d'échantillon est insuffisant: la marge d'erreur est élevée pour les dernières valeurs de la FFT correspondant aux fréquences les plus hautes qui sont les plus atténuées et dont la mesure de puissance est la plus imprécise. Si l'échantillonnage est fait à 500 hertz, les puissances obtenues au dela de 250 Hz n'ont aucune signification.
 
Mais besoin de faire une FFT complète pour mesurer une seule composante: on fait seulement le produit du signal (modulation) avec deux sinusoïdes pures à 50Hz en décalage de phase de 90°, et on somme le tout. Des deux composantes obtenues qui forment une puissance complexe, on prend le module puis le logarithme.
 
Le logarithme du module est celui d'une racine carré, c'est équivalent à diviser par deux le logarithme de le somme des carrés des deux amplitudes moyennes calculées sur chacun des deux signaux modulés (sachant aussi qu'un signal mesuré a une puissance qui est elle même un carré et dont le log est double par rapport à l'amplitude du signal).
 
Si on neprend qu'une seule composante et pas la seconde, on ignore le déphasage possible entre le signal mesuré et la fréquence d'échantillonnage ; l'erreur sera grossière: la puissance mesurée (comme c'est le cas des transformées en sinus ou en cosinus) en dB sera presque toujours trop faible, sauf rare exception.
 
Maintenant faites votre choix mais sachez ce que vous voulez mesurer: puissance réelle, puissance en phase, puissance en déphasage, puissance moyenne amortie, puissance instantanée. D'ailleurs la puissance elle-même (carré d'uen amplitude) n'est pas forcément ce qu'on cherche.


Message édité par verdy_p le 01-02-2008 à 21:09:16
n°1680737
verdy_p
Posté le 01-02-2008 à 21:17:54  profilanswer
 

Optimisation possible: 5000 échantillons sur 10 secondes, la fréquence d'échantillonnage 500 Hz est un multiple exact de la composante à mesurer à 50Hz: tous les 10 échantillons on refait le même cycle sur les deux composantes à 50 hertz. Tracez les 10 points sur un cercle unitaire, on voit tout de suite les symétries: il est possible de faire la somme directe des échantillons tous les 10 échantillons, pour n'avoir plus que 10 valeurs puis seulement de multiplier par un sinus ou cosinus (et encore: il y a des symétries, il sufit d'ajouter ou retrancher entre elles les sommes avant de faire le produit, comme on factise une somme avec un facteur commun.
 
Donc 5 multiplications complexes au maximum, moins en fait car il y a des éléments nuls si on met deux des 10 points du cercle unitaire sur un des axes, puisque'il est permis de prendre un déphasage arbitraire avant la modulation. Avec ces optimisations, on fait ce que la FFT cherche à réaliser simultanément sur tous les autres coefficients dont on n'a pas besoin ici.


Message édité par verdy_p le 01-02-2008 à 21:49:24
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Algorithme pour la FFT

 

Sujets relatifs
[C++] [résolu] Besoin d'un coup de main pour déboguer mon algo de trialgorithme:arbre binaire de recherche
[JAVA]Algorithme de calcul de la limite de la somme des entiersAlgorithme par séparation et évaluation
[STL] Algorithme pour la valeur la plus fréquente d'un conteneur ?Algorithme parallélisé: Je n'arrive pas à l'écrire avec fork()
[java] algorithme du simplexeAlgorithme Monte Carlo
défi algorithme datealgorithme de gauss
Plus de sujets relatifs à : Algorithme pour la FFT


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR