Amal Lazreg
1DNI1
TP4 :
Codes correcteurs d'erreurs
1. Préparation
message = [1 0 1 0 0 1 1 0 1 1 0 0 1 0 1 0 ];
n = length(message);
k=4;
p=3;
peme_bloc = decouper_blocs(message, n, k, p);
disp(peme_bloc);
function peme_bloc = decouper_blocs(message, n, k, p)
if rem(n,k) ~= 0
error('le nombre total de bits n doit etre
divisible par la taille des blocs')
end
nb_blocs = n/k ;
if p <= 0 || p > nb_blocs
error('la valeur de p doit etre comprise entre i et
le nombre total de blocs');
end
debut = (p-1) * k +1 ;
fin = p* k ;
peme_bloc = message(debut:fin);
end
Affichage :
1
2. Code de parité
1/
Le principe d'un code de parité est une technique utilisée pour détecter et parfois corriger les
erreurs de transmission dans un ensemble de bits. L'idée fondamentale est d'ajouter un bit
supplémentaire, appelé bit de parité, à un groupe de bits (généralement un octet ou un mot de
données plus long) de manière à rendre le nombre total de bits égal à un nombre pair (dans le
cas de la parité paire) ou impair (dans le cas de la parité impaire).
Il existe deux types de parité principaux : la parité paire et la parité impaire.
1. Parité paire :
Dans la parité paire, le bit de parité est choisi de manière à ce que le nombre
total de bits à 1 (y compris le bit de parité) soit pair.
Si le nombre de bits à 1 dans le groupe est impair, le bit de parité est fixé à 1
pour rendre le total pair. Si le nombre de bits à 1 est déjà pair, le bit de parité
est fixé à 0.
Par exemple, pour la séquence binaire "1101", la parité paire serait "11010" car
il y a trois bits à 1 dans la séquence d'origine, et en ajoutant un bit de parité (1),
le total devient pair.
2. Parité impaire :
Dans la parité impaire, le bit de parité est choisi de manière à ce que le nombre
total de bits à 1 (y compris le bit de parité) soit impair.
Si le nombre de bits à 1 dans le groupe est pair, le bit de parité est fixé à 1 pour
rendre le total impair. Si le nombre de bits à 1 est déjà impair, le bit de parité
est fixé à 0.
Reprenant l'exemple précédent, la séquence binaire "1101" aurait une parité
impaire de "11011".
- La fonction calculer_bit_p :
function bit_p = calculer_bit_p(bloc)
if mod(sum(bloc), 2) == 0
bit_p = 0;
else
bit_p = 1;
end
end
2
- La fonction insere_bit_p :
function bloc_avec_p = insere_bit_p(bloc, bit_p)
bloc_avec_p = [bloc, bit_p];
end
- Le code Total :
n = 49 ;
message = randi([0, 1], 1, n)
k=7
nb_blocs = n / k;
message_avec_p = zeros(1, n + nb_blocs);
for p= 1:nb_blocs
bloc = decouper_blocs(message, n, k, p);
bit_p = calculer_bit_p(bloc);
message_avec_p(((p-1) * (k+1)) + 1:p * (k+1)) =
insere_bit_p(bloc, bit_p);
end
message_NRZ = 2* message_avec_p - 1 ;
message_recu = (message_NRZ + 1) / 2 ;
message_recu_8bits = reshape(message_recu, 8, []);
message_recu_8bits = message_recu_8bits';
nb_erreurs = sum(abs(message_recu - message_avec_p));
locallocalisation_erreurs = find(abs(message_recu -
message_avec_p) >0);
taux_erreur = nb_erreurs / length(message_avec_p) ;
3
- L’affichage :