Il nous a paru évident, au bout de quelques utilisations,
de simplifier au maximum l'interface graphique. Fini la série de
boutons sur la fenêtre principale, qui permettaient d'accéder
à toutes les fonctions. Tout a été résumé
dans un menu déroulant. Tous les programmes, aussi bien de création
d'une table de sinus, que de démodulation et programmation, peuvent
être atteints par ce menu.
![]() |
De plus, l'utilisateur qui veut uniquement voir la transmission
d'un signal sur la ligne est maintenant suivi de la première fenêtre
de présentation, jusqu'à la programmation des DSP, et au
calcul du Taux d'erreur binaire.
![]() |
![]() |
![]() |
|
|
|
Envoi de texte :
Pour rendre le projet un peu plus ludique à l'utilisateur, nous avons conçu une fenêtre permettant de transférer une séquence binaire correspondant à du texte, à la place de la séquence binaire aléatoire de 1000 bits. Grâce à un programme en C, les caractères entrés sont traduits en mots de 8 bits puis transmis de la même façon que pourrait l'être la séquence binaire aléatoire.
A la réception, lors du calcul de la probabilité
d'erreur, si un texte a été transmis, une fenêtre de
résultat s'affiche.
![]() |
Afin de rendre le projet utilisable
sur n'importe quel poste, nous avons créé une boîte
de dialogue permettant à l'utilisateur d'adapter lui-même
le PATH, c'est-à-dire l'emplacement des fichiers sur le disque dur.
Dans ce cas, tous les fichiers doivent être rassemblés dans
le même répertoire.
La fenêtre permettant le changement de PATH est accessible par le menu déroulant MODEM, ou bien par la première fenêtre. |
La seule contrainte de ce système est que le logiciel
MATLAB doit être installé avec Windows 95/98 comme OS.
Aide à la conception d'une sinusoïde :
L'interface a été conçue en vue de faire comprendre les principes de transmission par système échantillonné. C'est pourquoi l'utilisateur peut se laisser guider par l'interface pour créer lui même une table de sinus avec le nombre de valeurs voulues, la conversion Q15 ou Qx voulue.
Cette partie de l'interface est accessible par le menu
déroulant.
![]() |
![]() |
![]() |
![]() |
Aide à la démodulation :
Comme pour la conception du générateur de
sinusoïdes, nous avons simplifié la tâche de l'utilisateur
pour lui faire comprendre le principe de la démodulation en quadrature.
Mais d'autres phénomènes, qui ne sont pas
forcément des perturbations, peuvent aussi altérer le signal
transmis :
Le premier test que nous avons effectué sur la ligne a été d'essayer de la perturber avec un émetteur HF dont le signal envoyé sur l'antenne était réglé au maximum. Puis nous avons essayé avec un téléphone portable en émission.
Le résultat des 2 expériences a été
à chaque fois le même : étant donné que nous
utilisions un câble coaxial (donc blindé) 50W
, aucune perturbation n'affectait la transmission. Cependant, nous pensions
créer une perturbation sur l'ensemble du système, ce qui
n'a pas été le cas.
Nous avons donc pensé à modifier le canal
en le remplaçant par une ligne non blindée, ou bien à
construire un additionneur de signaux par AOP permettant ainsi d'insérer
directement un bruit blanc régulier de puissance réglable
sur la ligne. Cette dernière méthode permet de plus de voir
la réaction du système en connaissant exactement la puissance
de bruit.
A la date de conception de ce dossier, nous n'avons pas encore eu le temps de mettre en œuvre cette série de manipulations, et nous n'avons encore aucun résultat à fournir.
Seule précision à porter : Lors de la pré-soutenance,
c'est-à-dire au milieu de l'année, le système que
nous avions conçu était sensible au bruit, à un point
tel que la moindre perturbation provenant, ne serait-ce que du haut parleur
du module audio, provoquait des erreurs de transmission de l'ordre de 30
à 40 % des éléments transmis. Nous ne pouvions garder
un système aussi sensible et à partir de cette date, tout
le principe de démodulation à été conçu
différemment, en tenant compte de tous les éléments
du signal reçu. Ce dernier principe n'est plus perturbé par
les moindres signaux.
Vue générale des changements
Pendant la pré-soutenance, beaucoup de contraintes
étaient imposées pour que la communication fonctionne. Voici
les principales d’entre elles :
· Au repos (en fait, tout le temps), il devait y avoir sur la ligne un signal sinusoïdal de fréquence 1300Hz. C’était indispensable pour que la démodulation s’actionne convenablement.
· Des problèmes de synchronisation faisaient que quelquefois, le premier bit de la transmission était omis. En bref, il arrivait que le signal reçu soit décalé d’un bit par rapport au signal émis.
· Le récepteur devait être configuré. Il fallait lui indiquer la longueur de la transmission (nombre de bits qu’il devait recevoir), ainsi que le débit (1200, 1800, 2400 bauds).
· Le taux d’erreur était important si l’on parasitait la ligne, du fait de calculs trop approximatifs dans le filtre de démodulation.
· La taille maximale
du fichier transmis était de 1000 bits, du fait que nous
utilisions un mot en mémoire (16 bits) par bit transmis et reçu.
Cela avait pour effet que nous n’utilisions que 1/16 des capacités
de la mémoire qui nous était disponible.
A présent, les modifications apportées ont
permis de palier à ces problèmes :
· Au repos, la ligne peut être " à l’air ". C’est à dire que nous n’avons plus besoin d’une fréquence de 1300Hz constante.
· La synchronisation se fait actuellement avec des règles très précises et un protocole bien défini. Il n’y a donc plus aucun risque de décalage.
· Le récepteur s’auto-configure. La trame de synchronisation que l’émetteur envoie contient assez d’informations pour que le récepteur détecte le débit ainsi que la taille du fichier à transmettre.
· La taille maximale
du fichier, pour une même occupation mémoire, est de 2000
octets. Bien entendu, cette taille peut être augmentée
en réorganisant la mémoire du DSP mais nous n’en voyons pas
l’utilité pour l’utilisation que nous en faisons.
Mais également, d’autres fonctionnalités
ont été rajoutées :
· Du fait que la communication entre l’émetteur et le récepteur est unidirectionnelle et que, par conséquent, aucune correction d’erreur n’est possible, si le récepteur juge que la ligne est trop bruitée, il ne tentera pas de réceptionner le fichier afin d’éviter d’avoir un fichier reçu différent du fichier envoyé. Autrement dit, il sera TRES RARE que le taux d’erreur diffère de 0.
Ce phénomène est dû au principe de
détection du signal de synchronisation qui sera expliqué
plus en détail par la suite.
En voici le fonctionnement général avec
son explication :
![]() |
1) La ligne est " à l’air ". Aucun signal
n’est acheminé.
· Début de l’émission.
Ø Synchronisation
2) L’émetteur, ici, module un " 0 " de 1300Hz,
signe du début de la transmission. Ce " 0 " va durer très
exactement 1.024 secondes. Bien entendu, nous pouvons réduire ce
temps jusqu’au millième de seconde sans aucun problème mais
à titre pédagogique, ce principe permet d’entendre la synchronisation
et de mieux se rendre compte de cette phase primordiale.
3) A présent, l’émetteur va émettre
128 fois la valeur " 1 " à 2100Hz. Ainsi, en fonction de la durée
de cette étape qu’aura évaluée le récepteur,
celui-ci pourra déterminer avec précision le débit
de l’émetteur.
Par exemple :
A 1200 bauds, chaque bit a une durée de 16 cycles horloge. 128 éléments donneront donc un total de 128 * 16 = 2048 cycles d’horloge. (donc 104.86ms)
A 1800 bauds, chaque bit a une durée de 12 cycles horloge. 128 éléments donneront donc un total de 128 * 12 = 1536 cycles d’horloge. (donc 78.64ms)
A 2400 bauds, chaque bit a une durée de 8 cycles
horloge. 128 éléments donneront donc un total de 128 * 8
= 1024 cycles d’horloge. (donc 52.43ms)
4) Enfin, l’émetteur va émettre 16
fois la valeur " 0 " à 1300Hz. C’est la fin de la synchronisation.
Ø Envoi du fichier
5) Dans cette étape, le fichier est envoyé.
Ø Fin du fichier
6) Par un autre algorithme dont nous parlerons
plus loin, le DSP pourra évaluer qu’il s’agit ici de la fin de la
transmission et il pourra alors cesser la réception. Il s’agit tout
simplement d’une suite de " 0 ".
7) La ligne est alors libérée.
Notre but est de pouvoir détecter sur une ligne quelconque la présence d’une sinusoïde à 1300Hz. Pour cela, nous avons élaboré un algorithme pointu permettant de réaliser une détection fiable.
La détection est divisée en 4 grandes parties. Mais avant de les aborder, nous devons donner une précision au sujet du vocabulaire employé.
" Le signal d’entrée " désigne le signal reçu directement sur la ligne. Durant toute notre transmission, ce sera un signal sinusoïdal.
" Le signal démodulé " désigne
le signal à la sortie du démodulateur. Celui-ci sera égal
à 0 ou à 1. Du fait qu’un troisième état n’a
pas été envisagé, toute erreur (parasite, …) sera
également représenté par un 0 ou un 1. Ce qui justifie
l’utilisation de notre algorithme pour, justement, détecter si le
0 que nous démodulons est bien dû à une sinusoïde
à 1300Hz et non à une erreur.
Ø Détection
de seuil
Notre premier test est de vérifier l’amplitude du signal d’entrée. Si cette amplitude est nulle, ou bien basse, nous savons que nous n’avons pas de signal sur la ligne.
Mais attention ! Car une sinusoïde passe également par 0 !
Ce test s’avère donc insuffisant pour notre détection.
Ø Détection
de la dérivée
Lorsqu’une sinusoïde passe par 0, nous savons que sa dérivée est maximale. Ainsi, nous pouvons détecter, lorsque le signal d’entrée est nul, s’il y a des variations importantes sur celui-ci.
En combinant ces deux tests par une opération "
OU
" logique, nous pouvons savoir précisément s’il y a un signal
variable sur la ligne. Mais nous ne savons toujours pas s’il s’agit d’une
sinusoïde à 1300Hz.
Ø Détection
de la démodulation
Nous savons qu’il y a une variation sur la ligne, grâce aux deux tests précédents.
A présent, nous pouvons combiner le résultat de ces deux tests à la valeur du signal démodulé à l’aide d’une opération " ET " logique.
Ce test nous permet de savoir avec précision qu’un " 0 " est émis sur la ligne.
Il faut savoir que, pour la démodulation, nous nous sommes arrangés pour qu’une tension nulle (ou presque) sur la ligne nous donne un " 1 " démodulé. Ainsi, il n’y a plus aucun doute.
Pour être absolument certains qu’il ne s’agit pas d’un parasite passager, il faut que cette détection soit valable durant 256ms. Sinon, la démodulation ne se déclenchera pas.
D’ici vient le fait que si la ligne est trop bruitée
(la dérivée ainsi que la démodulation de la synchro
seront faussés), nous n’aurons pas 256ms parfaites et la démodulation
ne sera pas activée.
Ce principe est très important à comprendre
pour bien cerner tout ce qui va suivre et nous allons souvent nous référer
à cet algorithme.
Algorithme de détection de fin de fichier
La question qui nous vient à l’esprit est la suivante : Comment détecter la fin du fichier ?
La réponse est très simple. Dans notre protocole,
nous avons ajouté une suite de " 0 " terminaux. Notre test sera
donc le suivant :
Ø Nous référant à la théorie de la démodulation, nous nous rendons compte que le filtre numérique de réception engendre un retard de 80 cycles d’horloge entre le signal d’entrée et le signal démodulé.
Nous allons utiliser ce " problème " à notre avantage en nous disant que si la ligne ne comporte plus de signal variable (plus de seuil et une dérivée nulle) durant un temps bien défini, cela voudra dire que nous sommes à 80 cycles d’horloge de la fin de la transmission.
Nous aurions alors pu utiliser un compteur qui, une fois
arrivé à 80, arrêterait la transmission. Mais nous
avons utilisé un autre principe. Nous avons tout simplement ajouté
des " 0 " terminaux. Ce qui veut dire que dès que la ligne ne comporte
plus de sinusoïde, immédiatement, nous pouvons cesser la démodulation.
Communication avec le PC
Lorsque le démodulateur a fini son travail, il nous faut transmettre les informations reçues vers le PC pour pouvoir les traiter.
Texas a pensé a ce problème et a créé un protocole de communication entre le PC et le DSP : HPI (Host Port Interface).
Grâce à ce protocole, il est possible, depuis le PC, en utilisant des librairies C fournies, de lire ou d’écrire dans la mémoire du DSP.
Mais toute la mémoire n’est pas accessible de cette manière. Seule la zone comprise entre 100Ah et 1800h contient de la RAM HPI.
Cette zone de mémoire est protégée du fait qu’il faut éviter qu’il y ait des accès simultanés de la part du DSP et du PC. C’est donc là que nous allons positionner notre fichier. Par simple soustraction, nous pouvons déduire que la taille maximale du fichier est de : 2042 mots, soit un tout petit peu moins de 4 Kilo-octets. Bien entendu, il serait possible d’étendre cette taille par un principe de " buffering ". En voici le principe, à simple titre indicatif :
Ø Il faudrait créer deux fichiers de, par exemple, 1Ko chacun.
Ø Pendant que le DSP travaille sur le premier et le rempli, le PC lit le contenu du deuxième et le stocke.
Ø Quand le DSP a terminé de remplir le premier fichier, il prévient le PC, passe au fichier n°2 et le PC récupère alors le fichier n°1.
Ø On pourrait résumer
cette opération par le tableau suivant :
|
Fichier n°2 |
Le DSP écrit | Le PC lit |
Le PC lit | Le DSP écrit |
Le DSP écrit | Le PC lit |
… | … |
La seule restriction est le débit. Il faut que le PC puisse récupérer les informations avant que le DSP n’ait fini de remplir l’autre fichier.
Dans notre cas, à notre débit, il n’y a
aucun problème.
Pour notre besoin, nous avons donc recréé le programme " loadapp " qui permet de charger un programme dans le DSP et de l’exécuter.
Ce nouveau programme s’appelle " gestion ". Nous avons gardé toutes les fonctionnalités de loadapp, tout en ajoutant celles dont nous avions besoin.
Voici les options possibles communes à loadapp
et à gestion :
-A app.obj Charge le fichier app.obj dans le DSP et l’exécute.
-Bx Définit le port parallèle en mode x bits (4 ou 8).
-E label Définit le point d’entrée du programme au label " label ".
-E adresse Définit le point d’entrée à l’adresse spécifiée.
-Px Utilise le port LPTx.
A présent, voici les options que nous avons rajoutés
:
-R a Lit la valeur contenue en mémoire, à l’adresse décimale " a ".
-W a v Ecrit la valeur décimale " v " à l’adresse décimale " a ".
-F a f Envoie le fichier " f " à l’adresse décimale " a ".
-T a f n Crée un fichier " f " et y ajoute " n " valeurs à partir de l’adresse " a ".
-1 Avec l’option –T : Crée le fichier et
y met les valeurs en binaire.