Codigo Corrector de Errores

Anuncio
Códigos Correctores de Errores
Codificación Hamming
Omar X. Avelar & J. Daniel Mayoral
SISTEMAS DE COMUNICACIÓN & TRANSMISIÓN DE DATOS (ESI 043A)
Instituto Tecnológico y de Estudios Superiores de Occidente (ITESO)
Departamento de Electrónica, Sistemas e Informática (DESI)
1. OBJETIVO
El objetivo de la práctica es verificar la ganancia en rendimiento que se obtiene
en un sistema de comunicaciones cuando se utilizan códigos correctores de
errores.
4. CODIFICACIÓN HAMMING
El código corrector de Hamming (7,4) consiste en enviar 7 bits por cada 4, lo que
nos define 3 bits de paridad.
[G]
Para esta codificación – las matriz de transformación
2. ENUNCIADO
[
1
0
G :=
0
0
Vamos a tomar como base las tareas 10, 11 y 12. La idea es
comparar el rendimiento de un sistema de comunicaciones antes y después de
introducir la corrección de errores.
Como requisito, vamos a pedir que ambos sistemas operen a la misma tasa
de bit y a la misma potencia. Eso quiere decir que cada bit codificado lleva
menos energía que los bits del sistema sin codificar. Aún así ́ la teoría predice
que el código debe ser capaz de aumentar el rendimiento del sistema.
2.
3.
Vamos a operar sobre tres tipos de información: imagen, audio y texto,
utilizando comunicación con y sin un código corrector de errores Hamming (7,4).
Dado que la tasa de transmisión de la información no debe variar, es
necesario transmitir cada bit codificado más rápido (y por lo tanto con
menos energía). Supongamos que vamos a transmitir con εb = 1, con
valores de εb /N0 = 4 : 10dB.
Para cada valor de SNR, encontrar la probabilidad de error en la comunicación. Usando esta probabilidad de error, utilizar el código de la tarea 10 para introducir errores en cada archivo.
0
0
1
0
0
0
0
1
1
1
0
1
1
0
1
1
0
1
1
1
]
Mientras que la matrix partiy check se define como es:
[
1 1 0 1 1 0 0
H := 1 0 1 1 0 1 0
0 1 1 1 0 0 1
3. PASOS A SEGUIR
1.
0
1
0
0
se define como:
Para codificar un vector de 4 bits
m
con multiplicar la matriz de conversión
Y a su vez se usa
[H ]
]
m1, m2, m3, m 4
, el cual va de
U =mi G ij
falta
.
para decodificar y detectar errores.
S =r H T
donde b es el dato codificado por la matriz de transformación
nocido como codeword.
[G]
co-
En caso de haber un error, el vector síndrome ( S ) no tendrá el valor
[0, 0, 0] lo que indica que es un codeword valido y por lo tanto los primeros
4 bits del codeword son del dato y no hay que hacer ninguna modificación.
De lo contrario de acuerdo al valor del síndrome y el acomodo de las matrices de
transformación, se necesitan efectuar un toggle en el bit detectado como erróneo para corregirlo.
NOVIEMBRE 2009
1
ITESO
Códigos de Hamming
Por: Omar X. Avelar & J. Daniel Mayoral
5. CÓDIGO (GNU OCTAVE)
## Copyright (C) 2009 Omar X. Avelar
##
## Introduces an error according to the probability
## Data input is an unsigned 8 Bit array.
##
##
## Copyright (C) 2009 Omar X. Avelar &
##
J. Daniel Mayoral
##
## Communications and Data Transmission
## Guadalajara, Jalisco. ITESO.
##
function stream_err = pErr( stream, Pm )
stream_err = zeros(size(stream));
error file
n_err = round(Pm * length(stream))*8;
Number bit errors
clear all;
cd Files; dir_contents = dir; cd ..;
n_files = length(dir_contents) - 2;
% Empty
%
% Random
# For each file in the directory 'Files'
for i=1:n_files
errors
err_tmp = randerr(length(stream) ,8, [1 0; Pm 1-Pm]);
err_mask = bi2de(err_tmp);
stream_err = bitxor(stream, err_mask);
printf("\nProcessing: \"%s\" ...\n",dir_contents(i+2).name);
dotpos = rindex(dir_contents(i+2).name,".");
ext = substr(dir_contents(i+2).name,dotpos);
Extension extracted
%
endfunction
curr_file = strcat("Files/",dir_contents(i+2).name);
f_temp = fread(fopen(curr_file,'r'));
File read as binary
fclose(curr_file);
%
## Copyright (C) 2009 Omar X. Avelar
##
J. Daniel Mayoral
##
## Hamming 7,4 coding for GNU Octave, data input
## is an unsigned 8 Bit vertical array.
##
function encoded_stream = Hamming74Encode( stream )
H = [ [1,1,0,1 ; 1,0,1,1 ; 0,1,1,1 ], eye(3,3) ];
% Check
G = [ eye(4,4), [1,1,0 ; 1,0,1 ; 0,1,1; 1,1,1] ];
% Generator matrix
% Prepares the data
temp = de2bi(stream, 8);
% to binary (MSB ... LSB)
b4 = transpose(reshape(transpose(temp),4,size(temp,1)*2));
%
Splits in sections of 4
% Encodes
encoded_bin_stream = mod(b4*G,2);
encoded_stream = bi2de(encoded_bin_stream);
%
Integer vertical matrix
endfunction
## Copyright (C) 2009 Omar X. Avelar
##
J. Daniel Mayoral
##
## Decodes a Hamming 7,4 code and outputs
## an unsigned 8 Bit vertical array.
##
function [ stream, syndrome ] = Hamming74Decode( encoded_stream )
H = [ [1,1,0,1 ; 1,0,1,1 ; 0,1,1,1 ], eye(3,3) ];
G = [ eye(4,4), [1,1,0 ; 1,0,1 ; 0,1,1; 1,1,1] ];
tor matrix
% Prepares the data
temp = de2bi(encoded_stream,7);
nary (MSB ... LSB)
% Checks for errors
b = transpose(temp);
S = transpose(mod( H*b, 2));
Calculates the syndrome
% Check
% Genera% to bi-
%
err_pos = clip(round((bi2de(S, 'left-msb') / 1.5)),[0,5]);
Error position according to the syndrome
err_pos = err_pos .* (err_pos < 5);
If there is 2 errors (val 5) don't correct
err_pos_mask = de2bi(bitshift(2.^err_pos,-1),4,'left-msb');
b4 = bitxor(temp(1:end,1:4), err_pos_mask);
Corrects the error
%
%
%
b8 = transpose(reshape(transpose(b4),8,size(b4,1)/2));
in 8 bits
% Groups
stream = bi2de(b8);
vertical matrix
syndrome = S;
Syndrome
% Integer
% Extracts and saves the header depending on filetype
if (ext == ".wav")
file_header = f_temp(1:44);
file_bin_data = f_temp(45:end);
elseif (ext == ".bmp")
file_header = f_temp(1:54);
file_bin_data = f_temp(55:end);
elseif (ext == ".txt")
file_header = zeros(0,0);
file_bin_data = f_temp(1:end);
endif
% Raw
for SNRdB = 4:10
printf("Raw with %i dB\n", SNRdB);
% Energy
is constant
SNR = 10^(SNRdB/10);
% €b/No
Pm = 0.5*erfc(sqrt(SNR));
% Probability error according to SNRdB
err_data = pErr(file_bin_data, Pm);
%
Adds an error according to the probability
% Data writing
fw_cache = vertcat(file_header, err_data);
fwrite(fopen([num2str(SNRdB),"dB(Raw)@",dir_contents(i+2).name],
'w+'), fw_cache);
endfor
% Hamming
for SNRdB = 4:10
% Data processing
printf("Hamming with %i dB\n", SNRdB);
% Energy
is constant, so the probability
% increases
SNR = 10^((SNRdB)/10);
%
(1/2)*(€b/No)
Pm = 0.5*erfc(sqrt(SNR/2));
% Probability error according to SNRdB
% Hamming code (7,4)
tic();
encoded_data = Hamming74Encode(file_bin_data);
toc();
tic();
err_data = pErr(encoded_data, Pm);
% Adds an
error according to the probability
toc();
tic()
[decoded_data, syndrome] = Hamming74Decode(err_data);
%
Decode
toc();
printf("\n");
% Data writing
fw_cache = vertcat(file_header, decoded_data);
fwrite(fopen([num2str(SNRdB),"dB(Hamming)@",dir_contents(i+2).name
], 'w+'), fw_cache);
endfor
pause;
endfor
%
endfunction
NOVIEMBRE 2009
2
ITESO
Códigos de Hamming
Por: Omar X. Avelar & J. Daniel Mayoral
6. RESULTADOS
Al correr el programa con diferentes tipos de archivos podemos observar que
tan perceptible son los errores y la corrección de errores.
De acuerdo a esta curva característica anterior, el desempeño debe iniciar su
mejoría conforme nos alejamos del rango de 4~6 dB.
Por ejemplo observemos en una imagen BMP con una resolución de 500x258 px.
Fig. 3: SNR = 6 dB.
Arriba – Transmisión sin ECC.
Arriba – Codificación Hamming @ SNR.
Fig. 1: SNR = 4 dB
Arriba – Sin codificación Hamming.
Abajo – Codificación Hamming..
Lo que nos corrobora la teoría del desempeño de la codificación Hamming que
es terrible en bajas relaciones de señal a ruido (Fig.. 2).
Fig. 2: Probabilidad de error vs. Eb/No (dB).
NOVIEMBRE 2009
Fig. 4: NR = 6 dB.
Arriba – Transmisión sin ECC.
Arriba – Codificación Hamming @ SNR.
3
ITESO
Códigos de Hamming
Por: Omar X. Avelar & J. Daniel Mayoral
Por otro lado la transmisión de archivos de texto es mas critica ya que cualquier
error nos cambia los caracteres. Al ser un carácter en nuestro
Iniciaremos la prueba en bajas relaciones de Eb/No.
El texto original se podrá ir descubriendo mientras se observan las figuras.
En cuanto a la transmisión de audio, se percibieron los mismos resultados (en
un archivo de 3 segundos de WAV PCM) que lo visible en la codificación de imágenes BMP.
Lo que se percibía como crackling al encontrarnos arriba de 6 dB fue prácticamente nulo con la transmisión de codificación Hamming.
7. CONCLUSIÓN
La codificación de Hamming no es efectiva en relaciones de señal a ruido menores a 4 dB. La causa de esto puede ser vista que incluso teniendo nuestro código
de (7,4) sucede lo siguiente.
1. La energía de bits es disminuida al estar enviando (7) bits por cada (4), lo que
resulta que al encontrarnos con una relación Eb/No nos produzcan demasiados
errores los bits, incluso mas que una transmisión pura ya que estos nos pierden
energía.
2. El código de Hamming (7,4) es capaz de detectar 2 errores, pero solo puede
corregir uno por frame.
3. Al disminuir la probabilidad de error el desempeño del código Hamming es
excelente.
La siguiente tabla expresa de manera subjetiva la percepción de error en los archivos codificados, donde a menores estrellas tenemos un archivo menos fiel al
original.
Fig. 5: SNR = 4dB.
Arriba – Sin codificación Hamming.
Abajo – Codificación Hamming..
En la Fig. 5 podemos observar como la codificación nos distorsiono la mayoría
de los caracteres para los dos casos, de esta manera el lector de texto nos
muestra unos caracteres los cuales no representan los originales.
SNR (dB)
Sin codificación
Código Hamming
4
✪
-
5
✪
✪✪
6
✪✪
✪✪✪
7
✪✪
✪✪✪✪
8
✪✪✪
✪✪✪✪
9
✪✪✪
✪✪✪✪✪
10
✪✪✪✪
✪✪✪✪✪
De cuantificar el desempeño de código Hamming vs. sin codificación diría que:
“Para una relación Eb/No de [n] dB sin codificación es
perceptiblemente igual a una Hamming de [n-2] db.”
De esta manera podemos ver que el sistema es mas robusto a un canal ruidoso,
esta aproximación empírica es acorde a la Fig. 2.
Fig. 6: SNR = 6dB.
Arriba – Sin codificación Hamming.
Abajo – Codificación Hamming..
De acuerdo a la Fig. 6, nuestro archivo de texto ya es decodificado incluso al
transmitirlo sin ECC, pero se observan los errores.
1. El titulo solo se presenta correcto con codificación de Hamming.
2. La ultima palabra fue decodificada como collidmr mientras que con codificación de Hamming fue transmitida de manera correcta como collider.
Ya a estas alturas de relación señal a ruido en el texto no era perceptible.
NOVIEMBRE 2009
4
Descargar