Probleme matlab transformee fourrier (SOS)

Résolu/Fermé
Rousseau - 15 nov. 2008 à 17:05
Sacabouffe Messages postés 9427 Date d'inscription dimanche 19 août 2007 Statut Membre Dernière intervention 29 mai 2009 - 15 nov. 2008 à 19:26
Bonjour,
je suis etudiant en géologie et on m'oblige a subir la programmation
le but de mon étude est d'effectuer un traitement du signal
et voila plus de 3455325h que je suis bloqué, je n'arrive pas a afficher la transformée de fourier inverse. En effet, peu importe mon filtre mon programme m'affiche toujours la même chose... c'est assez énervant
SVP j ai vraiment besoin d'aide
voici mon progamme:


clc
clear all
close all
P=[];
[filename, pathname] = uigetfile('*.dat','Selectionnez le fichier de données à ouvrir');
nom_fich=fullfile(pathname,filename);
%nom_fich=strcat(pathname,filename);
entree=fopen(nom_fich,'r');
nbr_echant = fscanf(entree,'%f',1);
nbr_col = fscanf(entree,'%f',1);
unit_1 = fscanf(entree,'%s',1);
unit_2 = fscanf(entree,'%s',1);
while not (feof(entree))
P=[P; fscanf(entree,'%f',1),fscanf(entree,'%f',1)];
end
fclose(entree);
%Affichage du graphe des données
figure;
plot(P(:,1),P(:,2),'-b');
title('Signal initial');
xlabel(unit_1);
ylabel(unit_2);
%_____________________________CALCUL DE LA FFT_____________________________

transformee_fourier=fft(P(:,2),length(P(:,2)));
%N = nombre de valeurs
N=length(P);
%pas = incrémentation de la première colone
pas=P(N,1)/N;
%normailsation de la transformee de fourier comme indiqué sur poly
transformee_fourier_normalisee=transformee_fourier/N;
%calcul de l'amplitude de la transformée de fourier= complexe*conjugué(complexe)=-i^2=1
A = transformee_fourier.* conj(transformee_fourier) / N;

%fréquence d'étalement des valeurs de la transformee : on tient compte du pas
%en multipliant les fréquences par le pas
figure
f1 = (1:N/2)/(N*pas);
f2 = (-N/2:-1)/(N*pas);
f=[f2,f1];
%f = (1:N)./N
%T=1./f
plot(f,A)
axis([min(f) max(f) min(A) max(A)])
title('FFT du signal')
xlabel('fréquence (m-1)')
ylabel('amplitude')

%plot(matrice_transforme(:,1),matrice_transforme(:,2),'*')

%______________________polaires__________________________________________

%mise en matrice de la transformée de fourier pour le plot en polaire:
matrice_transformee=[real(transformee_fourier),imag(transformee_fourier)];
figure
polar(matrice_transformee(:,1),matrice_transformee(:,2),'.r')

%_________________________PSD_______________________________________________
%figure
%loglog(matrice_transformee,'-r')

%______________________________filtre______________________________________

freq=input('entrez la valeur de frequence de coupure :');
Z=[];
%find(-freq<f<freq)
for x=1:N
s=f(1,x);
if s>-freq & s<freq;
s=0;
Z=[Z,s];
else
s=1;
Z=[Z,s];
end
end
valeur_filtre=A.*Z';
jd=ifft(valeur_filtre);

figure
plot(f,valeur_filtre)

figure
plot(P(:,1),jd)

merci d'avance

5 réponses

Sacabouffe Messages postés 9427 Date d'inscription dimanche 19 août 2007 Statut Membre Dernière intervention 29 mai 2009 1 835
15 nov. 2008 à 19:26
Ah...
Mais il y a un truc que je comprends pas dans ton code.
T'appliques l'IFT à l'amplitude filtrée de la FFT. C'est normal ?
Pourquoi t'appliques pas l'IFT à la FFT filtrée ?
2
Sacabouffe Messages postés 9427 Date d'inscription dimanche 19 août 2007 Statut Membre Dernière intervention 29 mai 2009 1 835
15 nov. 2008 à 17:41
Salut
fft donne un spectre qui est pas centré.
Pour qu'il soit centré, il faut utiliser fftshift, c'est nécessaire si tu veux appliquer un filtre. Tape help fftshift ou doc fftshift pour plus d'infos.
Bonne soirée
0
je ne comprend pas pourquoi le faite de centrer ma fft change mon probleme
j ai essayé shiftfft, cela m'inverse et m'allonge mon signal quand je donne la valeur 0 au filtre alors que je devrai retomber sur mon signal de départ...
merci
0
Sacabouffe Messages postés 9427 Date d'inscription dimanche 19 août 2007 Statut Membre Dernière intervention 29 mai 2009 1 835
15 nov. 2008 à 19:01
Il faut ensuite shifter de nouveau avant d'appliquer ifft.
0

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

Posez votre question
oui c'est ce que j'ai fait
le problème est que je ne comprend pas les signaux qui me sont rendus par matlab (ce n'est pas vraiment ce à quoi je m'attendais) j'aurai voulu un signal ne m'affichant que les sinusoides des longueurs d'onde qui m'interesse; mais là j'ai l'impression que tout mes signal sont déformés et ne correspondent plus
0