Projet DTMF Status

Le but du projet est de réaliser une application qui permette de générer et de décoder les séquences de caractères DTMF en utilisant la carte son du PC.
DTMF: comme « Dual-Tone Multi-Frequency ». Ce sont des signaux audio utilisés pour transmettre des informations numériques, notamment dans les systèmes téléphoniques.

N’hésitez pas à signaler les éventuels bugs qui seraient passés au travers des tests.

Télécharger : Télécharger l’éxécutable (version 1.2 du 16/06/2012).

23/08/2024 : Le programme a été conçu à la base pour Windows XP (avec DirectX) et ultérieurs, mais il fonctionne aussi sur les versions récentes de windows.
DirectX est une collection d’API (interfaces de programmation) développées par Microsoft pour faciliter le développement de jeux et d’applications multimédias.

Log des versions :

16/06/2012 V1.2 : Changements fonctionnels légers

  • Amélioration de l’affichage des données reçues (mise en page, formattage des données).
  • Ajout d’un libellé associé aux séquences permettant d’avoir des séquences identiques pour des relais différents (interprétation différentes).

10/06/2012 V1.1 : Changements fonctionnels

  •             Amélioration du décodage avec meilleure prise en compte du bruit de fond (testé avec bruit blanc)
  •             Passage de la fréquence d’échantillonage à 16000 ech/sec.

08/06/2012 V1.0 : Changements fonctionnels

  •             Gestion du seuil minimum de détection (l’utilisateur gère un curseur)
  •             gestion du niveau moyen de bruit pour meilleure détection des fréquences
  •             Passage de la fréquence d’échantillonage à 11000 ech/sec.

02/09/2006 Changements du système de décodage

  •             Filtrage numérique butterworth d’ordre 3 pour les huit fréquences
  •             Ajout de l’interprétation des formules
  •             Divers changements de présentation.

20/08/2005 : Si la commande est renvoyée par le système distant, l’écho est ignoré et on reste en attente de la réponse.


Fonctionnement du programme DTMF Status

Le programme sait envoyer une séquence DTMF sur la sortie son, et peut, ensuite, passer en attente d’une réponse donnée sous la forme d’une autre séquence DTMF.

Cette séquence reçue est ensuite décodée, en fonction de paramètres situés dans le fichier de configuration DTMFStatus.ini

Exemple : Interrogation du nouveau relais UHF du Petit-Ballon : Demande de status

