Transmission d`informations sur le réseau électrique

Transcription

Transmission d`informations sur le réseau électrique
Transmission d’informations sur le réseau électrique
Introduction
Remarques
Toutes les questions en italique devront être préparées par écrit avant la séance du TP. Les préparations seront ramassées en début de séance.
Préambule
Nous nous proposons, dans ce TP, de simuler la transmission de mots binaires à l’aide du réseau
EDF habituel d’une maison. Une telle transmission peut permettre, par exemple, de commander un
appareil connecté sur une prise secteur, à l’aide d’un émetteur situé dans une autre pièce de l’habitation. Ce type de transmission dite par courant porteur en ligne (CPL) est également beaucoup
utilisé aujourd’hui pour relier un ordinateur à une box ADSL sans fil supplémentaire.
Pour illustrer cette transmission, nous chercherons à transmettre une chaine de caractères qu’il
faudra auparavant crypter et coder de manière binaire. Ces premières étapes seront effectuées respectivement à l’aide d’un cryptage de Vigenère et de l’algorithme de Huffman. Ensuite, le message
binaire devra être superposé (de manière adéquate) au secteur EDF de la maison, éventuellement
pollué par différentes sources de bruit (ayant pour origine par exemple l’actionnement successif
d’interrupteurs ou d’autres sources de bruit électromagnétique). La présence de bruit impose l’utilisation préalable de techniques de codage de canal permettant d’assurer au moins une détection,
voir une correction des erreurs de transmission. Le récepteur devra ensuite isoler du secteur EDF
l’information binaire, puis la décoder et decryptet de façon à restituer la chaine de caractère émise.
Le système de transmission proposé peut donc être représenté schématiquement selon la figure 1.
Le détail des différentes opérations binaires nécessaires (sans cryptage) est représenté Figure 3.
!ZZIGZZAG!
Cryptage
Chaîne de caractères
BGARRSAXZR Codage de
Chaîne de caractères
Source
01101...
Codage de
Canal
!ZZIGZZAG!
Texte
décrypté
10010...
Décryptage
Texte
crypté
BGARRSAXZR
10 V
0V
Signal
Analogique
Couplage
avec EDF
10010...
Câble
électrique
10 V
Décodage 10110...
de canal
Flux
Correction des erreurs
Flux
binaire
Mise en
forme
Décodage
de source
Flux
binaire
Flux
binaire
binaire
Mise en
forme
0V
Signal
Analogique
Extraction
du signal
Figure 1 – Synopsis de la transmission, du texte à envoyer au texte reçu.
1
I
Cryptage des données
Afin de protéger le message de toute observation depuis le réseau électrique, nous souhaitons tout
d’abord crypter le texte à transmettre suivant :
texte = ZZAZABZABC
Le texte devra être chiffré à l’aide d’un code vigenère utilisant la clé de votre choix. Les fonctions
cryptage(texte, clé) et decryptage(chiffre,clé) réalisant respectivement le chiffrement et le
déchiffrement du texte vous sont données.
Prép. 1 Coder le texte proposé avec la clé ”INFO” à l’aide du carré de Vigenère disponible figure 4.
1. Sous MATLAB, définir le chemin d’accès en sélectionnant le dossier contenant les scripts à
compléter (File → Set Path → Add with Subfolders).
2. Sous MATLAB toujours, vérifier la chaine de caractère chiffrée obtenue.
3. Chiffrer maintenant une chaine de caractère de votre choix, constituée d’une longue phrase
(attention, seuls les caractères en majuscule, espace, virgule et point sont autorisés), à l’aide
de la clé ”P”.
(a) A quel type de code correspond un code de Vigenère utilisé avec une clé constituée d’un
seul caractère ?
(b) Vérifier Sous MATLAB que la chaine de texte cryptée est bien celle attendue.
(c) Est-il possible de décrypter facilement un tel code sans disposer de la clé ? Si oui, proposer
une méthode simple de décryptage. Vérifier son efficacité.
II
Codage de source
La chaine de caractère cryptée à transmettre est la suivante :
texte_crypté = LLPLPQLPQR
Prép. 2 Quelles sont les fréquences d’apparition des caractères dans le message (tous les caractères
seront pris en compte) ? En déduire l’entropie de la source.
1. Commenter et compléter la fonction entropie fournie, qui doit vous renvoyer la valeur de
l’entropie de la source à coder (ici la variable texte). Vérifier que la valeur d’entropie calculée
par la fonction correspond bien à celle attendue.
On souhaite envoyer le texte précédent à l’aide de symboles binaires. Il nous faut donc coder chacun
des caractères du texte en cherchant à minimiser le nombre de symboles 0 ou 1 à transmettre. On
propose pour cela d’utiliser le code de Huffman.
Prép. 3 Calculer les mots de code associés aux lettres de la source en utilisant l’algorithme de Huffman
(au plus haut).
Prép. 4 En déduire le code binaire data_comp correspondant au message.
2. La fonction [texte_compr,arbre]=huffman_compr(texte) réalise pour vous le codage de
la chaı̂ne de caractère texte à transmettre. Cette fonction retourne le message compressé
texte_compr et l’arbre de Huffman dans la variable arbre. Le code retourné est composé de
trois champs : les mots de code (arbre.valeur), leur fréquence d’apparition (arbre.frequence)
et les symboles d’information (arbre.info).
Commenter le code de la fonction huffman_compr. Retrouver alors le code binaire correspondant au texte à transmettre en utilisant cette fonction.
2
Prép. 5 Calculer la longueur moyenne L des mots de code. Le théorème fondamental du codage de
source est-il vérifié ?
3. Coder le calcul de la longueur moyenne L des mots du code.
Prép. 6 Sans compression, combien de digits sont nécessaires pour coder une lettre de la source ?
Calculer alors le taux de compression obtenu à l’aide du code de Huffman.
4. Coder le calcul du taux de compression.
5. Tester l’intégralité des étapes précédentes pour différents textes de votre choix, comme :
texte = ’CECI EST UNE DEMO. CETTE PHRASE VA ETRE COMPRESSEE PAR LE CODE DE HUFFMANN.’, ou encore
texte = ’ABCDEFGHIJKLMOPQRSTUVWXYZ’
Comparer les taux de compression des trois messages ainsi que leur entropie. Conclure sur les
performances du code de Huffman.
III
Codage de canal
Le texte crypté est maintenant codé sous une forme binaire. Afin de pouvoir corriger d’éventuelles erreurs lors de la transmission, on introduit ici une étape de codage de canal exploitant les
codes correcteurs d’erreurs, qui produiront en leur sortie un nouveau flux binaire. Celui-ci intégre
l’information à transmettre (le texte) ainsi que les digits de contrôle nécessaires à la bonne transmission de celui-ci. Dans toute la suite, les digits de contrôle sont ajoutés à l’information à l’aide
d’un code de Hamming CH dont la matrice génératrice G est :


