Salut la compagnie!
Il y a longtemps que je ne vous ai plus cassé les pieds ici (principalement parce que mes questions ont des réponses déjà fournies en cherchant un peu...) mais là je ne sais pas trop par quel côté aborder mon problème.
Pour faire simple, j'ai un signal très bruité que je dois décomposer en deux parties, et ces deux parties subissent ensuite une approximation pour me fournir dans le cas idéal 2 équations de droites quand c'est possible, sinon une équation de droite, ou quand c'est calme rien. (Cf pièce jointe, des courbes extraites sous Excel ...)
On voit que le premier signal ne fournit qu'une droite, et le second est un cas "bien mais pas top".
Je n'ai pas/plus vraiment de soucis sur la syntaxe et le fonctionnement de mon code matlab (pour une fois) mais un soucis de performances.
Pour faire ces approximations linéaires, j'ai une équation du type:
(c'est bien sûr pas fonctionnel comme ça)
Code : Sélectionner tout - Visualiser dans une fenêtre à part coefficients_droite = polyfit((1:fin_droite1,signal_entree(1:fin_droite1),1)
La procédure est donc (très) simple, et me donne les bons coefficients a et b de l'équation y=ax+b.
Mon soucis, on y arrive, est qu'utiliser polyfit me semble revenir à chasser des moustiques avec un lance-flamme. Au profiler pour traiter 25000 itérations il me faut une quarantaine de secondes, mais presque la moitié du temps est nécessaire pour une vérification de la fonction polyfit, à savoir la condition:
, et le calcul qui y est attenant, passant par un condest.polyfit>warnIfLargeConditionNumber
On touche à mes limites, parce que:
-j'ai beau pratiquer Matlab, je connais un dixième des fonctions en étant très optimiste.
-j'ai beau faire un peu de traitement de données/signal, je suis chimiste (j'aime raconter ma vie) donc je ne sais pas vraiment comment faire pour traiter un signal aussi dégueulasse en entrée et arriver à extraire une équation de droite.
Donc on va enfin arriver à ma question:
Mon code marche, c'est la fête, mais c'est trop lent. Pour une approximation linéaire, est-ce que vous avez quelque chose en magasin de plus efficace que polyfit, et qui marcherait sur un signal affreux (donc pas de moyenne glissante ou de calcul de droite niveau collège, j'ai essayé...)?
J'ai un peu regardé interp1, qui me semble rapide pour trouver l'ordonnée à l'origine (mais poins précis que polyfit...) mais je ne vois pas comment l'utiliser pour le coefficient directeur, avec un signal bruité.
Partager