Problème intégration d'une matrice accélération par rapport au temps
Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

Problème intégration d'une matrice accélération par rapport au temps



  1. #1
    Tosetsu1

    Problème intégration d'une matrice accélération par rapport au temps


    ------

    Bonjour,

    J'ai un projet d'électronique à faire, dans ce projet j'ai pour but d'observer les variations du travail (l'énergie utilisé) en aviron par rapport à l'angle du dos.
    Pour ça j'ai deux accéléromètre ADXL335 et je travaille sur un rameur, je place un ADXL335 sous la selle pour ensuite obtenir la distance parcouru par le corps, et un autre dans le milieu du dos et je fais une phase d'initialisation de 3s sans bouger.

    Pour faire les graphiques j'utilise Octave, je trace l'accélération en fonction du temps (pour ça pas de problème) je met mes valeurs obtenu par l'accéléromètre dans plusieurs vecteurs et je plot et ensuite j'aimerai obtenir la vitesse en fonction du temps pour ceci j'utilise la fonction cumtrapz(temps,accélération) mais lorsque je trace ma vitesse j'obtiens une droite et je répète le même processus pour la position et là j'obtiens une courbe exponentielle, alors pour la vitesse j'ai essayer avec des boucles de tout recentrer en 0 mais je n'obtenais pas ce que je voulais, normalement je devrais obtenir pour la vitesse et la position deux droites sinusoïdales.
    Code:
    matrice=load("mouvement_selle90.txt");
    t=(matrice(:,1)+20);
    ax=matrice(:,2);
    ay=matrice(:,3);
    az=matrice(:,4);
    
    sensibilite=ax(1,1)-az(1,1);
    
    ax=(((ax-ax(1,1))./sensibilite).*9.81);
    ay=(((ay-ay(1,1))./sensibilite).*9.81);
    az=(((az-az(1,1))./sensibilite).*9.81);
    
    acce=sqrt((ax.^2)+(ay.^2)+(az.^2));
    
    v=cumtrapz(t,acce);
    
    pos=cumtrapz(t,v);
    
    
    
    matrice2=load("mouvement_selle70.txt");
    time=(matrice2(:,1)+20);
    ax2=matrice2(:,2);
    ay2=matrice2(:,3);
    az2=matrice2(:,4);
    
    sensibility=ax2(1,1)-az2(1,1);
    
    ax2=(((ax2-ax2(1,1))./sensibility).*9.81);
    ay2=(((ay2-ay2(1,1))./sensibility).*9.81);
    az2=(((az2-az2(1,1))./sensibility).*9.81);
    
    acce2=sqrt((ax2.^2)+(ay2.^2)+(az2.^2));
    
    v2=cumtrapz(time,acce2);
    
    pos2=cumtrapz(time,v2);
    
    
    %---graphique---
    
    figure(1);
    plot(t,v);
    hold on 
    plot(time,v2,'r');
    axis([0 20 -5 max(v)]);
    
    legend('vitesse 1','vitesse 2');
    xlabel('Duree [s]'); ylabel('vitesse [m/s]');
    
    figure(2);
    plot(t,pos);
    hold on
    plot(time,pos2,'r');
    axis([0 20 -5 max(pos)]);
    
    legend('position inclinaison 90','position inclinaison 70');
    xlabel('Duree [s]'); ylabel('position [m]');
    voilà, est-ce que quelqu'un aurait une idée pour intégrer l'accélération?
    Merci d'avance

    -----
    Images attachées Images attachées

  2. #2
    Tosetsu1

    Re : Problème intégration d'une matrice accélération par rapport au temps

    en fait je prend un autre exemple car celui ci l'accélération est toujours positive, sur le capteur positionné dans le dos j'obtiens bien une accélération positive puis négative, mais ma vitesse ressemble à une courbe sinusoïdale croissante et sur les signaux des trois axes en sortit du capteur faudrait il supprimer le signal de bruit (je ne sais pas comment on peut l'observer ^^')
    Code:
    matrice=load("inclinaison90.txt");
    
    t=(matrice(:,1)+20);
    ax=matrice(:,2);
    ay=matrice(:,3);
    az=matrice(:,4);
    
    acce=sqrt((ax.^2)+(ay.^2)+(az.^2));
    
    sensibilite=ay(1,1)-ax(1,1);
    
    
    acce=(((acce-acce(1,1))./sensibilite).*9.81);
    
    v=cumtrapz(t,acce);
    
    pos=cumtrapz(t,v);
    
    figure(1);
    plot(t,acce);
    hold on
    plot([min(t) max(t)], [9.81 9.81]);
    axis([0 20 min(acce) max(acce)]);
    
    figure(2);
    plot(t,ax);
    hold on
    plot(t,ay,'r');
    hold on
    plot(t,az,'k');
    axis([0 20]);
    legend('ax','ay','az');
    
    figure(3);
    plot(t,v);
    axis([0 20 -5 max(v)]);
    legend('vitesse 1');
    xlabel('Duree [s]'); ylabel('vitesse [m/s]');
    
    figure(4);
    plot(t,pos);
    axis([0 20 -5 max(pos)]);
    
    legend('position');
    xlabel('Duree [s]'); ylabel('position [m]');
    merci d'avance
    Images attachées Images attachées

  3. #3
    Antoane
    Responsable technique

    Re : Problème intégration d'une matrice accélération par rapport au temps

    Bonjour et bienvenue,
    Ton capteur a un offset : il te renvoie ton signal utile E.sin(wt) + une composante continue Vo (+du bruit haute-fréquence b(t)).
    Donc quand tu intègres, tu trouves une droite + un sinus (+un truc).
    Donc quand tu ré-intègres, tu trouves un carré (pas une exp) + un sinus (+un autre truc).

    Il faut supprimer la composante continue avant la première intégration en filtrant passe-haut, avec un fréquence de coupure très inférieure au minimum de la fréquence du signal utile.
    Le bruit HF, tu le supprimes en filtrant passe-bas à une fréquence très supérieure au max de la fréquence du signal utile.
    Dernière modification par Antoane ; 25/04/2014 à 19h33.
    Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.

  4. #4
    Tosetsu1

    Re : Problème intégration d'une matrice accélération par rapport au temps

    Merci de ta réponse, mais du coup je suppose que je dois connaître la fréquence de mon signal utile, est-ce que c'est la fréquence d’échantillonnage et si oui est-ce que comme j'ai 2000 valeurs pour 20s, je peux simplement faire 2000/20=100Hz? et donc mon filtre passe-haut serait [0 10] et le filtre passe-bas serait [10 10000] ensuite si je suis l'exemple de http://matlab.developpez.com/faq/?page=signal j'obtiendrai un code du genre:
    Code:
    fs = 100;
    Fph = 2*[0 10]/fs;
    b = fir1(n,Fph,'high' );
    freqz(b,1);
    Fpb=2*[10 10000]/fs;
    b2 = fir1(n,Fpb);
    freqz2(b2,1);
    mais le n je suppose qu'il correspond aux nombres d'harmonique (je ne sais pas comment les obtenir) et je ne vois pas ou intervient mon signal dans ce code...

  5. A voir en vidéo sur Futura
  6. #5
    Antoane
    Responsable technique

    Re : Problème intégration d'une matrice accélération par rapport au temps

    Citation Envoyé par Tosetsu1 Voir le message
    Merci de ta réponse, mais du coup je suppose que je dois connaître la fréquence de mon signal utile
    Et oui, ou tout du moins connaitre son ordre de grandeur.
    , est-ce que c'est la fréquence d’échantillonnage et si oui est-ce que comme j'ai 2000 valeurs pour 20s, je peux simplement faire 2000/20=100Hz
    Et non.
    C'est la fréquence de ta sinusoïde, c'est à dire de l'ordre de 0,2Hz.

    et donc mon filtre passe-haut serait [0 10] et le filtre passe-bas serait [10 10000] ensuite si je suis l'exemple de http://matlab.developpez.com/faq/?page=signal j'obtiendrai un code du genre:
    Code:
    fs = 100;
    Fph = 2*[0 10]/fs;
    b = fir1(n,Fph,'high' );
    freqz(b,1);
    Fpb=2*[10 10000]/fs;
    b2 = fir1(n,Fpb);
    freqz2(b2,1);
    mais le n je suppose qu'il correspond aux nombres d'harmonique (je ne sais pas comment les obtenir) et je ne vois pas ou intervient mon signal dans ce code...
    n correspondrait plutôt à l'ordre du filtre. Tu peux te contenter de n=1 ou 2.
    Il est probablement aussi possible de filtrer avant numérisation, avec un filtre RC basique.
    Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.

  7. #6
    Tosetsu1

    Re : Problème intégration d'une matrice accélération par rapport au temps

    Oui j'aurai bien aimer filtrer avant mais on n'avait pas le matériel pour pendant l'acquisition. x)
    Et je me demande où interviennent les données de mon signal d'accélération lorsque j'applique le filtre parce que je suppose que dans mon code je n'ai fait que créer les filtres?

  8. #7
    albanxiii
    Modérateur

    Re : Problème intégration d'une matrice accélération par rapport au temps

    Bonjour,

    Sur la datasheet de votre accéléromètre, http://www.analog.com/static/importe...ts/ADXL335.pdf je lis :

    The user selects the bandwidth of the accelerometer using the CX, CY, and CZ capacitors at the XOUT, YOUT, and ZOUT pins. Bandwidths can be selected to suit the application, with a range of 0.5 Hz to 1600 Hz for the X and Y axes, and a range of 0.5 Hz to 550 Hz for the Z axis.
    vous avez regardé un peu de ce côté là ?

    @+
    Not only is it not right, it's not even wrong!

  9. #8
    Tosetsu1

    Re : Problème intégration d'une matrice accélération par rapport au temps

    Absolument...pas et puis je n'aurai plus le matériel jusqu'à mon oral donc ça va m'être compliqué, mais j'ai réussi en bidouillant un peu le code à avoir une courbe à peu près sinusoïdale pour le signal de l'accéléromètre sur la selle vu que celui-ci était tout le temps à plat donc je vais dire que lorsque l'accéléromètre est incliné le signal va être bruité en fonction de l'angle car on reçoit les signaux des 3 axes varient alors que lorsque l'accéléromètre est à plat il n'y aura qu'un seul axe qui subira des variations importante et je vais faire mes interprétations en fonction de ça et puis une ouverture dans la conclusion du style on aurait pu faire un filtre RC afin de supprimer le signal de bruit et obtenir seulement les valeurs du signal utile, ou encore utiliser un gyroscope pour obtenir les positions angulaires et donc plus simplement obtenir les variations de l'angle du capteur...

  10. #9
    Antoane
    Responsable technique

    Re : Problème intégration d'une matrice accélération par rapport au temps

    Bonsoir,
    ou est le problème ? tu as un filtrage numérique passe haut à faire sur tes données pour obtenir ce que tu veux !
    Rien de compliqué la dedans, internet est plein d'exemples de codes pour l'implémentation si tu ne connais pas...

    La résistance de sortie inbtégrée au ADX... permet de filtrer aisément en passe bas avec un unique condensateur. Le filtrage pass-haut demande une résistance + un condensateur. Un inconvénient dans ce cas : tu formes un pont diviseur entre la résistance de sortie de l'accéléro (connue à +/-15%) et la résistance de ton filtre. Il faut ajouter un AOP en suiveur, ou assimilable.

    J'ai pas compris l'histoire du gyro, il me semble que tu as là toutes les données nécessaires, non ?
    Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.

Discussions similaires

  1. Réponses: 84
    Dernier message: 23/08/2013, 12h58
  2. Dérivée du déterminant d'une matrice par rapport à cette matrice
    Par ma2489 dans le forum Mathématiques du supérieur
    Réponses: 4
    Dernier message: 15/07/2013, 22h07
  3. Rapport entre la densité et l'accélération
    Par physmedecine dans le forum Physique
    Réponses: 5
    Dernier message: 04/04/2013, 14h53
  4. Intégration par rapport à une mesure
    Par invite4ffe6e57 dans le forum Mathématiques du supérieur
    Réponses: 3
    Dernier message: 09/05/2009, 14h49
  5. problème intégration matrice
    Par inviteac6d3309 dans le forum Mathématiques du supérieur
    Réponses: 0
    Dernier message: 11/04/2007, 10h58
Découvrez nos comparatifs produits sur l'informatique et les technologies.