Sie sind auf Seite 1von 5

UANL

FIME
Teora de la Informacin y Codificacin
Dr. Jos Ramn Rodrguez Cruz
Programacin de los algoritmos de correccin.

Actividad #12: Nombres:

J. Jess Villanueva Jr. Osvaldo Ernesto Jimnez Jimnez. Gerardo Villarreal Faz. Francisco Javier Alvarez Tamez.

Matrcula:
1465133 1535304 1463329 1441262

Hora:
Jueves N4-N6

Fecha:
27-Noviembre-2012

Objetivo
Se programan los algoritmos de correccin a travs de lenguajes computacionales y con los resultados de los experimentos se redacta un reporte de la implementacin de algoritmos de control de errores que consiste en los resultados de haber aplicado los algoritmos de correccin al canal de comunicacin.

Introduccin
En esta actividad se presentar la programacin del algoritmo de control de errores en una serie de datos a enviar por el canal ruidoso. Los resultados con respecto a la cantidad de errores antes y despus del canal una vez implementado el algoritmo de correccin de errores se mostrarn en forma de comparacin de los datos que entran al codificador de correccin y los datos que salen del decodificador con los errores corregidos. En estos casos, se usar el algoritmo de Reed-Solomon como cdigo de correccin de errores.

Desarrollo
Antes de describir lo que hace el programa implementado en MATLAB, se describir un poco las funciones de MATLAB que simulan la codificacin Reed-Solomon.

fec.rsenc
Sintaxis
enc enc enc enc = = = =

Construye un objeto para la codificacin Reed-Solomon.

fec.rsenc fec.rsenc(N,K) fec.rsenc(property1, ...) fec.rsenc(rsdec_object)

Descripcin
enc = fec.rsenc construye un codificador Reed-Solomon con propiedades por default. Es equivalentes a: enc = rsenc(7,3) enc = fec.rsenc(N,K) construye un objeto codificador (N,K) Reed-Solomon enc. enc = fec.rsenc(property1, value1, ...) construye un objeto codificador Reed-Solomon enc con

propiedades

especificadas por el par PROPERTY/VALUE.

enc = fec.rsenc(rsdec_object) construye un objeto codificador Reed-Solomon enc por lectura de los valores de

las propiedades del objeto decodificador RS rsdec_object. Inmediatamente despus de crear el objeto, se coloca la sintaxis siguiente
code = encode(msg,enc) donde code es el mensaje codificado en Reed-Solomon, msg es el mensaje a codificar y enc es el objeto de codificacin. msg tiene una cantidad de filas igual a K.

fec.rsdec
Construye un objeto para la decodificacin Reed-Solomon.

Sintaxis
h h h h = = = = fec.rsdec fec.rsdec(N,K) fec.rsdec(property1, ...) fec.rsdec(rsdec_object)

Descripcin
dec = fec.rsdec construye un codificador Reed-Solomon con propiedades por default. Es equivalentes a: dec = rsdec(7,3). dec = fec.rsdec(N,K) construye un objeto decodificador (N,K) Reed-Solomon dec. dec = fec.rsdec(property1, value1, ...) construye un objeto decodificador Reed-Solomon dec con

propiedades especificadas por el par PROPERTY/VALUE.


dec = fec.rsdec(rsenc_object) construye un objeto decodificador Reed-Solomon dec por lectura de los valores

de las propiedades del objeto codificador RS rsenc_object. Inmediatamente despus de crear el objeto, se coloca la sintaxis siguiente
decode = decode(code,dec) donde decode es el mensaje decodificado en Reed-Solomon, decode es el mensaje decodificado y dec es el objeto de decodificacin. code tiene una cantidad de filas igual a K.

