Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

échantillonnage



  1. #1
    narakphysics

    échantillonnage


    ------

    bonsoir;
    s'il vous plait quelqu'un peut me dire où se trouve l'erreur:
    j'ai les trois signaux suivants
    x1=cos(2*pi*43*t+(pi/4));
    x2=cos(2*pi*107*t);
    x3=cos(2*pi*125*t+(pi/3));
    la frequence d'échantillonnage est 1000Hz
    sur matlab, j'ai calculé FFT de chaque signal echantillonné et j'ai tracé leurs spectres d'amplitude mais j'ai pas trouvé la valeur 1 pour chaque pic???
    merci d'avance

    -----

  2. Publicité
  3. #2
    obi76

    Re : échantillonnage

    Bonjour,

    la FFT sur un signal de quelle durée (ou tourné autrement : sur quelle gamme de fréquence) ?
    Paradoxalement, ce sont les débats stériles qui se reproduisent le plus.

  4. #3
    narakphysics

    Re : échantillonnage

    la durée d'enregistrement est 0.1 s

  5. #4
    phuphus

    Re : échantillonnage

    Bonjour achrafkaran,

    sur une telle durée, il est impossible d'avoir un nombre entier de périodes pour tes trois signaux. Essaye la manip suivante :

    - remplace les cos par des sin
    - élimine pour l'instant les phases
    - regarde les signaux temporels : ils commencent à 0 à l'origine et finisse à une valeur non nulle

    Cela veut donc dire que la fin de ton signal est un front montant / descendant, et cela va se traduire sur le spectre par un "étalement" de ta raie spectrale.

    Autre manière de le dire : une FFT faite sur une période de 0.1 seconde va projeter ton signal sur une base de cosinus dont les fréquences sont des mutiples de 10Hz. Or, aucune des fréquences que tu analyses n'est un multiple de 10Hz. La FFT va donc être obligée d'interpréter tes signaux comme une combinaison des cosinus de base, et chacun de tes signaux d'analyse va être décomposé comme une somme de quelques cosinus. Pour le 43Hz par exemple, tu auras les coefficients 30Hz, 40Hz, 50Hz et 60Hz qui seront non nuls et les autres négligeables. Impossible dans ce cas d'avoir un coefficient à 1, puisque l'énergie de ton signal sera interprétée comme répartie sur plusieurs fréquences !

    Pour une manip pédagogique, faire comme suit :

    - prends une période d'analyse de 1s, comme cela si la fréquence du signal à analyser est entière alors tu auras un beau spectre théorique avec des 0 partout sauf pour la fréquence du signal
    - n'oublie pas de normaliser le résultat de la FFT pour avoir un spectre d'amplitude : soit tu divises ce résultat par le nombre de points de la FFT et tu additionnes ensuite les deux parties symétriques, soit tu divises par N et tu multiplies ensuite par 2 en ne gardant que la moitié des coefs de la FFT

    Une fois que cela est acquis, recommence avec ton exemple actuel : un signal dont la fréquence n'est pas contenue dans la base de cosinus sur laquelle tu projettes. Tu verras que la raie spectrale est "étalée". Cet étalement, appelé artefact ou effet de bord, peut être minimisé par fenêtrage de ton signal analysé (on parle aussi d'"apodisation"). Regarde dans l'aide de Matlab aux commandes "Kaiser", "Hann", "Blackman", etc.

  6. #5
    narakphysics

    Re : échantillonnage

    merci phuphus;
    oui j'ai bien compris .
    j'ai essayé de programmer ce que vous m'avez dit.
    voilà le programme que j'ai fait:
    tmax=0.1; Fe=1000; Te=1/Fe; N=tmax*Fe;
    t=[0:Te:tmax-Te];
    f=[01/tmax):Fe-(1/tmax)];
    f1=43; f2=107; f3=125;
    x1=cos(2*pi*f1*t+(pi/4));
    x2=cos(2*pi*f2*t);
    x3=cos(2*pi*f3*t+(pi/3));
    y1=fft(x1); y2=fft(x2);y3=fft(x3);
    X1=abs(y1)/N ; X2=abs(y2)/N ; X3=abs(y3)/N ;
    subplot(3,2,1);plot(f,X1);
    subplot(3,2,2);stem(f,X1);
    subplot(3,2,3);plot(f,X2);
    subplot(3,2,4);stem(f,X2);
    subplot(3,2,5);plot(f,X3);
    subplot(3,2,6);stem(f,X3);
    ci joint vous trouvrez les figures
    et pour améliorer ces amplitudes ,que doit je faire??
    Images attachées Images attachées

  7. A voir en vidéo sur Futura
  8. #6
    phuphus

    Re : échantillonnage

    Bonjour achrafkaran,

    déjà, tu pars sur de très bonnes bases : les petites subtilités comme la période de 0 à tmax-Te (ou bien de Te à tmax...) ne t'ont pas piégé.

    Essaye le code suivant, qui inclut tout ce que j'ai expliqué hier :

    Code:
    % Tutoriel FFT
      clear all ; clc ;
    
    % -------- Premier jet : nombre entier de périodes, DeltaF de 1Hz --------
    % Définition des constantes
      Fech = 1000 ;
      Nyquist = Fech/2 ; % Fech paire
      Tmax = 1 ;
      t = [0:Fech*Tmax-1]/Fech ;
      N = size(t,2) ;
      f = [0:1/Tmax:Nyquist] ; % La fréquence de Nyquist sera incluse sur le tracé.
      f1 = 43 ;
      f2 = 107 ;
      f3 = 125 ;
      
    % Synthèse des signaux
      x1 = cos(2*pi*f1*t+(pi/4)) ;
      x2 = cos(2*pi*f2*t) ;
      x3 = cos(2*pi*f3*t+(pi/3)) ;
      
    % Calcul des spectres d'amplitude : les signaux d'origine sont réels, le
    % spectre est donc symétrique. On ne prend que la moitié des coefficients,
    % avec multiplication par 2.
      Y1 = abs(fft(x1)) / N ;  Y1 = 2 * Y1(1:round(N/2)+1) ;
      Y2 = abs(fft(x2)) / N ;  Y2 = 2 * Y2(1:round(N/2)+1) ;
      Y3 = abs(fft(x3)) / N ;  Y3 = 2 * Y3(1:round(N/2)+1) ;
      
    % Tracés
      figure(1) ;
      subplot(3,2,1) ;  plot(f,Y1) ; axis([0 Nyquist 0 1]) ;
      subplot(3,2,2) ;  stem(f,Y1) ; axis([0 Nyquist 0 1]) ;
      subplot(3,2,3) ;  plot(f,Y2) ; axis([0 Nyquist 0 1]) ;
      subplot(3,2,4) ;  stem(f,Y2) ; axis([0 Nyquist 0 1]) ;  
      subplot(3,2,5) ;  plot(f,Y3) ; axis([0 Nyquist 0 1]) ;
      subplot(3,2,6) ;  stem(f,Y3) ; axis([0 Nyquist 0 1]) ; 
    
      
    % --------------------- Deuxième jet : DeltaF de 10Hz ---------------------
    % Définition des constantes
      Fech = 1000 ;
      Nyquist = Fech/2 ; % Fech paire
      Tmax = 0.1 ;
      t = [0:Fech*Tmax-1]/Fech ;
      N = size(t,2) ;
      f = [0:1/Tmax:Nyquist] ; % La fréquence de Nyquist sera incluse sur le tracé.
      f1 = 43 ;
      f2 = 107 ;
      f3 = 125 ;
      
    % Synthèse des signaux
      x1 = cos(2*pi*f1*t+(pi/4)) ;
      x2 = cos(2*pi*f2*t) ;
      x3 = cos(2*pi*f3*t+(pi/3)) ;
      
    % Calcul des spectres d'amplitude : les signaux d'origine sont réels, le
    % spectre est donc symétrique. On ne prend que la moitié des coefficients,
    % avec multiplication par 2.
      Y1 = abs(fft(x1)) / N ;  Y1 = 2 * Y1(1:round(N/2)+1) ;
      Y2 = abs(fft(x2)) / N ;  Y2 = 2 * Y2(1:round(N/2)+1) ;
      Y3 = abs(fft(x3)) / N ;  Y3 = 2 * Y3(1:round(N/2)+1) ;
      
    % Tracés
      figure(2) ;
      subplot(3,2,1) ;  plot(f,Y1) ; axis([0 Nyquist 0 1]) ;
      subplot(3,2,2) ;  stem(f,Y1) ; axis([0 Nyquist 0 1]) ;
      subplot(3,2,3) ;  plot(f,Y2) ; axis([0 Nyquist 0 1]) ;
      subplot(3,2,4) ;  stem(f,Y2) ; axis([0 Nyquist 0 1]) ;
      subplot(3,2,5) ;  plot(f,Y3) ; axis([0 Nyquist 0 1]) ;
      subplot(3,2,6) ;  stem(f,Y3) ; axis([0 Nyquist 0 1]) ;
      
    % ------ Troisième jet : DeltaF de 10Hz et apodisation type Hanning ------
    % Définition des constantes
      Fech = 1000 ;
      Nyquist = Fech/2 ; % Fech paire
      Tmax = 0.1 ;
      t = [0:Fech*Tmax-1]/Fech ;
      N = size(t,2) ;
      f = [0:1/Tmax:Nyquist] ; % La fréquence de Nyquist sera incluse sur le tracé.
      f1 = 43 ;
      f2 = 107 ;
      f3 = 125 ;
      
    % Synthèse des signaux
      x1 = cos(2*pi*f1*t+(pi/4)) ;
      x2 = cos(2*pi*f2*t) ;
      x3 = cos(2*pi*f3*t+(pi/3)) ;
      
    % Apodisation
      x1 = x1 .* Hann(N)' ;
      x2 = x2 .* Hann(N)' ;
      x3 = x3 .* Hann(N)' ;
      
    % Compensation de l'énergie perdue par apodisation
      x1 = x1 / sum(Hann(N)/N) ;
      x2 = x2 / sum(Hann(N)/N) ;
      x3 = x3 / sum(Hann(N)/N) ;
    
    % Calcul des spectres d'amplitude : les signaux d'origine sont réels, le
    % spectre est donc symétrique. On ne prend que la moitié des coefficients,
    % avec multiplication par 2.
      Y1 = abs(fft(x1)) / N ;  Y1 = 2 * Y1(1:round(N/2)+1) ;
      Y2 = abs(fft(x2)) / N ;  Y2 = 2 * Y2(1:round(N/2)+1) ;
      Y3 = abs(fft(x3)) / N ;  Y3 = 2 * Y3(1:round(N/2)+1) ;
      
    % Tracés
      figure(3) ;
      subplot(3,2,1) ;  plot(f,Y1) ; axis([0 Nyquist 0 1]) ;
      subplot(3,2,2) ;  stem(f,Y1) ; axis([0 Nyquist 0 1]) ;
      subplot(3,2,3) ;  plot(f,Y2) ; axis([0 Nyquist 0 1]) ;
      subplot(3,2,4) ;  stem(f,Y2) ; axis([0 Nyquist 0 1]) ;
      subplot(3,2,5) ;  plot(f,Y3) ; axis([0 Nyquist 0 1]) ;
      subplot(3,2,6) ;  stem(f,Y3) ; axis([0 Nyquist 0 1]) ;
    Je te laisse le soin de remettre les titres qui vont bien pour les graphes, et de tracer dans ton coin la courbe temporelle de la fenêtre de Hanning, ainsi que les signaux temporels avant et après apodisation.

    Normalement, tu as ici tout ce dont tu as besoin !

  9. Publicité
  10. #7
    narakphysics

    Re : échantillonnage

    Merci beaucoup phuphus pour votre explication

Sur le même thème :

Discussions similaires

  1. [Biologie Cellulaire] échantillonnage
    Par OULD HAMOUDA dans le forum Biologie
    Réponses: 0
    Dernier message: 18/04/2011, 17h04
  2. Echantillonnage
    Par nonox dans le forum Physique
    Réponses: 1
    Dernier message: 03/07/2009, 12h19
  3. Echantillonnage
    Par L1011 dans le forum Mathématiques du supérieur
    Réponses: 0
    Dernier message: 12/10/2008, 16h32
  4. Echantillonnage !
    Par chentouf dans le forum Mathématiques du supérieur
    Réponses: 4
    Dernier message: 24/07/2007, 10h35
  5. echantillonnage
    Par pol5700 dans le forum Électronique
    Réponses: 16
    Dernier message: 27/05/2007, 19h52