Structure du programme de détection

La structure du programme écrit en GCBasic est très simple. Le programme principal est la boucle infinie suivante:

returnsub = 1
do
  Select case returnsub
    case 1: Startbit
    case 2: Decode_frame
    case 3: Process_frame
  end Select
loop

La fonction  startbit est elle même une boucle infinie dont on sort lorsque le 1er signal Pulsadis à 175Hz a été détecté. Si ce signal est de qualité le code retour est mis à 2 et le retour au programme principal va lancer l’exécution de la routine decode_frame. Comme son nom le suggère celle-ci va décoder les 40 impulsions Pulsadis et les stocker dans le vecteur  »vect ». Une fois le décodage terminé le programme continue sur l’exécution de la routine process_frame qui va analyser les impulsions, vérifier leur cohérence logique et afficher le résultat sur un écran LCD 2×16 et sur un terminal série (si  »debug »=1).

Le cœur de ce programme est la fonction Detect175Hz qui, comme son nom le suggère, retourne 1 si le signal 175Hz est détecté, 0 sinon. L’algorithme utilisé est celui proposé par Matthieu Benoit mais l’échantillonnage se fait ici sur 40ms à 700Hz. Lorsque la variable  »debug » est activée on peut vérifier la qualité du signal associé aux impulsions (25= signal max correspondant à 25x40ms=1 sec à 175Hz).

3 réflexions sur « Structure du programme de détection »

  1. Bonjour,
    Je vous félicite pour la clarté de ce blog. J’ai néanmoins une interrogation. Je souhaite afficher le numéro de toutes les impulsions détectées (afficher le vect(index) autrement dit…)
    Donc, sub Code_Tempo, sub Code_EJP, function coherent, sub Affiche_EJP et sub Affiche_Tempo disparaissent.
    Mon souci : Ecrire le Sub Affiche_Impulsion…
    Peut-on converser par mail en MP?

    Cordialement.
    Xavier

    1. Bonjour
      Pour afficher le numéro d’impulsion et sa valeur (0 ou 1) vous pouvez modifier le début du code de la routine Process_frame

      for index = 1 to 40 'Vect est transformé en 0 ou 1 selon seuil
      if (vect(index) > treshold2 ) then
      vect(index) = 1
      else
      vect(index)=0
      end if
      hserprint index
      hserprint " "
      hserprint vect(index)
      hserprintcrlf
      next

      L’impression se fait dans ce cas sur la sortie série COM1. Voir manuel gcbasic http://gcbasic.sourceforge.net/help

      Cdlt

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *


Warning: realpath(): open_basedir restriction in effect. File(/var/www/sda/5/c/collegebalzacnemours/tmp) is not within the allowed path(s): (/var/www/sda/0/7/pulsadis) in /var/www/sda/0/7/pulsadis/wordpress/wp-includes/functions.php on line 2102