Skip to content
Snippets Groups Projects
Commit b3fe3bfc authored by Paco's avatar Paco
Browse files

Merge branch 'master' of git.unistra.fr:saissaoui/cce

parents a28e8491 d593ef9e
Branches
Tags
No related merge requests found
......@@ -2,48 +2,53 @@
int main(void)
{
char *msg = "1001";
printf("\n----- II. Derrière certaines matrices génératrices... -----\n\n");
printf("-- Q3 --\n\n");
printf("Message : %s\nMessage encodé : %s\n\n", "1001", encode("11100111"));
printf("Message encodé (sans erreur) : %s\nSyndrome : %s\n\n", "10101101", decode("10101101")); // Le syndrome doit être 0000
printf("Message encodé (avec une erreur) : %s\nSyndrome : %s\n\n", "10100101", decode("10100101")); // Le syndrome doit être 1000
printf("Message : %s\nMessage encodé : %s\n\n", msg, encode(msg));
printf("Message encodé (sans erreur) : %s\nSyndrome : %s\n\n", encode(msg), decode(encode(msg))); // Le syndrome doit être 0000
printf("Message encodé (avec une erreur) : %s\nSyndrome : %s\n\n", set_error(encode(msg), 0), decode(set_error(encode(msg), 0))); // Le syndrome doit être 1000
printf("-- Q4 --\n\n");
printf("La distance de Hamming entre les codewords %s et %s est : %d\n\n", "10011000", "10001011", hamming_distance("10011000","10001011"));
char *c1 = "10011000", *c2 = "10001011";
printf("La distance de Hamming entre les codewords %s et %s est : %d\n\n", c1, c2, hamming_distance(c1, c2));
printf("----- IV. Restaurez la gloire matricielle de P -----\n\n");
printf("-- Q1 --\n\n");
printf("Message : %s\n\tMessage encodé avec la matrice : %s\n\tMessage encodé avec le polynôme : %s\n\t%s\n\n", "1001", encode("1001"), polynomial_encode("1001"), strcmp(encode("1001"),polynomial_encode("1001")) == 0 ? "Bon résultat" : "Mauvais résultat");
printf("Message : %s\n\tMessage encodé avec la matrice : %s\n\tMessage encodé avec le polynôme : %s\n\t%s\n\n", msg, encode(msg), polynomial_encode(msg), strcmp(encode(msg), polynomial_encode(msg)) == 0 ? "Bon résultat" : "Mauvais résultat");
printf("Message encodé (sans erreur) : %s\nSyndrome : %s\n\n", polynomial_encode(msg), polynomial_decode(polynomial_encode(msg))); // Le syndrome doit être 0000
printf("Message encodé (avec une erreur) : %s\nSyndrome : %s\n\n", set_error(polynomial_encode(msg), 0), polynomial_decode(set_error(polynomial_encode(msg), 0))); // Le syndrome doit être 1000
printf("-- Q2 --\n\n");
// printf("Codeword : %s\t\tCodeword avec une erreur à la position %d : %s\n\n","10101101", 2, set_error("10101101", 2));
printf("Codeword : %s\t\tCodeword avec une erreur à la position %d : %s\n\n", encode(msg), 2, set_error(encode(msg), 2));
printf("-- Q3 --\n\n");
// char* codeword = polynomial_encode("1010");
// printf("Codeword : %s\n", codeword);
// for(int i = 0; i < 8; i++)
// {
// char* false_codeword = set_error(codeword, i);
// printf("Erreur à la position %d : %s\t\tC mod P : %s\n", i, false_codeword, polynomial_decode(false_codeword));
// }
// printf("\n");
// codeword = polynomial_encode("1101");
// printf("\nCodeword : %s\n", codeword);
// for (int i = 0; i < 8; i++)
// {
// char *false_codeword = set_error(codeword, i);
// printf("Erreur à la position %d : %s\t\tC mod P : %s\n", i, false_codeword, polynomial_decode(false_codeword));
// }
// printf("\n");
// codeword = polynomial_encode("0111");
// printf("\nCodeword : %s\n", codeword);
// for (int i = 0; i < 8; i++)
// {
// char *false_codeword = set_error(codeword, i);
// printf("Erreur à la position %d : %s\t\tC mod P: %s\n", i, false_codeword, polynomial_decode(false_codeword));
// }
char* codeword = polynomial_encode(msg);
printf("Codeword : %s\n", codeword);
for(int i = 0; i < 8; i++)
{
char* false_codeword = set_error(codeword, i);
printf("Erreur à la position %d : %s\t\tC mod P : %s\n", i, false_codeword, polynomial_decode(false_codeword));
}
printf("\n");
codeword = polynomial_encode("1101");
printf("\nCodeword : %s\n", codeword);
for (int i = 0; i < 8; i++)
{
char *false_codeword = set_error(codeword, i);
printf("Erreur à la position %d : %s\t\tC mod P : %s\n", i, false_codeword, polynomial_decode(false_codeword));
}
printf("\n");
codeword = polynomial_encode("0111");
printf("\nCodeword : %s\n", codeword);
for (int i = 0; i < 8; i++)
{
char *false_codeword = set_error(codeword, i);
printf("Erreur à la position %d : %s\t\tC mod P: %s\n", i, false_codeword, polynomial_decode(false_codeword));
}
printf("\n\n");
}
\ No newline at end of file
......@@ -16,11 +16,12 @@ La taille des blocs que l'on peut encoder est de 4 bits. Le nombre de bits de co
* *Son rendement ;*
Son rendement est de $4/8$ (50%).
Son rendement est de $\frac{4}{8}$ (50%).
* *La distance de Hamming du code C ;*
La distance de Hamming du code C est $d = 4$.
On sait que la $distance = Min_{X ≠ 0} (Poids(X))$.
On remarque que le poids minimal des codewords de la matrice G est de 3. Donc la distance de Hamming du code C est $d = 3$.
* *Sa matrice de vérification de parité H*
......@@ -30,9 +31,9 @@ $$H = \begin{bmatrix}1 & 1 & 0 & 0 & 1 & 0 & 0 & 0\\
1 & 0 & 0 & 1 & 0 & 0 & 0 & 1
\end{bmatrix}$$
2. *Au vu de la distance de Hamming de C, quelles sont ses capacités de correction et de détection d’erreur(s) ?*
1. *Au vu de la distance de Hamming de C, quelles sont ses capacités de correction et de détection d’erreur(s) ?*
Pour un Hamming code de distance d, on peut détecter $d-1$ erreurs et corriger $[d-1]/2$ erreurs. Pour le code C on peut donc détecter 3 erreurs et en corriger une.
Pour un Hamming code de distance d, on peut détecter $d-1$ erreurs et corriger $\frac{d-1}{2}$ erreurs. Pour le code C on peut donc détecter 3 erreurs et en corriger une.
## III - ...se cachent des polynômes générateurs équivalents.
......@@ -59,51 +60,56 @@ On remarque le même motif qui se répéte en décalant à droite d'un bit sur c
<thead><tr><th colspan="2" style="text-align:center">Message : 1010</th></tr></thead>
<tbody>
<tr><th>Position</th><th>C mod P</th></tr>
<tr><td><b>1</b></td><td>1 0 0 0</td></tr>
<tr><td><b>2</b></td><td>1 0 0 0</td></tr>
<tr><td><b>3</b></td><td>0.55700</td></tr>
<tr><td><b>4</b></td><td>0.43400</td></tr>
<tr><td><b>5</b></td><td>0.43400</td></tr>
<tr><td><b>6</b></td><td>0.43400</td></tr>
<tr><td><b>7</b></td><td>0.43400</td></tr>
<tr><td><b>8</b></td><td>0.43400</td></tr>
<tr><td><b>1</b></td><td>1 0 1 1</td></tr>
<tr><td><b>2</b></td><td>1 1 0 0</td></tr>
<tr><td><b>3</b></td><td>0 1 1 0</td></tr>
<tr><td><b>4</b></td><td>0 0 1 1</td></tr>
<tr><td><b>5</b></td><td>1 0 0 0</td></tr>
<tr><td><b>6</b></td><td>0 1 0 0</td></tr>
<tr><td><b>7</b></td><td>0 0 1 0</td></tr>
<tr><td><b>8</b></td><td>0 0 0 1</td></tr>
</tbody>
</table>
<table style="margin:auto;text-align:center;">
<thead><tr><th colspan="2" style="text-align:center">Message : 1101</th></tr></thead>
<tbody>
<tr><th>Position</th><th>C mod P</th></tr>
<tr><td><b>1</b></td><td>1 0 0 0</td></tr>
<tr><td><b>2</b></td><td>1 0 0 0</td></tr>
<tr><td><b>3</b></td><td>0.55700</td></tr>
<tr><td><b>4</b></td><td>0.43400</td></tr>
<tr><td><b>5</b></td><td>0.43400</td></tr>
<tr><td><b>6</b></td><td>0.43400</td></tr>
<tr><td><b>7</b></td><td>0.43400</td></tr>
<tr><td><b>8</b></td><td>0.43400</td></tr>
<tr><td><b>1</b></td><td>1 0 1 1</td></tr>
<tr><td><b>2</b></td><td>1 1 0 0</td></tr>
<tr><td><b>3</b></td><td>0 1 1 0</td></tr>
<tr><td><b>4</b></td><td>0 0 1 1</td></tr>
<tr><td><b>5</b></td><td>1 0 0 0</td></tr>
<tr><td><b>6</b></td><td>0 1 0 0</td></tr>
<tr><td><b>7</b></td><td>0 0 1 0</td></tr>
<tr><td><b>8</b></td><td>0 0 0 1</td></tr>
</tbody>
</table>
<table style="margin:auto;text-align:center;">
<thead><tr><th colspan="2" style="text-align:center">Message : 0111</th></tr></thead>
<tbody>
<tr><th>Position</th><th>C mod P</th></tr>
<tr><td><b>1</b></td><td>1 0 0 0</td></tr>
<tr><td><b>2</b></td><td>1 0 0 0</td></tr>
<tr><td><b>3</b></td><td>0.55700</td></tr>
<tr><td><b>4</b></td><td>0.43400</td></tr>
<tr><td><b>5</b></td><td>0.43400</td></tr>
<tr><td><b>6</b></td><td>0.43400</td></tr>
<tr><td><b>7</b></td><td>0.43400</td></tr>
<tr><td><b>8</b></td><td>0.43400</td></tr>
<tr><td><b>1</b></td><td>1 0 1 1</td></tr>
<tr><td><b>2</b></td><td>1 1 0 0</td></tr>
<tr><td><b>3</b></td><td>0 1 1 0</td></tr>
<tr><td><b>4</b></td><td>0 0 1 1</td></tr>
<tr><td><b>5</b></td><td>1 0 0 0</td></tr>
<tr><td><b>6</b></td><td>0 1 0 0</td></tr>
<tr><td><b>7</b></td><td>0 0 1 0</td></tr>
<tr><td><b>8</b></td><td>0 0 0 1</td></tr>
</tbody>
</table>
</div>
*Répétez l’opération sur au moins deux autres mots Mb et Mc. Qu’observez-vous ?*
On remarque que le syndrome est le même pour une postion i peu importe le message de base.
On remarque que le résultat de C mod P est le même pour une postion i peu importe le message de base. Donc C mod P renvoit le syndrome et donc la position de l'erreur dans le codeword C.
1. *Soit le vecteur vi à 9 bits tel que seul le i eme bit est à 1. Pour tout $vi|i ∈$ {0,9}, calculez vi mod P. Que constatez-vous ? Que pouvez-vous en conclure ?*
4. *Soit le vecteur vi à 9 bits tel que seul le i eme bit est à 1. Pour tout $vi|i ∈$ {0,9}, calculez vi mod P. Que constatez-vous ? Que pouvez-vous en conclure ?*
On constate qu'en rajoutant un 9ème bit au vecteur, le syndrome se retrouve décalé d'un bit à gauche par rapport au syndrome qu'on obtient avec un vecteur de 8 bits.
5. *À l’aide de vos observations, implémentez un mécanisme efficace permettant de corriger des erreurs uniques. Justifier vos choix d’implémentation et tester votre implémentation.*
## V - Tests sur un Médium peu fiable
2. *À l’aide de vos observations, implémentez un mécanisme efficace permettant de corriger des erreurs uniques. Justifier vos choix d’implémentation et tester votre implémentation.*
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment