Stabilisation et Système du premier ordre [Résolu] [Algo] - Algo - Programmation
Marsh Posté le 09-08-2006 à 00:34:46
un truc simple serait de vérifier la valeur des N dernières valeurs et vérifier qu'elle sont comprises dans une plage.
comme tu as une exp décroissante ça ne posera pas de problème. le tout est bien calculer cette plage...
Marsh Posté le 09-08-2006 à 01:17:13
Tout d'abord merci pour ta reponse JagStang...
Comme tu le dis tout le probleme est de determiner la plage...Le probleme avec la plage est le meme qu'avec les solutions 1) et 2)...
Je vais essayer de voir ce que ca donne...
Merci encore...
Marsh Posté le 09-08-2006 à 01:55:01
je sais pas avec quelles valeur tu travailles, mais si tu as peu de bruit, quelques mV devraient suffire. le must serais qu'il soie adaptatif au bruit...
Marsh Posté le 09-08-2006 à 08:27:49
Bonjour,
et l'idée de calculer un ratio genre x/xn+1 < Epsilon ? ca donne quoi ?
Ou lancer un fit linéaire, garder les coeff directeur (il est negatif puis tend 0) et voir son evolution. Ce qui pourrait peut etre te donner ta constante de temp par la même occasion...
Ou, derniere suggestion, tu lisses ton signal a posteriori et tu effectues une manip genre ce que tu as tenté.
rem. Pourquoi ton fit est complexe ? je ne vois pas...
y = b - bExp(-at) + c
y = B - bExp (-at) où B = b-c
y = D - Exp(-at) où D = B/b
...
et à partir de là en appliquant le même raisonnement que pour un fit linéaire, ca ne fonctionne pas ?
@pluche
Marsh Posté le 09-08-2006 à 17:03:29
@pfuitt :
1) Pour le fit sur y=D-Exp(-at) : pour tomber sur une fonction lineaire on passe par le log de la fonction...
Donc avec y=bexp(-at) ca donne log(y)=log(b) -at...Mais avec cette fonction ca ne marche (enfin...je pense...desole mais moi et les maths...) on a log(y)=log(d-exp(-at)) et donc pas de linearite...
2) Sinon pour le ratio x/xn+1<epsilon tu veux dire xn/xn+1 ? Je vais voir ce que ca donne...C"est un peu dans le meme genre que ce que JagStang a propose non ? Mais bon je suis pas sur que ca marche, notamment avec ces histoires de fluctuations, meme quand le systeme est stabilise...
3) L'hisotire des coefficients directeur est une assez bonne idee je trouve pour touver la constante de temps...Mais bon, je sais que ca commence a devenir lourd comme argument, mais :
a) Les fluctuations encore et toujours
b) Comment determiner l'epsilon a partir duquel la fonction n'est plus lineaire, sachant que le coefficient directeur variera forcement meme dans le domaine lineaire....
3) Je comprends pas ton lissage a posteriori...
@JagStang : L'histoire de s'adapter au bruit est ce que j'essaye de faire...Le probleme c'est que ca a l'air plus aleatoire qu'autre chose....
Mon but est d'essayer de detourner le probleme..Travailler sur une courbe theorique qui corresponde au mieux par exemple...
Pour ce qui est des N dernieres valeurs voila ce que je fait :
1) calculer une derivee a l'origine plus au moins barbare a partir des deux premieres donnes
2) Ensuite lorsque un nouveau point est acquis, supposer que ce dernier point appartient qu domaine de stabilite...
3) J'ai la derivee a l'origine et la valuer finale, j'ai donc la constante d temps...Qui me sert a rien dans ce cas...Mais bon ca fait plaisir..
4) Je regarde si les N prochains points se situe entre 0.99 et 1.01 fois la valeur actuelle...Si c'est le cas alors ca marche, on est bien dans le domaine de stabilite....
Donc en gros je melange un peu de tout : N dernieres valeurs, x/xn+1<epsilon, fit grossier, etc...
Pour ce qui est de la constante de temps elle peut servir de verification : si je suis dans le domaine de stabilite, verifie que l'on a egalement t=6*tau ou un truc dans le genre...
En tout cas, merci encore pour vos reponses...
Marsh Posté le 09-08-2006 à 17:12:02
Blaireau2000 a écrit : 1) Pour le fit sur y=D-Exp(-at) : pour tomber sur une fonction lineaire on passe par le log de la fonction... |
Si, tu peux obtenir la linéarité en passant par la petite transformation que t'a montrée pfuitt :
y = b(1-exp(-at))+c
<=> -y - D = exp(-at)
<=> log(-y-D) = -at
donc tu fais ta régression linéaire sur log(-y-D) ... aux erreurs de calculs près (j'ai jamais été capable d'aligner plus de trois lignes de calcul sans qu'une malheureuse erreur de signe se glisse quelque part)
Marsh Posté le 09-08-2006 à 17:32:36
Merci franceso mais j'ai deja essayer mais ne marche pas (enfin..je pense...)
Le probleme etant que D est une inconnue du probleme (car d = 1-c/b ou b est une inconnue a determiner)
Or la regression suppose que dans log(Y)=-at t et Y (=-y-D) soient connues...Ce qui n'est pas le cas...a cause de D...
Bon maintenant ce que l'on peut faire : suppose que la valeur mesuree a l'instant t soit la valeur finale (on obtient alors D), calculer et correler tout ca, et voir ce que ca donne...Mais bon c'est un peu lourd niveau calcul...
Marsh Posté le 09-08-2006 à 17:43:36
Blaireau2000 a écrit : @pfuitt : |
heuu ben si ... si tu as y = A- Exp(-Bt) si tu prends le log nep tu as plutot un truc lineaire...enrte ce que je te fais et ce que fais franceso cest plutot claire !
Blaireau2000 a écrit : @pfuitt : |
tu as pas des variations de plus de 10% entre chaque mesure, rassure moi ? ou alors cest que tu as un souci au niveau de la mesure en elle meme... perdurbations ext.. tu as essayer de mettre des tores sur tes fils ?
Blaireau2000 a écrit : @pfuitt : |
les fluctuations tu t'en fiches vu que tu fais un fit linéaire sur une large bande, genre 10 points ou plus. puis tu fais un truc flottant, pour les points de 0->10 tu as un couple (a0, b0)
5->15 tu as un couple (a1, b1)
...
1000->1005 tu as un couple (a200, b200)
etc etc
et a chaque fois tu regarde comment evolue a ! au depart il est tres fortement négatif, et apres il tend vers 0 (selon ta courbe), apres charge a toi de mettre un seuil !
mais tu considere ta droite comme lineaire par partie, toujours ! ca revient à evaluer une derive sur un peu plus de points que 2 !
[/quotemsg]
Blaireau2000 a écrit : @pfuitt : |
tu calcules la moyenne de tes mesures sur une fenetre glissante ==> donc un lissage après tes mesures ! et cest sur ces mesures filtrées que tu travailleras.
donc tu t'affranchis de l'éventuel bruit de mesure, même si il faut que tu regardes si tu ne peux pas virer ce bruit à la source.
sinon, une derniere idée, brutale, tu as un bruit blanc... donc...et là je vois les yeux des matheux las s'ouvrir en grand... une deconvolution !! youpie :!!
cette derniere idée n'est à mon avis pas une bonne idée du tout, trop complexe et ca revient à prendre un pilon pour eclater une noisette !
Marsh Posté le 09-08-2006 à 19:04:45
pfuitt a écrit : à chaque fois tu regarde comment evolue a ! au depart il est tres fortement négatif, et apres il tend vers 0 (selon ta courbe), apres charge a toi de mettre un seuil ! |
perso, je ne crois pas trop à ce genre de solution pour calculer la constante de temps : pour moi, soit on connait a priori la forme de la courbe et on fait un fit global (ce qui donne au passage la constante de temps du système), soit on fait des tests purement locaux (seuil sur la dérivée locale, etc.). Une solution hybride consistant à regarder l'evolution de données locales pour retrouver des valeurs globales (comme la constante de temps) me paraît trop sensible pour donner des résultats fiables.
Sinon, entièrement d'accord avec toi pfuitt
pfuitt a écrit : tu calcules la moyenne de tes mesures sur une fenetre glissante ==> donc un lissage après tes mesures ! et cest sur ces mesures filtrées que tu travailleras. |
+1
Ca me paraît être une étape essentielle si tu as autant de bruit que tu le dis...
pfuitt a écrit : sinon, une derniere idée, brutale, tu as un bruit blanc... donc...et là je vois les yeux des matheux las s'ouvrir en grand... une deconvolution !! youpie :!! |
+1
Marsh Posté le 09-08-2006 à 19:33:12
pfuitt a écrit : heuu ben si ... si tu as y = A- Exp(-Bt) si tu prends le log nep tu as plutot un truc lineaire...enrte ce que je te fais et ce que fais franceso cest plutot claire ! |
Je sais pas si t'as lu la reponse que j'ai donne a franceso...
pfuitt a écrit : tu as pas des variations de plus de 10% entre chaque mesure, rassure moi ? ou alors cest que tu as un souci au niveau de la mesure en elle meme... perdurbations ext.. tu as essayer de mettre des tores sur tes fils ? |
En fait, les mesures sont effectuees dans un cryostat avec des temperatures allant jusqu'a moins de 5K...D'ou les perturbations...LA majorite des cables sont des cables triaxaux, sauf ceux qui descendent directement dans le cryostat...
L'exponentielle marche tres bien pour les temperature au dessus de 30K...Apres c'est assez aleatoire, certaines fois ca oscille, d'autre fois, la derivee a l'origine quasi verticale, donnant une constante de temps minuscule, mais le systeme pourtant met des heures a se stabiliser...Au lieu d'avoir une plus ou moins belle horizontale lors de la stabilsation on a des fois une pente non negligeable qui semble etre constante etc...
En hypothese, je ne prends pas compte du cas oscillations..Sinon le reste, j'essaye de l'inclure au mieux dans l'algoritme...
pfuitt a écrit : les fluctuations tu t'en fiches vu que tu fais un fit linéaire sur une large bande, genre 10 points ou plus. puis tu fais un truc flottant, pour les points de 0->10 tu as un couple (a0, b0) |
Ok...
pfuitt a écrit : tu calcules la moyenne de tes mesures sur une fenetre glissante ==> donc un lissage après tes mesures ! et cest sur ces mesures filtrées que tu travailleras. |
Juste pour voir si j'ai bien compris le concept de fenetre glissante : le lissage se fait durant l'experience, sur un intervalle de temps de plus en plus grand du genre : au debut de 0 a 5 puis de 0 a 10, de 0 a 30 etc...Ou lorsque l'acquisition est termine ?
pfuitt a écrit : sinon, une derniere idée, brutale, tu as un bruit blanc... donc...et là je vois les yeux des matheux las s'ouvrir en grand... une deconvolution !! youpie :!! |
Marsh Posté le 09-08-2006 à 21:39:02
Je me rends compte que l'exemple que j'ai poste est pas tres pertinent vu le probleme...
Voici un autre exemple un peu plus "revelateur" :
...
Ainsi, si j'utilise la methode xn/xn+1< epsilon, la courbe est stable pour x=438...
Marsh Posté le 10-08-2006 à 08:38:01
Alut,
en fait pour le coup de la fenetre glissante, la taille de la fenetre ne varie pas, tu fit par partie. Mais vue la masse de données que tu as, je pense que des fenetre d'une largeur de 500 se deplacant de 250 semble pas mal, reflexion de traitement-du-signal-mal validée par son analyse pifométrique !
Puis tu stockes le coef de regression, ainsi que le coef dir. et tu appliques cela jusqu'à ce que le coef dir. tende franchement vers 0, puis après ca repart en 'javel' d'après le dernier graphique que tu as fourni.
Et pour l'approximation,comme ta fonction est non linéaire, applique Levenberg-Marquardt http://www.lesia.obspm.fr/plasma/SBT/node35.html ou si c'est un peu effrayant, tu sais qu'une expo ce n'est que Somme(a^n/n!) de 0 à inf, donc tu peux te dire que tu as une fonction polynomiale... ca c'est porcin comme reflexion, je sais
Mais si tu es physicien, tu as surement un bon vieux matlab des famille dan sun coin, et là, suis persuadé que tu as tous les fit immaginables dessus, idem si tu bosses avec labview pour l'acquisition
Marsh Posté le 10-08-2006 à 16:45:48
pfuitt a écrit : Alut, |
Merci...et encore merci pfuitt...
Bon, faut que je comprenne un peu comment marche Levenberg-Marquardt mais en tout cas ca m'avance pas mal...
Je vais voir tout ca alors...
Encore merci...
Marsh Posté le 10-09-2006 à 17:22:36
J'ai pas lu toutes les solutions proposées, et le sujet est peut être déjà résolu.... mais je donne toujours un petit truc tout simple pour lisser une courbe:
X'n = alpha * Xn + (1-alpha) * X'n-1
En choisissant 0<alpha<=1 on lisse plus ou moins la courbe.
Marsh Posté le 12-09-2006 à 23:16:36
Merci pour ton aide Nargy, mais oui le problème est déjà résolu...
En fait, j'ai finalement pu testé le programme hier et ca marchait pil poil avec la méthode de pfuitt :
1) Travailler sur un fit obtenu grâce à Levenberg-Marquardt
2) Fit effectuer sur une fenêtre définie par l'utilisateur et se déplacant a chaque de la moitié de la taille de la fenêtre
3) Calculer la dérivé sur les deux derniers points obtenus avec le fit et si c'est égal à zéro (si si ca arrive....) OK...
Sinon tous les problèmes bizarres que j'ai pu rencontrer sont détourné grâce au fit (en gros si la fonction ne ressemble en rien à une expo alors le fit est de tel sorte qu'il n'aura jamais une dérivé nulle...).
Bon voilà, c'était pas facile, ya eu des larmes, de la sueur et du sang, mais le prog a été terminé juste à temps...
Encore un grand grand merci à pfuitt, JagStang et franceso....
Marsh Posté le 08-08-2006 à 22:22:44
Bonjour à tous...
Bon alors voilà mon probème : j'ai un programme qui récupère les données issues d'un voltmètre en quasi-continue. Ces données mettent un certain temps avant de se stabiliser. Le problème : comment détecter que les données sont stabilisées ?
Bon alors voilà plusieurs pistes que j'essaye ou j'ai essayé :
1) Tout bêtement, comparer les dernières données entre elles et coir si elles sont égales -> Marche pas vraiment vu qu'il a des fluctuations constantes notamment à cause du bruit, et que l'amplitude de ces fluctuations varie...
2) Calculer la dérivée entre le dernier point et un point situer 5 secondes auparavant -> Un peu mieux que le 1) mais bon toujours même problème
3) Les différentes données acquises jusqu'à stabilisation suivent un chemin exponentielle (courbe en bleu) :
Identifier la fonction pourrait en même temps me donner la constante de temps qui serait bien utile...
L'idée est de trouver les paramètres par une regression, est ensuite de voir si la courbe pratique est théorique corresponde par corrélation...
Comme l'acquisition de données se fait en continue, on calcule a chaque boucle les différents coefficients et l'indice de corrélation...
2 problèmes : assez complexe + impossible de faire une bonne régression car la courbe est du type y=b(1-exp(-at))+c et non y=bexp(-at)
4) Idée un peu farfelue (désolé) : essayé d'obtenir une courbe genre courbe de gauss :
Calculer une sorte de bande passante, et attendre que cette bande passante soit inférieure ou égale à x...
2 problèmes : comment obtenir ce genre de courbe, sur quelle donnée ? L'indice de corrélation, les données du voltmètre ? COmment la centrer où je veux ?
Voilà...
Donc si quelqu'un pouvait m'aider sur ce problème (commentaire, autre idée, voir solution (je sais je peux réver) etc..), ce serait très gentil, parceque ca fait un très très très très long rmoment que je galère dessus, et là je vais craquer...
Merci d'avance...
Message édité par Blaireau2000 le 12-09-2006 à 23:18:13