• Aucun résultat trouvé

ASR1 TD1:Codage et calcul

N/A
N/A
Protected

Academic year: 2022

Partager "ASR1 TD1:Codage et calcul"

Copied!
5
0
0

Texte intégral

(1)

ASR1 – TD1 : Codage et calcul

{Andreea.Chis,Matthieu.Gallet,Bogdan.Pasa}ens-lyon.fr

16 et 17 septembre 2008

1 Codage...

Étant donné un ensembleBde mots denbits et un ensembleId’informations différentes, on appellecodagedeI surnbits toute fonction deB dansI. Le codage esttotalsi la fonction est surjective. Si la fonction n’est pas injective, le codage est ditredondant.

1. Quel est le nombre minimum de bits nécessaire pour un codage total deN informations ? Réponse : Il faut⌈log2N⌉bits.

2 Les entiers

2.1 Comme au néolithique

1. Comment appelle-t-on un petit caillou en latin ? Réponse : Calculus.

Les bergers de l’antiquité, qui ne savaient ni compter ni poser une addition, avaient une méthode utilisant cette technologie (et un système de numération unaire) pour faire la somme des effectifs de deux troupeaux.

2. Retrouvez-la.

Réponse : Un petit caillou par mouton. On fait la somme en mélangeant deux tas.

3. Comment pose-t-on une multiplication en cailloux ?

Réponse : Un tas pour le multiplicande et un tas pour le multiplieur. On construit un tas de même taille que celui du multiplicande, on l’accumule puis on retire un caillou du tas du multiplieur.

Ainsi de suite jusqu’à ce que le tas du multiplieur soit vide.

2.2 Comme maintenant

1. Rappelez les principes du codage des entiers positifs en numération simple de position en baseβ.

Réponse :

(xn−1· · ·x1x0)β =

n−1

X

i=0

xi·βi.

2. Faites quelques additions d’entiers positifs sur 8 bits pour vous faire la main.

Réponse :000111112(31) + 000100102(20) = 001100112 (51).

(2)

3. Proposez une manière de coder les entiers relatifs.

Réponse :

Codage signe et valeur absolue : un nombre est codé surn bits par son signessur 1 bit et sa valeur absolueven binaire classique surn−1bits :

x= (−1)x·v.

On peut ainsi représenter les nombres de−2n−1+ 1à2n−1−1.

4. Essayez de faire quelques additions. Par exemple16 + 64et42 + (−17). Quels sont les problèmes ?

Réponse :

Pour le second calcul, il faut faire une soustraction, et c’est difficile.

On a un autre souci car zéro a deux représentations :+0et−0. Donc ça rend les comparaisons difficiles aussi.

5. Trouvez une autre manière de coder les entiers relatifs qui soit plus pratique.

Astuce: pensez au complément à la base.

Réponse :

(xn−1· · ·x1x0)2 =−xn−1·2n−1+

n−2

X

i=0

xi·2i.

6. Faites quelques additions et quelques soustractions d’entiers relatifs codés en complé- ment à 2 sur 8 bits.

Réponse :

110011012 (−51) + 01000112(67) = 000100002(16), 001010102 (42)−011010102(106) = 110000002(−64).

7. Posez quelques multiplications de nombres de 4 bits en binaire.

Réponse :01012 (5)×11012(13) = 010000012(65).

2.3 Comme chez les souris

Lecode de Graysurnbits permet de coder les nombres entre 0 et2n−1de telle sorte que le codage de deux nombres consécutifs ne diffère que d’un seul bit. Par exemple un codage de Gray sur trois bits donne les codes :000,001,011,010,110,111,101,100.

1. Un tel codage s’appelle aussi binaire réfléchi, pourquoi ?

Réponse : Si on noteGn(i)le codage de Gray surnbits du nombrei, le codage de Gray surn+ 1 bits devient :

Gn+1= 0Gn(0),0Gn(1),· · ·,0Gn(2n−1),1Gn(2n−1),· · · ,1Gn(1),1Gn(0).

2. À quoi sert-il ?

Réponse : À éviter des problèmes d’asynchronisme par exemple, ou bien plus faible consommation (conteur, addresses dans une mémoire).

3. Écrivez une procédure récursive donnant un codage de Gray d’un nombre quelconque de bits.

Réponse : Procédure récursive, en se servant de la symétrie.

(3)

2.4 Pour ceux qui sont en avance

1. Comment coder un entier naturel non borné ? Trouvez un codage densurn+ 1bits, et un autre sur2⌊log2n⌋+ 3bits. Peut-on faire encore mieux ?

