Matlab - FFT - Au secours ! - [Résolu]

Asalix 4 Messages postés vendredi 10 février 2006Date d'inscription 12 février 2006 Dernière intervention - 10 févr. 2006 à 22:21 - Dernière réponse : hamid_raf 36 Messages postés mercredi 25 janvier 2006Date d'inscription 28 décembre 2008 Dernière intervention
- 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
Afficher la suite 

8 réponses

Meilleure réponse
Egyde 161 Messages postés lundi 17 mai 2004Date d'inscription 16 juillet 2007 Dernière intervention - 11 févr. 2006 à 11:21
3
Merci
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).

Merci Egyde 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 69 internautes ce mois-ci

Meilleure réponse
Asalix 4 Messages postés vendredi 10 février 2006Date d'inscription 12 février 2006 Dernière intervention - 11 févr. 2006 à 16:07
3
Merci
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

Merci Asalix 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 69 internautes ce mois-ci

Meilleure réponse
Egyde 161 Messages postés lundi 17 mai 2004Date d'inscription 16 juillet 2007 Dernière intervention - 11 févr. 2006 à 18:08
3
Merci
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.

Merci Egyde 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 69 internautes ce mois-ci

Egyde 161 Messages postés lundi 17 mai 2004Date d'inscription 16 juillet 2007 Dernière intervention - 11 févr. 2006 à 17:54
0
Merci
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.
Asalix 4 Messages postés vendredi 10 février 2006Date d'inscription 12 février 2006 Dernière intervention - 11 févr. 2006 à 21:10
0
Merci
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 ...
Egyde 161 Messages postés lundi 17 mai 2004Date d'inscription 16 juillet 2007 Dernière intervention - 12 févr. 2006 à 11:39
0
Merci
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).
Asalix 4 Messages postés vendredi 10 février 2006Date d'inscription 12 février 2006 Dernière intervention - 12 févr. 2006 à 13:27
0
Merci
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
hamid_raf 36 Messages postés mercredi 25 janvier 2006Date d'inscription 28 décembre 2008 Dernière intervention - 28 avril 2008 à 21:56
0
Merci
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,...........

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.