1 1 1 0 0 0 0
1 0 0 1 1 0 0

G=
0 1 0 1 0 1 0 .
1 1 0 1 0 0 1
Prép. 7 Quelles sont la dimension k et la longueur n du code ? Indiquer l’emplacement des digits
d’information et des digits de contrôle au sein des mots de code construits.
A l’issue de l’étape de codage source, nous disposons du vecteur texte_compr comprenant le texte
codé de manière binaire à l’aide de l’algorithme de Huffman. Il est nécessaire pour la suite de faire
correspondre à chacun des mots de k symboles binaires constituant data_compr un mot de code de
longueur n incluant le contrôle nécessaire à la bonne transmission de l’information.
Prép. 8 Coder avec la matrice génératrice G ci-dessus le code binaire data_comp obtenu à la question
Prép. 3. En déduire les différentes étape nécessaires au codage d’un flux binaire d’information.
Comment procéder si la longueur du flux binaire à coder n’est pas un multiple de k ?
Coder cette étape de génération des mots de code. Pour cela :
– Parcourir texte_compr par paquets de k digits ;
– A l’aide de la matrice G ci-dessus, calculer les mots de code de longueur n correspondant ;
– Concaténer les mots de codes obtenus afin d’obtenir le nouveau flux binaire dans une variable
nommée code.
IV
Transmission
Nous disposons maintenant d’un flux binaire incluant à la fois l’information à transmettre et
les digits de contrôle nécessaire à sa bonne transmission en présence d’erreurs. Néanmoins, il n’est
pas possible de connecter directement la sortie du codeur de canal précédent au réseau électrique :
il faut auparavant transformer le flux binaire en un signal (tension) qui est superposé au secteur.
3
C’est l’ensemble de ces étapes qui est étudié dans cette section.
Afin de simuler la propagation du signal d’information sur le réseau EDF, vous disposez d’une
librairie Simulink nommée librairie.mdl représentée Figure 2.
Figure 2 – Librairie Simulink librairie.mdl utilisée pour la simulation de la transmission
1. Lancer Simulink depuis l’invite de commande Matlab en tapant simplement la commande
simulink. Une fois lancé, faire File → Open, puis sélectionner le fichier librairie.mdl.
2. Ouvrir maintenant une nouvelle simulation en faisant File → Open, puis sélectionner le fichier simulation.mdl. Une page blanche apparait alors à l’écran. Il s’agit maintenant de la
compléter en glissant les blocs de la librairie et en les connectant les un aux autres de manière
adéquate.
IV.1
Codage en bande de base
Cette étape de codage en bande de base permet d’obtenir un signal électrique correspondant au
flux binaire à transmettre, et compatible avec le canal qui est ici un câble électrique.
3. Dessiner le schéma permettant d’obtenir, à partir du code binaire à transmettre, la tension
secteur couplée à l’information.
4. La plupart des blocs sont paramétrables en double cliquant dessus. Commenter les valeurs par
défaut de ces paramètres et justier leur choix.
5. Utiliser le bloc Vers Matlab pour récupérer la tension correspondant au code à transmettre.
Ce signal est échantillonné à la fréquence fe = 50kHz. Lancer la simulation du schéma depuis
la commande Simulation → Start.
4
6. Visualiser l’allure temporelle du signal obtenu. Etudier son contenu fréquentiel à l’aide de
la commande fft effectuant une transformation de Fourier des signaux discrets (TFSD).
Commenter.
7. Visualiser l’allure du contenu fréquentiel obtenu pour les différents textes à transmettre.
Conclure quant à l’occupation spectral du signal.
IV.2
Transmission au sein d’un canal bruité
8. Ajouter au schéma précédent le canal de transmission, ainsi que la source de bruit nommée
Bruit de fond. Lancer la simulation et visualiser le signal obtenu en sortie du canal. Commenter.
9. Faire varier la puissance du bruit en changeant la valeur du RSB (pour cela, double-cliquer
le bloc de la source de bruit). Que constatez-vous visuellement ?
IV.3
Extraction de l’information et détection
8. Ajouter au schéma précédent les blocs Découplage et Détection. Préciser le rôle de chacun
de ces traitement au sein de la chaı̂ne de transmission.
9. Visualiser la tension de sortie du bloc Découplage pour différentes valeurs de RSB. Commenter son allure. Comment peut-on décider si le niveau de tension reçu correspond à un 0 ou un
1 émis ?
V
Décodage
A l’issue de la simulation précédente, nous disposons d’un flux binaire contenant à la fois l’information (le texte) et les bits de contrôle (la redondance). Selon l’importance du bruit, un certain
nombre de 0 (resp. 1) se sont transformés en 1 (resp. 0). L’objectif de cette partie est donc de
mettre en oeuvre une technique de décodage permettant de détecter la présence de ces erreurs, et
éventuellement de les corriger.
Une fois la correction effectuée, il sera a priori possible de remonter au flux binaire codant le
texte seulement, flux qui sera enfin décompressé afin d’afficher en toute lettre le texte correspondant.
En cas d’erreurs lors de la transmission, il est donc fort probable que le texte reçu ne soit pas le
même que celui émis.
La méthode de décodage proposée repose sur la matrice

