Matlab - FFT - Au secours ! -

Résolu
Asalix Messages postés 4 Date d'inscription vendredi 10 février 2006 Statut Membre Dernière intervention 12 février 2006 - 10 févr. 2006 à 22:21
hamid_raf Messages postés 36 Date d'inscription mercredi 25 janvier 2006 Statut Membre Dernière intervention 28 décembre 2008 - 28 avril 2008 à 21:56
Bonjour à tous !

Ceci est un appel au secours général !




Je suis élève en L3 Sciences de la Terre et de l'Univers à la fac de Nice et pour le 17 février j'ai à rendre un projet tutoré sous Matlab. Le seul hic. est que nous n'avons pas eu de cours sur le logiciel car nous n'avons travaillé que quelques scéances avec Force 2.0. ... De plus nos profs ne sont pas très calés sur le sujet et les Maths Infos ne sont pas très coopératifs quand ils entendent parler de Force 2.0 ou Matlab ... et n'ont rien pu nous expliquer.





Est ce que quelqu'un peut m'éclairer sur la FFT ? Avec l'aide du logiciel les questions simples ont pu être faites avec tant de bien que mal ... mais là ...





Je dois calculer les périodicités de cycles glaciaires en utilisant la FFT : et là, c'est le flou.





Si quelqu'un veut bien m'aider je pourrais vous envoyer mon sujet et le travail déjà fait. Ce n'est pas très long, la FFT est la seule question sur laquelle je bute.





En vous remerciant tous !





Audrey


[mailto:salix@tele2.fr salix@tele2.fr]


06.20.38.81.89

8 réponses

Egyde Messages postés 158 Date d'inscription lundi 17 mai 2004 Statut Membre Dernière intervention 16 juillet 2007
11 févr. 2006 à 11:21
Tu parles de Transformée de Fourrier Rapide? Qu'est-ce qui te gène exactement? La fonction de MATLAB est bien documentée pourtant (>>help fft).
3
Asalix Messages postés 4 Date d'inscription vendredi 10 février 2006 Statut Membre Dernière intervention 12 février 2006
11 févr. 2006 à 16:07
Je ne sais pas si elle est rapide ou non ... mais ce que je sais c'est qu'elle me gache la vie depuis 2 mois . En effet l'aide m'a dejà permis de faire quelques manip mais le souci c'est que ma question et les questions de l'aide ne sont pas tout à fait les mêmes ! Si tu veux bien que je t'explique ça n'est surement pas compliqué du tout !

On a trois colonnes de données (67 en tout). Une colonne pour les âges ; une pour le CO2 et une pour le delta O18. La première question que j'ai faite constituait en un graphique le temps (x) en fonct du CO2 (y) ; la deuxième faite aussi le temps en fonction du delta O18. La troisième question n'a pas du rapport avec la suite.

Et la question 4 c'est cette FFT ou plus précisément "Trouvez les différents cycles glaciaires en étudiant les variations de DO18. On utilisera les transformées de Fourier". Pour pouvoir déjà essayer d'y répondre j'ai interpolé les données tous les 2000 ans en faisant :
>> % Interpolation des données tous les 2 000 ans pour le delta
t = 2;
for ii = 1:nmil-1;
PentedeltaO (ii) = (delta (ii+1) - delta (ii)) / (time (ii+1) - time (ii));
deltath (ii) = (PentedeltaO (ii) * t) + delta (ii);
end

Puis j'ai fait la FFT dans le plan complexe (en recopiant bêtement l'aide) :
>> % Coefficients de Fourier dans le plan complexe
tf_delta = fft (deltath);
figure (3) ; plot(tf_delta,'ro')
title('Coefficients de Fourier dans le plan complexe');
xlabel('Axe Réel');
ylabel('Axe Imaginaire');

Et là je devrais faire un graphique dans la suite logique des choses qui me donne en x (cycles/années ou fréquence je crois) et l'amplitude en y (si l'amplitude c'est bien ce qui nous est donnée par abs(tf_delta)).
J'ai donc tapé ça mais je ne suis pas convaincue du tt ... vu que je ne compends pas ce que je fais !!!
>> % Transformée de Fourier du delta O18
fech = 1/t;
tf_delta = fft (deltath) / fech;
amplitude = abs(tf_delta);
figure (4) ; plot(0:1/(t*(nmil-1)):(nmil-2)/(t*(nmil-1)),amplitude,'b.-');
title('Différents cycles glaciaires issus des variations du Delta O18 (Periodogram)');
xlabel('...');
ylabel('Amplitude du spectre');
grid on;

La dernière étape consisterait à inverser le graphique pour qu'en abscisse on est les années/cycle, la période quoi ! l'amplitude max correspondrait à ma périodicité de cycle glaciaire .

Si tu es mon chevalier servant qui me libérera de ce problème je t'en serai éternellement reconnaissante !!!

Merci pour tout

Audrey
3
Egyde Messages postés 158 Date d'inscription lundi 17 mai 2004 Statut Membre Dernière intervention 16 juillet 2007
11 févr. 2006 à 18:08
J'ai oublié de préciser que tu as bien fait d'interpoler tes données (enfin j'imagine puisque je n'ai pas les données sous la main). Il faut en effet que le pas "d'échantillonnage" entre 2 mesures soit constant si tu veux interpréter correctement ta transformée de Fourrier. Si entre 2 mesures tu as une période différente (1000 et 2000 ans par exemple), à toi de construire le bon vecteur avant d'appeller la fonction FFT.
3
Egyde Messages postés 158 Date d'inscription lundi 17 mai 2004 Statut Membre Dernière intervention 16 juillet 2007
11 févr. 2006 à 17:54
Puisque c'est la période que tu recherches, tu devrais pouvoir te contenter du plan x = fréquence, y = amplitude du spectre (pas besoin du plan complexe; utilise plutôt la fonction abs, comme tu étais partie). En tenant compte de la symétrie du spectre, il doit bien y avoir une raie assez flagrante entre 1 et nb_points_en_x/2, non? Cette raie correspond au phénomène de périodicité. Ensuite, c'est juste une histoire de conversion fréquence->période.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Asalix Messages postés 4 Date d'inscription vendredi 10 février 2006 Statut Membre Dernière intervention 12 février 2006
11 févr. 2006 à 21:10
Oui merci de confirmer l'interpolation des données. C'est déjà une bonne chose de faite !

