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