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 :

Algorithme de découpe de signal et de calcul de cette partie


Sujet :

Traitement du signal

  1. #1
    Membre à l'essai
    Homme Profil pro
    Software engineer
    Inscrit en
    Mai 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Software engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 14
    Points : 13
    Points
    13
    Par défaut Algorithme de découpe de signal et de calcul de cette partie
    Bonjour,

    Je suis étudiant en école d'ingénieur en traitement du signal et je suis actuellement en stage où je traite des données provenant d'EEG ou de MEG provenant de l'étude de l'activité cérébrale.

    Je me retrouve donc avec plusieurs signaux et pour chaque signal je souhaite le découper en plusieurs sous parties pour effectuer un calcul sur chacune d'entre elle. Pour mieux comprendre voilà à quoi correspondrait cette opération.

    Soit une matrice a :

    | 1 2 3 4 5 6 7 8 9 10 |
    | 11 12 13 14 15 16 17 18 19 20 | = a
    | 21 22 23 24 25 26 27 28 29 30 |

    Cette matrice représente 3 signaux qui ont été enregistré.

    Le premier signal me donne le vecteur s1 = [ 1 2 3 4 5 6 7 8 9 10 ]

    Maintenant ce que je souhaite c'est de faire des sous parties de 4 points, effectuer un calcul, reprendre une sous partie de 4 points (décalée d'un point par rapport à la précédente partie), effectuer un calcul et ainsi de suite jusqu'à la fin du vecteur.


    La première idée qui vient à la tête serait de faire une boucle qui réalise l'opération :

    [nrow ncol] = size(a);

    for i = 1 : nrow
    for j = 4 : ncol
    coupe = a(i, (j-3):j);
    resultat(i, j-3) = calcule (coupe);
    end
    end

    Voilà mon idée et j'espère que vous avez compris ce que je voulais faire (si ce n'est pas le cas n'hésitez pas à me le dire dans le topic) MAIS mon problème est que j'ai BEAUCOUP de données et si je peux éviter des boucles de ce genre dans matlab (et donc de nombreuses minutes voir heures) ça serait super.

    Je ne suis pas un expert en algorithme et je voulais savoir s'il y avait un algo qui permette de réaliser ce genre de calcul ou alors y a t il un moyen simple avec matlab en utilisant les calcul vectoriel mais je n'en vois.

    Connaîtrez vous un moyen de faire ce calcul rapidement et sans boucles ?

  2. #2
    Invité
    Invité(e)
    Par défaut
    slt,

    ca ressemble tres fortement a une convolution.

    L'optimisation peut se faire par le biai d'une transformée de fourier discrète

  3. #3
    Membre à l'essai
    Homme Profil pro
    Software engineer
    Inscrit en
    Mai 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Software engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 14
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par galerien69 Voir le message
    slt,

    ca ressemble tres fortement a une convolution.

    L'optimisation peut se faire par le biai d'une transformée de fourier discrète
    Merci pour ta réponse. Oui dans les étapes de calcul ça y ressemble mais ce n'est pas une TFD. En fait l'étape "calcul" c'est pour faire déterminer la causalité de Granger-Wiener et je ne passe jamais dans le domaine spectral durant toute cette boucle. En fait vu que j'ai un nombre très important de donnée à traiter je me demander si on pouvait éviter de passer par une boucle pour réaliser ce genre de calcul dans Matlab car aucun algo ne me vient à l'esprit (et je ne les connais pas tous).

    Je cherche à découper le signal en plusieurs blocs égaux, décallés d'une valeur ( donc si j'ai une vecteur de 10 valeurs, et que je veux des bloc de taille 5 je voudrais obtenir, sans passer par une boucle, 5 blocs). J'ai vu qu'il existait la fonction reshape dans Matlab mais je ne pense pas qu'elle permette de faire ce que je viens de décrire

  4. #4
    Membre à l'essai
    Homme Profil pro
    Software engineer
    Inscrit en
    Mai 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Software engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 14
    Points : 13
    Points
    13
    Par défaut
    Je viens de voir la fonction reshape qui permet de couper en bloc une matrice mais connaitriez-vous un moyen d'obtenir des bloc imbriqué ? Par exemple le vecteur a = [ 1 2 3 4 5 ] dont le traitement donnerait [1 2 3], [2 3 4] et [3 4 5] ??

    Ou alors il existe aussi la fonction blockproc mais il faut que je l'étudie encore un peu car je n'ai pas très bien compris son fonctionnement encore

Discussions similaires

  1. Lissage d'un signal bruité pour calcul de pente
    Par dragondumond dans le forum VB.NET
    Réponses: 3
    Dernier message: 19/04/2013, 19h10
  2. Algorithme de découpe de zones en rectangles
    Par matt22 dans le forum Traitement d'images
    Réponses: 4
    Dernier message: 24/09/2011, 14h40
  3. Algorithme de découpe
    Par Shivan dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 04/10/2010, 16h02
  4. [Flex] Algorithme de parsing/interprétation de formule de calcul Excel
    Par Philoulheinz dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 26/04/2009, 11h07
  5. calcul d'une partie de la valeur d'une cellule
    Par magictom42 dans le forum Macros et VBA Excel
    Réponses: 24
    Dernier message: 23/10/2006, 12h16

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