Lancer le programme, sélectionner la séquence DTMF à envoyer au relais dans la ‘combo box’ en bas à droite (*DDD3# est la seule qui soit définie pour le moment).

Si la séquence DTMF est envoyée par un autre moyen, le programme va le détecter (s’il l’entend), et va passer automatiquement en attente de la réponse (attention il faut 500ms sans code DTMF pour que DTMF Status puisse déterminer qu’une séquence est finie).

Cliquer sur le bouton Gen.DTMF, le programme envoie la séquence DTMF sur la sortie son, et passe alors en mode attente.

Le relais envoie sa réponse (en principe) Pour tester, j’ai généré une séquence valide : voir copie d’écran ci-dessous.

Le programme a décodé la séquence et l’a affichée dans la fenêtre texte à droite : Fréquence => 431,675, Shift -1600, etc….

Certaines valeurs sont interprétées par des formules (paramétrées dans le fichier ini).

NB: pour que le décodage se fasse bien, le niveau sonore doit être bien ajusté, règler le niveau de manière que les crêtes arrivent à peu près en haut de l’écran, mais veiller à ne pas saturer.


Définition du fichier de configuration :

ConfigurationCommentaires
[SEQ_*DDD3#_Relais VHF]Entre crochets : SEQ suivi de la séquence d’interrogation DTMF à envoyer vers la carte son et du libellé.
Une seule séquence est définie dans la configuration actuelle, mais on peut en définir plusieurs.
; Longueur de la séquence à recevoir
LgSeq=14
LgSeq=14 indique qu’on attend en réponse à *DDD3# une séquence DTMF de 14 caractères
Les lignes précédées d’un point-virgule sont des commentaires et ne sont pas prises en compte par le programme.
; Zone1
Z1=Fréquence:,bin,0,24
Suivent ensuite les descriptions des différentes zones composant la séquence à recevoir (et à décoder), sous la forme :
Zn = Libellé de la zone, mode de codage, position dans la chaine (en bits), longueur (en bits) .

Libellé de la zone : Il sera affiché lors du décodage, suivi de la valeur décodée.
Mode de codage : Pour l’instant deux modes sont définis:

– bin : Interprétation en binaire, exemple : 0101FFh = 1*2^16+1*2^8+255 = 66047

– binC : Même chose, mais signé (complément à 1).
; Zone 2
Z2=Shift,binC,24,24

; Zone 3
Z3=Mode:, bin, 48, 2
z3_v1=0,Mobile
z3_v2=1,Relais
z3_v3=2,Base téléphone; Zone 4
Z4=Puissance:, bin, 51, 1
z4_v1=0,Puissance réduite
z4_v2=1,Puissance maximum; Zone 5
Z5=Squelch:, bin, 52, 1
z5_v1=0,dépend du signal SQ
z5_v2=1,dépend du niveau HF; Zone 6
Z6=Inibit_SQ:, bin, 53, 1
z6_v1=0,Squelch actif
z6_v2=1,Son toujours audible

; Zone 7
Z7=Ouverture du relais:, bin, 54, 1
z7_v1=0,avec ton. 1750
z7_v2=1,avec DTMF 

; Zone 8
Z8=Seuil Squelch;, bin, 56, 8

; Zone 9
Z9=Indicateur défaut;, bin, 64, 8

; Zone 10
Z10=CLI:, bin, 72, 8, (Z10*125/64)-128

; Zone 11
Z11=PINV:, bin, 80, 8

; Zone 12
Z12=IBAT:, bin, 88, 8,(500*Z12)/((((Z14*50)/64)-20)*13.824+64*54)

; Zone 13
Z13=TP28:, bin, 96, 8

; Zone 14
Z14=TEMP:, bin, 104, 8, (Z14*50)/64

; Zone 15
Z15=PDIR:, bin, 112, 8

; Zone 16
Z16=VBAT:, bin, 120, 8, 10+(Z16*5/64)

; Zone 17
Z17=TP29:, bin, 128, 8
Une seule séquence est définie dans la configuration actuelle, mais on peut en définir plusieurs.LgSeq=14 indique qu’on attend en réponse à *DDD3# une séquence DTMF de 14 caractères

Suivent ensuite les descriptions des différentes zones composant la séquence à recevoir (et à décoder).

Z n° = Libellé de la zone, mode de codage, position dans la chaine (en bits), longueur (en bits) .Libellé de la zone : Il sera affiché lors du décodage, suivi de la valeur décodée.Mode de codage : Pour l’instant deux modes sont définis:

– bin : Interprétation en binaire, exemple : 0101FFh = 1*2^16+1*2^8+255 = 66047

– binC : Même chose, mais signé (complément à 1).Définition de libellés pour des valeurs particulières

Z n° _ v n° = Valeur, Libellé

Exemple Z3_v1 : Zone 3 valeur 1

On peut définir plusieurs valeurs particulières pour chaque zone, Z3_v1, Z3_v2, Z3_v3, etc…

Valeur : Valeur particulière

Libellé : Libellé correspondant à la valeur citée.

Exemple : Pour la zone Z4=Puissance,si on décode la valeur 0, on affichera que le relais fonctionne en ‘Puissance Réduite’, si on décode la valeur 1, on affichera ‘Puissance maximum’.

Dans ce cas (Z4), il n’y a pas d’autres valeurs possibles, mais au cas où la valeur n’est pas définie, elle sera affichée sans libellé. 
Retour en haut