Probleme matlab transformee fourrier (SOS)
Résolu
Rousseau
-
Sacabouffe Messages postés 9427 Date d'inscription Statut Membre Dernière intervention -
Sacabouffe Messages postés 9427 Date d'inscription Statut Membre Dernière intervention -
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
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
A voir également:
- Probleme matlab transformee fourrier (SOS)
- Voix transformée - Guide
- Gnu octave matlab - Télécharger - Édition & Programmation
- Telecharger matlab ✓ - Forum Logiciels
- Matrice matlab - Forum Matlab
- Fonction matlab - Forum Matlab
5 réponses
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 ?
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 ?
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
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
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
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
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
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