Projet de théorie de l'information
Résumé du projet
Le projet Viterbi est un programme qui permet de coder une image
à l'aide d'un codage de convolution, de faire passer une image dans un canal
bruité et de décoder l'image obtenue à la sortie du canal par l'algorithme
de Viterbi.
Les algorithmes de codage et décodage sont décrits dans le cours.
Le projet peut être réalisé en Java ou en C.
Calendrier
Le projet est à faire en binôme (cela veut dire deux personnes et pas trois
ni une, sauf si vous êtes un nombre impair). Le projet est rendre avant
le 28 Février 2007 par email sous la forme d'une pièce jointe
au format zip contenant l'ensemble des programmes et des documents.
Le email devra être envoyé aux deux adresses beal@univ-mlv.fr
et lombardy@univ-mlv.fr. Le fichier
doit s'appeller nom1_nom2.zip, où nom1 et nom2
sont les noms des binômes dans l'ordre alphabétique.
Détail du rendu
Voici les noms des répertoires et fichiers qui doivent être contenus
dans l'archive zippée.
- Un ficher readme.txt indiquant comment compiler et exécuter
le programme, où se trouve la documentation, etc.
- Un répertoire src contenant les sources (les .java pour ceux
qui réalisent le projet en Java).
- Un répertoire classes contenant les classes (les .class
pour ceux qui réalisent le projet en Java)
correspondants aux sources.
- Un répertoire docs contenant deux documents au format PDF.
- La documentation utilisateur user.pdf contenant, en plus
des informatins classiques (comment compiler, exécuter, etc ...) une
description de l'application et comment l'utiliser.
- La documentation développeur dev.pdf contenant une
description détaillée de chaque classe que vous avez
implémentée. Il faut essayer de décrire ici les structures de données
et algorithmes.
On indiquera ici la liste des bugs connus, s'il y en a, avec un
scénario permettant de générer le bug ainsi que la raison pour laquelle
le bug se produit.
- Un sous-répertoire api contenant la documentation complète
au format javadoc, pour ceux qui réalisent le projet en Java.
Description du projet
Le logiciel doit pouvoir se lancer par une commande
java Viterbi [define,code] codeur
(ou une commande directe, shell exécutable).
Cette commande permet,
- en mode define, d'entrer k polynômes (avec k petit) à coefficients dans F2 qui définissent un codage de convolution de taux de
transmission 1:k, et de calculer le transducteur définissant le codeur. Une
implémentation du graphe sous forme de tableaux ou matrices est possible.
Le codeur sera sauvegardée sous-forme sérialisée dans le fichier codeur.
- en mode code, de charger le codeur et de proposer un menu très simple
avec les options
- encode image.jpeg
qui transforme une image contenue
dans le fichier image.jpeg (d'autres formats sont possibles) en la codant
à l'aide d'un code de convolution. Le fichier transformé aura comme nom
image.jpeg.code.
- noise [0.01] image.jpeg.code qui ajoute du bruit à une image. Les bits (hors
entête définissant le format de l'image) seront changés avec une probabilité
donnée en argument.
- decode image.jpeg.code
qui décode une image bruitée avec l'algorithme de Viterbi.
Les tests
L'entrée des polynômes se fera sous forme de suites de bits.
Par exemple, pour entrer les polynômes g0(x)= 1 + x +
x2 et g1(x)= 1 +
x2, on entrera :
111
101
On effectuera deux types de test pour vérifier l'efficacité
du codage. Les tests seront faits en faisant varier la probabilité
d'erreur, les polynômes et les fichiers.
- On testera tout d'abord des fichiers binaires ou textes.
- On pourra tester des fichiers d'images selon le
format de son choix. On montrera l'image originale, l'image
perturbée après passage dans le canal et l'image obtenue
après codage, passage dans le canal et décodage. Ces tests
doivent permettent d'évaluer le taux d'erreur résiduel de
façon visuelle.
Partie optionnelle
En option, on pourra :
- Réaliser des codages à taux de transmission autre que
1:k.
- Programmer le calcul de la distance libre.