Ya que se definieron las funciones de MATLAB que codifica el algoritmo de Reed-Solomon, ahora se explicar su uso en el programa de la simulacin. Antes de la codificacin Reed-Solomon, se tiene que acondicionar los 1s y 0s que salen de la codificacin de fuente, ya que a la funcin de MATLAB para aplicar el algoritmo, no tiene que estar en 1s y 0s, debido a los parmetros que se insertan en la funcin. Suponiendo que la salida de la codificacin de fuente es el vector tx_comp, entonces se colocan las siguientes lneas:
msgtocod = vec2mat(tx_comp,m); % Conversin de vector a una matriz con m columnas msgtonum = bi2de(cambiarorden(msgtocod)); % Conversin de binario a decimal txnumtorscod = transpose(vec2mat(msgtonum,k)); % Matriz para codificacin Reed-Solomon

Despus de esto, se crea el objeto para codificar:


coder = fec.rsenc(n,k); % Codificador Reed-Solomon

E inmediatamente despus se codifican los datos:


tx_code_num = encode(coder,txnumtorscod); % Codificacin Reed-Solomon

Luego se cambia el formato de los datos codificados para poder viajar por el canal AWGN con una modulacin 16QAM. Despus de tomar los valores de la salida del canal, se demodulan, se convierten en 1s y 0s, y despus se vuelven a poner en una forma adecuada para la decodificacin de los datos recibidos, suponiendo que los 1s y 0s a decodificar tienen el nombre de decodif:

decnumtoprebit = reshape(decodif,[],1); % Conversin a vector columna decnumtobit = cambiarorden(de2bi(decnumtoprebit)); % Conversin de decimal a binario decbittotr = reshape(transpose(decnumtobit),[],1); % Tren de bits a descomprimir

Despus de esto se procede a generar el objeto de decodificacin Reed-Solomon:


decoder = fec.rsdec(coder); % Decodificador Reed-Solomon

Y despus a decodificar:
[decodif,cnumerr,ccode] = decode(decoder,mattorsdecod); % Decodificacin Reed-Solomon

Despus de esto, se hace un anlisis de errores para ver cuntos errores quedaron sin corregir y el resultado en esta simulacin es: err = 0 tber = 0

Conclusiones
La implementacin del algoritmo de deteccin y correccin de errores, en este caso Reed-Solomon, pudo corregir todos los errores posibles que se hayan producido debido al ruido en el sistema de comunicacin. Se simul con relativa facilidad la codificacin de canal con las funciones del toolbox de Communications de MATLAB, y con las dems funciones se podran generar ms simulaciones de este tipo para estudiar sistemas de comunicacin de mayor complejidad y podra ser posible implementar a nivel de simulacin Turbocdigos para investigacin posterior.

Referencias
CASTIEIRA Moreira, Jorge, et. al. Essentials of Error-Control Coding. John Wiley & Sons, Ltd. 2006. SKLAR, Bernard. Digital Communications. Fundamentals and Applications. 2nd Edition. Prentice Hall. SWEENEY, Peter. Error Control Coding. From Theory to Practice. John Wiley & Sons, Ltd. 2002.

Cdigo MATLAB de la simulacin de la codificacin de canal


signal_in = wavread('input.wav'); simbolos1 = unique(signal_in); % Seal de entrada en formato WAV

% Crea una lista de forma decreciente de % los smbolos de la fuente pesoporsimbolo1 = pesos(signal_in,simbolos1); % Calcula la cantidad de % veces que se repite cada % smbolo de la fuente probabilidad1 = pesoporsimbolo1/sum(pesoporsimbolo1); % Calcula la proba% bilidad de cada % smbolo entropy1 = entropiatic(probabilidad1); % Calcula la entropa de la fuente out = compand(signal_in,255,1,'mu/compressor'); % Compresin logaritmica % con ley-mu

N = 7; % Nmero de bits por muestra m = 2^N; % Nmero de intervalos de cuantizacin delta = 1/m; % Intervalo de cuantizacin out_quant = quant(out,delta); % Cuantizacin de la seal compresa con % ley-mu

simbolos = unique(out_quant);

% Crea una lista de forma decreciente de los % smbolos de la fuente compresa con ley-mu pesoporsimbolo = pesos(out_quant,simbolos); % Calcula la cantidad de veces % que se repite cada smbolo % de la fuente compresa probabilidad = pesoporsimbolo/sum(pesoporsimbolo); % Calcula la probabili% dad de cada smbolo % de la fuente compresa entropia = entropiatic(probabilidad); % Calcula la entropa de la fuente % compresa % % % % % Crea el diccionario de la fuente para la codificacin Huffman Crea la codificacin Huffman de los smbolos de la fuente

dict = huffmandict(simbolos,probabilidad); huffmancode = huffmanenco(out_quant,dict);

longitudpromedio = 0; % Bucle para calcular la longitud for j = 1:length(dict) % promedio de la fuente codificada longitudpromedio = longitudpromedio + probabilidad(j)*length(dict{j,2}); end redundancia = longitudpromedio - entropia; % Calcula la redundancia del % cdigo eficienciacodigo = entropia/longitudpromedio; % Calcula la eficiencia del % cdigo m = 4; % Nmero de bits por smbolo n = 2^m - 1; % Nmero de bits por palabra codificada k = 7; % Nmero de simbolos por palabra a codificar tx_comp = huffmancode; msgtocod = vec2mat(tx_comp,m); % Conversin de vector a una matriz con m columnas msgtonum = bi2de(cambiarorden(msgtocod)); % Conversin de binario a decimal txnumtorscod = transpose(vec2mat(msgtonum,k)); % Matriz para codificacin Reed-Solomon

coder = fec.rsenc(n,k); % Codificador Reed-Solomon tx_code_num = encode(coder,txnumtorscod); % Codificacin Reed-Solomon tx_tr_num = reshape(tx_code_num,1,[]); % Conversin a tren de nmeros vertical tx_col_bit = cambiarorden(de2bi(tx_tr_num,m)); % Conversin de decimal a binario tx_tr_bits = reshape(transpose(tx_col_bit),1,[]); % Conversin a un tren de bits M = 16; % Tamao de la constelacin de la seal K = log2(M); % Nmero de bits por smbolo nsamp = 1; % Parmetro de sobremuestreo [bittonum,ceros] = vec2mat(tx_tr_bits,K); % Conversin de tren de bits a matriz con k columnas tx_num = bi2de(bittonum,'left-msb'); % Conversin de binario a decimal modobj = modem.qammod(M); % Modulador M-QAM demodobj = modem.qamdemod(modobj); % Demodulador M-QAM tx_qammod = modulate(modobj,tx_num); % Modulacin de la seal con M-QAM ebno_pr = 0; % BER en dB tomado como prueba snr = ebno_pr + 10*log10(K) - 10*log10(nsamp); % Relacin-Seal-a-Ruido en dB como prueba tx_qam_noy_pr = awgn(tx_qammod,snr); % Aadimiento de ruido blanco gaussiano rx_qamdem_noy_pr = demodulate(demodobj,tx_qam_noy_pr); % Demodulacin de la seal M-QAM rx_noy_num_pr = de2bi(rx_qamdem_noy_pr,K,'left-msb'); % Conversin de nmeros a binario rx_num2bit_tr_pr = reshape(transpose(rx_noy_num_pr),1,[]); % Conversin en un tren de bits [bits_erroneos,tasa_de_errores] = biterr(tx_tr_bits,rx_num2bit_tr_pr) % Clculo del total de errores y del BER

mattorsdecod = reshape(tx_code_num,n,[]); % Matriz para decodificacin Reed-Solomon decoder = fec.rsdec(coder); % Decodificador Reed-Solomon [decodif,cnumerr,ccode] = decode(decoder,mattorsdecod); % Decodificacin Reed-Solomon decnumtoprebit = reshape(decodif,[],1); % Conversin a vector columna decnumtobit = cambiarorden(de2bi(decnumtoprebit)); % Conversin de decimal a binario decbittotr = reshape(transpose(decnumtobit),[],1); % Tren de bits a descomprimir [err,tber] = biterr(decodif,tx_code_num)

Das könnte Ihnen auch gefallen