Réponse :

En unaire :0n1(n+ 1bits).

En binaire : on code d’abord en unaire la taille du codage binaire, puis le codage binaire proprement dit (sur⌊log2n⌋+ 1bits).

On peut rajouter encore des niveaux d’encodage de la taille, voire même avoir une procédure adaptative, où le nombre de niveaux utilisés est aussi codé en unaire au début du nombre.

2. Généralisez le tout au cas où, au lieu de coder vers des bits, on code vers l’alphabet {0,1,2}.

Réponse : On peut coder la taille (c’est-à-dire le nombre detrits) en binaire avec les chiffres0et 1, jusqu’au marqueur2, puis coder le nombre proprement dit en base3.

3 Détection et correction d’erreurs

3.1 Généralités

Étant donnée une source émettant une information codée surnbits reçue par un récepteur, on définit les termes suivants :

– un codage estauto-vérificateurs’il permet de déceler une erreur de transmission, et – un codage estauto-correcteurs’il permet de reconstituer l’information.

1. Trouvez des exemples simples de codages auto-vérificateurs ou auto-correcteurs.

Réponse :

Auto-vérificateur : on calcule la somme (sur8bits par exemple) de tous les octets transmis. Cepen- dant le nombre d’erreurs détectables est toujours limité.

Auto-correcteur : on envoie chaque information en double.

Le contrôle de parité utilise n−1 bits pour l’information et un bit de contrôle dit bit de parité. Celui-ci est positionné de telle sorte que le nombre total de bits à 1 de la configuration soit pair (parité paire) ou impair (parité impaire). On retrouve cette méthode dans le protocole de communication du lien série (UART/RS-232) par exemple.

2. Quelles sont les possibilités et les limites d’un tel codage ?

Réponse : Seul un nombre impair d’erreurs peut être détecté, car un nombre pair d’erreurs ne change pas la parité du mot.

3.2 Codes de Hamming

Lecode auto-correcteur de Hammingpermet de corriger un bit erroné dans une information de4bits(i3, i2, i1, i0). On code cette information au moyen de3bits supplémentairesp2,p1 et p0: le codage est(i3, i2, i1, p2, i0, p1, p0), où :

– p0est le bit de parité paire du sous-mot(i3, i1, i0, p0), – p1est celui du sous-mot(i3, i2, i0, p1), et

– p2est celui de(i3, i2, i1, p2).

(4)

À la réception de (i3, i2, i1, p2, i0, p1, p0), on vérifie ces trois parités, et on définit tk par : tk= 0sipkest correct ettk= 1sinon.

Par magie, (t2, t1, t0) est alors le rang dans (i3, i2, i1, p2, i0, p1, p0) du bit erroné, écrit en binaire :000si l’information est correcte,001sip0 est erroné,010sip1 est erroné,011sii0 est erroné,100sip2est erroné,101sii1est erroné,110sii2 est erroné ou111sii3est erroné.

On parle ici du code(7,4):7bits transmis pour4bits d’information effective.

1. Vérifiez le fonctionnement correct de l’algorithme de correction sur quelques exemples.

Réponse : On prend(i3, i2, i1, i0) = 0110. Comme(i3, i1, i0) = 010, on ap0 = 1. De même, p1 = 1etp2 = 0. Le mot transmis est donc0110011.

Si le mot est transmis sans erreur, les valeurs despksont correctes, et ainsi le mot de correction est(t2, t1, t0) = 000: pas d’erreur. Jusqu’ici tout va bien.

Supposons qu’une erreur est faite sur le biti1 : on reçoit un0au lieu d’un1. Cela fausse les bits de parité p0 et p2. Le mot de correction devient alors101, signalant une erreur sur le5ème bit, soit...i1. Youpi !

2. Justifiez la propriété auto-correctrice d’un tel codage.

Réponse : Les bitsp0,p1 etp2 sont des bits de parité : ils peuvent ainsi détecter une erreur (un bit faux) dans leur sous-mot.

Or, on peut voir que les bits du sous-mot dep0 sont les bits de rang1,3,5et7respectivement.

Ainsi,t0 est à1s’il y a eu au une erreur sur un de ces bits. En écrivant les rangs de ces bits en binaire, on obtient dans l’ordre001,011,101et111: le bit de poids faible de tous ces rangs est à 1.

