IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Calcul scientifique Python Discussion :

Signal électrique à 20HZ


Sujet :

Calcul scientifique Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2017
    Messages : 10
    Par défaut Signal électrique à 20HZ
    Le but de mon programme est de représenter une tension sinusoidal de 20Hz, reçu par une carte pcduino. J'ai pri une fréquence d'échantillonnage de 200Hz. J'utilise un signal d'alarme pour déclencher le timer. Alors j'arrive à tracer le bon signal, mais mon nombre de données dans le terminal et dans mon fichier texte,où j'enregistre les mesures sont différents. Plus le temps de mesure est long et plus je perd donnée. Est-ce que le "write" est mal positionné?
    Merci
    Voici mon programme:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    from pyduino import * # importe les fonctions Arduino pour Python
    import numpy as np
    import time
    import signal
    import time
    import datetime
     
     
    def handler(signum, frame):
    #frame : moyen de connaitre l'état d'exécution
    #avant que le gestionnaire
    #de signal a été déclenché
    #gestionnaire e signal peut
    #lire des états à l'intérieur du champ d'application qui a été
    #exécuté avant que le gestionnaire de signal peut lire
     
    ##ouverture et écriture du fichier##
                    try:
                            print" "
     
                    except IOError as e:
                                    print"I/O error({0}): {1}".format(e.errno,e.strerror)
     
    signal.signal(signal.SIGALRM, handler)
     
    signal.setitimer(signal.ITIMER_REAL, 0.005, 0.005) #setitimer:
    (qui,seconde[intervalles]
    #ITIMER_REAL: décrémente l'intervalle en temps réel et fournit un
    signal d'alarme
     
    ##Durée de la mesure##
            ##temps échantillonnage pour 20Hz
    f=open("/home/ubuntu/data/text/TensionsA2.txt","w") # ouverture du
    fichier avec écrasement des données , si fichier non existant il est
    crée
    temps=6
    start = time.time()
    while (time.time() - start) <= (temps):
     
                    mesure=analogRead(A2)*3.3/4095.0 #lecture sur le pin Analogique
                    time.sleep(0.005)
                    f.write(str(mesure)+"\n")
                    print mesure
                    print "nombre de valeur"+ "  "+str(temps/0.005)

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 790
    Par défaut
    Salut,

    Votre code n'est pas très lisible et comme vous utilisez une bibliothèque exotique (un capteur sous arduino) pas facile de reproduire quoi que ce soit...

    Plus le temps de mesure est long et plus je perd donnée.
    Comme on ne voit pas de .close du fichier dans votre programme les dernières données ont quelques chances d'être perdues.

    Après, il faut savoir ce que vous comptez. Si vous attendez un nombre de mesures égal à temps/0.005, prendre la mesure demande un pouième de temps qui multiplié par 200, 400, ... 1000 ne sera plus négligable du tout et explique cela.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2017
    Messages : 10
    Par défaut
    J'avais omis de le mettre dans le scripte.
    J'espère qu'il est plus lisible. Oui, la pc duino n'est pas trés courant.
    Le problème persiste cependant
    Merci



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    from pyduino import * # importe les fonctions Arduino pour Python
    import numpy as np
    import time
    import signal
    import time
    import datetime
     
     
    def handler(signum, frame):
     
    ##ouverture et écriture du fichier##
                    try:
                            print"Entrée analogique A2"
     
                    except IOError as e:
                                    print"I/O error({0}): {1}".format(e.errno,e.strerror)
     
    signal.signal(signal.SIGALRM, handler)
     
    signal.setitimer(signal.ITIMER_REAL, 0.005, 0.005) 
     
    f=open("/home/ubuntu/data/text/TensionsA2.txt","w") # ouverture du
    fichier avec écraserment des données , si fichier non existant il est
    crée
    temps=6
    start = time.time()
    while (time.time() - start) <= (temps):
     
                    mesure=analogRead(A2)*3.3/4095.0 #lecture sur le pin Analogique
                    time.sleep(0.005)
                    f.write(str(mesure)+"\n")
                    print mesure
                    print "nombre de valeur"+ "  "+str(temps/0.005)
     
     
     
    signal.setitimer(signal.ITIMER_REAL, 0) # Disable the alarm
    f.close()

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 790
    Par défaut
    Citation Envoyé par PierreFrançois Voir le message
    Le problème persiste cependant
    Je n'avais pas mentionné que le .close manquant...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2017
    Messages : 10
    Par défaut
    Le temps d'échantillonnage et le temps de prise de mesure entrainerai quelque perte donc.
    Mon nombre de points est suffisant pour tracer une courbe correcte, donc c'est tout va bien.

    Merci à toi wiztricks

  6. #6
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 254
    Par défaut
    Salut,
    Une petite question, t'es tu assuré que :

    la durée d'écriture dans un fichier + la durée d'un print était inférieure à ton échantillonnage dans le while ?

    Parce que si ce n'est pas le cas, forcément tu perds des informations. Pour faire ça bien il faut un système temps réel et utiliser des interruptions.

  7. #7
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2017
    Messages : 10
    Par défaut
    Salut, effectivement je n'est pas vérifier, je peux faire ça avec time.clock? Ou il existe une fonction non? sur python 3 pour ça?

  8. #8
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2017
    Messages : 10
    Par défaut
    J'ai fait une différence de temps (debut-time.time() ) entre différente partie dans le while et la différence est donc lié à la lecture du pin analogique qui reste inférieurs cependant à ma fréquence d'échantilonnage. Mais elle est non négligeable. Donc merci pour vos réponse

  9. #9
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 254
    Par défaut
    Moi je changerai un poils l'algorithme.

    Tu as une boucle while dans la quelle tu fais ton échantillonnage (grâce à une tempo pour le contrôle de la fréquence)

    - Sort l'affichage et l'écriture dans un fichier de cette boucle.
    - Stock les données issues du analogread dans un tableau (un grand tableau) parce que cette opération est rapide.

    Ensuite, lorsque tu as acquis suffisamment de données et en t'assurant évidemment que le tableau n'a pas débordé, tu affiches en dehors du while les données que tu as stocké dans le tableau et idem pour l'écriture dans un fichier.

    C'est deux opérations sont trop longues pour être dans le while. Il faut les rendre asynchrones.

    Tu peux aussi envisager de faire l'affichage une fois le tableau rempli à 50% mais il faut t'assurer que l'affichage dure moins longtemps que la tempo dans le while

  10. #10
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2017
    Messages : 10
    Par défaut
    Vous auriez des exemples de tableaux avec incrémentation.
    Je ne trouve pas ce que je veux.
    Je veux simplement faire un tableau avec toute les valeurs et les mettres dans un fichier texte , comme Vincent PETIT
    me le conseil.
    merci

Discussions similaires

  1. Man signal, man scanf => pas de manuel
    Par weed dans le forum Applications et environnements graphiques
    Réponses: 6
    Dernier message: 17/05/2004, 17h31
  2. erreur ora-12801 : error signaled in parallel query server
    Par dngaya dans le forum Administration
    Réponses: 5
    Dernier message: 15/04/2004, 17h25
  3. [VB6] [MDI] Signaler la fermeture d'une fille à la mère
    Par cpri1shoot dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 13/04/2004, 09h57
  4. Dxdiag me signale que j'ai 510M de ram
    Par Goetz dans le forum DirectX
    Réponses: 1
    Dernier message: 29/09/2003, 15h33
  5. Interception du signal SIGINT
    Par macleod dans le forum MFC
    Réponses: 2
    Dernier message: 01/07/2003, 19h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo