[Python] Traitement de signal (RÉSOLU)

Autres projets et contributions
Avatar de l’utilisateur
L_Indien
Chu Ko Nu
Messages : 389
Inscription : dim. 14 nov. 2010, 09:47
Localisation : En mouvement perpétuel...

[Python] Traitement de signal (RÉSOLU)

Message par L_Indien »

Bonsoir Le Forum,

J'ai un petit soucis sous Python. Enfin, c'est sous Python (Python2 précisément), mais ça peut être sous un autre langage. C'est juste que, c'est dans un cadre scientifique.

Voici la problématique :
j'effectue des mesures avec un capteur de pression. Ce dernier est branché sur un SEFRAM (pour ceux qui connaissent, c'est un DAS1400. Un peu âgé, mais une fois bien réglé... Une vraie horloge).
J'ai une acquisition toutes les 5 ms, et le capteur a pas mal de bruit (environ 0.15 V).
Jusqu'ici, tout va bien.

Le soucis, c'est que le temps d'acquisition s'effectue sur une vingtaine de minutes environ (vous imaginez un peu la quantité de point...).
L'idée est de passer par python pour effectuer le graphique. Les tableurs plantent complètement, avec la quantité de point.

J'arrive à lire le fichier et à extraire les données.
Le soucis, c'est plus, lors de l'affichage du graphique. Déjà, pour un petit fichier, le pc rame à mort... Donc, pour les fichiers classiques...