0 0 0 1 1
H = 0 1 1 0 0
1 0 1 0 1
de contôle H suivante :

1 1
1 1 .
0 1
Prép. 9 Justifier le choix de cette matrice H. En particulier, quelle relation G et H doivent-elles vérifier ? Combien d’erreurs par mot peuvent être corrigées par ce code ?
V.1
RSB infini
On supposera dans cette partie que le bruit parasitant la transmission possède une puissance
nulle, i.e. le rapport signal sur bruit est infini.
Prép. 10 Avec de telles conditions de bruit, quel est le taux d’erreur bit (comparaison bit émis/bit reçu)
attendu ?
5
1. Double cliquer sur le bloc Bruit de fond, et mettre le RSB à la valeur Inf. Lancer la
simulation et récupérer le code binaire reçu. Utiliser pour cela le bloc Code reçu qui génère
automatiquement après simulation une variable sortie_simulink dans Matlab.
2. Comparer les codes binaires émis code et reçu sortie_simulink. Que constatez-vous ? Justifier.
3. Calculer le taux d’erreur binaire de la transmission par comparaison entre les 0/1 reçus et les
0/1 envoyés. Celui-ci correspond-il au taux d’erreur attendu ?
4. Sachant que la transmission la méthode de détection sont susceptibles d’introduire un retard
lors des traitements, ajuster le code Matlab de façon à obtenir le taux d’erreur attendu. Le
code reçu correspondant sera stocké dans une variable code_recu.
V.2
RSB = - 5dB
Dans cette partie, le bruit possède maintenant une puissance non négligeable. Il sera donc vraisemblablement à l’origine d’erreurs lors de la transmission.
Prép. 11 Soit le mot reçu code_recu de n bits code_recu=1011011. code_recu appartient-il au code ?
Si non, donner la position de l’erreur. Effectuer alors la correction et donner le mot d’information info_corrigee de k bits a priori envoyé.
5. Calculer le taux d’erreur binaire obtenu dans ces conditions de bruit.
6. Déterminer le syndrome de chacun des mots reçus. Pour cela, découper le flux binaire récupéré
à l’issue de la simulation code_recu en blocs de n digits. A chacun de ces blocs correspond
un syndrome noté syndrome calculé à l’aide de la matrice H précédente.
7. Pour chacune des valeurs de syndrome, effectuer si nécessaire la correction d’erreur. A l’issue
de cette étape, vous disposez donc d’un nouveau flux binaire nommé code_corrige constitué
des mots reçus corrigés.
8. Pour chacun des mots corrigés, extraire l’information transmise info_corrigee. Pour cela,
repérer à l’aide de la matrice G où se situent les digits d’information et de contrôle au sein
d’un mot de code.
9. Extraire également les digits d’information directement depuis le flux binaire reçu (i.e. sans
effectuer de correction d’erreur) et les stocker dans une variable info_non_corrigee.
A l’aide des deux questions précédentes, vous disposez donc maintenant de 2 flux binaires
(info_corrigee et info_non_norrigee) constitués de l’information (le texte) uniquement,
exploitant ou non respectivement les digits de contrôle envoyés pour transmettre l’information.
10. A l’aide de la fonction texte = huffman_decompr(info,arbre), décoder ces 2 flux binaires.
Afficher le texte obtenu, et le comparer au texte émis (crypté). Que constatez-vous ?
11. Décrypter le texte afin d’obtenir le texte en clair. Que constatez-vous ? Conclure.
6
texte
Huffman
texte_compr
code
1001011101010 ...
}
}
}
G
V O I L A
1011001 0001111 1001101
...
Transmission
code_recu
1011011 0001111 1101101
...
H
syndrome
code_corrige
Sans correction
110 000 010 ...
1011001 0001111 1001101 ...
}
}
}
info_corrigee
Huffman
texte_recu
101101111101... info_non_corrigee
Huffman
P O RL ?
texte_recu
100101110101...
V O I L ?
Figure 3 – Détails de la transmission (sans cryptage). En haut, on retrouve le codage de Huffman,
permettant de coder le texte (texte) de manière binaire (texte_compr). Ensuite sont ajoutés à
l’information des digits de contrôle pour former le code envoyé (code). A la réception, le flux
binaire peut être légèrement différent de celui émis (code_recu). Si on décide d’exploiter les digits
de contrôle ajoutés précédemment (calcul du syndrome), alors on retrouve le texte envoyé. Sinon,
des erreurs viennent modifier le texte reçu (texte_recu) par rapport au texte envoyé (texte).
7
Figure 4 – Carré de Vigenère.
8