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 :

Détection des structures cycliques dans un signal


Sujet :

Traitement du signal

  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juillet 2008
    Messages : 230
    Par défaut Détection des structures cycliques dans un signal
    Bonjour;
    J'ai un vecteur de nombre réels (données ECG) que je veux analyser et détecter les cycles qu'il contient. Mais, il n'est pas parfaitement régulier . Voir sa représentation sous Matlab jointe au message.
    Pouvez vous m'aider à trouver un algorithme pouvant extraire les cycles de mon signal?
    Merci pour vos aides.
    Images attachées Images attachées  

  2. #2
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Par défaut
    Bonjour,

    est ce que le problème est bien posé ?
    Il me semble que dans un ECG, il faut regarder l'onde T. Elle suit les pics. Donc est ce que retrouver tous les pics positifs et/ou négatifs puis le "mini" pic suivant ne suffirait pas ?
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juillet 2008
    Messages : 230
    Par défaut
    Merci ToTo pour ta réponse.
    En fait, lorsque j'ai un signal bien régulier, je procède par détection du complex QRS : un pic maximum très apparant par rapport aux autres ondes. Puis, une fois le signal ECG est décomposé en morceaux commenceant pas onde R, je fais translater pour que ca commence par l'onde P.
    Mon programme de décomposition en cycle est le suivant :
    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
    clear all;
    [xn,fs]=wavread('300-0-598-0--sig0.wav');
    m=max(xn);
    tres=0.7*m;
    peaks=[];
    % detection des pics dans le signal ecg
    for i=1:length(xn)
        if xn(i)>tres
            peaks=[peaks i];
        end
    end
    %elimination des valeurs répétées dans peaks et calcul du cycle length
    distance=[];
    peaks2=[];
    for j=1:length(peaks)-1
        % la longueur d'un cycle est sup à 200
        if (peaks(j+1)-peaks(j))>200
            distance = [distance peaks(j+1)-peaks(j)];
            peaks2=[peaks2 peaks(j)];
        end
    end
    cycle_len=fix(mean(distance));
    % reconstruction du signal
    xs=[];
    for i=1:length(peaks2)-1
            cyc = xn(peaks2(i):peaks2(i+1));
            xs=[xs ; cyc];
    end
    plot(xs);
    Mais avec le signal joint (qui n'est pas régulier), cet algorithme ne me donne pas de bon résultats.
    Merci pour toute aide.

  4. #4
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 85
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Par défaut
    Salut!
    Le nom scientifique de ton type de problème est série temporelle ou série chronologique, en anglais time serie. Il y a une masse de publications sur ce sujet.
    Jean-Marc Blanc

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juillet 2008
    Messages : 230
    Par défaut
    Salut;
    Oui c'est vrai ca s'appelle "times series data" en anglais.
    stp, tu peux me fournir des liens ou je pourrais trouver de l'aide?
    Merci.

    Bonjour;
    SVP, est ce que vous pouvez me conseiller d'autres forums et/ou sites ou je pourrais trouver une solution pour mon pb?
    Merci à tous.

  6. #6
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 85
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Par défaut
    Salut!
    Tu peux commencer par regarder dans Wikipedia en français et en anglais. Ce n'est en effet pas du tout mon domaine d'activité, mais tu dois apprendre à chercher l'information.
    Jean-Marc Blanc

  7. #7
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juillet 2008
    Messages : 230
    Par défaut
    Merci FR119492 pour ton aide;
    En fait, moi aussi c'est pas mon domaine mais je dois analyser ce signal ECG comme application. Je suis de base ingénieur informaticien.
    Ce que j'ai trouvé sur wikipedia, ce sont les notions de base pour un signal ECG .
    De toutes façons, merci pour tous les conseils

  8. #8
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Par défaut
    Bonjour,

    bon... et si on reprenait les choses à la base.
    Dans l'exemple que tu viens de nous donner, quels sont les cycles que tu souhaites trouver ? Pourrais tu TOUS les marquer afin de voir si on observe des similarités ?
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  9. #9
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juillet 2008
    Messages : 230
    Par défaut
    Merci ToTo13 pour tes aides.
    C'est vraiment tres gentil de ta part.
    En fait, j'ai opté pour une solution qui marche bien lorsque les données sont réguliers (ECG normal régulier).
    Je detecte tous les pics de l'onde R (tous les maximums > 0.7*Tres, avec Tres=max(signal)), et je les considère comme étant le début de cycle et comme ca je peux décomposer le signal en cycle .
    Mais le pb que ca marche pas toujours.
    Je vais considerer cette solution car ce n'est pas vraiment l'objectif de mon travail. Il y'a plein de travaux de recherche qui essayent de trouver une méthode de décomposition d'un ECG et automatiser son analyse.
    Merci une autre fois pour l'aide ToTo13

  10. #10
    Membre très actif

    Profil pro
    Étudiant
    Inscrit en
    Décembre 2004
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2004
    Messages : 499
    Par défaut
    salut

    et si tu commençais par une autocorrélation ?

    autocor_x = real(ifft(abs(fft(x,2^(nextpow2(length(x))+1))).^2));

  11. #11
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juillet 2008
    Messages : 230
    Par défaut
    Ben, vous voulez dire la fonction d'autocorrelation classique?
    J'utilise Matlab qui possède déjà une fonction de calcul xcorr pour un signal 1-D.
    Je l'ai utilisé et j'ai pas eu un bon résultat. Car ca reviens au meme probleme (recherche de la distance entre les pics).
    Voici la figure de l'auto-correlation (en pièce jointe).
    Images attachées Images attachées

  12. #12
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 85
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Par défaut
    Salut!
    Je l'ai utilisé et j'ai pas eu un bon résultat
    Cela ne m'étonne pas outre mesure: l'autocorrélation, ça marche très bien si le signal est périodique, par exemple quand tu cherches les variations d'une grandeur au cours d'une semaine, ou des variations saisonnières. Mais, dans ton cas, le rythme cardiaque peut varier de manière a priori inconnue.
    Jean-Marc Blanc

  13. #13
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juillet 2008
    Messages : 230
    Par défaut
    Oui exactement, il est bien cyclique mais parfois il varie de facon innatendue.
    L'un des chercheurs en cardio m'a proposé la méthode de détection de tous les pics R. et puis faire la translation pour retrouver le début de chaque cycle.
    Je vous tiendrais au courant de mon avancement.
    Merci pour l'aide Jean-Marc Blanc

  14. #14
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 85
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Par défaut
    Salut!
    il est bien cyclique
    Il faudrait peut-être d'abord s'entendre sur la signification du mot "cyclique". La définition ne doit contenir ni explicitement, ni implicitement les mots "à peu près".
    Jean-Marc Blanc

  15. #15
    Membre très actif

    Profil pro
    Étudiant
    Inscrit en
    Décembre 2004
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2004
    Messages : 499
    Par défaut
    salut

    a priori il faut commencer par un peu de traitement du signal

    - filtrage du signal entre 10 et 400 bpm ( 0.16 -> 6.5 Hz) par exemple
    - détection de la période principale avec l'autocorrélation (plus grand pic entre 20 et 200 bpm)
    - trouver le début de chaque période avec la programmation dynamique, pourquoi pas en ayant fait une différentiation juste avant
    c'est à dire que tu suis plusieurs chemins entre pics, en valorisant ceux qui concordent avec ta mesure générale du rythme de battement, ça te permet de résoudre en même temps le problème des erreurs d'octaves (2 x la période) dans l'autocorrélation
    - application d'un algo de ton choix pour détecter les battements sains et non-sains, les arythmies... (forme du pic, distance entre 2 pics...)

  16. #16
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juillet 2008
    Messages : 230
    Par défaut
    Bonjour;
    Merci bien pour votre réponse. stp, tu peux m'expliquer l'objectif de chaque étape.
    Citation Envoyé par acx01b Voir le message
    1. filtrage du signal entre 10 et 400 bpm ( 0.16 -> 6.5 Hz) par exemple
    Est ce que ce filtrage permettra d'éliminer le bruit dans le signal? Si oui, pourquoi exactement ces valeurs pour le filtrage?
    Citation Envoyé par acx01b Voir le message
    2. détection de la période principale avec l'autocorrélation (plus grand pic entre 20 et 200 bpm)
    Aussi, ici les valeurs 20 et 200 désignent quoi exactement stp? et est ce que la période principale désigne la distance entre le premier pic (central) et celui qui le suit dans la courbe de la fonction d'autocorrelation?
    Merci d'avance pour toute explication.
    Bonne journée.

  17. #17
    Membre très actif

    Profil pro
    Étudiant
    Inscrit en
    Décembre 2004
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2004
    Messages : 499
    Par défaut
    bpm : battements par minute
    c'est une mesure de fréquence
    20,200 c'est juste qu'il y a peu de chances que le patient ait une fréquence cardiaque < 20 ou > 200 bpm
    le plus grand pic dans l'autocorrélation c'est la période la plus significative de ton signal
    c'est à dire que si la plus grande valeur c'est xcorr(i) alors la période principale c'est i
    en général (c'est logique) si xcorr(i) est très important et ses voisins beaucoup moins, alors pour tout n entier xcorr(n.i) le sera aussi
    attention : la plus grande valeur dans xcorr est TOUJOURS xcorr(0)

    après je te dis ça mais tu peux aussi regarder un cours de traitement de signal, ou appliquer sans comprendre une méthode qui marche

  18. #18
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juillet 2008
    Messages : 230
    Par défaut
    Salut acx01b;
    Merci bien pour ta réponse. Mais encore j'ai pas bien saisi
    Peux-tu stp me guider plus? des ressources sur le net ou des algorithmes librement distribués?

  19. #19
    Invité de passage
    Inscrit en
    Avril 2009
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 1
    Par défaut vous pouver m'envoyer le programme de la détection de l'onde T d'un signal ECG
    Citation Envoyé par Contact2012 Voir le message
    Merci ToTo pour ta réponse.
    En fait, lorsque j'ai un signal bien régulier, je procède par détection du complex QRS : un pic maximum très apparant par rapport aux autres ondes. Puis, une fois le signal ECG est décomposé en morceaux commenceant pas onde R, je fais translater pour que ca commence par l'onde P.
    Mon programme de décomposition en cycle est le suivant :
    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
    clear all;
    [xn,fs]=wavread('300-0-598-0--sig0.wav');
    m=max(xn);
    tres=0.7*m;
    peaks=[];
    % detection des pics dans le signal ecg
    for i=1:length(xn)
        if xn(i)>tres
            peaks=[peaks i];
        end
    end
    %elimination des valeurs répétées dans peaks et calcul du cycle length
    distance=[];
    peaks2=[];
    for j=1:length(peaks)-1
        % la longueur d'un cycle est sup à 200
        if (peaks(j+1)-peaks(j))>200
            distance = [distance peaks(j+1)-peaks(j)];
            peaks2=[peaks2 peaks(j)];
        end
    end
    cycle_len=fix(mean(distance));
    % reconstruction du signal
    xs=[];
    for i=1:length(peaks2)-1
            cyc = xn(peaks2(i):peaks2(i+1));
            xs=[xs ; cyc];
    end
    plot(xs);
    Mais avec le signal joint (qui n'est pas régulier), cet algorithme ne me donne pas de bon résultats.
    Merci pour toute aide.

  20. #20
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juillet 2008
    Messages : 230
    Par défaut
    le programme est déjà donné dans un post précédent (voir la discussion)

Discussions similaires

  1. Réponses: 8
    Dernier message: 02/12/2010, 20h39
  2. Détection des éléments implantés dans un pc
    Par petitcoucou31 dans le forum API, COM et SDKs
    Réponses: 1
    Dernier message: 06/10/2007, 20h24
  3. Réponses: 1
    Dernier message: 13/03/2007, 10h52
  4. Comment trouver des structures incluses dans d'autres
    Par Vulcanos dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/10/2006, 00h59
  5. Pas de détections des disques durs dans le bios
    Par rub091 dans le forum Composants
    Réponses: 10
    Dernier message: 13/06/2006, 18h59

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