Sujet TP: Codeur/Décodeur CIRC/Convolutif 

Sujet:  Comparaison de deux techniques de traitement d'erreurs : par code cyclique entrelacé croisé et par code convolutif.

On demande l'écriture de 4 programmes: Pour les tests, on fournit un bruiteur. Il introduit des erreurs sur le fichier codé pour simuler des rayures, poussières etc, classées en 2 types: Telechargement du bruiteur (en C) : source-bruiteur.tgz
Puis, pour decompresser et de l'aide: $ tar xvfz source-bruiteur.tgz ; cat source-bruiteur/Lisez-Moi
Le bruiteur fourni a la spécification suivante: Usage
$  bruiteur -p 0.01 -f 0.001 - l 100  < fichier_code > fichier_code_errone

et pour l'utilisation avec le codage et le decodage:
$ codage_CIRC < fichier_test    |    bruiteur -p 0.01 -f 0.001 -l 100  |  decodage_CIRC  > fichier_sortie;
ou
$ codage_Viterbi < fichier_test    |    bruiteur -p 0.01 -f 0.001 -l 100  |  decodage_Viterbi  > fichier_sortie
Pour tester: utilisez lle programme fourni "diffbinfiles" qui compare 2 fichiers binaires.
          $ diffbinfiles  fichier_test fichier_sortie
NB : selon vos experimentations, vous avez liberté pour modifier le bruiteur et l'adapter a vos expérimentations en ajoutant des options. Mais ne pas changer les options existantes (qui seront utilisées pour les tests).


Travail à réaliser (par groupe de 3 ou 4 étudiants):


Informations pour la réalisation du codeur/décodeur CIRC

Ci-dessous, les informations nécessaires: corps de base, matrice génératrice des codes, reprises depuis [1]. Des compléments peuvent être trouvés sur [2]. Codage. Le signal audio est découpé en trame de 6 échantillons de 4 octets (un échantillon de 32 bits correspond à un signal stéréo, avec 16bits gauche et 16 bits droit). Le codage CIRC consiste à coder ces 24 octets par 32 octets, en utilisant deux codes raccourcis de Reed-Solomon: C1 et C2 (cf matrices génératrices des codes C1 et C2 ) de la façon suivante. Chaque bloc de 24 octets est d'abord codé à l'aide de C1 pour donner des mots de 28 octets qui sont placés dans une table d'entrelacement à retard 4 de profondeur 28 (i.e., 28 lignes). Deux symboles consécutifs d'un même mot du code C1 sont espacés de 1 ligne et de 4 colonnes (cf Figure 1). Les · sont des symboles quelconques (on prend généralement 0). En pratique sur un disque compact cette table possède plus de 100 million de colonnes. Chaque colonne de 28 octets est ensuite codée à l'aide de C2 pour former un tableau d'octets de 32 lignes (cf Figure 2). Le fichier codé final est obtenu en écrivant ce tableau colonne par colonne.




Figure 1: Table d'entrelacement à retard 4 de profondeur 8





Figure 2: Schéma de codage


Décodage. Le décodage du tableau de la Figure 2 se fait dans un premier temps colonne par colonne en utilisant un décodeur de C2 corrigeant une erreur. Si la colonne n'est pas un mot de C2 et que la correction échoue, les 28 symboles retournés par le décodeur sont marqués comme effacés. À partir de la 109-ième colonne décodée on commence à décoder des diagonales (à retard 4) avec un décodeur de C1 corrigeant 4 effacements ou moins. Cela implique en particulier que le décodeur de C1 recevra en plus du mot à décoder la liste des positions des effacements.



Références. Ce TP est  inspiré d'un TP de Nicolas Sendrier [1]. Le rapport [2] donne la description du codage d'un CD audio. La page [3] recense différents programmes C/C++ de codage/décodage de codes correcteur d'erreurs.