Après je n'y arrive vraiment plus ... Je ne sais pas quoi faire !!! Ce que je fais ça me donne un graphique tout moche et je ne sais même pas si c'est ce que je dois obtenir !

Je te copie colle mes données est ce que tu peux juste me dire si ce que j'ai tapé c'est correct et ce que je dois tapé pour continuer ??? Car si je sais faire cette question je saurais terminer mon projet !!!

Ou alors as tu une adresse mail que je t'envoie mon sujet ?

Après si tu n'as pas de temps à y consacrer je comprendrais ! lol

Pour les données c'est :

>> time = [0.1 1.7 3.53 6.8 7.5 9.14 12.93 16.25 20.09 24.39 29.72 30.91 32.8 34.87 38.66 42.31 44.35 46.22 50.15 51.77 53.86 55.78 57.8 59.77 62.08 63.96 66.54 68.49 70.77 72.69 74.72 76.86 80.9 82.92 84.7 86.68 88.52 90.63 92.7 94.94 96.81 98.95 101.04 103.13 105.62 107.65 110.51 112.7 115.29 117.41 119.5 121.43 123.38 124.88 126.77 128.78 130.46 132.28 134.17 136.7 138.41 140.43 143.37 146.34 150.7 154.97 159.69];
>> delta = [12.4 12.2 12.1 11.7 11.7 11.8 5.6 2.2 1.5 2.7 3.4 3.7 3.7 4 3.8 3.8 4.2 4.1 5.3 5 4.6 5.4 5.3 4.9 3.9 3.9 3.5 4 4.3 4.8 5.3 6.3 7.5 7 7 6.5 6 5.7 6 7 7.6 7.4 7.3 7.6 7.9 6.3 6.3 6.8 8 9.5 10.8 11.3 11.1 10.6 8 5 3 4 1.1 2 2 2.1 3 2.4 1.5 1.5 3.1];
>> nmil = 67;

Au passage nmil c'est mon nombre de données.

>> % Interpolation des données tous les 2 000 ans pour le delta
t = 2;
for ii = 1:nmil-1;
PentedeltaO (ii) = (delta (ii+1) - delta (ii)) / (time (ii+1) - time (ii));
deltath (ii) = (PentedeltaO (ii) * t) + delta (ii);
end

>> % Transformée de Fourier du delta O18
fech = 1/t;
tf_delta = fft (deltath) / fech;
amplitude = abs(tf_delta);
plot(0:fech*(1/(nmil-1)):fech*((nmil-2)/(nmil-1)),amplitude,'b.-');
title('Différents cycles glaciaires issus des variations du Delta O18 (Periodogram)');
xlabel('Fréquence');
ylabel('Amplitude du spectre');
grid on;

En x j'ai bien mis mes fréquences (je crois de 0 à 0,49 avec un point tous les 0.0075, ce qui fait 66 pts au total) et en y mon abs(tf_delta) (amplitude) ...

Voilà maintenant je ne sais plus quoi faire pour avoir ma période bien que j'ai compris le principe ...
0
Egyde Messages postés 158 Date d'inscription lundi 17 mai 2004 Statut Membre Dernière intervention 16 juillet 2007
12 févr. 2006 à 11:39
Petite question : c'est quoi ton échelle en temps? 0.1 = 100 ans, 1.7 = 1700 ans, etc. ?)

L'extrapolation me parait bizarre. Ce serait bien d'afficher le D018 en fonction du temps [>>plot(time,delta,'b.-')] et de superposer [>>hold on] ton extrapolation [>>plot(?,deltath,'r.-')]. Les 2 courbes devraient être identiques (plot réalise lui-même une extrapolation linéaire) mais "l'espace" en x des points rouges (deltath) doit être constant.

Je vais jeter un oeil à tout ça demain (je te recontacterais à ton mail @tele2).
0
Asalix Messages postés 4 Date d'inscription vendredi 10 février 2006 Statut Membre Dernière intervention 12 février 2006
12 févr. 2006 à 13:27
Pour l'échelle en temps c'est bien ça elle correspond à des milliers d'années (1 = 1000 ans). L'extrapolation a été faite par la prof car elle s'est rendue compte que l'intervalle entre les données n'était pas constant. Si c'est faux ça ne m'étonnerait pas car cette prof est en fait un chercheur en sismologie et non un prof d'informatique ! lol.

Je te remercie d'avance pour le temps passé et futur sur ce devoir ... Mon mail au cas où il disparaitrait ... salix@tele2.fr

Je vais continuer d'y travailler aujourd'hui et j'attends avec impatience de tes nouvelles et une solution ! Merci pour tout encore !!!

Audrey
0
hamid_raf Messages postés 36 Date d'inscription mercredi 25 janvier 2006 Statut Membre Dernière intervention 28 décembre 2008
28 avril 2008 à 21:56
Salut,
Svp, si tu peux m'envoyer le code source de la FFT que tu a fait, j'on ai besoin,
Merci

hamid
I wana get the knowledge of the entire World,...........
0
Rejoignez-nous