Au niveau électronique pur, il me faudrait un filtre passe-bas, ou passer par les série de Fourrier en utilisant les maths (ça fait un bail... Faudrait que je m'y remette...)

Mais au niveau de python... J'ignore complètement comment faire.
J'ai vu quelques infos, mais rien de vraiment intéressant.

Vous n’auriez pas une idée ou deux ?

Je vous remercie pour les conseils.

Bonne soirée et bon week-end.
Dernière modification par L_Indien le sam. 11 nov. 2017, 20:42, modifié 1 fois.
Différence entre windows et linux
Linux est multi-tâches, windows est multi-taches.
L'Indien de la Douche - Soutient L'April
Avatar de l’utilisateur
FoolEcho
Maître du Kyudo
Messages : 10707
Inscription : dim. 15 août 2010, 11:48
Localisation : Basse-Normandie

Re: [Python] Traitement de signal

Message par FoolEcho »

Salut,
L_Indien a écrit : sam. 04 nov. 2017, 19:44 Le soucis, c'est que le temps d'acquisition s'effectue sur une vingtaine de minutes environ (vous imaginez un peu la quantité de point...).
L'idée est de passer par python pour effectuer le graphique. Les tableurs plantent complètement, avec la quantité de point.

J'arrive à lire le fichier et à extraire les données.
Le soucis, c'est plus, lors de l'affichage du graphique. Déjà, pour un petit fichier, le pc rame à mort... Donc, pour les fichiers classiques...

Au niveau électronique pur, il me faudrait un filtre passe-bas, ou passer par les série de Fourrier en utilisant les maths (ça fait un bail... Faudrait que je m'y remette...)

Mais au niveau de python... J'ignore complètement comment faire.
J'ai vu quelques infos, mais rien de vraiment intéressant.

Vous n’auriez pas une idée ou deux ?
Oui. Comme de ne pas passer par du python pour ce type d'usage.

Pour ce qui est de tracer et d'étudier des courbes, le langage r me paraît beaucoup plus adapté: https://cran.r-project.org/ .

https://sites.google.com/site/rgraphiqu ... graphiques
https://sites.google.com/site/rgraphiqu ... type-y-f-x

Après faut se farcir un peu de doc... mais c'est relativement simple à tester: tu fabriques le fichier qui va bien avec tes coordonnées (à la sauce tableur: un simple fichier txt avec des séparateurs), tu le charges dans r et tu lui fais tracer. Après je dis ça, mais ça fait très longtemps que je ne m'en suis plus servi... :mrgreen:

Tu trouveras pas mal de tuto en français.

https://r.developpez.com/tutoriels/r/debutants/#LIII-B

La paquet existe dans les dépôts: r. :chinois:
«The following statement is not true. The previous statement is true.» :nage:
Avatar de l’utilisateur
Joffrey
Daikyu
Messages : 84
Inscription : mar. 08 sept. 2015, 23:42

Re: [Python] Traitement de signal

Message par Joffrey »

Bonjour,

Je n'ai pas vos niveaux en programmation mais dans la lib standard de python il y a turtle:
https://docs.python.org/fr/2.7/library/turtle.html

C'est moins exotique que "r" donc je pense que tu trouveras beaucoup plus docs.
Avatar de l’utilisateur
FoolEcho
Maître du Kyudo
Messages : 10707
Inscription : dim. 15 août 2010, 11:48
Localisation : Basse-Normandie

Re: [Python] Traitement de signal

Message par FoolEcho »

Joffrey a écrit : dim. 05 nov. 2017, 11:38 C'est moins exotique que "r" donc je pense que tu trouveras beaucoup plus docs.
:roll: ... r est très bien documenté, y compris en français, pas spécialement orienté développeur (ce sont des problématiques d'analyse de données et de calcul scientique, statistiques et autres) et utilisé par des universités et des petits groupes comme ibm ( https://www.ibm.com/blogs/bluemix/2017/ ... databases/ ) ...

Ce n'est pas parce qu'un langage «reconnu» fait quelque chose qu'il est le mieux adapté à une certaine problématique.
«The following statement is not true. The previous statement is true.» :nage:
Avatar de l’utilisateur
Joffrey
Daikyu
Messages : 84
Inscription : mar. 08 sept. 2015, 23:42

Re: [Python] Traitement de signal

Message par Joffrey »

Il y a aussi python-matplotlib plus adapté que turtle (mais je ne l'ai jamais utilisé).
Un tuto français.
@FoolEcho ta solution est pertinente, c'est personnel je n'aime pas les DSL mais ce n'est pas le sujet.
bobo
Elfe
Messages : 593
Inscription : mar. 08 avr. 2014, 22:47

Re: [Python] Traitement de signal

Message par bobo »

Le module pandas de Python est vraiment top pour l'analyse de données

Regarde donc ça:
http://pandas.pydata.org/pandas-docs/st ... resampling

Par exemple cette fonction sert à faire re-échantillonner une série temporelle avec un autre pas de temps en appliquant un calcul. Basiquement c'est le soucis que tu as: trop de points, trop de bruit; en réduisant le nombre de points par moyennage, tu pourras lisser la courbe et la représenter dans un éditeur de graphique… attention aux déformations que le traitement de données peut introduire
dwm — BÉPO — vim — “more is less !”
Avatar de l’utilisateur
L_Indien
Chu Ko Nu
Messages : 389
Inscription : dim. 14 nov. 2010, 09:47
Localisation : En mouvement perpétuel...

Re: [Python] Traitement de signal

Message par L_Indien »

Bonsoir à tous,

Je vous remercie pour les infos et les réponses.

Je vous avoue, que je ne suis pas très chaud pour me remettre à travailler sur un nouveau langage : je viens de me plonger dans python (il y a moins d'un mois), et là, travailler sur R...
Mais visiblement, le langage R n'est pas des plus compliqué. Donc, ça me motive un peu plus. Le fait qu'il y aie une documentation assez importante, ça aide aussi.
En regardant en vite zef, il y a même le module RPy module, qui est une extension des fonctions R que l'on peut installer dans python...

Je vais également regarder du côté de pandas.

En parallèle, j'ai un peu regardé au niveau des graphiques. Ce qui faisait - en parti - rallonger le temps de traitement, c'était les échelles des axes X et Y.
Python m'affichait toutes les valeurs... Soit à peu près 74000 valeurs... Ceci explique un peu cela...

Bonne soirée.
Différence entre windows et linux
Linux est multi-tâches, windows est multi-taches.
L'Indien de la Douche - Soutient L'April
Avatar de l’utilisateur
L_Indien
Chu Ko Nu
Messages : 389
Inscription : dim. 14 nov. 2010, 09:47
Localisation : En mouvement perpétuel...

Re: [Python] Traitement de signal

Message par L_Indien »

Bonjour à tous,

Je vous avoue ne pas avoir eu le temps de tous tester.

J’ai réussi à résoudre mon problème.

Le code était loin d’être optimisé…

Hormis vos réponses, ce qui m'a encore plus mis la puce à l'oreille, c’est :
  • Le code fonctionne sous Linux, mais pas sous windows, avec la même application pour l’exécuter (Spyder pour Python 2.7).
  • J'en ai parlé un peu avec des personnes qui font du développement (sous Python et sous Cast3M). Ça les a fait un peu tiquer quand je leurs dis le nombre de valeurs. Du style, « mais, tu peux limite faire tourner ton script sur un rasbperry. 74000 valeurs, c’est que dalle. Et en plus, ce n’est même pas du temps réel que tu veux… Bizarre… Si tu veux, je peux te faire un petit script pour Cast3M. »
Déjà, j'ai un peu optimisé le code.

Ensuite, j'utilise cette fonction pour « nettoyer » le signal :

Code : Tout sélectionner

    #Lissage de la pression
    # Create an order 3 lowpass butterworth filter:
    b, a = signal.butter(3, 0.001)
    # Use filtfilt to apply the filter:
    pression_lisse = signal.filtfilt(b, a, pression)
Le script est rapide (moins de 15 secondes pour afficher le graph), et le bruit est ainsi retiré du signal.

Merci pour vos réponses.

Je vais essayer d’exploiter d’autres pistes, si j’ai le temps, et reviendrai vous tenir informé.

Je vous remercie pour vos réponses et conseils.

Bonne soirée et bon week-end.
Différence entre windows et linux
Linux est multi-tâches, windows est multi-taches.
L'Indien de la Douche - Soutient L'April
Répondre