IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Traitement du signal Discussion :

Combinaison de donnée avant FFT


Sujet :

Traitement du signal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 2
    Par défaut Combinaison de donnée avant FFT
    Bonjour,

    Je suis nouveau et donc je me présente. Je travaille dans la R&D d'instrumentation scientifique. Je ne suis pas développeur, mais plutôt physicien.

    Mon problème est simple, mais j'espère posé au bon endroit sur ce forum. Je récupère d'un détecteur un signal temporel (type sinus à une fréquence inconnue, mais fixe de l'ordre de 10kHz). Je récupère ce signal par petit buffer genre 2048 pts (limité par l'expérience). Ce que je voudrais faire, c'est mettre bout à bout plusieurs de ces buffers (disons 16) en un grand buffer pour avoir 32768 pts. J'applique ensuite une FFT sur mon grand buffer pour retrouver ma fréquence avec une meilleure résolution qu'avec un seul sous buffer. Je suppose plusieurs problèmes dans cette approche, mais je n'ai pas trouvé dans les documents sur la FFT d'argument m'interdisant de faire ça, mais pas non plus de technique pour faire cela.

    J'ai donc essayé de modéliser cela avec Octave. Le résultat me sidère et je cherche une aide pour comprendre mon erreur (code ou principe du traitement du signal).

    Je reproduis ci-dessous la partie du code me permettant de simuler les buffers, la combinaison et la FFT.

    Pour expliquer le résultat de la FFT, j'ai un peigne de Dirac avec un pic pour chaque valeur de fréquence de la résolution du sous buffer...difficile d’être clair. Quand je fais la FFT sur un des sous-buffers, j'ai seulement les points autour de la fréquence de mon signal ayant une amplitude non nulle (8623Hz 8633Hz 8642Hz 8652Hz) ce qui est correct pour une fréquence à 8637Hz compte tenu de ma résolution fréquentielle.
    Sur ma reconstruction j'ai les mêmes points non nuls, mais tous les points rajoutés entre ces fréquences par l'extension de mon buffer ont une amplitude nulle au lieu de participer à la reconstruction du pic avec une meilleure résolution. D'où ce peigne de Dirac… ? Tout commentaire sur le traitement du signal le code ou la FFT en générale est le bienvenue.

    Merci d'avance
    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
    25
    26
    27
    28
    29
    30
    31
     
    T = 0.05*1e-3; 	        % Sample time input in /s 
    Fs = 1/T;                   % Sampling frequency              		
    L = 2048;                   % Length of signal
    t = (0:L-1)*T;		% Time vector             
    Fm = 8637;			% Signal Frequency /Hz
     
    %Multiple buffer
     
    NbBufM = 16;              %Nb de buffer a assembler
     
    for k = 1:NbBufM
    	BufferM(k,: ) = sin(2*pi*Fm*t );
    	BufferM(k,: ) = BufferM(k,: ).+2*randn(size(t));
    endfor
     
    NFFT_BufferTotal = 2^nextpow2(NbBufM*L);
    NFFT = 2^nextpow2(L)
     
    % collage des buffer
    A = BufferM.'; B = A(: ); BufferTotal = B.';
     
    %FFT Buffer total
    FFT_BufferTotal = fft(BufferTotal,NFFT_BufferTotal)/(NbBufM*L);
    f_BufferTotal = Fs/2*linspace(0,1,NFFT_BufferTotal/2+1);
     
    %FFT Buffer intermediaire
    Buffer_Ech2 = BufferM(round(NbBufM/2),: );FFT_Buffer_Ech2 = fft(Buffer_Ech2,NFFT)/L;f = Fs/2*linspace(0,1,NFFT/2+1);
     
    plot(f_BufferTotal,2*abs(FFT_BufferTotal(1:NFFT_BufferTotal/2+1)),f,2*abs(FFT_Buffer_Ech2(1:NFFT/2+1)),"o", "markersize",5);
    xlim([Fm-20,Fm+20]);

  2. #2
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Citation Envoyé par GuillaumeCOR Voir le message
    J'applique ensuite une FFT sur mon grand buffer pour retrouver ma fréquence avec une meilleure résolution qu'avec un seul sous buffer.
    Je ne suis pas bien sûr qu'un buffer plus grand donne une meilleure "résolution" pour estimer ta fréquence. Au contraire, je dirais même que ca va rendre plus flou ton pic de fréquence (raison pour laquelle on utilise des fonctions "fenêtre" pour limiter l'impact des variations du signal). M'enfin, ce n'est pas la question.

    Pour expliquer le résultat de la FFT, j'ai un peigne de Dirac avec un pic pour chaque valeur de fréquence de la résolution du sous buffer...difficile d’être clair.
    Hum... Ce n'est effectivement pas très clair. Est-ce que tu est sûr que tu n'as pas "perdu" des données entre l'acquisition de deux buffers consécutifs ? Ou, en d'autre terme, est-ce que tu es sûr que ton signal reconstruit est bien continu lorsque tu passes d'un buffer au suivant ?

    |       ** |      **|  **   |
    |      *  *|     *  | *  *  |
    |     *    *    *   |*    * |
    |*    *    *    *   |*    * |
    | *  *     |*  *    |      *|
    |  **      | **     |       **
    +------------------------------->
       buf1       buf2     buf3
    (pertes de données entre buf2 et buf3)
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  3. #3
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 2
    Par défaut
    Merci pour cette réponse.

    Je n'ai effectivement pas de continuité mais c'était le but de ma simulation. Comme dans chaque buffer le nombre de période est très grand (~5000), je m'attends a du bruit sur mon pic mais pas a ce peigne de Dirac. Je voulais tester les méthodes de réduction de bruit (fenêtrage, synchronisation...etc).

    Si ce peigne viens de la reconstruction et de la perte de données je ne le comprends pas. S'il vient de mon code je ne vois pas ou...d'ou ma question sur ce forum.

    Merci pour cette première réponse qui me permet d'éclaircir un peu mon cas.

  4. #4
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Citation Envoyé par GuillaumeCOR Voir le message
    Si ce peigne viens de la reconstruction et de la perte de données je ne le comprends pas.
    il s'agit du phénomène de Gibbs, qu'on observe lorsqu'on décompose une signal discontinu (signal d'entrée) en une somme de signaux continu (des sinusoïdes dans le cas de la FT).

    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  5. #5
    Membre habitué
    Homme Profil pro
    Traitement du signal
    Inscrit en
    Janvier 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Traitement du signal

    Informations forums :
    Inscription : Janvier 2012
    Messages : 12
    Par défaut
    Effectivement lorsque tu assemble tes buffers tu provoques des discontinuités dans ton signal (fait un plot de ton signal assemblé et tu verras que de 2047 à 2048 par exemple il a un saut).

Discussions similaires

  1. Compresser les données avant insertion ?
    Par GregPeck dans le forum Outils
    Réponses: 2
    Dernier message: 07/08/2006, 16h09
  2. Réponses: 10
    Dernier message: 21/06/2006, 14h50
  3. [VBA-A] INSERT INTO en vérifiant les données avant !!
    Par Rumeurs dans le forum VBA Access
    Réponses: 9
    Dernier message: 12/04/2006, 14h07
  4. traitement des données avant envoie dans MySQL
    Par italiasky dans le forum SQL Procédural
    Réponses: 13
    Dernier message: 07/02/2006, 22h50
  5. Réponses: 4
    Dernier message: 18/08/2003, 09h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo