Está en la página 1de 12

Cdigo

convolucional
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

INTRODUCCION

En bsqueda de responder a la necesidad

pp. 168-179

coningenio

Para el diseo del decodificador se abordaron los conceptos


correspondientes a: Algoritmo de Viterbi, Diagrama de Trellis
y distancia Hamming.

de una herramienta til y de la que no se


dispone en la institucin, surgi el proyec-

El prototipo se dise e implement sobre la suite de Mat-

to de disear e implementar un prototipo

lab MATLAB y fsicamente en un dispositivo lgico progra-

de codificacin decodificacin convolu-

mable FPGA.

cional, para los estudiantes de ingeniera


electrnica. Dicho proyecto hace parte del

MARCO TERICO

trabajo de grado para optar por el ttulo de


Ingeniero Electrnico.

Los canales de comunicaciones no son ideales, por el contrario su funcionamiento est determinado por varios facto-

Para el diseo del prototipo, el primer paso

res que ocasionan que los datos generados por el transmisor

consisti en realizar un estudio detallado

lleguen con errores al receptor, en otras palabras las tramas

de probabilidad y teora de la informacin,

recibidas en el receptor pueden diferir en uno o varios bits.

debido a que ello determina la base mate-

Entre los factores que ocasionan los errores, los ms deter-

mtica fundamental para abordar el rea

minantes corresponden a: el ruido, la distorsin y la interfe-

de las telecomunicaciones. Una vez reali-

rencia; siendo el primero (el ruido) el objeto primordial del

zado este estudio se procedi a disear el

trabajo con los codificadores de canal.

codificador, apropiando los siguientes temas: Cdigos con memoria, Diagramas y

Los cdigos convolucionales son adecuados para usar sobre

rboles de Trellis.

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 con-

cional aade una estructura a la secuencia de

trario que con los cdigos lineales, se prefieren los cdigos

bits. Incluso aunque la entrada sea totalmente

no sistemticos, es decir en los que el dato no aparece de

aleatoria, se fuerza a que la salida siga unas

forma explcita en la codificacin.

determinadas secuencias. Esta restriccin es


la que da la capacidad correctora a los cdigos

El sistema tiene memoria: la codificacin actual depende

convolucionales.

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.

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

Figura 1. Tomado de http://www.isa.cie.uva.es/proyectos/


codec/marco4.html.

Figura 2. rbol de Trellis.

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 convolu-

Figura 3. Diagrama de Trellis.

171
AGOSTO20103

ISSN 1909-9142

Ivn Daro Hastamorir


Juan Diego Melenje
Richard Andersson Rodrguez
Ivn Daro Ladino

Cdigo Convolucional

El procedimiento de decodificacin es equi-

valente a comparar la secuencia recibida

pp. 168-179

coningenio

Desplazamiento de los datos e ir haciendo la funcin XOR


entre las funciones de transferencia y el dato desplazado.

con todas las posibles secuencias que pueden obtenerse con el correspondiente co-

dificador y seleccionando la secuencia que

Generar la tabla o rbol de Trellis, dependiendo de la longitud de m.

est ms prxima a la secuencia recibida.


Se van guardando los datos codificados generados (c1,c2)


en una matriz.

Se han desarrollado complejos algoritmos


para la decodificacin convolucional, uno
de los ms usados es el algoritmo de Viterbi

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.

El fundamento de este algoritmo est en


que no se almacenan todas las secuencias
a las que da lugar el codificador. Se basa en

Dato_codificado=[ c10c20 c11c21 c12c22 c13c23 .. c1nc2n]

el principio de optimalidad: el mejor camino (menor distancia de Hamming) a travs


del diagrama de Trellis que pasa por un

Ejemplo

determinado nodo, necesariamente inclu-

Se va a realizar un ejemplo para la codificacin convolucio-

ye el mejor camino desde el principio del

nal de 3 bits con la caracterstica (2,1,3); dnde el 2 indica la

diagrama de Trellis hasta este nodo.

cantidad de salidas, 1 es el nmero de bits que ingresan a las


memorias para llevar a cabo la codificacin y 3 son la canti-

DESARROLLO DEL PROYECTO

dad de registros o memorias.

Diseo del codificador


convolucional

El dato que se desea codificar es 101.

En el proceso de diseo del codificador con-

Recuerde que inicialmente las memorias estn en ceros.

Se invierte el dato.

Se definen las funciones de transferencia que son dos

volucional, se utilizaron las siguientes etapas:


