Bonjour tout le monde,
je vous explique mon soucis, merci de me dire si vous avez une idée d'où mes problèmes viennent
Tout d'abord, voici le contexte
- j'ai une courbe bruité et j'ai fais une FFT de ce signal sous matlab afin d'avoir le spectre du signal.
- les j'ai environ 6000 fréquences et celles qui me dérange sont les basses fréquences et quelques autres que je n'ai pas encore très bien identifiées.
- pour commencer à filtrer j'ai essayé des filtres sous matlab mais apparemment ils ne semblent pas convenir à ma situation car tous les filtres
que j'utilise déforment mon signal sur des zones que je ne veux pas (les pentes ne sont plus respectées or je veux vraiment garder les pentes de montées et descente, c'est juste le bruit des plateaux que je veux virer ).
- Du coup, j'ai voulu annuler les fréquences basses de mon signal à l'aide de matlab et reconstruire le signal temporel à l'aide d'une FFT inverse.
Résultats
- Lorsque je passe de mon spectre (où j'ai mis les amplitudes à 0 pour les basses fréquences) à un signal temporelle à l'aide d'une FFT inverse j'ai un soucis :
==> la forme du signal résultant est nickel :Bravo1: mais l'amplitude de la courbe n'est plus la même que celle du signal de départ ! (l'amplitude à diminuée) (
Explication
du coup, je voudrais savoir si vous pourriez m'expliquer pourquoi mon amplitude générale à diminuer ? et comment la remettre à son niveau de départ.
=> je précise que si je fais une FFT de mon signal et une FFT inverse tout de suite après ça marche nickel
=> c'est lorsque je supprime des amplitudes de la FFT que je perds en amplitude globale.
Ce qui m'etonne là dedans est que j'ai fais un test :
=> mettre toutes les amplitudes maximale du signal à 0 et je m'attendais au même résultat, mais là non... mon amplitude est bonne
Mon code
voici mon bout de code (et la PJ):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 noms='bruit.dat'; donnees=importdata(noms);data=donnees.data;x=data(:,1)';y=data(:,5)'; x=x-x(1); tempsEssai=x(end)-x(1); nbPoints=length(x); f_Echantillonage=nbPoints/tempsEssai; T=1/f_Echantillonage; t=T*(0:nbPoints-1); NFFT = nbPoints; %cas non precis mais marche bien ici Yfft=fft(y,NFFT) f=f_Echantillonage/2*linspace(0,1,NFFT/2); yInverse=ifft(Yfft); YfftModif=Yfft; nbFrequencesOK = 3000; [Xmin IxMin]=sort(x); for j=1:length(x) if(any(x(j)==Xmin(1:nbFrequencesOK))) % else YfftModif(j)=0; end end yInverseModif=ifft(YfftModif);
Partager