-
Je veux bien t'aider contre une partie des bénéfs de l'appli embarrassed



Bon plus sérieusement, voici quelques pistes :

- si ce qui t'intéresse c'est de repérer les endroits où la courbe franchit le zéro tout en évitant d'amplifier le bruit, le plus simple est un comparateur à hystérésis. En gros :
* si entrée > seuil -> mettre la sortie à 1
* si entrée < -seuil -> mettre la sortie à 0
* sinon, la sortie ne change pas d'état

- pour une meilleure réjection des parasites, tu peux rajouter comme critère supplémentaire "au minimum N échantillons consécutifs au-delà du seuil" pour valider le changement d'état, ou mieux encore "au minimum M échantillons au-delà du seuil dans les N derniers échantillons"

- regarde ce que donnent tes données en coordonnées polaire (r = racine(x²+y²), angle = arctan2(y/x)), il se peut que ça te donne des choses plus intéressantes

Il y a plein d'autres techniques, mais y'a pas assez de données dans ton message pour pouvoir savoir. Il en faudrait davantage, avec un repère (manuel) au moment où ce que tu veux repérer se produit.
avatarZeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo
-
Je ne vois pas trop le problème : si tu règles le seuil pour quelqu'un de fatigué, ça va marcher aussi pour quelqu'un qui fait des mouvements plus grands ?

Mais sinon j'insiste : il faut plus de données pour pouvoir t'aider smile
avatarZeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo
Pour détecter une grande accélération, tu peux utiliser des dérivées discrètes secondes, c'est-à-dire que tu prends le quotient des différences du quotient des différences des données que tu as affichées.

u"(t)=(u'(t+½)-u'(t-½))/((t+½)-(t-½))=u'(t+½)-u'(t-½)=(u(t+1)-u(t))/((t+1)-t)-(u(t)-u(t-1))/(t-(t-1))=u(t+1)-2u(t)+u(t-1)