De même, les bits du sous-mot dep1 occupent les positions2,3,6et7, soit respectivement010, 011,110et111. Ce coup-ci, toutes ces positions ont leur bit de poids21à1. C’est louche, quelque chose se trame derrière tout ça...

Et il en va de même aussi pourp2, dont les positions des bits (4,5,6et7) s’écrivent en binaire 100,101,110et111: leur bit de poids fort est toujours à1.

Si l’on résume,t0vaut1s’il y a eu une erreur sur un des bits de rang??1. Tout pareil pourt1qui passe à1en cas d’erreur sur un des bits de poids?1?, et enfint2pour les bits de rang1??. Le mot (t2, t1, t0)désigne alors bien directement le rang du bit erroné.

3. Peut-on définir un codage auto-correcteur de4bits utilisant moins de 3 bits supplémen- taires ?

Réponse : Notonsnle nombre de bits supplémentaires nécessaires au codage. On doit donc trans- mettre4 +nbits, ce qui demande de pouvoir coder les4 +n+ 1cas possibles : aucune erreur, ou bien une erreur sur un des4 +nbits transmis. Ce codage demande doncn = log2⌈5 +n⌉bits supplémentaires, soit au moins3bits.

4. Tentez de généraliser l’algorithme de Hamming à d’autres tailles de mots.

Réponse : n bits de parité permettent de coder 2n cas, soit la position d’une erreur sur une transmission de2n−1bits. Cela permet ainsi d’avoir2n−n−1bits d’information.

Les bits de parités sont sur les rangs des différentes puissances de deux.

Par exemple, le casn = 4 bits, avec 11 bits d’information : le mot transmis est (i10, i9, i8, i7, i6, i5, i4, p3, i3, i2, i1, p2, i0, p1, p0), avec les bits de parité suivants :

p0bit de parité paire sur(i10, i8, i6, i4, i3, i1, i0, p0), p1sur(i10, i9, i6, i5, i3, i2, i0, p1),

p2sur(i10, i9, i8, i7, i3, i2, i1, p2), et enfin p3sur(i10, i9, i8, i7, i6, i5, i4, p3).

(5)

3.3 Bonus: Comme à la NASA

Un des codes auto-correcteurs les plus efficaces à l’heure actuelle (tellement efficace qu’il est utilisé pour causer avec les bébêtes de la NASA qui se balladent sur Mars) est le codage Reed-Solomon. Plus proche de vous, il est aussi utilisé dans tout ce qui est télécommunications (ADSL, Usenet, téléphonie mobile, etc...) et dans les CD.

On souhaite donc codernblocsBidekbits chacun. La première étape est de s’assurer que chaque bloc est correct. Ceci est réalisé en rajoutant un CRC (Cyclic Redundancy Check, un code auto-vérificateur) à chaque bloc.

L’idée parachutée est de considérer le polynômeP(X)de degrén−1et dont les coefficients sont donnés par lesBi:

P(X) =

n−X1 i=0

BiXi.

1. Dans le cas où certains blocs sont faux, quelle propriété des polynômes permet de cor- rigerP(X)et donc de retrouver les valeurs de ces blocs ?

Réponse : On code en plus des points par lesquels passe le polynôme. Il suffit alors de résoudre le problème d’interpolation pour retrouver les coefficients manquants.

2. Est-ce si facile que ça en a l’air ?

Réponse : Non ! Mais ce n’est carrément pas l’objet de ce TD.

Références

Documents relatifs

Norme de codage dont la limitation a été de coder un caractère par octet en utilisant un des bits comme contrôle de parité :. 2 7 = 128 valeurs possibles chacune étant associée

– ´ Ecrire une fonction Python rang de param`etre c permettant de calculer le rang du carac- t`ere c dans l’alphabet minuscule.. – ´ Ecrire un programme Python permettant

• Un entier relatif positif ou nul sera représenté en binaire (base 2) comme un entier naturel, à la seule différence que le bit de poids fort (le bit situé à l'extrême

Pour transformer de tête un nombre binaire en son complément à deux, on parcourt le nombre de droite à gauche en laissant inchangés les bits jusqu'au premier 1 (compris), puis

Ce codage consiste à associer une valeur numérique binaire (interprétable en hexadécimal, décimal, ...) à chacun des caractères utilisables dans l'échange de

 S'il n'y a pas de débordement, le résultat tient dans la précision requise, la retenue n'a

La valeur r´eelle de l’exposant est la valeur cod´ee moins la valeur E max , avec E max qui est ´egale `a la moiti´e de la valeur que l’on peut coder avec une pr´ecision de n

[r]