Entrada del dato a codificar (Es el ingreso del dato que se desea transmitir).

para este caso: FT1=[101], FT2=[110].


Entrada de las funciones de transferencia (Es un vector o polinomio que


define la codificacin del dato).

Entrada 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).

172
AGOSTO20103 ISSN1909-9142

El orden de las memorias es el siguiente:

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.

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.

Convol1.m

codiconvol.m

decoconvol.m

Programa principal
del cdigo de canal
convolucional:
%Programa para la deteccin y correcin de
errores por medio del cdigo de canal Convo-

Ahora se ingresa el segundo bit.

lucional
clear all;
close all;
clc;
x=input(Digite el dato de entrada: \n);
y=input(Digite m (nmero de registros): \n);

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 introduce el ltimo bit a la memoria:

Se realiza el mismo procedimiento anteriormente explicado.

Una vez finalizado este procedimiento, se obtiene el dato

f1=input(Digite la funcin de transferencia


#1: \n);
f2=input(Digite la funcin de transferencia
#2: \n);
disp(-----------------------------Codificador-----------------------------------------------);

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

[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

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;

tabla_2(k,2*j)=kk(1,2) | tt(k,2*j);

yy(i,:)=dec2binvec(cont,m);
yy1(i,:)=fliplr(yy(i,:));
end
end

end

Apuntador=yy1;

tabla_11(:,1:n2-1)=tablar_1(:,2:n2);

[m1,n1]=size(Apuntador);

tabla_1=[tabla_11 d1];

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

c2_2=and(tyu,ft22);

for k=1:mm
fda(:,:)=Apuntad(:,1+j:m+j);

c1_10=sum(c1_1);

c11(k,:)=and(fda(k,:),ft11);

c2_20=sum(c2_2);

c22(k,:)=and(fda(k,:),ft22);
y11=c1_10/2;
c110(k,:)=sum(c11(k,:));

y22=c2_20/2;

c220(k,:)=sum(c22(k,:));
r11=floor(y11); r22=floor(y22);
y1(k,:)=c110(k,:)/2;
y2(k,:)=c220(k,:)/2;

ct11(l)=c1_10-(2*r11);
ct22(l)=c2_20-(2*r22);

r1(k,:)=floor(y1(k,:));
r2(k,:)=floor(y2(k,:));

end

ct1(:,:)=c110(k,:)-(2*r1(k,:));

%--Codificacin---

ct2(:,:)=c220(k,:)-(2*r2(k,:));

kk1=[ct11;ct22];
kk1w=kk1(:);

kk=[ct1 ct2];

Dato_codificado=kk1w;

175
AGOSTO20103

ISSN 1909-9142

Ivn Daro Hastamorir


Juan Diego Melenje
Richard Andersson Rodrguez
Ivn Daro Ladino

Cdigo Convolucional

Diseo de decodificador
convolucional

pp. 168-179

coningenio

Guardar aquella posicin donde se encuentre la menor


distancia Hamming, porque la posicin va a ser el dato
decodificado.

En el proceso de diseo del decodificador


convolucional, se utilizaron las siguien-

Salida del dato decodificado (dato original).

tes etapas:

Ejemplo:

Entrada del dato codificado.

Se va a realizar el proceso de decodificacin del dato codificado en el ejemplo anterior, claro est que se va a cambiar un

Entrada de las funciones de transfe-

bit en el dato codificado, para simular que se produjo un error

rencia (Es un vector o polinomio que

en la transmisin.

me define la codificacin y decodificacin del dato).

Dato codificado [11 01 01]


Dato a decodificar [10 01 01]

Entradas de los valores de m (donde m


es el nmero de memorias).

Teniendo las mismas caractersticas del codificador.


Para la decodificacin es necesaria la tabla o rbol de Trellis,

Generar el apuntador (Es el conjunto


de nmeros con el cual se genera la ta-

bla o rbol de Trellis).

000000

Desplazamiento de los datos e ir hacien-

000011

do la funcin Xor entre las funciones de

transferencia y el dato desplazado.

001101

Generar la tabla o rbol de Trellis,

001110

dependiendo de la longitud del dato

para este tipo de decodificador la tabla es la siguiente:

codificado.

110110

Realizar la distancia Hamming entre el

110101

dato codificado y cada una de las posi-

ciones de la tabla.

111011

Generar una columna con todas las

111000

distancia Hamming.

Escoger el menor valor de la distancia


Hamming en la columna y mirar en
qu posicin se encuentra.

176
AGOSTO20103 ISSN1909-9142

Ahora se toma el dato a decodificar, y hallamos la distancia


Hamming con cada una de las posiciones de la tabla, y escogemos la menor distancia.

coningenio

Ivn Daro Hastamorir


Juan Diego Melenje
Richard Andersson Rodrguez
Ivn Daro Ladino

Cdigo Convolucional

Dichas distancias Hamming dan lo siguiente:

for i=1:mm

3
3
2
4
3
1
4
4

cont=cont+1;

Se tiene en cuenta es la menor distancia Hamming, y se de-

pp. 168-179

yy(i,:)=dec2binvec(cont,ld1);
yy1(i,:)=fliplr(yy(i,:));
end
Apuntador=yy1; [m1,n1]=size(Apuntador);
ed=zeros(m1,n1);
Apuntad=[ed Apuntador];

termina la posicin que es el dato decodificado.


[m2,n2]=size(Apuntad);
Menor distancia Hamming: 1
Posicin: 5.

tt=zeros(m2,n2);

Dato decodificado: 101

d1=zeros(m2,1);

Cdigo del decodificador


convolucional

%/////////Decodificador/////////
%-------Genera la tabla---------

function [Tabla_decodificador,Dato]=decoconvol(dc,m,ft1,ft2)
for j=1:ld1
%Programa para un decodificador convolucional de n bits.

for k=1:mm

%dc es el dato codificado

fda(:,:)=Apuntad(:,1+j:ld1+j);

%m es el nmero de memorias

c11(k,:)=and(fda(k,:),ft11);

%ft1 es la funcin de transferencia #1

c22(k,:)=and(fda(k,:),ft22);

%ft2 es la Funcin de transferencia #2


c110(k,:)=sum(c11(k,:));
global Dato;

c220(k,:)=sum(c22(k,:));

ld=length(dc);

y1(k,:)=c110(k,:)/2;

ld1=ld/2;

y2(k,:)=c220(k,:)/2;

ld2=ld1-m;
dd=zeros(1,ld2);

r1(k,:)=floor(y1(k,:));

ft111=[ft1 dd];

r2(k,:)=floor(y2(k,:));

ft222=[ft2 dd];
ct1(:,:)=c110(k,:)-(2*r1(k,:));
ft11=ft111(end:-1:1); ft22=ft222(end:-1:1);

ct2(:,:)=c220(k,:)-(2*r2(k,:));
kk=[ct1 ct2];

mm=2^ld1;
cont=-1;

tablar_1(k,2*j)=kk(:,1) | tt(k,2*j);

177
AGOSTO20103

ISSN 1909-9142

Ivn Daro Hastamorir


Juan Diego Melenje
Richard Andersson Rodrguez
Ivn Daro Ladino

Cdigo Convolucional

tabla_2(k,2*j)=kk(1,2) | tt(k,2*j);

pp. 168-179

pp(ii,:)=sum(gg(ii,:));
end

end
end

[yu,sd]=min(pp);

tabla_11(:,1:n2-1)=tablar_1(:,2:n2);

Dato=de2bi(sd-1,ld1,left-msb)

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,:));

178
AGOSTO20103 ISSN1909-9142

coningenio

coningenio
CONCLUSIONES

Este cdigo convolucional solo de-

REFERENCIAS
1. TODD K. Moon. Error correction

tecta errores cuando ellos estn en

coding

posiciones no inmediatas.

and Algorithms. Wiley, 2005.

Mathematical

Methods

2. LATHI B.P. Modern Digital and


La cantidad de errores que llega a

Analog communications systems

detectar y corregir este cdigo de-

(3 Ed). Oxford University Press,

pende inmediatamente de la can-

1998.

tidad de memorias menos 1 (m-1),

3. PROAKIS, John G. Digital Commu-

as un cdigo que tenga 4 memo-

nications (4 Ed). McGraw-Hill.

rias llega a detectar y corregir hasta 3 errores.

2000.
4. MACKAY, David J.C. Information
Theory, inference and learning al-

En este cdigo no fue necesario


utilizar el algoritmo de Viterbi,
debido a que nosotros diseamos

gorithms. Cambridge University


Press. 2003.
5. www.isa.cie.uva.es/proyectos/co-

una forma ms sencilla para que

dec/marco4.html

se facilite el entendimiento por

6. www.mathworks.com

parte de los estudiantes.

7. www.xilinx.com
8. www.altera.com

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.

179
AGOSTO20103

ISSN 1909-9142

También podría gustarte