En fait, tu as déjà des accélérations (c'est un accéléromètre après tout), donc prendre des différences n'est probablement pas ce que tu veux, désolé.
avatarMes news pour calculatrices TI: Ti-Gen (fr/en), MobiFiles (de)
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité
-
Un bon vieux Filtre de kalmann c'est fait pour ca embarrassed

( http://fr.wikipedia.org/wiki/Filtre_de_Kalman )
avatarProud to be CAKE©®™
The cake is a lie! - Love your weighted companion cube

->986-Studio's Wonder Project!<-
yN a cassé ma signature :o
nope.

Orion: je pense que ta détection du passage par zéro est la bonne chose.
Si y'a des risques que des petits passages par zero proches soient mal interprétés, tu peux utiliser un mécanisme dit d'hystérésis, ou tu attends que le signal se soit suffisamment éloigné de zéro pour prendre en compte un nouveau passage par zero.

et ce seuil n'a pas besoin d'être fixe, ça peut être un % de l'amplitude max sur les 3/5/10 derniers mouvements.

ps pour rappel, une accélération à zéro signifie un changement de direction de la vitesse, donc le bout d'une élongation de brasse par exemple. oui, c'est évident.
Squalyl: Expert en automatismes et detection de mouvement? c'est nouveau?
avatarProud to be CAKE©®™
The cake is a lie! - Love your weighted companion cube

->986-Studio's Wonder Project!<-
yN a cassé ma signature :o
Allez un article sur le filtrage:

http://blog.tkjelectronics.dk/2012/09/a-practical-approach-to-kalman-filter-and-how-to-implement-it/

Orion: il n'y a que l'accelero sur la pebble, un gyro te serait bien pratique, parceque les mouvement sont plutot complexe, et l'acceleration ne permet pas de tout savoir sur le mouvement du poignet..
avatarProud to be CAKE©®™
The cake is a lie! - Love your weighted companion cube

->986-Studio's Wonder Project!<-
yN a cassé ma signature :o
-
La science autour du filtre de kalman peux paraitre complete, l'implementation elle est generalement plutot simple, je suis pas un dieu en math non plus ^^


L'integralite du calcul est dans le fichier .h la:

https://github.com/TKJElectronics/KalmanFilter/blob/master/Kalman.h
float getAngle(float newAngle, float newRate, float dt) { // KasBot V2 - Kalman filter module - http://www.x-firm.com/?page_id=145 // Modified by Kristian Lauszus // See my blog post for more information: http://blog.tkjelectronics.dk/2012/09/a-practical-approach-to-kalman-filter-and-how-to-implement-it // Discrete Kalman filter time update equations - Time Update ("Predict") // Update xhat - Project the state ahead /* Step 1 */ rate = newRate - bias; angle += dt * rate; // Update estimation error covariance - Project the error covariance ahead /* Step 2 */ P[0][0] += dt * (dt*P[1][1] - P[0][1] - P[1][0] + Q_angle); P[0][1] -= dt * P[1][1]; P[1][0] -= dt * P[1][1]; P[1][1] += Q_bias * dt; // Discrete Kalman filter measurement update equations - Measurement Update ("Correct") // Calculate Kalman gain - Compute the Kalman gain /* Step 4 */ float S = P[0][0] + R_measure; // Estimate error /* Step 5 */ float K[2]; // Kalman gain - This is a 2x1 vector K[0] = P[0][0] / S; K[1] = P[1][0] / S; // Calculate angle and bias - Update estimate with measurement zk (newAngle) /* Step 3 */ float y = newAngle - angle; // Angle difference /* Step 6 */ angle += K[0] * y; bias += K[1] * y; // Calculate estimation error covariance - Update the error covariance /* Step 7 */ float P00_temp = P[0][0]; float P01_temp = P[0][1]; P[0][0] -= K[0] * P00_temp; P[0][1] -= K[0] * P01_temp; P[1][0] -= K[1] * P00_temp; P[1][1] -= K[1] * P01_temp; return angle; };

Bien sur le code la tel que ne va pas te convenir car il est pour des gyros, mais c'est pour te montrer que la theorie peux paraitre complexe, la pratique l'est beaucoup moins (heureusement d'ailleurs, car ce type de filtre est utilise dans des robots qui on des contraintes de CPU plutot forte, si c'etait un truc lourdingue, ca marcherais pas aussi bien grin)

C'est en gros un gros filtre moyeneur predictif, bien regle il elimite assez efficacement le bruit.
Apres tu n'es pas oblige de l'utiliser, tu demande des methodes, je te donne celle que je connais qui est couramment utilise en robotique.

Ton gros soucis va etre l'imprecision des acceleros, car ils sont generalement tres bruité, meme et ce meme dans une position stable (ie sur unr table, sans un train ou un tornade qui passe dans les parages) alros fixe au poignet, tu va avoir plein de mouvement parasites, il faut correctement filtrer ton signal d'entree avant de l'appliquer a un quelconque algo comme celui propose par Zero (d'ailleurs meme bien filtre une hystérésis est indispensable)

squalyl (./8) :
ps pour rappel, une accélération à zéro signifie un changement de direction de la vitesse, donc le bout d'une élongation de brasse par exemple. oui, c'est évident.

Non une acceleration de zero signifie aucun changement sur cet axe en terme de vitesse c'est quand l'acceleration est differente de zero que c'est en train de bouger differement.

Un accelero n'est pas un compteur de vitesse, si tu met un accelero sur un objet que tu peux faire bouger linéairement a une vitesse fixe, au moment ou il va commencer a avancer, tu va noter une accélération sur l'axe correspondant a la direction de l'engin, et une fois celui-ci a vitesse stable tu aura 0 sur le meme axe car il n'y a ni acceleration dans le sens de l'axe (valeur positive) ni deceleration dans le sens de l'axe (valeur negative)
avatarProud to be CAKE©®™
The cake is a lie! - Love your weighted companion cube

->986-Studio's Wonder Project!<-
yN a cassé ma signature :o
Y'a un problème de balises dans ton post.

Et si je n'ai pas parlé de Kalman, c'est exprès, je voulais pas noyer Orion_ avec un truc aussi complexe avant qu'il ait pu tester des trucs plus simples grin
avatarZeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo
Merci Zero.
Rah mais zeph pourquoi tu \ tout des qu'il y a une balise qui merde j'ai du copier coller mon post dans un editeur pour virer tous les \ present.. (il prefixe les retours a la lignes, les smileys, les liens etc...)
avatarProud to be CAKE©®™
The cake is a lie! - Love your weighted companion cube

->986-Studio's Wonder Project!<-
yN a cassé ma signature :o
Pour ce problème, j'utiliserais aussi un filtre de Kalman étendu ou sans parfum. Si on veut différencier plusieurs nages, on peut utiliser plusieurs modèles de prédiction avec pour chacun les paramètres à estimer en fonction du type de nage (longueur des bras, des mouvements, rythme...) qui pourront ensuite servir à estimer la vitesse par exemple. On choisit le modèle qui minimise l'erreur de prédiction.

Si on doit pouvoir détecter les changements de type de nage, on peut définir une matrice de coûts de changement de modèle et on peut optimiser l'estimation de l'enchainement avec un algorithme de Viterbi.

C'est peut-être un peu trop compliqué pour ce que tu cherchais à faire, mais c'est un problème complexe et c'est comme ça que je ferais. Si tu veux, je te fais un devis cheeky
avatar
ah oui j'me suis enduit d'erreur sur le coup de la vitesse cheeky

mais je redis, kalman va filtrer le bruit, mais je pense pas qu'il aide a détecter un mouvement particulier, si?
squalyl (./17) :
mais je redis, kalman va filtrer le bruit, mais je pense pas qu'il aide a détecter un mouvement particulier, si?
Ici, on n'utiliserait pas le filtre de Kalman pour estimer une valeur à partir de mesures bruitées de cette même valeur, sinon on ne ferait que retirer le bruit et il resterait toujours à estimer le type de nage et le mouvement. On peut utiliser le filtre de Kalman pour estimer les paramètres d'un modèle de prédiction plus évolué (avec les versions étendue et sans parfum pour les modèles non linéaires). Ensuite, l'erreur de prédiction peut nous informer sur la validité du modèle.
avatar
-
Orion_ (./19) :
Je propose à l'utilisateur de choisir le style de nage avant le lancement.
C'est de la triche ça embarrassed
avatar
"Tu fais du sport toi maintenant ?!"
"Attends, c'est juste pour tester mon algo embarrassed"
avatarZeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo
-
-
Normalement un accéléromètre ça consomme très peu, je pense que tu peux augmenter la fréquence pour voir sans que ça ait un impact négatif sur la batterie.
avatarZeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo
ca depends des accelero ca
avatarProud to be CAKE©®™
The cake is a lie! - Love your weighted companion cube

->986-Studio's Wonder Project!<-
yN a cassé ma signature :o
Orion_ (./23) :
pour le crawl il a fallu que j'adapte avec des valeurs min/max, on verra bien au prochain test, mais ça me semble pas trop mal (vu que les valeurs sont pas super propre non plus, surement à cause des mouvements de nages qui sont pas toujours parfait/identique)
fn5a
Tu pourrais ajouter un délai minimal entre deux détections pour éviter ce genre d'erreur.
Et un filtre passe-bas serait pas mal pour enlever le gros du bruit.
avatar
http://www.bzarg.com/p/improving-imu-attitude-estimates-with-velocity-data/
http://www.bzarg.com/p/how-a-kalman-filter-works-in-pictures/

Pas encore lu en détail, mais ça a l'air expliqué de manière bien plus pédagogique que dans les cours que j'ai eu ^^
avatarZeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo
hehe smile
avatarProud to be CAKE©®™
The cake is a lie! - Love your weighted companion cube

->986-Studio's Wonder Project!<-
yN a cassé ma signature :o
C'est pas mal du tout, mais je sais pas où il a vu que ce n'est pas très connu. On l'utilise souvent en traitement du signal et en localisation.
avatar
Je pense qu'il veut dire "en-dehors des spécialistes en traitement du signal".
avatarZeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo