TP2 master1 Codage

Telechargé par 100% MOULOUDIA
Master 1 ST section A
Codage et Compression
Travaux Pratiques N°2
Codage Source- Codage Arithmétique
L’objectif de ce TP est de réaliser en langage C, le codage arithmétique sur différentes
sources ( en int) et de tester l’efficacité du codage et de décodage en fonction de la longueur
du paquet.
On considérera des sources à valeurs entières :
- Fichier 1 (113 valeurs) et Fichier 4 (31 valeurs) (créés et utilisés dans le TP1) et fichier spécial
groupe de TP.
Les étudiants doivent se présenter en TP avec un projet arithm les premières parties du
programme sont déjà écrites.
Programme codage et décodage :
Ecrire le programme qui comporte :
- Lecture du fichier source dans T.
- Déterminer les symboles, les fréquences et les probabilités associées, (cette partie doit
être faite avant la séance de TP)
- Déterminer les intervalles des symboles dans un tableau de k lignes et 2 colonnes. k
étant le nombre de symboles.
double IntS[k][2];
IntS[0][0]=0;
IntS[0][1]=prob[0];
for (i=1; i < k ; i++)
{
IntS[i][0]=IntS[i-1][1];
IntS[i][1]=IntS[i][0]+prob[i];
}
- Afficher les symboles et les limites basse et haute de l’intervalle du symbole.
- Demander à l’utilisateur la longueur du paquet et déterminer Np, le nombre de
paquets.
- Réaliser le codage par paquet. Calculer les valeurs codes et stocker les dans un tableau
en double précision de taille Np.
int r,L,Nb,N1,j;
cout << "La longueur du
paquet :";
cin>> L;
Nb=N/L;
r=N%L;
double Linf, Lsup,largeur;
if (r==0)
N1=Nb;
else
N1=Nb+1;
double code[N1];
for (i=0; i < Nb; i++)
{
Linf=0.;
Lsup=1.;
largeur =1.;
for (j=0; j < L ; j++)
{
u=0;
while((u<k)&&(T[i*L+j]!=Symb[u
]))
u++;
cout << T[i*L+j]<<"
"<<Symb[u]<<endl;
Lsup=Linf+largeur*IntS[u][1];
Linf=Linf+largeur*IntS[u][0];
largeur=Lsup-Linf;
}
code[i]=Linf;
if(code[i]<0) code[i]=0;
if (code[i]>1) code[i]=1;
}
if (r!=0)
{
i=Nb;
Linf=0;
Lsup=1;
largeur =1;
for (j=0; j < r ; j++)
{
u=0;
while((u<k)&&(T[i*L+j]!=Symb[u
]))
u++;
cout << T[i*L+j]<<"
"<<Symb[u]<<endl;
Lsup=Linf+largeur*IntS[u][1];
Linf=Linf+largeur*IntS[u][0];
largeur=Lsup-Linf;
}
code[i]=Linf;
if(code[i]<0) code[i]=0;
if (code[i]>1) code[i]=1;
}
- Stocker dans des fichiers les données nécessaires à la restitution du signal.
- Réaliser le décodage pour restituer le signal estimé T1.
///////////////Decodage
int T1[N],flag;
for (i=0; i < Nb ; i++)
{
for(j=0; j < L;j++)
{
u=0;
while((code[i]<IntS[u][0])||(code[i]>=IntS[u][1]))
u++;
T1[i*L+j]=Symb[u];
cout << "couc "<<i*L+j<<" "<<Symb[u]<<" "<<T[i*L+j]<<"
"<<code[i]<<" ";
code[i]=(code[i]-IntS[u][0])/(IntS[u][1]-IntS[u][0]);
cout<<code[i]<<endl;
if(code[i]<0) code[i]=0;
if (code[i]>1) code[i]=1;
}
}
if(r!=0)
{
i=Nb;
for(j=0; j < r;j++)
{
u=0;
while((code[i]<IntS[u][0])||(code[i]>=IntS[u][1]))
u++;
T1[i*L+j]=Symb[u];
cout << "couc "<<i*L+j<<" "<<Symb[u]<<" "<<T[i*L+j]<<"
"<<code[i]<<" ";
code[i]=(code[i]-IntS[u][0])/(IntS[u][1]-IntS[u][0]);
cout<<code[i]<<endl;
if(code[i]<0) code[i]=0;
if (code[i]>1) code[i]=1;
}
for (i=0 ;i<N; i++)
cout <<T1[i]<<endl;
}
float erreur=0;
for (i=0; i < N; i++)
erreur=erreur+(T[i]-T1[i])*(T[i]-T1[i]);
erreur=erreur/N;
cout<<"erreur="<<erreur<<endl;
- Calculer l’erreur quadratique moyenne EQM entre le signal original et le signal
décodé.
Tests :
- Tester le programme sur le fichier 1.
- Faites varier la longueur du paquet L=8,12,14,16,20,40.
- Calculer le taux de compression et l’EQM pour chacune des valeurs de L.
- Tester le programme sur le fichier 4. Faites varier la longueur du paquet
L=8,12,14,16,20. Calculer le taux de compression et l’EQM pour chacune des valeurs
de L.
- Refaites les tests pour le fichier spécial. Calculer le taux de compression et l’EQM
pour chacune des valeurs de L.
Compte-rendu à remettre en fin de séance
1) Faites le bilan des données à transmettre pour que le signal puisse être décodé
(énumérer toutes les données).
2) Calculer à partir des fichiers des données nécessaires au décodage, le nombre d’octets
total. (pour les fichiers : fichier 1.dat, fichier 4.dat, DonneesXX.dat et ImageXX.dat).
La valeur de XX est fixée par l’enseignant.
3) Faire les tests pour tous les fichiers cités et résumer les résultats dans un tableau : Taux
de compression et EQM en fonction de L.
4) Conclure.
1 / 5 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !