Dernières Evolutions
Modification de l’interface Suivi de l'utilisateur :
 
 

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.
 
 
 
Fenêtre principale
Choix débit binaire et type de fichier
Programmation et taux d’erreur

 
 
 

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.
 
 

Portabilité du système :
 
 
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.
 
 

Les perturbations de la transmission
 
 
 
 
Un ensemble de perturbations affectent la transmission d'un signal sur une voie, en particulier des bruits d'origines et de puissances diverses. On peut définir comme étant des bruits :
 
  On caractérise en général le bruit par un rapport Signal sur Bruit exprimé en dB.
 
   
 
 

Mais d'autres phénomènes, qui ne sont pas forcément des perturbations, peuvent aussi altérer le signal transmis :
 
 

L'interface graphique de notre projet nous permet de calculer le Taux d'Erreur Binaire de la ligne, par un simple rapport du nombre de bits erronés reçus, sur le nombre de bits transmis. Grâce à cette fonction, nous avons pu étendre le sujet de notre projet à l'analyse d'une ligne soumise à une perturbation externe.
 
 

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.
 
 

Evolution des programmes du DSP depuis la pré-soutenance
 
 
 
 
 
 
Depuis la pré-soutenance, beaucoup de choses ont été changées, essentiellement dans les algorithmes. Les principes de modulation et de démodulation, eux, n’ont pas changés.
 
 
 
 

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.
 
 

Partie émetteur Nous avons modifié le protocole d’émission afin de faciliter la réception.

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.
 
 
 
 
 
 

Partie récepteur Algorithme de détection de porteuse
 
 

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°1
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.