Se connecter / S'enregistrer
Votre question

programme pour transformé de fourier discrète

Tags :
  • Programme
  • Programmation
Dernière réponse : dans Programmation
22 Mars 2008 20:06:47

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

Autres pages sur : programme transforme fourier discrete

a b L Programmation
22 Mars 2008 20:44:45

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.
29 Mars 2008 17:35:21

je sais mais j'ai beau essayé je n'y arrive pas ...
ma liste de valeur est la liste 1 et j'ai rentré le code:
ListPlot[Abs[Fourier[liste1]], Joined -> True]
mais j'obtiens vraiment un truc étrange
Contenus similaires
29 Mars 2008 17:37:10

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
a b L Programmation
29 Mars 2008 19:46:09

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.
30 Mars 2008 01:49:34

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
a b L Programmation
30 Mars 2008 13:04:09

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.
30 Mars 2008 15:09:45

est-ce que tu as une idée pour que je repère facilement les fréquences qui m'intéressent ...
je ne sais pas ... en rajoutant un sinus dont on connait la fréquence ou en divisant par l'echantillonage
30 Mars 2008 15:11:33

quand je dis fréquence qui m'intersse je veux dire là où il y a des pics plus importants
a b L Programmation
30 Mars 2008 16:04:58

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.
30 Mars 2008 17:28:58

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)
a b L Programmation
30 Mars 2008 19:55:20

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]
4 Avril 2008 06:55:40

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.
a b L Programmation
4 Avril 2008 19:56:32

Peux-tu commenter et espacer ton code ? (je n'exécute aucun code)
Après je regarderai.

Déjà, de ton côté, rien qu'en faisant cette revue de code tu peux trouver des erreurs.
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS