Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Ivn Daro Hastamorir* Juan Diego Melenje* Richard Andersson Rodrguez* Ivn Daro Ladino**
ivanovich04@gmail.com gothicman_504@hotmail.com randersson86@gmail.com ivan.ladino@hotmail.com
**
Ingenieros Electrnicos de la Fundacin Universitaria Los Libertadores. Ingeniero Electrnico de la Pontificia Universidad Javeriana.
AGOSTO20103 ISSN1909-9142
coningenio
Resumen
Ivn Daro Hastamorir Juan Diego Melenje Richard Andersson Rodrguez Ivn Daro Ladino
Cdigo Convolucional
pp. 168-179
En este artculo se explica el proceso de diseo de un codificador y decodificador Convolucional. Se explican los pasos del diseo y su funcionamiento. Con el cdigo implementado en MATLAB se pretende proveer de una herramienta didctica al laboratorio de la Universidad de Los Libertadores, de tal forma que los estudiantes de los cursos de comunicaciones puedan entender el funcionamiento de los esquemas de codificacin de canal. En el proceso de decodificacin Convolucional, se suele utilizar el Algoritmo de Viterbi, el cul de cierta forma es complejo y genera confusin cuando se estudia por primera vez. Por lo tanto, durante el estudio y la realizacin de este proyecto se propone una nueva forma ms sencilla y de igual forma eficaz, para realizar el proceso de la decodificacin.
Palabras Clave: Codificacin de canal, Algoritmo de Viterbi, Diagrama de Trellis, Cdigo detector y corrector de error.
Convolutional Codes
Abstract
This article explains in detail the Convolutional design process encoder and decoder. It explains every step of the design and operation. With the code implemented in MATLAB is to provide an educational tool to the lab at the University of Los Libertadores, so that students in communications courses to understand the operation of channel coding schemes. In Convolutional decoding process is usually used the Viterbi algorithm, which in some ways is complex and confusing when studying for the first time. Therefore, during the study and implementation of this project proposes a new simpler and equally effective to perform the decoding process.
Key Words: Coding Channel, Viterbi algorithm, Trellis diagram, Detector code and corrector code.
169
AGOSTO20103 ISSN 1909-9142
Ivn Daro Hastamorir Juan Diego Melenje Richard Andersson Rodrguez Ivn Daro Ladino
Cdigo Convolucional
pp. 168-179
coningenio
INTRODUCCION
En bsqueda de responder a la necesidad de una herramienta til y de la que no se dispone en la institucin, surgi el proyecto de disear e implementar un prototipo de codificacin decodificacin convolucional, para los estudiantes de ingeniera electrnica. Dicho proyecto hace parte del trabajo de grado para optar por el ttulo de Ingeniero Electrnico. Para el diseo del prototipo, el primer paso consisti en realizar un estudio detallado de probabilidad y teora de la informacin, debido a que ello determina la base matemtica fundamental para abordar el rea de las telecomunicaciones. Una vez realizado este estudio se procedi a disear el codificador, apropiando los siguientes temas: Cdigos con memoria, Diagramas y rboles de Trellis.
Para el diseo del decodificador se abordaron los conceptos correspondientes a: Algoritmo de Viterbi, Diagrama de Trellis y distancia Hamming. El prototipo se dise e implement sobre la suite de Matlab MATLAB y fsicamente en un dispositivo lgico programable FPGA.
MARCO TERICO
Los canales de comunicaciones no son ideales, por el contrario su funcionamiento est determinado por varios factores que ocasionan que los datos generados por el transmisor lleguen con errores al receptor, en otras palabras las tramas recibidas en el receptor pueden diferir en uno o varios bits. Entre los factores que ocasionan los errores, los ms determinantes corresponden a: el ruido, la distorsin y la interferencia; siendo el primero (el ruido) el objeto primordial del trabajo con los codificadores de canal. Los cdigos convolucionales son adecuados para usar sobre canales con mucho ruido (alta probabilidad de error); adems son cdigos lineales, donde la suma de dos palabras de cdigo
170
AGOSTO20103 ISSN1909-9142
coningenio
Ivn Daro Hastamorir Juan Diego Melenje Richard Andersson Rodrguez Ivn Daro Ladino
Cdigo Convolucional
pp. 168-179
cualesquiera tambin es una palabra de cdigo. Y al contrario que con los cdigos lineales, se prefieren los cdigos no sistemticos, es decir en los que el dato no aparece de forma explcita en la codificacin. El sistema tiene memoria: la codificacin actual depende de los datos que se enven en el presente y los que se enviaron en el pasado. Un cdigo convolucional se especifica por medio de tres parmetros (n,k,m): n es el nmero de bits de la palabra codificada k es el nmero de bits de la palabra de datos. m es la memoria del cdigo o longitud restringida.
cional aade una estructura a la secuencia de bits. Incluso aunque la entrada sea totalmente aleatoria, se fuerza a que la salida siga unas determinadas secuencias. Esta restriccin es la que da la capacidad correctora a los cdigos convolucionales.
La codificacin se puede entender a travs de un ejemplo como el mostrado en la figura (1), en la cual tenemos un codificador (2,1,3). El proceso de codificacin consiste bsicamente en una serie de operaciones XOR entre el dato presente y los datos previamente recibidos, como el codificador
Un codificador convolucional puede ser visto tpicamente como un conjunto de filtros digitales (sistemas lineales e invariantes en el tiempo). El proceso de decodificacin consiste en buscar un camino en el diagrama de Trellis (o en el rbol del cdigo) que d la secuencia de bits ms probable (si no hay errores se obtiene la secuencia exacta). El codificador convoluFigura 3. Diagrama de Trellis.
171
AGOSTO20103 ISSN 1909-9142
Ivn Daro Hastamorir Juan Diego Melenje Richard Andersson Rodrguez Ivn Daro Ladino
Cdigo Convolucional
pp. 168-179
coningenio
El procedimiento de decodificacin es equivalente a comparar la secuencia recibida con todas las posibles secuencias que pueden obtenerse con el correspondiente codificador y seleccionando la secuencia que est ms prxima a la secuencia recibida.
Desplazamiento de los datos e ir haciendo la funcin XOR entre las funciones de transferencia y el dato desplazado.
Se han desarrollado complejos algoritmos para la decodificacin convolucional, uno de los ms usados es el algoritmo de Viterbi El fundamento de este algoritmo est en que no se almacenan todas las secuencias a las que da lugar el codificador. Se basa en el principio de optimalidad: el mejor camino (menor distancia de Hamming) a travs del diagrama de Trellis que pasa por un determinado nodo, necesariamente incluye el mejor camino desde el principio del diagrama de Trellis hasta este nodo.
Se van guardando los datos codificados generados (c1,c2) en una matriz. Se van combinando los valores de c1 y c2, de tal manera que queden parejas de c1 y c2 respectivamente en un vector, y ese vector va a ser el dato codificado.
Ejemplo
Se va a realizar un ejemplo para la codificacin convolucional de 3 bits con la caracterstica (2,1,3); dnde el 2 indica la cantidad de salidas, 1 es el nmero de bits que ingresan a las memorias para llevar a cabo la codificacin y 3 son la cantidad de registros o memorias. El dato que se desea codificar es 101. Recuerde que inicialmente las memorias estn en ceros. Se invierte el dato. Se definen las funciones de transferencia que son dos para este caso: FT1=[101], FT2=[110].
172
AGOSTO20103 ISSN1909-9142
coningenio
Ivn Daro Hastamorir Juan Diego Melenje Richard Andersson Rodrguez Ivn Daro Ladino
Cdigo Convolucional
pp. 168-179
Se introduce el primer bit del dato a las memorias. Convol1.m codiconvol.m decoconvol.m
A la salida nos da 11 debido a que se realiza una operacin XOR entre el dato que hay en las memorias y las funciones de transferencia.
Nuevamente se realiza la XOR con los datos de las memorias y las funciones de transferencia, lo cual nos da 01 y la salida anterior (11) es desplazada.
Se realiza el mismo procedimiento anteriormente explicado. Una vez finalizado este procedimiento, se obtiene el dato codificado [11 01 01].
A continuacin se encuentra el cdigo del codificador convolucional, que realizamos para ser implementado en MATLAB, si se desea se puede comprobar el resultado anterior corriendo este programa. Es de anotar, para que funcione el cdigo de canal en MATLAB, es necesario tener los siguientes programas copiados en la carpeta de MATLAB:
173
AGOSTO20103 ISSN 1909-9142
Ivn Daro Hastamorir Juan Diego Melenje Richard Andersson Rodrguez Ivn Daro Ladino
Cdigo Convolucional
pp. 168-179
coningenio
[Tabla_codificador,Dato_codificado]=codiconvol(x,y,f1,f2) pause disp(----------------------------Decodificad or----------------------------------------------); dc=input(Digite el dato codificado: \n); [Tabla_decodificador,Dato]=decoconvol(dc,y,f1,f2) %///////////////Cantidad de errores detectados//////////////// %----------------Nmero de errores detectados-----------------------------disp(-----------------Nmero de errores detectados------------------------); errodet=xor(Dato_codificado,dc); Errores_detectados=sum(errodet) %--------------Mensaje sobre la deteccin y correccin de error------------disp(--------------Mensaje sobre la deteccin y correccin de error-------------); if x==Dato disp(El cdigo fue capaz de detectar y corregir los errores provocados en la transmisin); else disp(El cdigo fue capaz de detectar lo errores, pero no fue capaz de corregirlos); end
Cdigo del codificador convolucional function [Tabla_codificador,Dato_codificado]=codiconvol(d,m,ft1,ft2); %Programa para un codificador convolucional (2,1,m) de n bits de %entrada %d es el dato de entrada %m es el nmero de memorias %ft1 es la funcin de transferencia #1 %ft2 es la funcin de transferencia #2 global Dato_codificado; mm=2^m; dd=zeros(1,m); cont=-1; ld=length(d); ft11=ft1(end:-1:1); ft22=ft2(end:-1:1); for i=1:mm
174
AGOSTO20103 ISSN1909-9142
coningenio
Ivn Daro Hastamorir Juan Diego Melenje Richard Andersson Rodrguez Ivn Daro Ladino
Cdigo Convolucional
pp. 168-179
tablar_1(k,2*j)=kk(:,1) | tt(k,2*j); cont=cont+1; yy(i,:)=dec2binvec(cont,m); yy1(i,:)=fliplr(yy(i,:)); end end Apuntador=yy1; [m1,n1]=size(Apuntador); ed=zeros(m1,n1); Tabla_codificador=or(tabla_1,tabla_2); Apuntad=[ed Apuntador]; %--Reutilizacin de la tabla---[m2,n2]=size(Apuntad); datot=[dd d]; tt=zeros(m2,n2); d1=zeros(m2,1); for l=1:ld %//////////Codificador////////// tyu=datot(1+l:m+l); %-------Genera la tabla--------c1_1=and(tyu,ft11); for j=1:m for k=1:mm fda(:,:)=Apuntad(:,1+j:m+j); c11(k,:)=and(fda(k,:),ft11); c22(k,:)=and(fda(k,:),ft22); y11=c1_10/2; c110(k,:)=sum(c11(k,:)); c220(k,:)=sum(c22(k,:)); r11=floor(y11); r22=floor(y22); y1(k,:)=c110(k,:)/2; y2(k,:)=c220(k,:)/2; r1(k,:)=floor(y1(k,:)); r2(k,:)=floor(y2(k,:)); ct1(:,:)=c110(k,:)-(2*r1(k,:)); ct2(:,:)=c220(k,:)-(2*r2(k,:)); kk=[ct1 ct2]; end %--Codificacin--kk1=[ct11;ct22]; kk1w=kk1(:); Dato_codificado=kk1w; ct11(l)=c1_10-(2*r11); ct22(l)=c2_20-(2*r22); y22=c2_20/2; c1_10=sum(c1_1); c2_20=sum(c2_2); c2_2=and(tyu,ft22); end tabla_11(:,1:n2-1)=tablar_1(:,2:n2); tabla_1=[tabla_11 d1]; tabla_2(k,2*j)=kk(1,2) | tt(k,2*j);
175
AGOSTO20103 ISSN 1909-9142
Ivn Daro Hastamorir Juan Diego Melenje Richard Andersson Rodrguez Ivn Daro Ladino
Cdigo Convolucional
pp. 168-179
coningenio
Guardar aquella posicin donde se encuentre la menor distancia Hamming, porque la posicin va a ser el dato decodificado.
Ejemplo:
Entrada del dato codificado. Entrada de las funciones de transferencia (Es un vector o polinomio que me define la codificacin y decodificacin del dato). Entradas de los valores de m (donde m es el nmero de memorias). Generar el apuntador (Es el conjunto de nmeros con el cual se genera la tabla o rbol de Trellis). Desplazamiento de los datos e ir haciendo la funcin Xor entre las funciones de transferencia y el dato desplazado. Generar la tabla o rbol de Trellis, dependiendo de la longitud del dato codificado. Realizar la distancia Hamming entre el dato codificado y cada una de las posiciones de la tabla. Generar una columna con todas las distancia Hamming. Escoger el menor valor de la distancia Hamming en la columna y mirar en qu posicin se encuentra. Teniendo las mismas caractersticas del codificador. Para la decodificacin es necesaria la tabla o rbol de Trellis, para este tipo de decodificador la tabla es la siguiente: Dato codificado [11 01 01] Dato a decodificar [10 01 01] Se va a realizar el proceso de decodificacin del dato codificado en el ejemplo anterior, claro est que se va a cambiar un bit en el dato codificado, para simular que se produjo un error en la transmisin.
176
AGOSTO20103 ISSN1909-9142
coningenio
Ivn Daro Hastamorir Juan Diego Melenje Richard Andersson Rodrguez Ivn Daro Ladino
Cdigo Convolucional
pp. 168-179
for i=1:mm cont=cont+1; yy(i,:)=dec2binvec(cont,ld1); yy1(i,:)=fliplr(yy(i,:)); end Apuntador=yy1; [m1,n1]=size(Apuntador); ed=zeros(m1,n1); Apuntad=[ed Apuntador]; [m2,n2]=size(Apuntad);
3 3 2 4 3 1 4 4
Se tiene en cuenta es la menor distancia Hamming, y se determina la posicin que es el dato decodificado. Menor distancia Hamming: 1 Posicin: 5. Dato decodificado: 101
for j=1:ld1 %Programa para un decodificador convolucional de n bits. %dc es el dato codificado %m es el nmero de memorias %ft1 es la funcin de transferencia #1 %ft2 es la Funcin de transferencia #2 c110(k,:)=sum(c11(k,:)); global Dato; ld=length(dc); ld1=ld/2; ld2=ld1-m; dd=zeros(1,ld2); ft111=[ft1 dd]; ft222=[ft2 dd]; ct1(:,:)=c110(k,:)-(2*r1(k,:)); ft11=ft111(end:-1:1); ft22=ft222(end:-1:1); mm=2^ld1; cont=-1; tablar_1(k,2*j)=kk(:,1) | tt(k,2*j); ct2(:,:)=c220(k,:)-(2*r2(k,:)); kk=[ct1 ct2]; r1(k,:)=floor(y1(k,:)); r2(k,:)=floor(y2(k,:)); c220(k,:)=sum(c22(k,:)); y1(k,:)=c110(k,:)/2; y2(k,:)=c220(k,:)/2; for k=1:mm fda(:,:)=Apuntad(:,1+j:ld1+j); c11(k,:)=and(fda(k,:),ft11); c22(k,:)=and(fda(k,:),ft22);
177
AGOSTO20103 ISSN 1909-9142
Ivn Daro Hastamorir Juan Diego Melenje Richard Andersson Rodrguez Ivn Daro Ladino
Cdigo Convolucional
pp. 168-179
coningenio
tabla_2(k,2*j)=kk(1,2) | tt(k,2*j);
pp(ii,:)=sum(gg(ii,:)); end
end end tabla_11(:,1:n2-1)=tablar_1(:,2:n2); Tabla_decodificador=or(tabla_1,tabla_2) %----Bsqueda en la tabla con distancia Hamming------------for ii=1:m2 gg(ii,:)=xor(dc(1,:),Tabla_ decodificador(ii,:)); [yu,sd]=min(pp); Dato=de2bi(sd-1,ld1,left-msb)
178
AGOSTO20103 ISSN1909-9142
coningenio
CONCLUSIONES
Este cdigo convolucional solo detecta errores cuando ellos estn en posiciones no inmediatas. La cantidad de errores que llega a detectar y corregir este cdigo depende inmediatamente de la cantidad de memorias menos 1 (m-1), as un cdigo que tenga 4 memorias llega a detectar y corregir hasta 3 errores. En este cdigo no fue necesario utilizar el algoritmo de Viterbi, debido a que nosotros diseamos una forma ms sencilla para que se facilite el entendimiento por parte de los estudiantes. Hay varias opciones para la codificacin de datos, pero la que recomendamos para un mejor entendimiento por parte de los estudiantes es el rbol de Trellis. La dificultad ms relevante que se tuvo en la realizacin de este cdigo, es que si llegan a suceder un nmero igual o mayor al nmero de memorias, detecta los errores mas no los puede corregir.
REFERENCIAS
1. TODD K. Moon. Error correction coding Mathematical Methods and Algorithms. Wiley, 2005. 2. LATHI B.P. Modern Digital and Analog communications systems (3 Ed). Oxford University Press, 1998. 3. PROAKIS, John G. Digital Communications (4 Ed). McGraw-Hill. 2000. 4. MACKAY, David J.C. Information Theory, inference and learning algorithms. Cambridge University Press. 2003. 5. www.isa.cie.uva.es/proyectos/codec/marco4.html 6. www.mathworks.com 7. www.xilinx.com 8. www.altera.com
179
AGOSTO20103 ISSN 1909-9142