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

Signal Discussion :

filtrage pour detection de pics en algorithme recursif


Sujet :

Signal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Étudiant
    Inscrit en
    Août 2009
    Messages
    2
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2009
    Messages : 2
    Par défaut filtrage pour detection de pics en algorithme recursif
    Bonjour,

    a partir du signal suivant, j'essaie d'extraire les pics en operant un filtrage du signal avec la formule suivante (type passe bas).

    A(i) = (1 - epsilon) * A(i-1) + epsilon * E(i)

    S serait le signal filtre (sortie)
    E serait le signal bruite (en PJ) (entree)
    epsilon serait le parametre d'attenuation. Je lai fixe a 0,3. A priori, plus le epsilon est petit, plus le signal est lisse car lent.
    i etant le cycle de calcul.

    Mon probleme actuel est que je n'obtiens rien en sortie (voir pj 2). J'ai fait varier le parametre epsilon, sans aucun succes.

    Le code correspondant est le suivant :

    NB : Abstand serait le signal bruite en PJ1
    Epur serait le signal filtre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
        if i-i_0 > 0
            Abstand(Zykl(i))=abs((delta_lambda_Z_34(Zykl(i-1))-delta_lambda_Z(Zykl(i-1)))/(sigma_delta_lambda_Z(Zykl(i-1))));
     
            Epur(Zykl(i)) = abs ((1 - epsilon)*Epur(Zykl(i-1)) + epsilon*Abstand(Zykl(i)) );
     
        else
            Abstand(Zykl(i))=0;
            Epur(Zykl(i))= 0 ;
        end
    Merci de vos reponses. Si vous avez egalement une toute autre methode, merci de la partager.

    Ps : desole pour les accents, j'ai un clavier allemand.

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Par défaut
    Bonjour.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Epur(Zykl(i)) = abs ((1 - epsilon)*Epur(Zykl(i-1)) + epsilon*Abstand(Zykl(i)) );
    Pourquoi le "abs" ?

  3. #3
    Nouveau candidat au Club
    Étudiant
    Inscrit en
    Août 2009
    Messages
    2
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2009
    Messages : 2
    Par défaut
    Citation Envoyé par phryte Voir le message
    Bonjour.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Epur(Zykl(i)) = abs ((1 - epsilon)*Epur(Zykl(i-1)) + epsilon*Abstand(Zykl(i)) );
    Pourquoi le "abs" ?
    Bonjour Phryte,

    Oups desole pour le abs, je n'ai pas attention. J'ai teste quelque chose ce matin avec abs (en m'inspirant d'une partie precedente du code) sans succes egalement.
    Je remets le vrai code

    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
     
       % Abstand -------------------------------------------------------------
     
        if i > 0
            Abstand(Zykl(i))=abs((delta_lambda_Z_34(Zykl(i-1))-delta_lambda_Z(Zykl(i-1)))/(sigma_delta_lambda_Z(Zykl(i-1))));
     
     
     
        else
            Abstand(Zykl(i))=0;
     
        end
     
        % ---------------------------------------------------------------------
     
                 if i > 10800                                                                  
                            Epur(Zykl(i)) = (1 - epsilon)*Epur(Zykl(i-1)) + epsilon*Abstand(Zykl(i));
                 else 
                             Epur(Zykl(i))= 0 ;
                 end
    Celui ci correspond a un resultat que j'ai trouve il y a 10 minutes.
    En commencant le filtrage a i = 10800 (=3h, si tu as remarque sur la PJ1 que l'abcisse etait le temps), j'obtiens le resultat desire...enfin presque car je me demande pourquoi il ne marche pas au debut. La valeur des 3h correspond approximativement a la fin del a pente descendante en debut de cycle.
    Je rajoute en PJ 3 le signal bruite et en PJ 4 le resultat obtenu avec un filtrage commence a i = 10800.
    Je me suis bien assure de l'initialisation des deux vecteurs avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Abstand               = zeros(1, laenge);
    Epur                  = zeros(1, laenge );
    Une idee ?
    Images attachées Images attachées   

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Par défaut
    Je me suis bien assure de l'initialisation des deux vecteurs avec :
    Epur= zeros(1, laenge );
    Si tu commences le filtrage à i, il faut initialiser la valeur passée de Epur à la mesure (dans le cas de signal très bruité, on initialise à la valeur moyenne des n dernières mesures (n étant à définir)), sinon la valeur filtrée commence à : zéro + epsilon*Abstand(Zykl(i)) !
    Avant le filtrage :
    Epur(Zykl(i-1))=Abstand(Zykl(i-1)

Discussions similaires

  1. algorithme recursif pour remplir un carré en diagonal
    Par chelsea23 dans le forum Algorithmes et structures de données
    Réponses: 20
    Dernier message: 16/01/2007, 13h10
  2. [onKeydown] Probleme avec pour detecter les majuscules des minuscules
    Par magnus2005 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 29/09/2006, 22h48
  3. aide pour detection du navigateur
    Par oborer dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 28/08/2006, 16h44
  4. Quelle API pour detecter un Exe qui s'execute.
    Par caviar dans le forum MFC
    Réponses: 3
    Dernier message: 20/04/2006, 13h26
  5. algorithme detection de pics dans une courbe
    Par bfb dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 31/03/2006, 11h08

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