Se connecter avec
S'enregistrer | Connectez-vous

programme pour transformé de fourier discrète

Dernière réponse : dans Programmation

bonjour tout le monde !
Voilà je dois obtenir un programme qui me permettrait d'obtenir le spectre d'une courbe que j'acquière à l'aide d'un accéléromètre. Grâce au logiciel fourni avec l'accéléromètre, je peux obtenir un tableau de valeur (j'obtiens l'amplitude de l'accélération toutes le mms soit 30000 points pour 30s) et je voudrais à l'aide de ce tableau obtenir le spectre du signal.
Pouvez vous m'aider à le réaliser svp
soit avec visal c++
soit avec mathematica
PS : il existe bien une fonction sous mathematica mais j'obtiens vraiment des trucs bizarre
Lassé par la pub ? Créez un compte
Expert Programmation

A choisir, il vaut mieux utiliser mathematica ou mapple.
Et si c'est pour faire sa propre fonction, je pense qu'il vaut mieux rester sous mathematica, ça te sera plus simple pour faire les calculs.

et quand j'essaye avec un sinus je n'obtiens pas du tout le spectre :
data = Table[Sin[30 2 Pi n/200], {n, 200}];
ListLinePlot[Abs[Fourier[data]], PlotRange -> All]

enfin j'obtiens deux raies : une à 30 et l'autre à 170
Expert Programmation

Celle à 170 est grande ? parce que c'est peut-être dû à la précision (dans l'arrondi et le nombre de valeurs).
As-tu essayé de prendre une puissance de 2 pour n? par exemple 1024.

elles ont la même taille toute les deux
Sinon j'obtiens la même chose sauf que le spectre est déplacé, j'ai vraiment l'impression que l'abscisse ne correspond pas à la frequence et qu'il y a une sorte de symétre
Expert Programmation

Non, je disais n'importe quoi. Cette symétrie est normale puisque la transformée de Fourier du sinus est représentée par 2 pic de Dirac, donc c'est normal.
Ton abscisse va de 0 à 200, c'est l'échantillonnage.
Comme sin(an)=(e^(i.a.n) - e^(-i.a.n)) / 2i, et que ta transformée de Fourier sont des coefficients fréquentiels de e^(i.la suite), c'est normal que tu as 2 valeurs, il faut voir ça dans le plan complexe et pas le plan réel.
Expert Programmation

les 2 pics sont importants pour reconnaitre le sinus, Tu peux te contenter de ne prendre que la moitié [0, Pi] au mieu de [0, 2Pi] si tu n'analyses que des compositions sinusoïdales, mais pour des décomposition de signaux quelconque, il vaut mieux tout garder.

qu'est ce que tu veux dire par
Citation :
Tu peux te contenter de ne prendre que la moitié [0, Pi] au lieu de [0, 2Pi]

car ce qui est étrange également c'est que "mon spectre" s'étend en abscisse de 0 au nombre de valeurs de valeurs dans mon tableau ...(que ce soit pour le tableau à partir du sinus ou des résultats expérimentaux)
Expert Programmation

oui c'est normal pour le calcul des coefficients se fait de 0 à n, où n est le nombre d'échantillon (200). Ton spectre n'est donc que dans tes 200 valeurs, ça te retourne tous les coeff de la série de Fourier.
pour chaque valeur, c'est le coefficient multiplié par la fonction exponentielle complexe, la somme de toutes ces fonctions donne le signal initial. Ici, tu as une soustraction de 2 exponentielles qui donne un sinus.
Tu peux reporter tes valeurs de [0, 200] sur [-Pi, Pi]

Salut tout ça
On est le 4 Avril, il est 6h43 et j'ai jusqu'à 15h pour faire marcher mon programme de fft en C/C++.
Toute aide est la bienvenue d'autant que j'ai commencé ce projet dans l'esprit gérer des cartes d'acquisition.
Une sorte d'échange de bons procédés, que même si personne ne m'aide, je mettrai un lien au plus tard à 15h02 vers mon code source.
En attendant, voici la version qui donne :
[Etienne@boiboite FFT]$ g++ essai.cpp
essai.cpp: In function ‘long int inverse(int, int)’:
essai.cpp:58: attention : converting to ‘int’ from ‘double’
essai.cpp:59: attention : converting to ‘int’ from ‘double’
essai.cpp: In function ‘int main()’:
essai.cpp:74: attention : converting to ‘int’ from ‘double’
[Etienne@boiboite FFT]$ ./a.out
Erreur de segmentation
code source :
http://rafb.net/p/6nKL9g87.html
Au fait le converting to ‘int’ from ‘double’ c'est pas grave.
Merci d'avance.
Lassé par la pub ? Créez un compte
Tom's guide dans le monde