X - Instituto Politécnico Nacional

Anuncio
INSTITUTO POLITÉCNICO NACIONAL
ESCUELA SUPERIOR DE INGENIERÍA
MECÁNICA Y ELÉCTRICA
SECCIÓN DE ESTUDIOS DE POSGRADO E
INVESTIGACIÓN
“Aplicaciones de los campos de Galois en el contexto de
la corrección y detección de errores en comunicaciones
basadas en los códigos BCH, con un enfoque didáctico”.
TESIS
QUE PARA OBTENER EL GRADO DE :
MAESTRO EN CIENCIAS EN INGENIERÍA DE
TELECOMUNICACIONES
PRESENTA:
JORGE
ROJAS
BELTRÁN
DIRECTORES DE TESIS
M. EN C. MIGUEL SÁNCHEZ MERÁZ
Y
DRA. PATRICIA CAMARENA GALLARDO
MEXICO, D. F.
2008
I
II
III
Resumen
Cada vez es más necesario en los currículos de cursos de ingeniería de telecomunicaciones profundizar
en tópicos como la teoría de la información y la teoría de códigos, principalmente para entender el
potencial de los sistemas de comunicaciones totalmente digitales.
El propósito de este trabajo es confirmar la vinculación del álgebra de campos finitos de Galois con los
codificadores de canal, donde estos últimos tienen utilidad en los sistemas de telecomunicaciones. Ello
mediante simulaciones en matlab, programación de dispositivos CPLD’s con VHDL y gráficas de
desempeño teórico para cada uno de los codificadores de canal más representativos.
El resultado del documento es mostrar el desempeño en gráficas (Pe vs. SNR) de tres modelos: teórico,
simulink y en hardware por implemntación en VHDL.
Abstract
Every time it is more necessary in the curriculum of telecommunications engineering courses to deep
in topics how information theory an error control coding, principally to understand the potential of
digital communications systems.
The purpose of this thesis work is to confirm the link between Galois fields and coding channel, where
coders of error control have utility en telecommunication system. It using simulations in matlab,
programming devices how CPLD and graphics of theoretical performance by some BCH codes.
The final result is to show graphics of Pe (error probability) vs. SNR of 3 models: theoretical, software
simulation in simulink and hardware implementation in VHDL.
IV
Objetivo
Establecer con elementos de simulación los principios matemáticos y de electrónica que caracterizan a
los codificadores de canal, principalmente a los de tipo BCH, para comprender de manera didáctica la
funcionalidad de codificadores más robustos.
Objetivos particulares
Integrar un documento lo suficientemente accesible y detallado en el área de aplicación de los
campos Galois en técnicas de codificación de canal, para que éste sea empleado en asignaturas de
ingeniería y posiblemente de maestría en telecomunicaciones y telemática, como un recurso para
elevar el potencial cognitivo de los estudiantes en dichos niveles.
Analizar el desempeño teórico y práctico de los códigos BCH, mediante simulaciones en hardware
y software.
Comparar los resultados obtenidos con el modelo teórico y la simulación en Matlab y VHDL para
verificar su grado de concordancia.
Resaltar la vinculación que existe entre la teoría de los sistemas de telecomunicaciones y el álgebra
moderna, en especial la conexión entre la codificación de canal y los campos de Galois.
V
Justificación
En diversas ocasiones durante los curso de ingeniería, las contenidos de algunas asignaturas, por
ejemplo de teoría en comunicaciones y electrónica, se pierde por momentos los antecedentes de las
estructuras o bases matemáticas que dan origen a alguna aplicación en los sistemas de comunicaciones;
así como en los cursos de licenciatura en matemáticas no se aborda detalladamente la utilidad que
alcanzan a tener los modelos matemáticos (campos de Galois) en algunas áreas de la ingeniería.
También se puede mencionar que los estudiantes que cursan asignaturas como teoría de la información
y teoría de códigos, tiene que recurrir a diversas referencias bibliográficas para tener un panorama, si
no completo, de manera introductoria, que en ocasiones no es tan accesible de comprender ya que se
cuenta con escasos ejemplo y muy pocas herramientas de simulación para verificar de manera
didáctica, por ejemplo, el comportamiento de algún codificadores fuente o de canal.
Por lo tanto, cada vez es más necesario en los currículos de cursos de ingeniería de telecomunicaciones
profundizar en tópicos como la teoría de la información y la teoría de códigos, principalmente para
entender el potencial de los sistemas de comunicaciones totalmente digitales. Asimismo, es
fundamental que en los currículos de los cursos de ingeniería se establezca la vinculación entre
disciplinas, en particular con la matemática, como lo establece la teoría educativa de la Matemática en
el Contexto de las Ciencias.
VI
Introducción
Un primer propósito de este trabajo es el de comparar el desempeño teórico y práctico de los algunos
codificadores BCH mediante simulaciones en Matlab, programación de dispositivos CPLD’s en VHDL
y modelos matemáticos, el cual se verá reflejado en gráficos característico donde intervengan la
relación señal a ruido y la probabilidad de error.
Otro de los propósitos que se tiene la presente tesis es el de establecer la vinculación del álgebra de
campos finitos de Galois con los codificadores de canal, donde estos últimos tienen utilidad en los
sistemas de telecomunicaciones. Y el tercer propósito establece el enfoque didáctico tratado en el
desarrollo del trabajo, el cual incluye dos perspectivas educativas. La primera es referente a la
Matemática en Contexto (Camarena, 1984), en donde los campos de Galois se encuentran en el
contexto de la corrección y detección de errores en comunicaciones. La segunda toma en cuenta la
teoría de la elementarización, a través de la cual el lenguaje y las explicaciones se tornan claras y
accesibles para el estudiante y se alude a los ejemplos.
El documento aquí desarrollado pretende plasmar en tres grandes ejes temáticos otra visión en el
estudio de los codificadores de canal, particularizando en la evaluación y caracterización de los códigos
de tipo BCH. Esos tres ejes son: la teoría de las comunicaciones, los campos de Galois, y el aspecto
didáctico, como se muestran en el mapa conceptual de la presente tesis.
mu
ni
ca
ci o
ne
Lógica digital
mp
a
C
s
d
os
Codificación de canal
s
rso
cu
Re
Si
de
Didáctica
n
ió
ac
m
ra
og
Pr
o
Códigos
tic
m
á
ul
BCH
em
at
Hw a c
M
yS ion
lo
e
es
w
od
M
VII
C
c o om
di pe
fi c n
ac dio
ió
d
de n p idá
a
er ra ctic
ro el o
re
s con de
t ro
l
Co
Mapa conceptual de tesis
e
lo
Ga
is
La estructura de los capítulos está basada en este mapa conceptual, donde el capítulo I aborda de
manera ilustrativa y concreta los objetivos y elementos de la teoría de la información, así como la
diferencia entre la codificación fuente y de canal. Por su parte el capítulo II, describe mediante modelos
teóricos y de simulación el comportamiento de un sistema de transmisión en banda base digital sin el
uso de codificación de canal.
El capítulo III está integrado por dos temas, el primero referente a las bases del álgebra moderna que se
van a utilizar para fundamentar los códigos BCH, y el segundo propiamente sobre la caracterización de
los códigos BCH. Fue necesario unificar estos dos temas ya que son los protagonistas de la dupla
“fundamento-teórico y aplicación-tecnológica”. En este capítulo se prepararon ejemplos muy
detallados para entender el porqué usar un polinomio generador en específico con base en la capacidad
de corrección, así como también casos desglosados de los procesos de codificación y decodificación.
El capítulo IV está dedicado a todo el conjunto de pruebas que fueron realizadas para evaluar el
desempeño de los códigos BCH, principalmente con el parámetro de la BER y WER. Se especifican
tres modelados durante el desarrollo del mismo, y que son el modelo teórico, el modelo en software
(matlab-simulink) y el modelo en VHDL o de hardware (sacando provecho de la lógica digital que
presentan los campos de Galois).
El capítulo V trata de la obtención de conclusiones a partir de los resultados gráficos que brindó el
capítulo IV mediante una inferencia comparativa de éstas.
La parte de los anexos conjunta algunas tablas que se hacen referencia durante el trabajo, y en especial
se presenta una breve biografía y cronograma del Evariste Galois, la cual refleja el breve e
intempestivo vivir de un matemático, que junto con Claude E. Shannon, se debe en gran parte el
presente trabajo.
VIII
Índice
Capítulo I
Introducción a la codificación para el control de errores
1.1 Antecedentes, Teoría de la información
1.2 Breve reseña del pensamiento de Claude Elwood Shannon (1916 - 2001)
1.3 ¿Qué es la teoría de la información?
1.4 Entropía máxima
1.5 Antecedentes, Codificación de canal
1.6 Tipos de errores
1.7 Principales técnicas para la recuperación y corrección de errores
1.8 Codificación FEC
1.
2.
3.
6.
8.
9.
10.
10.
Capítulo II
simulación en software para el desempeño de sistemas de transmisión en
banda base digital sin codificación de canal
2.1 Descripción de la prueba
2.2 Comentarios sobre la simulación tipo Monte Carlo para la Pe vs. SNR
2.3 Conclusiones sobre la simulación Monte Carlo para la Pe vs. SNR
12.
13.
17.
Capítulo III
Códigos BCH
3.1 Bases del álgebra moderna para la codificación de canal
3.2 Introducción a la Teoría de Grupos, Anillos y Campos
3.2 Aritmética modular
3.3 Protagonismo de los números primos
3.4 Campo
3.5 Introducción a la extensión de un campo
3.6 Polinomio primitivo
3.7 Construcción de la extensión de campo GF (2m) a partir de GF(2)
3.8 Propiedades básicas de un campo GF (2m)
3.9 Introducción a los códigos BCH
3.10 Descripción general del caso binario
3.11 Lineamientos de diseño para los codificadores BCH
3.12 Lineamientos generales para el proceso de decodificación BCH
3.13 Cálculo del síndrome
3.14 Búsqueda del polinomio localizador de error
3.15 Relación entre el polinomio localizador de error y el síndrome
3.16 Introducción al caso del algoritmo de Berlekamp-Massey
3.17 Estructuración del algoritmo de Berlekamp-Massey (BM)
3.18 Determinación de las raíces del polinomio localizador del
error (búsqueda de Chien)
3.19 Determinación del polinomio patrón de error
IX
18.
18.
21.
22.
25.
29.
30.
31.
33.
39.
39.
40.
45.
47.
50.
52.
53.
56.
58.
60.
3.20 Caso para ejemplificar el proceso de decodificación BCH
3.21 Implementación en hardware de los campos de Galois
60.
67.
Capítulo IV
Desarrollo de simulaciones para medir el desempeño de codificadores BCH
4.1 Descripción de las pruebas
4.2 Modelo teórico
4.3 Simulaciones del modelo teórico
4.4 Resultados gráficos del modelo teórico
4.5 Simulaciones por bloques de software en simulink
4.6 Descripción y configuración de los bloques en simulink
4.7 Resultados gráficos del modelo de simulación por bloques “simulink”
4.8 Estructura de la simulación con elementos de hardware
4.9 El codificador (coder)
4.10 El decodificador (decoder)
4.11 Resultados gráficos del modelo en hardware
73.
73.
81.
83.
86.
86.
89.
92.
93.
96.
99.
CAP V
Inferencia Comparativa
5.1 Desempeño comparativo
5.2 Conclusiones
5.3 Trabajos a futuro
102.
113.
113.
Referencias
114.
CAP VI
Anexos
A1 Biografía de E. Galois
A2 Cronograma de E. Galois
A3 Tabla de SNR vs. Pe
A4 Listado del programa en VHDL para el codificador (15,7)
X
A1.
A7.
A9.
A11.
Capítulo I
Introducción a la codificación para el control de errores
1.1 Antecedentes, Teoría de la información
El objetivo del ingeniero en comunicaciones y electrónica es el de diseñar sistemas de modo que la
información se transmita efectivamente al mismo tiempo y que satisfaga las siguientes limitantes de
diseño:
energía de transmisión, ancho de banda de la señal y los costos permitidos.
El objetivo de los sistemas de comunicación es el de transmitir información desde una fuente hasta un
receptor pasando por su canal respectivo.
Se puede citar que la información es: “inteligencia o conocimiento capaz de ser representado en
formas adecuadas para comunicación, almacenamiento o procesamiento.”
La teoría de la información se propone estudiar la eficiencia y fiabilidad de la información
permitiendo evaluar matemáticamente el rendimiento de los diferentes sistemas de comunicaciones.
En esta teoría, el término "información" no es el significado que cierto conjunto de signos o símbolos
puede poseer para quién envía o recibe un mensaje, sino una cantidad específica de información del
mensaje en cuestión, cualquiera que sea la forma en que ha sido emitido, el modo en que se ha
transmitido y el sistema mediante el cual se recibe.
En esencia, la cantidad especifica de información queda determinada por la “posibilidad de
selección” contenida en los elementos que integran el mensaje (sorpresa, incertidumbre, interés).
La teoría de la información responde dos cuestiones fundamentales:
1.- ¿Cuál es la tasa final de compresión?
Respuesta: Entropía (H)
2.- ¿Cuál es la tasa final de transmisión de la comunicación
Respuesta: Capacidad del canal (C)
Esto tiene contribuciones fundamentales en:
Física (Termodinámica)
Ciencias de la computación (Complejidad de Kolmogorov o algoritmo de complejidad)
Inferencia estadística (Occam’s razor: “La explicación más simple es la mejor”)
Probabilidad y estadística (Información de Fisher)
Economía (Teoría del portafolio, riesgo de Kelly).
1
Límite de compresión y de transmisión de los datos
En la fig. 1.1 podemos observar cuáles son los límites tanto de compresión como de transmisión de
datos en la teoría de las comunicaciones. Donde la tasa final de compresión es H y la tasa final de
transmisión que es la información mutua máxima, C = máx I(A;B).
Límite de
compresión
de los datos
Límite de
transmisión
de los datos
H
máx I(A;B)
Fig. 1.1. Extremos teóricos de información en la teoría de las comunicaciones.1
1.2 Breve reseña del pensamiento de Claude Elwood Shannon (1916 - 2001)
En su trabajo de 1948 denominado “Una teoría matemática de la comunicación” (se concentra más en
la información que en las señales en sí), Shannon se preguntó: ¿Cómo se representarán los mensajes
para que la información sea conducida de la mejor manera?, con sus limitaciones físicas inherentes.
Fue uno de los primeros investigadores que relaciona las herramientas de
probabilidad y estadística con la información transmitida en los sistemas de
comunicación.
Antes del trabajo de Shannon, el trabajo de los matemáticos e ingenieros que trabajaban en la teoría de
comunicaciones, era el de hallar formas en las cuales podía mantenerse la integridad de las señales
analógicas que viajan en un cable, como una corriente eléctrica fluctuante, o a través del aire como una
onda de radio modulada.
Shannon tomó un enfoque muy diferente. El vio la "información" codificada completamente de manera
digital, como una serie de 1's y 0's a los cuales se refiere como bits (binary information unit). Además
de proveer a los ingenieros de comunicaciones con una metodología diferente de diseño de circuitos de
transmisión, este cambio de enfoque también condujo al concepto "información" como un producto
objetivo, desincorporado de "remitentes" ó "receptores" humanos. Después de Shannon la cuestión de
importancia era ¿En qué forma se puede enviar, de la mejor manera, una secuencia de pulsos eléctricos
ó electromagnéticos de un punto a otro?
________
1
de la referencia Cover [36], pp 2.
2
Una consecuencia particular de este nuevo enfoque, era que mientras aún una pequeña variación en una
señal analógica distorsiona y puede, concebiblemente corromper la información transportada por esa
señal, la naturaleza del si/no (on/off) de la señal digital significa que la señal transportada digitalmente
es mucho menos propensa a corromperse.
En la teoría de Shannon lo que se mide es la cantidad de información que
transporta una señal sin importar lo que denota esta señal.
Los tres puntos medulares de la teoría de la información de Shannon:
Nueva medida para la velocidad de Información.
Medida para la capacidad de transmisión de información del canal.
Proceso de codificación para utilizar los canales a máxima capacidad.
1.3 ¿Qué es la teoría de la información?
La teoría de la información trata el problema de la eficiencia y fiabilidad en la transmisión de la
información. Los dos principales tópicos relacionados a la TI son:
Codificación Fuente: el problema de la eficiencia.
Codificación de Canal: el problema de la fiabilidad.
Eficiencia: Teniendo un código con una longitud promedio tan pequeño como sea posible, por ejemplo,
códigos para letras que aparecen frecuentemente.
Fiabilidad: La habilidad para procesar errores en la transmisión, por ejemplo, el envío de la misma
secuencia varias veces, para recuperarla a pesar de los errores.
Codificación fuente y de canal
Codificación Fuente: Su objetivo es extraer la información esencial de la fuente y codificarla a un
formato discreto de modo que se pueda guardar o transmitir mediante técnicas digitales.
Codificación de Canal: Se agregan datos al tren de bits de la fuente para que el receptor pueda detectar
y corregir errores provocados por el ruido presente en el canal.
"En esencia la codificación se emplea para acoplar la fuente al canal"
Es importante mencionar que dicha Teoría se encarga de analizar los símbolos que transmite una
fuente, su cantidad y calidad en un sistema de comunicaciones y no el significado que el receptor puede
darle a este grupo de símbolos (para el usuario o aplicación final).
3
Codificación fuente y de canal en un sistema de comunicaciones
Fig. 1.2. Sistema de comunicaciones a bloques.
El procesador de la señal condiciona a la fuente para una transmisión más eficiente.
Es aquí en donde se proporciona una “codificación fuente” de la señal de entrada. Además agrega bits
de paridad a la palabra digital con lo que se produce “codificación de canal” con el propósito de que el
receptor pueda detectar y corregir errores.
Los circuitos portadores convierten la señal de banda base procesándola en una banda de frecuencia
apropiada para el medio de transmisión del canal (señal pasa banda).
El receptor captura la señal contaminada proveniente del canal, la convierte en banda base, limpia la
señal y entrega una estimación de la información general.
La codificación fuente extrae la información más esencial a mandar de
una fuente.
Teorema fundamental de la teoría de la información
Dada un fuente de información y un canal de comunicación, existe una técnica de codificación tal que
la información se pueda transmitir sobre un canal a cualquier rapidez menor que la capacidad del canal
y una frecuencia de errores arbitrariamente pequeña, no obstante la presencia del ruido.
4
Medida de la información
Consideremos los siguientes titulares de algún periódico:
1. "El sol sale por el este"
2. "Estados Unidos invade Cuba"
3. "Cuba invade Estados Unidos"
4. "México ganará el próximo mundial"
P(1) = 1
- Apenas lleva información, o nula
P(2) ⇒ Escasa probabilidad pero finita
- Trae mayor cantidad de información
P(3) ⇒ Casi imposible
- Más información que las anteriores
P(4) ⇒ Imaginario
- Sin comentarios
Tabla 1.1. Relación de la probabilidad y cantidad de información.
Entre menos probable sea un evento mayor información “I” contendrá. Por lo tanto:
P → 1
P → 0
I →
I
0
→
∞
Fórmula para la medida de la información “I”
La cantidad de información “I” enviada desde una fuente, cuando se transmite el mensaje xi, está dada
por:
 1 
I ( xi ) = log r 

 P ( xi ) 
en unidades r-arias donde P(xi) es la probabilidad de xi, , y siendo
Ec. 1.1
IA = f(PA)
Los requisitos que debe cumplir tal función son:
f(PA) ≥ 0
lim f(PA) = 0
PA→1
f(PA)>f(PB)
para PA<PB
PC = PAPB
donde A y B son estadísticamente independientes
IC = f(PAPB)
0 ≤ PA ≤ 1
⇒
f(PAPB) = IA + IB
5
⇒
IC = IA + IB
Se observa que la cantidad de información depende sólo de la probabilidad de enviar el mensaje y no
de la posible interpretación del contenido, respecto a si tiene o no sentido.
La base del logaritmo determina las unidades, es decir para r = 2, r = e y r = 10.
Ec. 1.2
una manera rápida de conversión:
1 hartley = 3.32 bits
1 nat = 1.44 bits
 1
I ( x i ) = −
 log 10

1 
 log 10 [P ( x i )] = −
 ln[P( x i )]
2
 ln 2 
Ec. 1.3
log2 υ = 3.32 log10 υ
1.4 Entropía máxima
Para ello hay que encontrar la distribución de probabilidades de los mensajes que produzcan la máxima
entropía.
Se espera que " H " sea máxima cuando todos los símbolos sean equiprobables.
Comprobando el caso binario:
6
Calculando la entropía H de una fuente binaria y sin memoria con la ecuación 1.4:
2
2
 1 
H = ∑ P( xi ) I i = ∑ P( xi ) log 2 

i =1
i =1
 P ( xi ) 
H = P log 2
 1 
1

+ (1 − p) log 2 
P
1− p 
Ec. 1.4
Ec. 1.5
H
bits/símbolo
Fig. 1.3. Gráfica de la entropía de una fuente binaria.
Además el rango de valores posibles de H está acotado: 0 < H ≤ log2 q, donde “q” es el número de
símbolos.
Velocidad de entropía
Si se introduce el elemento tiempo en escena, supóngase que dos fuentes tienen igual entropía pero una
es más rápida que la otra por lo tanto se producen más símbolos por unidad de tiempo.
En estos casos la descripción de la fuente no reside totalmente en su entropía sino en su velocidad de
entropía (bits/s).
La velocidad de entropía " R " de una fuente discreta es:
H
bits
)
s
Ec. 1.6
τ = ∑ P( x i )τ i
Ec. 1.7
R=
donde:
τ
τ
(
es la duración promedio del símbolo
q
i =1
τi
→ es la duración del símbolo xi
7
1.5 Antecedentes, Codificación de canal
El “BER” es habitualmente el parámetro más importante a tener en cuenta, desde el punto de vista de
los diseñadores de sistemas de comunicación. La velocidad de transmisión de la información es
también decisiva, ya que el diseñador desea transmitir información a cierta tasa de símbolos R
(velocidad o tasa de entropía), necesidad que viene determinada por cada aplicación. Otros criterios de
diseño incluyen:
* Complejidad
* Costo
* Peso del equipo
* Disipación de calor
* Tolerancia a fallos
* Ancho de banda consumido
Esto deja poca flexibilidad al proceso de diseño ya que según nuestro razonamiento simplista parece
indicar que: una vez seleccionado el formato de modulación, la velocidad de encapsulamiento de salida
y el BER, éstos determinan el nivel de potencia del transmisor, que a su vez determina el peso de la
batería, la disipación térmica y otros factores. En algunos casos, este análisis puede indicar que la
construcción del sistema deseado es físicamente imposible. Por ejemplo, en el diseño de un satélite de
comunicaciones, la ecuación potencia/velocidad/BER puede llegar a dictar un nivel de potencia P
mayor del que puede ser proporcionado por los amplificadores de las ondas portadoras o los
amplificadores de estado sólido disponibles para las construcciones de satélites. En otro ejemplo,
podemos encontrar que las necesidades de potencia para el diseño de un teléfono móvil indican el uso
de baterías del tamaño más bien para la espalda de un elefante que para el bolsillo de una camisa.
Hubo un tiempo en el que estos obstáculos resultaban insuperables. Sin embargo a finales de los 40 los
trabajos de Shannon y Hamming en los Laboratorios Bell sentaron las bases para los códigos de control
de error, un campo que hoy nos proporciona un conjunto de técnicas potentes para alcanzar las BER
deseados con potencias de transmisión bajas.
Estos caballeros atacaron el problema del control de error en canales con ruidos usando técnicas
completamente diferentes. Shannon utilizó un enfoque estadístico/existencial mientras que Hamming
podría decirse que utilizó un planteamiento combinatorio/constructivo. Consecuentemente, sus
resultados fueron también radicalmente distintos: Shannon encontró los límites para el control de
errores ideal, mientras que Hamming mostró la manera de construir y analizar los primeros sistemas de
control de error prácticos.
Existen tres tipos distintos de codificaciones en las comunicaciones
digitales: Códigos Fuentes (eliminan redundancia), Códigos de Confiabilidad y
Secretos, por último, Códigos para el Control de Errores los cuales hacen uso de
la Matemática discreta como del álgebra moderna.
8
La detección de errores
El decodificador puede reaccionar ante la detección de un error de tres maneras diferentes:
Pedir una retransmisión de la palabra
Tomar la palabra como incorrecta e ignorarla
Tratar de corregir los errores de la palabra recibida.
La petición de retransmisión es utilizada en un conjunto de estrategias de control de errores
denominado petición automática de repetición (ARQ = Automatic Repeat Request). Para ello es
necesario que exista un enlace bidireccional entre el transmisor y el receptor y que la información
inicial todavía esté disponible.
La segunda opción se denomina comúnmente como “mutting". Es típica de aplicaciones en las que los
retrasos no permiten la retransmisión de la palabra transmitida y parece mejor dejar la palabra recibida
como un valor "apagado" que intentar corregir los errores. (p.e. comunicación por voz y audio digital).
La opción final se denomina corrección del error (FEC=Forward Error Correction). En los sistemas
FEC la estructura aritmética o algebraica del código se utiliza para determinar cuáles de las palabras
código válidas han sido enviadas, dada la palabra errónea recibida.
1.6 Tipos de errores
Aleatorios (Random)
Canales sin memoria
Comunicación satelital
De espacio profundo (deep-space)
Ráfagas (Burst)
Canales con memoria
Radio / cable
diafonía,
desvanecimiento (fading)
Compuesto
Random-Burst
Características atmosféricas
extremas, pérdida del enlace
por bastante tiempo (meteorburst)
Tabla 1.2. Clasificación de los errores en los sistemas de comunicaciones.
9
1.7 Principales técnicas para la recuperación y corrección de errores
Técnica
ARQ (Automatic Repeat
Request)
Retransmisión de bloque
detectado por el receptor
con error.
Aplicaciones
Tipos
Modo Duplex
"Stop and wait"
Distancias cortas
"Go back N"
LAN’s (ACK)
"Selective reject"
Ventana deslizante
en conjunto con el CRC
FEC (Forward Error
Correction)
Corrección de errores
anticipada ó adelantada,
donde los datos transmitidos
se codifican de modo que el
receptor pueda detectar y
corregir los errores.
Modo Simplex
Comunicaciones con
largas demoras en la
transmisión
Códigos de Bloque
Códigos Cíclicos
RS, BCH, RM
Códigos convolucionales
“Turbo Codes”
Tabla 1.3. Principales técnicas para el control de errores.
1.8 Codificación FEC
Otra motivación pragmática para el uso de dicha codificación radica en la reducción de Eb/No
requerida para una tasa de errores en bits fija (BER). Esta reducción en Eb/No puede explotarse para
reducir la potencia transmitida necesaria para o reducir los costos en el hardware
Existen muchos códigos diferentes para la corrección de errores (con fundamento en varias disciplinas
matemáticas) que se pueden utilizar. Desde hace tiempo, estos códigos se han clasificado en códigos de
bloque y códigos de convolución. La característica distintiva para dicha división es la presencia o
ausencia de memoria en los dos codificadores.
El principio de funcionamiento de un codificador de bloque (n,k) consiste en aceptar información en
bloques sucesivos de k dígitos, y en cada bloque agrega n - k dígitos redundantes que se relacionan
algebraicamente con los k dígitos del mensaje original, produciendo por lo anterior un bloque
codificado completo de n dígitos, donde n > k.
10
Este último bloque de n dígitos se denomina palabra de código. Un codificador de canal produce bits a
razón de
n
R0 =   R S
k
Ec. 1.8
donde : RS (b/s) tasa de bits de la fuente de información
η = k/n tasa de código ó eficiencia del codificador (0 < η < 1)
R0 (b/s) tasa de bits a la salida del codificador o “tasa de datos del canal”
En un código convolucional, la operación de codificación puede entenderse como la propia
convolución en tiempo discreto de la secuencia de entrada con la respuesta al impulso del codificador.
La duración de la respuesta al impulso es igual a la memoria del codificador. Por lo tanto, el
codificador de convolución opera sobre la secuencia del mensaje entrante, empleando una “ventana de
desplazamiento” igual en duración a su propia memoria.
Segundo teorema de Shannon (teorema de codificación de canal)
El Teorema de codificación de canal establece que si un canal sin memoria discreto tiene capacidad C
y una fuente genera información a una tasa menor que C, existe entonces una técnica de codificación
tal que la salida de la fuente puede transmitirse por el canal con una probabilidad de error de símbolo
arbitrariamente baja. Para el caso especial de un canal simétrico binario, el teorema nos indica que si
la tasa de código r es menor que la capacidad C del canal, entonces es posible encontrar un código que
logre una transmisión sin errores por el canal. De manera opuesta, no es factible un código de este tipo
si la tasa de código r es mayor que la capacidad C del canal.
El anterior teorema especifica a la capacidad C del canal como un límite fundamental sobre la tasa a la
cual puede llevarse a cabo la transmisión confiable (sin errores) de mensajes por un canal sin memoria
y discreto. He aquí el énfasis de la codificación a la entrada del canal sobre el parámetro
suficientemente grande de la relación señal a ruido (S/R, o en inglés SNR).
La parte menos concreta de dicho teorema es su poca naturaleza de diseño. El teorema asegura la
existencia de “buenos códigos” pero no dice cómo determinarlos, aunque la parte loable es el
establecimiento de tal límite sin haberse desarrollado un algoritmo de código de canal tal cual.
Por “buenos códigos” se refiere a un conjunto de códigos de canal que son capaces de proporcionar
transmisión de información confiable (probabilidad de error pequeña) por un canal ruidoso a tasas de
bit hasta un valor máximo menor que la capacidad de dicho canal.
11
Capítulo II
simulación en software para el desempeño de sistemas de
transmisión en banda base digital sin codificación de canal
2.1 Descripción de la prueba
Las pruebas desarrolladas en el presente capítulo tienen como objetivo evaluar el desempeño de un
sistema digital de banda base con transmisión de señales unipolar NRZ y antipodal, sin la utilización de
codificador de canal alguno.
Dígito “1”
Dígito “1”
Dígito “0”
s0(t)
Dígito “0”
s0(t)
s1(t)
s1(t)
A
A
Tb
Tb
t
t
Tb
t
0
Tb
-A
Cíclo reloj
Cíclo reloj
(a)
(b)
Fig. 2.1. Ejemplos de señal (a) antipodal y de señal (b) unipolar NRZ (on-off).
Para medir tal desempeño, se graficará la probabilidad de error (Pe) vs. la relación señal a ruido SNR,
tanto para el caso del modelo matemático (fórmula), como para una simulación de tipo Monte Carlo.
Lo anterior permitirá de primera instancia, tener una referencia para comparar el desempeño de los
codificadores BCH a desarrollar en los siguientes capítulos.
Para llevar a cabo lo anterior, se tuvieron las siguientes consideraciones:
Se utiliza un canal simétrico binario (BSC) con probabilidad de error en transición (p) en función
a la SNR con AWGN.
Las probabilidades de enviar un “0” y un “1” son las mismas, (probabilidades iniciales o a priori
equiprobables P0 = P1)
El receptor está bajo la detección de un filtro acoplado
No hay problemas de ISI; perfecta sincronía
12
t
Se utilizaron las siguientes fórmulas:
--para señal unipolar- Eb  1
 Eb
 = erfc
Pe = Q

 2N
0
 N0  2





Ec. 2.1
 1
 Eb 
 = erfc

 2
 N 
0



Ec. 2.2
--para señal antipodal- 2 Eb
Pe = Q
 N0
Fig. 2.2. Grafica de la Pe vs. SNR en los casos de una señal antipodal y unipolar NRZ.
13
2.2 Comentarios sobre la simulación tipo Monte Carlo para la Pe vs. SNR
La simulación de Monte Carlo es una técnica computacional que hace uso de números aleatorios. Los
objetivos de esta simulación son los de resolver uno o dos de los siguientes problemas:
- generar muestras provenientes de una distribución de probabilidades p(x) dada
- estimar la media de una función bajo la fdp p(x) dada.
Para el rubro que nos ocupa, se implementó dicha técnica para estimar la probabilidad de error de un
sistema de comunicación digital, mediante el siguientes diagrama a bloque, del cual sobresalen un
módulo generador de datos aleatorios, un detector de nivel según el umbral y un comparador de datos,
donde al final se contabilizan los errores que son después presentados en graficas de Pe vs. SNR
Generador de
números aleatorios
(Uniforme)
N= # de datos a
generar
Generador de
números aleatorios
(Gaussiano)
Salida de
datos
n
Fuente de datos
binarios
±E
r
+
Detector
Comparador
Contador de
errores
Fig. 2.3. Diagrama a bloque de la simulación Monte Carlo implementada para Matlab.
Este esquema (fig. 2.3) muestra la generación de una variable aleatoria r, la cual es la entrada a un
detector. Se implementa un generador de números aleatorios uniforme para simular la secuencia de
información binaria proveniente de una fuente de datos binario. Las secuencias de 0’s y de 1’s es
mapeada dentro de una secuencia de ±E , donde E representa la energía de la señal. Para este caso E
se normaliza al valor unitario. Además, un generador de ruido gaussiano se utiliza para obtener la
secuencia de números aleatorios gaussianos con media cero y varianza σ 2 . El detector compara la
variable aleatoria r con umbral de 0 (cero). Si r > 0, la decisión a tomar es de que se transmitió el bit
“0”. Si r < 0, entonces ahora la decisión a tomar es de que se transmitió el bit “1”. La salida del
detector es comparada con la secuencia trasmitida en bits, y es entonces cuando el contador de errores
actúa.
14
Para las primeras simulaciones se consideraron la transmisión de un tren de 10,000 bits de información,
los cuales se vieron afectados por diferentes valores de SNR. Pero hay algunas de mayor longitud que
requirieron mayor tiempo de CPU para poderlas terminar (N=1,000,000).
*
Teórico
Simulación
Fig. 2.4. Gráficas de las simulaciones Monte Carlo implementadas para Matlab, con una corrida de
10,000 dígitos binario.
Como se observa en la fig. 2.4, el desempeño de la Pe para la señal antipodal con base en el modelo de
Monte Carlo (en *) se ajusta en sus primeros seis valores (de 0 a 5 dB’s) a la curva de Pe obtenida por
la ec. 2.1 (línea continua), mientras que el resto comienza a separarse por la cantidad de datos
simulados.
En las siguientes pruebas de Monte Carlo se evaluaron más puntos de SNR como de dígitos binarios,
como se puede observar en las figuras 2.5, 2.6 y 2.7.
15
*
Teórico
Simulación
Fig. 2.5. Gráfica de la segunda prueba para simulación Monte Carlo, con una corrida de 10,000 dígitos
binario.
*
Teórico
Simulación
Fig. 2.6. Gráfica de la simulación Monte Carlo implementada para Matlab, con una corrida de 10,000
dígitos binarios, con más puntos de prueba.
16
*
Teórico
Simulación
*
Teórico
Simulación
Fig. 2.7. Gráficas de la simulaciones Monte Carlo implementadas para Matlab, con una corrida de
1,000,000 de dígitos binario.
2.3 Conclusiones sobre la simulación Monte Carlo para la Pe vs. SNR
Se puede observar que la simulación de Monte Carlo se aproxima de manera muy cercana a la curva
del desempeño teórico de la gráfica de Pe vs. SNR antipodal, sin embargo, habrá que realizar mayores
corridas en los valores de N, para llegar a tasas de errores más bajas y observar que tanto error de
aproximación ofrecen las dos modalidades. Es decir, a mayor SNR habrá que incrementar el número de
símbolos binarios a transmitir para alcanzar las tasas de error esperadas.
17
Capítulo III
Códigos BCH
3.1 Bases del álgebra moderna para la codificación de canal
Los sistemas algebraicos son estructuras que satisfacen ciertas reglas o leyes, las cuales casi siempre
son las mismas que aplicamos en nuestros sistemas de numeración ordinarios. Dichas estructuras son
deseables en los códigos correctores de error por dos razones: facilitan la búsqueda de propiedades de
un código, y llevan a cabo la instrumentación de códigos prácticos.
En general en toda la teoría de códigos se suelen trabajar en conjuntos cuyo alfabeto es bastante
restringido. Es aquí donde el álgebra abstracta y la aritmética modular apoyan las aplicaciones de los
sistemas de comunicaciones, tales como almacenamiento y transmisión de datos en redes telemáticas,
donde el alfabeto de símbolos posible es el conjunto {0,1}.
Con respecto a la aritmética modular se puede mencionar que ésta es una parte de las matemáticas
extremadamente útil, tanto en la corrección de errores como en la criptografía dentro de los sistemas de
comunicaciones digitales, ya que permite realizar cálculos complejos y plantear problemas interesantes,
manteniendo siempre una representación numérica compacta y definida, puesto que sólo maneja un
conjunto finito de números enteros. Muchos estudiosos la conocen como la aritmética del reloj, debido
a su parecido con la forma en que llevamos la contabilidad del tiempo. Por ejemplo, si son las 19:13:59
y pasa un segundo, se dice que son las 19:14:00, y no las 19:13:60. Como se puede entender, los
segundos al igual que los minutos, se expresan utilizando sesenta valores cíclicamente, de forma que
tras el 59 viene de nuevo el 0. Desde una perspectiva formal diríamos que los segundos se expresan en
módulo 60.
A continuación se describirán los bloques de construcción fundamentales del álgebra abstracta, la cual
abordaremos con mayor detalle durante este capítulo.
3.2 Introducción a la Teoría de Grupos, Anillos y Campos
En el álgebra abstracta o también conocida como álgebra moderna se tienen ciertos sistemas básicos o
simplemente conjuntos cuyos elementos podemos operar algebraicamente, es decir que se pueden
combinar dos elementos del conjunto, quizá de varias maneras, para obtener un tercer elemento
también del conjunto, y además se supone que estas operaciones algebraicas están sujetas a ciertas
reglas que se indican explícitamente en lo que se llaman axiomas o postulados definitorios del sistema.
En este apartado se expondrán distintos teoremas dentro del marco abstracto que integran estructuras
generales como grupos, anillos y campos, con el objetivo de relacionar sus propiedades con
aplicaciones específicas dentro del área de los sistemas de comunicaciones.
Es imperativo resaltar que los anteriores sistemas algebraicos son sistemas que satisfacen ciertas reglas
o leyes, y que en la mayoría de los casos, esas son las mismas leyes que se aplican en nuestros sistemas
ordinarios de numeración. Así un grupo es un sistema con una operación y su inversa, tales como la
adición y su inversa que es la substracción, o la multiplicación y su inversa que es la división. Un
anillo tiene dos operaciones, adición y multiplicación, y la operación inversa de la primera (resta).
18
o con
mento
ario
Un campo tiene las dos operaciones básicas anteriores, ambas con sus operaciones inversas. Por
convención, la notación para las dos principales clases de operaciones sobre el conjunto de elementos
de las anteriores estructuras, es usualmente la misma notación que se utiliza para representar a las
operaciones de adición y multiplicación que estamos acostumbrados a utilizar dentro de los sistemas
numéricos ordinarios. No obstante, es importante hacer notar que en álgebra abstracta, no se está
limitado a las operaciones aritméticas tradicionales.
En el siguiente cuadro sinóptico, se especifican los distintos axiomas y teoremas que dan lugar a las
estructuras algebraicas anteriormente citadas.
G
R
U
P
O
D
O
M
I
N
I
O
C
A
M
P
O
E
N
T
E
R
O
A
N
I
L
L
O
C
O
N
M
U
T
A
T
I
V
O
A
N
I
L
L
O
A
B
E
L
I
A
N
O
(A1) Cerradura bajo Si a y b pertenecen a G, entonces a+b está también en
adición
G.
G
R
U
P
O
(A2) Asociativa de
la adición
a+(b+c)=(a+b)+c para todo a, b, c en G.
(A3) Elemento
identidad adición
Hay un elemento 0 Є G tal que a+0=0+a=a para todo
a en G.
(A4) Inverso aditivo Para cada a en G hay un elemento –a en G tal que
a+(-a)=(-a)+a=0.
(A5) Conmutativa
de la adición
a+b=b+a para todo a, b en G.
(M1) Cerradura bajo Si a y b pertenecen a R, entonces a • b está también en
multiplicación
R.
(M2) Asociativa de
la multiplicación
a • (b • c)=(a • b) • c para todo a, b, c en R.
(M3) Leyes
distributivas
a • (b+c)=a • b + a • c para todo a, b, c en R.
(a+b) • c=a • c + b • c para todo a, b, c en R.
(M4) Conmutativa
de la multiplicación
a • b = b • a para todo a, b, c en R.
(M5) Elemento
identidad
multiplicación
Hay un elemento 1 en R tal que a • 1 = 1 • a = a para
todo a en R.
(M6) No posee
divisores cero
Si a y b están en R y a • b = 0, por lo tanto a=0 o b=0.
(M7) Inverso
multiplicativo de
elementos no cero
Si a pertenece a F y a ≠ 0, hay un elemento a-1 en F tal
que a • a-1 = a-1 • a = 1.
Fig. 3.1. Cuadro sinóptico sobre las estructuras del álgebra moderna.
19
En el siguiente cuadro se muestran algunas propiedades resumidas de los grupos, anillos y campos:
Grupo
Conjunto de elementos que pueden ser operados (+ o •) sin salirse del conjunto.
Conjunto de elementos donde se definen 2 operaciones tal que los elementos pueden ser
sumados, restados y multiplicados sin salirse del conjunto.
Conjunto de elementos con 2 operaciones y sus inversos tal que los elementos pueden ser
sumados, restados, multiplicados y divididos sin salirse del conjunto.
Anillo
Campo
Operación módulo-n
Dados cualquier entero n y cualquier entero a, si se divide a entre n, habrá un entero cociente q y un
entero residuo r que obedecen la siguiente expresión:
a = qn + r ,
0≤r <n;
a
q= 
n
donde x  es todo entero mayor que es menor o igual a x.
n
n
0
1
2n
3n
qn
a
(q +1) n
2
r
Fig. 3.2. Valores que intervienen en la descripción del módulo n.
La fig. 3.2 muestra en una línea numérica a dos enteros cualesquiera (a, n positivo), en la cual siempre
es posible encontrar q y r que satisfagan la relación a = qn + r; y donde a puede caer en algún lugar de
dicha recta (para este caso a cae en lado positivo de la recta). Iniciando desde 0, se procede a ubicar n,
2n, hasta qn tal que qn ≤ a y (q + 1)n > a. La distancia desde qn hasta a es r, y por lo tanto se han
encontrado los valores únicos de q y r. Por ejemplo:
a = 11;
n = 7;
11 = (1 × 7) + 4;
r=4
a = -11;
n = 7;
-11 = [(-2) × 7] + 3;
r=3
Si a es un entero y n es un entero positivo, se definirá al módulo n de a (a mod n) como el residuo de
dividir a entre n. Así, para cualquiera entero a, se puede escribir lo siguiente:
a
a =   × n + (a mod n)
n
20
Siguiendo los ejemplos, se tiene que:
11 mod 7 = 4;
-11 mod 7 = 3
Congruencia
Dos enteros a y b se dicen ser congruentes módulo n, si (a mod n) = (b mod n). Lo anterior se escribe
como:
a ≡ b mod n
Siguiendo con ejemplos, se tiene que:
73 ≡ 4 mod 23;
21 ≡ - 9 mod 10
3.2 Aritmética modular
Si m es un entero positivo, Zm denota el conjunto de los enteros módulo-m, es decir:
Zm ={0,1, . . . , m-1}.
A partir de este conjunto se podrán definir operaciones tales como la suma y el producto.
Definición D3.1.
Sean x, y Є Z. La suma de x y y en Zm es el residuo que resulta de dividir x + y Є Z entre m.
Análogamente el producto de x y y en Z, es el residuo que resulta de dividir x • y Є Z entre m.
Nótese que con esta definición Zm es un conjunto cerrado bajo la suma y producto módulos-m.
Ejemplo, para Z5:
2+4=1
y
2•4=3
A la terna ⟨ Zm, +, • ⟩ es a lo que se designará como los enteros módulo-m, y que a partir de este
momento se simplificará su notación a Zm.
Las tablas 3.3 y 3.2 muestran un ejemplo de los enteros módulo-2, el cual es el caso más utilizado en
áreas de ingeniería, principalmente en la de electrónica y comunicaciones.
+
0
1
0
0
1
× ó
0
1
1
1
0
Tabla 3.1. Suma módulo-2.
•
0
0
0
1
0
1
Tabla 3.2. Multiplicación módulo-2.
21
3.3 Protagonismo de los números primos
En este apartado se pretende resaltar la importancia que tienen los números primos en la aritmética
modular, los cuales a se vez, también son protagonistas fundamentales para la estructuración de los
campos, que se analizarán más adelante.
Primeramente, se puede hacer notar que 4 • 2 = 0 en Z8, pero 4 y 2 son, ambos, distintos de cero.
Sería deseable que cuando un producto sea cero al menos uno de los operadores sea cero. Y entonces se
hace pregunta: ¿Qué se requiere para que ocurra esto?
Supongamos que a • b = 0 Є Zm, es decir:
a • b ≡ 0 (mod-m)
Para que esto suceda se necesita que m(a • b), es decir, “m un divisor de (a • b)”. Por lo tanto, se tiene
el siguiente teorema.
Teorema T3.1. Sean a, b Є Zp, y a • b = 0 en Zp implica que a = 0 o b = 0 sí y sólo sí p es primo.
Suponiendo que a • b = 0 en Zp. Esto significa que (a • b) ≡ 0 mod-p y por lo tanto p(a • b). Dado
que p es primo entonces ocurre alguna de las siguientes dos cosas:
pa, lo que significa que a ≡ 0 mod-p, es decir a = 0 en Zp
pb, lo que análogamente significa que b = 0 en Zp
También se puede demostrar lo anterior, suponiendo que p no es primo y que no es cierto que si el
producto de a y b es cero, a o b son cero. Sin embargo, lo que interesa es visualizar la importancia de
los números primos para valores de m a utilizar en multiplicación módulos-m.
Lo anteriormente analizado, es el preludio de los llamados “divisores cero”, los cuales se hace
referencia por primera vez en el cuadro sinóptico 1, y que se definen prácticamente como los elementos
a, b Є Zm y que al ser operados en multiplicación mod-m su resultado es cero, donde ninguno de los dos
es cero mod-m (a y b son divisores cero), y ello por el simple hecho de que m no es primo.
Esta peculiaridad no la deben presentar las estructuras que más adelante se abordarán en la tesis, y que
son los denominados campos.
A continuación se presentan tablas para la multiplicación módulo-m, con diferentes valores de m
(primo y no primo), con el fin de ejemplificar lo aquí expuesto.
22
×
0
1
2
0
0
0
0
1
0
1
2
×
0
1
2
3
4
2
0
2
1
0
0
0
0
0
0
Tabla 3.3. Multiplicación módulo-3.
×
0
1
2
3
0
0
0
0
0
1
0
1
2
3
2
0
2
0
2
1
0
1
2
3
4
2
0
2
4
1
3
3
0
3
1
4
2
4
0
4
3
2
1
Tabla 3.4. Multiplicación módulo-5.
×
0
1
2
3
4
5
3
0
3
2
1
Tabla 3.5. Multiplicación módulo-4.
0
0
0
0
0
0
0
1
0
1
2
3
4
5
2
0
2
4
0
2
4
3
0
3
0
3
0
3
4
0
4
2
0
4
2
5
0
5
4
3
2
1
Tabla 3.6. Multiplicación módulo-6.
Como se puede observar, la propiedad de divisores cero sólo se presenta en las tablas de multiplicación
mod-4 y mod-6 (m no primo), inclusive en estas mismas tablas se pueden detectar (con letra cursiva)
productos del mismo valor provenientes de elementos de una misma columna o fila, por ejemplo:
(2 x 1) mod 4 = 2
(3 x 1) mod 6 = 3;
y
(2 x 3) mod 4 = 2;
(3 x 3) mod 6 = 3
y
o
(3 x 5) mod 6 = 3
Los presentes casos, por no provenir de un número primo, propician que los productos entre diferentes
elementos se repitan, pero lo más critico es que a la hora de calcular sus inversos multiplicativos,
dichos elementos no lo tendrán, por lo que no se podrá realizar la división entre algunos de ellos; por lo
anterior se citan los siguientes teoremas.
Teorema T3.2. Zm es un campo sí y sólo sí m es primo.
Para la demostración de este teorema, primeramente se comprobará uno que hace referencia
directamente a los enteros módulo-m, y después en su oportunidad se abordará lo que corresponda en el
apartado de campos.
Teorema T3.3. En Zm todos los elementos distintos de cero tienen un inverso multiplicativo sí y sólo
sí m es primo.
Para su demostración se optará por la negación de la hipótesis. Es decir, si m no es primo entonces no
todos los elementos de Zm tienen inverso.
23
Si m no es primo significa que es divisible entre algún número distinto de 1 y de m mismo. Significa
que m = a • b con a y b enteros distintos de cero y menores a m. Pero entonces a, b Є Zm y como el
producto de ellos es m por lo tanto a • b = 0 en Zm.
Ahora por otra parte, si a tuviera inverso a-1 entonces se tendría:
b = a-1 • (a • b) = a-1 • 0 = 0
Pero se había establecido que b era distinto de cero, así que esto es una contradicción. Por lo tanto a no
tiene inverso, con lo cual existe un elemento en Zm sin inverso multiplicativo.
Otra manera de demostrar lo anterior, es establecer una hipótesis donde ahora m sea primo, y se deberá
deducir que todos los elementos de Zm tienen inverso.
Sea a un elemento cualquiera de Zm. Considerando por el momento que todos los productos de la forma
a • b donde b Є Zm. Si hubiera un par de elementos b, b’ Є Zm distintos entre sí pero que dieran el mismo
producto al multiplicar por a, se tendría que b ≠ b’ y a • b = a • b’, es decir:
(a • b) ≡ c mod-m
(a • b’) ≡ c mod-m
y
Por lo consiguiente, al dividir a • b entre m se tiene el mismo residuo del que resulta de dividir a • b’
entre m, es decir:
ab = km + c
ab’ = k’m + c
Si el residuo es el mismo y el divisor también, sólo basta con recordar un momento el algoritmo de la
división para implicar que también los cocientes son los mismos. Esto es:
k = k’
Entonces b debe ser también igual a b’ lo que contradice la hipótesis inicial. Así que no pueden haber
dos productos iguales (como se pudo observar en los ejemplos anteriores de las tablas de multiplicación
con m no primo, los cuales tenían productos iguales), ya que para todo b Є Zm el producto de a • b es un
elemento distinto de Zm.
Por lo que en total hay m productos distintos, todos ellos en Zm, entonces el conjunto de todos los
posibles productos es exactamente todo Zm y debe haber algún producto que sea igual a 1, (esto
también se pudo comprobar en las tablas de multiplicación módulo-m con m primo). Finalmente, existe
algún b Є Zm tal que a • b = 1, luego a, un elemento cualquiera de Zm tiene inverso.
De hecho en un conjunto Zm un elemento a tiene inverso multiplicativo si a es primo relativo de m.
Esto es más global de lo que se acaba de demostrar, porque si a es primo entonces cualquier elemento
en Zm resultará primo relativo de m, así que todos los elementos de Zm tendrán inverso. Esta
generalización se comentará en el siguiente apartado relativo a los campos de Galois.
24
3.4 Campo
Un campo es un conjunto de elementos que pueden ser operados de acuerdo a reglas que satisfacen
ciertas propiedades, que se han mencionado brevemente al inicio del presente capítulo. Como ejemplo
de primera mano podemos mencionar al conjunto ordinario de todas las fracciones formadas a partir de
los enteros, junto con las operaciones usuales de suma y multiplicación, es conocido como el campo de
los números racionales.
Los principios de los campos tienen muchas aplicaciones. La ingeniería eléctrica y la de electrónica y
comunicaciones usan el campo de los números complejos para estudiar los circuitos eléctricos,
fenómenos eléctricos y magnéticos. A su vez, la teoría de la codificación que es usada en las
telecomunicaciones, los campos son herramientas para reducir los errores que surgen de la transmisión
de información sobre medios como el par de hilos de cobre (línea telefónica), el cable coaxial, enlaces
de fibra óptica y enlaces de radio frecuencia en microondas (satélite y celular).
Definición de campo
Como preámbulo, se puede decir que un campo es un anillo conmutativo con elemento unitario
(identidad multiplicativa) en el cual cada elemento no cero tiene un inverso multiplicativo.
Definición:
Un campo F es un conjunto que tiene dos operaciones definidas en este, llamadas
adición y multiplicación, tales que satisfacen las siguientes condiciones:
1. F forma un grupo conmutativo bajo la adición. El elemento identidad con respecto a la
adición es llamado elemento cero o la identidad aditiva de F, y se denota por el “0”.
2. El conjunto de elementos no cero en F forman un grupo conmutativo bajo la
multiplicación. El elemento identidad con respecto a la multiplicación es llamado
elemento unidad o identidad multiplicativa de F, y se denota por el “1”.
3. La multiplicación es distributiva bajo la adición. a
•
(b + c) = a • b + a • c.
A partir de la introducción a estas estructuras básicas del álgebra moderna, es inmediato comprender
que cada elemento a de un campo tiene un inverso aditivo –a tal que a + (–a) = (–a) + a = 0. Además
se puede observar que cada elemento no cero a de un campo tiene un inverso multiplicativo a-1 tal que
a • a-1 = a-1 • a = 1.
El número total de elementos en un campo es llamado el orden del campo. Un campo puede contener
un infinito o finito número de elementos. Si el orden de un campo es finito, el campo es llamado un
campo finito. Y son estos campos los que interesan para el contexto de la teoría de codificación. Los
campos finitos también son llamados campos de Galois en honor al matemático Francés E. Galois,
para el cual se ha anexado una reseña de su interesante y joven vida al final de la presente tesis.
Un campo de Galois de orden q es denotado por GF(q), o por Fq
25
En ejemplo de lo anterior son las siguientes tablas, que definen el campo de Galois de orden 7 bajo
módulo-7 en suma y multiplicación:
–a +
0
1
2
3
4
5
0
0
0
1
2
3
4
5
6
1
1
2
3
4
5
6
5
2
2
3
4
5
6
0
4
3
3
4
5
6
0
1
3
4
4
5
6
0
1
2
2
5
5
6
0
1
2
3
1
6
6
0
1
2
3
4
Tabla 3.7. Suma Módulo-7 y sus inversos.
inversos.
a-1
1
4
5
2
3
6
Tabla
6
6
0
1
2
3
4
5
×
0
1
2
3
4
5
6
3.8.
0
1
2
0
0
0
0
1
2
0
2
4
0
3
6
0
4
1
0
5
3
0
6
5
Multiplicación
3
4
0
0
3
4
6
1
2
5
5
2
1
6
4
3
Módulo-7
5
0
5
3
1
6
4
2
6
0
6
5
4
3
2
1
y sus
Asumiendo que p = 7, la tablas 3.7 y 3.8 muestra al conjunto de enteros {0, 1, 2, 3, 4, 5, 6} el cual
conforma un campo de 7 elementos, denotado por GF(7), bajo las operaciones de adición y
multiplicación. Además se puede observar que la tabla 3.7 también se usa para la substracción, ya que
se anexan los inversos aditivos de cada elemento a. Por ejemplo, si se desea restar 6 de 3,
primeramente se localiza el inverso aditivo de 6 el cual es el 1, posteriormente se suma 1 al 3 para
obtener el resultado [3 – 6 = 3 + ( – 6 ) = 3 + 1 = 4]. Para la división podemos proceder de una forma
similar pero con la tabla 3.8. Ahora si se desea dividir 3 entre 2, primero se debe encontrar el inverso
multiplicativo del 2 que es 4, y entonces se multiplica 3 por 4 para tener el resultado [3 ÷ 2 = 3 • ( 2–1 )
= 3 • 4 = 5].
Con base en el ejemplo anterior, se puede deducir una propiedad inconfundible para asegurar la
conformación de un campo, y es que q debe ser un número primo; esto anteriormente se enunció en el
teorema T3.2, y que junto con el teorema T3.3 se demostró que en Zm todos los elementos distintos de
cero tienen un inverso multiplicativo sí y sólo sí m es primo.
Característica de un campo
Para continuar con la trascendencia de los números primos en los campos se tiene el siguiente análisis.
Considerando un campo finito GF(q) = {0, 1, . . . , q-1}. Ahí existe un λ que es el entero positivo más
pequeño tal que
λ
∑1 = 0
i =1
donde λ es llamado la característica del campo.
Teorema T3.4. La característica λ de un campo finito es un entero primo.
Para demostrar el anterior teorema, se supondrá que λ no es un primo, entonces existen dos enteros
positivos 0 < m, n > λ tales que λ = m • n y
26
λ
m
n
i =1
i =1
i =1
∑ 1 = ∑ 1 • ∑ 1 =0
m
Lo anterior implica también que
∑1 = 0
i =1
n
o que
∑1 = 0
i =1
y
λ no es el entero positivo
λ
más pequeño, tal que
∑1 = 0 . Esto contradice la definición de la característica de un campo.
i =1
Por lo consiguiente λ es primo.
Orden de un elemento de campo
Considerando un elemento a no cero de un campo finito GF(q). Existe un entero positivo más pequeño
n tal que an = 1 y an = a • a . . . (n veces). Donde n es llamado el orden del elemento de campo a.
Teorema T4.5. Si a es un elemento no cero de GF(q), aq-1 = 1.
Para justificar lo anterior se asume que a1, a2, . . . , aq-1 son elementos no cero de GF(q). El conjunto
de todos los elementos no cero de GF(q) forma un grupo conmutativo G = {a1, a2, . . . , aq-1} bajo la
multiplicación módulo-q. Se podrá observar claramente que G = {a1, a2, . . . , aq-1} = {a • a1, a • a2, . . .
, a • aq-1}, donde a es un elemento no cero de GF(q). También, a1 • a2 . . . • aq-1 = (a • a1) • (a • a2) . . .
(a • aq-1) = aq-1 • ( a1 • a2 . . . • aq-1) ≠ 0. Por lo tanto aq-1 = 1.
Elemento primitivo de un campo
Teorema T3.6. Si n es el orden de un elemento no cero de GF(q), q – 1 es divisible entre n.
Demostrando lo anterior, se supondrá que q – 1 es no divisible entre n. Ahora, dividiendo q – 1 entre n,
se tiene que q – 1 = q’n + r, donde q’ es el cociente, r es el residuo y 0 < r < n. Además:
a q −1 = a q 'n+ r = (a n ) q ' ⋅ a r
A partir de que aq-1 = 1 y an = 1, se deberá tener que ar = 1 y r es el orden del elemento a. Lo anterior
es imposible a partir de que 0 < r < n ya que se contradice la definición del orden de un elemento de
campo, y donde n es el entero positivo más pequeño tal que an = 1. Por consiguiente n debe dividir a
q – 1, (q – 1 es divisible entre n).
A partir de lo anterior, se puede analizar una propiedad interesante de un campo finito, (ésta a su vez da
lugar a otra característica propia de los polinomios con coeficientes en campos finitos que después se
abordarán), la cual se conoce como elemento primitivo.
27
Para un campo finito GF(q), un elemento no cero a es llamado elemento primitivo de GF(q) si el orden
de a es q – 1. Por lo tanto, se puede decir que las potencias de un elemento primitivo generarán todos
los elementos no cero de GF(q). Además, cada campo finito GF(q) contiene al menos un elemento
primitivo.
Para efectos de resumir lo anterior, se muestra el siguiente ejemplo.
La característica del campo GF(5) = {0, 1, 2, 3, 4} es λ = 5.
Las potencias del elemento 2 en GF(5) son:
21 = 2;
22 = 4;
23 = 8 ≡ 3 mod-5;
24 = 16 ≡ 1 mod-5.
En el último caso se puede observar que el orden del elemento a = 2 es cuatro (n = 4), ya que se cumple
con la expresión an = 1 donde n = q – 1 = 5 – 1 = 4, por lo que 24 = 1.
Y como se puede comprobar, las potencias del elemento 2 generaron todos los elementos no cero (1, 2,
3 y 4) de GF(5), entonces se puede concluir que 2 es un elemento primitivo de GF(5).
Las potencia del elemento 3 en GF(5) son:
31 = 3;
32 = 9 ≡ 4 mod-5;
33 = 27 ≡ 2 mod-5;
34 = 81 ≡ 1 mod-5.
Se repite el análisis anterior, observando el caso de la última potencia del elemento a = 3, donde n = q –
1 = 5 – 1 = 4, resultando que 34 = 1. Entonces el orden del elemento 3 es cuatro (n = 4). Así que el
elemento 3 también es un elemento primitivo de GF(5).
Las potencia del elemento 4 en GF(5) son:
41 = 4;
42 = 16 ≡ 1 mod-5;
43 = 64 ≡ 4 mod-5;
44 = 256 ≡ 1 mod-5.
Para este elemento a = 4 se puede percibir que no se pueden generar todos los elementos no cero de
GF(5) con sus propias potencias. Ello se debe a que no cumple con la expresión an = 1 donde n = q – 1.
Se puede observar que tanto la potencia 2 como la 4 llegan al valor de 1, sin embargo el orden del
elemento 4 es 2 (n = 2), porque n debe ser el entero de valor más bajo, y por consiguiente 5 – 1 ≠ 2
(n ≠ q – 1), lo que lleva a concluir que el elemento 4 de GF(5) no es un elemento primitivo para dicho
campo.
Lo analizado hasta el momento, brinda las primeras bases matemáticas para entender el rol que juegan
las estructuras conocidas como campos de Galois dentro de los propios codificadores y
decodificadores (principalmente los cíclicos) de canal. Por lo que a continuación se abordarán los
polinomios que estructurarán a la codificación de canal.
28
3.5 Introducción a la extensión de un campo
Para cualquier primo p y un entero positivo m > 1, es posible extender el campo GF(p) a un campo de
pm elementos el cual es llamado una extensión de campo de GF(p) y se denota como GF(pm).
En lo particular para la teoría de codificación de canal, los códigos para control de errores son a
menudo estructurados con elementos provenientes de GF(p) o GF(pm). De hecho, en lo concerniente
a esta tesis sólo se abordará la construcción de códigos con símbolos o elementos provenientes de los
campos GF(2) o de GF(2m). Antes de proceder con la construcción de una extensión de campo
GF(2m), será necesario definir y analizar primeramente los polinomios sobre el campo GF(2).
Polinomios sobre GF(2)
Sea GF(p) un campo de Galois, y
f ( x) = f m x m + f m−1 x m−1 + K + f1 x + f 0
con grado m en la incógnita x, es denominado como un polinomio de x sobre un campo GF(p), donde
los coeficientes f0, f1, . . . , fm ∈ GF(p).
Con base en lo anterior se tienen la siguiente definición. Un polinomio f(x) de grado cualesquiera con
coeficientes en GF(2) es llamado un polinomio irreducible si f(x) no es divisible por cualquier otro
polinomio de grado mayor a cero pero menor al grado de f(x).
Un ejemplo de esto es presentar el caso del polinomio x4 + x + 1 sobre GF(2), el cual no es divisible
por cualquier polinomio en GF(2) de grado mayor a cero pero menor a 4. La tabla 3.9 muestra todos
los casos de dicha divisibilidad.
f(x)
x +x+1
x4 + x + 1
x4 + x + 1
x4 + x + 1
x4 + x + 1
x4 + x + 1
x4 + x + 1
x4 + x + 1
x4 + x + 1
x4 + x + 1
x4 + x + 1
x4 + x + 1
x4 + x + 1
x4 + x + 1
4
g(x)
x
x+1
x2
x2 + 1
x2 + x
x2 + x + 1
x3
x3 + 1
x3 + x
x3 + x2
x3 + x + 1
x3 + x2 + 1
x3 + x2 + x
x3 + x2 + x + 1
f(x) / g(x)
x +1
x3 + x2 + 1
x2
x2 + 1
x2 + x + 1
x2 + x
x
x
x
x+1
x
x+1
x+1
x+1
3
Residuo
1
1
x+1
x
1
1
x+1
1
x2 + x + 1
x2 + x + 1
x2 + 1
x2
1
x
Tabla 3.9. Cocientes y residuos del polinomio x4 + x + 1 sobre GF(2).
29
Por lo tanto se dice que x4 + x + 1 es un polinomio irreducible sobre GF(2).
Para el siguiente caso del polinomio x2 + 1 sobre GF(2), este es divisible por el polinomio x + 1
también sobre GF(2) y que es de grado uno (mayor de grado cero pero menor de grado 2). Entonces se
dice que x2 + 1 no es un polinomio irreducible sobre GF(2).
3.6 Polinomio primitivo
Para poder relacionar los conceptos de polinomio irreducible y el de polinomio primitivo, se puede
mencionar, que cualquier polinomio irreducible sobre GF(2) de grado m siempre divide exactamente a
la expresión:
x2
m
−1
+1
Un ejemplos para comprobar lo anterior es el caso del polinomio irreducible x3 + x + 1, que tiene
grado m = 3, y donde
x2
m
−1
+ 1 = x2
3
−1
+ 1 = x8 −1 + 1 = x 7 + 1
es divisible entre dicho polinomio x3 + x + 1, como se muestra a continuación:
x7 + 1
= x4 + x2 + x + 1
3
x + x +1
res = 0
Con base en lo anterior, se define que un polinomio irreducible
p( x) = pm x m + pm−1 x m−1 + K + p1 x + p0
de grado m con coeficientes p0, p1, . . . , pm provenientes de GF(2) es llamado polinomio primitivo si
el entero positivo más pequeño n por el cual p(x) divide exactamente a xn+1 es de valor igual a
2m-1.
Un ejemplo de lo anterior se tiene con el polinomio irreducible x4 + x + 1 sobre GF(2), el cual divide
exactamente a x15 + 1, donde 15 = 24 – 1. Por otra parte, el polinomio irreducible x4 + x3 + x2 + x + 1
sobre GF(2) divide exactamente también a x15 + 1 donde 15 = 24 – 1, pero también dicho polinomio
divide exactamente a x5 + 1 y ahora 5 ≠ 24 – 1. Por lo que se puede deducir, que el polinomio
irreducible x4 + x + 1 es un polinomio primitivo, mientras que el polinomio irreducible x4 + x3 + x2 + x
+ 1 no es polinomio primitivo sobre GF(2). Lo anterior se resume en la tabla 10.
¿Es polinomio
primitivo?
x4 + x + 1
4
15
15
SI
4
3
2
x +x +x +x+1
4
5
15
NO
Tabla 3.10. Ejemplo de polinomios primitivos sobre GF(2).
Polinomio Irreducible
m
n
30
2m-1
Se puede observar que un polinomio primitivo sobre GF(2) es siempre irreducible, mientras que un
polinomio irreducible no siempre puede ser primitivo.
3.7 Construcción de la extensión de campo GF (2m) a partir de GF(2)
La elaboración de una extensión de campo GF(2m) a partir de GF(2) se encuentra basada en las raíces
primitivas de un polinomio primitivo p(x) de grado m con coeficientes provenientes de GF(2).
Tomando en cuenta un conjunto finito de elementos sobre los cuales una operación de multiplicación
“•” está definida, tal que dicho conjunto F = { 0, 1, α, α 2 , . . . , α j , . . . } y tendiendo que α j = α • α
• α • . . . • α (j veces), donde la expresión α • α • α • . . . • α es llamada la representación en potencias
del elemento α j en el conjunto F. Si el elemento α es una raíz del polinomio primitivo p(x) de grado
m sobre GF(2), entonces p(α) = 0.
A partir de que p(x) divide exactamente a
anterior), se tiene que:
x2
m
−1
x2
m
−1
+1
(como se pudo ejemplificar en el apartado
+ 1 = q ( x) p ( x )
Pero aplicando en función de la raíz α, se tiene que:
α2
Por consiguiente,
α2
m
−1
m
−1
+ 1 = q (α ) p (α ) = q (α ) ⋅ 0
≡ 1 bajo suma
módulo-2 y conjunto:
F = {0, 1, α , α 2 , . . . , α 2
m
−2
}
Se puede demostrar 1 que el conjunto de elementos no cero de F son cerrados (prop. cerradura) bajo la
multiplicación “•”, y que F es cerrado bajo la adición “+”. Por lo que se puede concluir que F es un
campo de Galois GF(2m) de 2m elementos. Las potencias de α generan todos los elementos no cero de
GF(2m) y α es un elemento primitivo.
A partir de que la extensión de campo GF(2m) está construida desde GF(2), por lo que GF(2) es
llamado el campo base de GF(2m). Este campo base es cerrado bajo la adición y multiplicación de
módulo-2. Por lo tanto, el subconjunto {0, 1} forma un sub-campo de GF(2m), [es decir, GF(2) es un
sub-campo de GF(2m) ].
Ahora asumiendo que
p ( x) = x m + pm−1 x m−1 + pm− 2 x m− 2 + K + p1 x + p0
de grado m con coeficientes p0, p1, . . . , pm-1 provenientes de GF(2). Si p(α) = 0, se tiene que
________
1
Demostración en la referencia Lin [4], pp 44-46.
31
0 = α m + pm−1α m−1 + pm−2α m−2 + K + p1α + p0
α m = pm−1α m−1 + p m−2α m−2 + K + p1α + p0
donde α m es expresado como un polinomio con coeficientes p0, p1, . . . , pm-1 provenientes de GF(2) y
pm−1α m−1 + pm−2α m−2 + K + p1α + p0
es llamado representación polinomial de los elementos α m.
Todo lo anterior lleva a poder representar los elementos no cero de F como potencias del elemento
primitivo α y como una combinación lineal de α 0, α 1, α 2 , . . . , α m-1.
La representación polinomial del elemento α i , con i = 0, 1, . . . , 2m – 2 , se expresa como
α i = am−1α m−1 + am−2α m−2 + K + a1α + a0
con coeficientes binarios. También dichos coeficientes se pueden representar por medio de un vector
[ a0 a1 . . . am-1].
Por otra parte, el elemento cero “0” en F puede ser representado por el polinomio cero o un vector fila
de puros ceros.
Ejemplificando lo anterior, sea α una raíz del polinomio primitivo p(x) = x4 + x + 1 sobre GF(2). La
representación en potencias de α4 es α • α • α • α y la representación polinomial es α + 1, ya
que aplicando p(x) en función de α se tiene que p(α) = 0, por lo tanto
p(α ) = 0 = α 4 + α + 1
α 4 = α +1
Con base en esta última igualdad, se pueden desarrollar las siguientes representaciones polinomiales de
α5 , α6 y α7 .
α 5 = α ⋅ α 4 = α (α + 1) = α 2 + α
α 6 = α ⋅ α 5 = α (α 2 + α ) = α 3 + α 2
α 7 = α ⋅ α 6 = α (α 3 + α 2 ) = α 4 + α 3 = (α + 1) + α 3 = α 3 + α + 1
Finalmente, la tabla 3.11 muestra las distintas representaciones de los elementos del campo de
extensión GF(24) generados por el polinomio primitivo p(x) = x4 + x + 1.
32
Representación en
Representación
Representación polinomial
potencias
binaria
0=
0
0 0 0 0
1=
1
1 0 0 0
0 1 0 0
α=
α
2
2
0 0 1 0
α =
α
3
3
0 0 0 1
α =
α
4
1 1 0 0
α =
1 + α
5
2
0 1 1 0
α =
α + α
6
2
3
0 0 1 1
α =
α + α
7
3
1 1 0 1
α =
1 +α
+ α
8
2
1 0 1 0
α =
1
+ α
9
3
0 1 0 1
α =
α
+ α
10
2
1 1 1 0
α =
1 +α + α
11
2
3
0 1 1 1
α =
α + α + α
12
2
3
1 1 1 1
α =
1 +α + α + α
13
2
3
1 0 1 1
α =
1
+ α + α
14
3
1 0 0 1
α =
1
+ α
4
Tabla 3.11. Representación de los elementos de GF(2 ) generados por p(x) = x4 + x + 1.
3.8 Propiedades básicas de un campo GF (2m)
El propósito de este apartado es el de abordar la definición de los polinomios mínimos, por lo que se
analizarán primero las raíces de los polinomios y sus conjugados para llegar a tal definición.
Como en el caso del algebra tradicional, donde un polinomio con coeficientes reales puede no tener
raíces en ese mismo campo pero si raíces provenientes de los complejos, así un polinomio con
coeficientes provenientes de GF(2) puede no tener raíces en ese mismo campo GF(2), sin embargo
tiene raíces contenidas en una extensión de campo GF(2m). Por ejemplo, el polinomio x4 + x3 + 1 el
cual es un polinomio irreducible de GF(2), y que tiene cuatro raíces provenientes de GF(24). Esto se
comprueba mediante la substitución de todos los elementos de GF(24), mostrados por la tabla 3.11,
dentro de x4 + x3 + 1, y llegando a localizar cuatro raíces que son α7, α11, α13, α14. Verificando para la
primera raíz se tiene:
(α 7 ) 4 + (α 7 ) 3 + 1 = α 28 + α 21 + 1 = (1 + α 2 + α 3 ) + (α 2 + α 3 ) + 1 = 0
Igualmente para las otras tres raíces se comprueba lo anterior, entonces se puede desarrollar la siguiente
expresión:
( X + α 7 )( X + α 11 )( X + α 13 )( X + α 14 )
con aplicación de los elementos de la tabla 3.11, se tiene que:
33
( X + α 7 )( X + α 11 )( X + α 13 )( X + α 14 ) = [ X 2 + (α 7 + α 11 ) X + α 18 ][ X 2 + (α 13 + α 14 ) X + α 27 ]
finalmente, desarrollando queda:
( X + α 7 )( X + α 11 )( X + α 13 )( X + α 14 ) = X 4 + X 3 + 1
Y que resulta ser el polinomio original.
Ahora, lo interesante es saber cuáles son los elementos de una extensión de campo GF(2m) que son
otras raíces de un polinomio dado f(x) a partir de uno de sus elemento β que es raíz unidad de f(x).
Para responder lo anterior, se enunciará el siguiente teorema 2:
T3.7. Sea f(x) un polinomio con coeficientes provenientes de GF(2), y suponiendo que β sea un
elemento de una extensión de campo GF(2m). Si β es una raíz de f(x), entonces para cualquier ≥ 0,
β2
l
es también una raíz de f(x).
β2
l
El elemento
es llamado “un conjugado de β ”; además, el anterior teorema menciona que si β [un
elemento de GF(2m)] es una raíz de un polinomio f(x) proveniente de GF(2), entonces todos los
conjugados distintos de β [elementos de GF(2m)] son también raíces de f(x).
Por ejemplo, el polinomio f(x) = x6 + x5 + x4 + x3 + 1 tiene a α4 [elemento de GF(24) dado por la tabla
3.11], como una de sus raíces. Comprobando lo anterior y recordando que α15 = 1, se tiene que:
f (α 4 ) = (α 4 ) 6 + (α 4 ) 5 + (α 4 ) 4 + (α 4 ) 3 + 1
= α 24 + α 20 + α 16 + α 12 + 1
= α 9 + α 5 + α + α 12 + 1
= (α + α 3 ) + (α + α 2 ) + α + (1 + α + α 2 + α 3 ) + 1
f (α 4 ) = 0
4
Y los conjugados de α , utilizando
1
(α 4 ) 2 = α 8
Si se desea tener valores para
β2
0
(α 4 ) 2 = α 4
l
, son:
2
(α 4 ) 2 = α 16 = α
mayores de 3, se comprobará que estos caerán en los anteriores
conjugados, por ejemplo para el caso de
= 4, se tiene que:
________
2
3
(α 4 ) 2 = α 32 = α 2
Demostración en la referencia Lin [4], pp 48.
34
4
(α 4 ) 2 = α 64 = α 4
lo cual resulta ser la propia raíz unidad α4.
Continuando con lo definido por el anterior teorema T3.7 y asumiendo que β sea un elemento no cero
dentro del campo GF(2m), se puede establecer que:
β
2 m −1
=1
si se agrega un “uno” en ambos miembros, se tiene:
β2
m
−1
+1 = 0
La anterior expresión implica que β es una raíz del polinomio.
x
2 m −1
+1
Ec. 3.0
Por lo tanto, cada elemento no cero de GF(2m) es una raíz de la ec. 3.0. Ahora, debido a que el grado
del anterior polinomio es 2m − 1, los 2m − 1 elementos no cero de GF(2m) forman todas las raíces de la
expresión de ec. 3.0.
Resumiendo lo anterior, se tiene el siguiente teorema:
T3.8. Los 2m − 1 elementos no cero de GF(2m) conforman todas las raíces de
x2
m
−1
+ 1.
Además, a partir de que el elemento “0” de GF(2m) es la raíz de x, el teorema T3.8 tiene el siguiente
corolario, que es el preámbulo a los polinomios mínimos.
m
m
C3.1. Los elementos de GF(2 ) conforman todas las raíces del polinomio
x2 + x .
Para probar brevemente el anterior corolario C3.1, se toma el caso de GF(24) conforme sus elementos
mostrados de la tabla 3.11. El polinomio analizado queda:
m
4
x 2 + x = x 2 + x = x16 + x
Para x = 0
016 + 0 = 0
Para x = 1
116 + 1 = 0
Para x = α
α 16 + α = α + α = 0
Para x = α2
(α 2 )16 + α 2 = α 32 + α 2 = α 2 + α 2 = 0
Para x = α3
(α 3 )16 + α 3 = α 48 + α 3 = α 3 + α 3 = 0
35
Y así, hasta el último elemento α14 serán raíces del polinomio x16 + x.
m
x2 + x , β
puede
Entonces, debido a que cualquier elemento β de GF(2 ) es una raíz del polinomio
m
ser raíz de un polinomio de GF(2) con grado menor a 2 . Y permitiendo que φ(x) sea el polinomio de
grado más pequeño sobre GF(2) tal que φ(β) = 0. Entonces dicho polinomio es llamado el polinomio
mínimo de β,
m
Por ejemplo, el polinomio mínimo del elemento “0” del campo GF(2m) es x, mientras que el polinomio
mínimo del elemento “1” es x + 1.
Ahora, para poder obtener el polinomio mínimo de β, para cada uno de estos elementos β, será
necesario mencionar algunos otros teoremas3 relacionados con dichos polinomios.
T3.9. El polinomio mínimo φ(x) de un elemento de campo β es un polinomio irreducible.
T3.10. Sea f(x) un polinomio sobre GF(2) y φ(x) un polinomio mínimo de β. Si β es una raíz de
f(x), entonces f(x) es divisible entre φ(x).
Retomando el corolario C3.1 y el teorema T3.10, se tiene el siguiente teorema:
T3.11.
El polinomio mínimo φ(x) de β proveniente del campo GF(2m) divide exactamente al
m
polinomio
x2 + x .
Este último teorema conlleva a que todas las raíces de φ(x) provengan del campo GF(2m).
T3.12. Sea f(x) un polinomio irreducible sobre GF(2), además sea β un elemento del campo GF(2m).
Y asumiendo que φ(x) sea un polinomio mínimo de β. Si f(β) = 0, entonces φ(x) = f(x).
En otras palabras, el teorema T3.12 dice que si un polinomio irreducible tiene a β como una raíz, éste
será el polinomio mínimo φ(x) de β. Inclusive, recordando lo expuesto por el teorema T3.7, donde β y
1
sus conjugados
2
3
β 2 , β 2 , β 2 , K, β 2
l
son también raíces de φ(x). Y si se asume que e sea el
1
e
entero más pequeño tal que
β2 = β
. Entonces
distintos conjugados de β. Además de que
m
β2 = β
3
e −1
son todos los
con e ≤ m , (ya que m es divisible entre e).
________
3
2
β 2 , β 2 , β 2 , K, β 2
Demostración en la referencia Lin [4], pp 49-50.
36
T3.13. Sea β un elemento del campo GF(2m) y asumiendo que e sea el entero más pequeño no
e
negativo tal que
β2 = β
. Entonces:
e−1
f ( x) = ∏ ( x + β 2 )
i
i =0
y será un polinomio irreducible sobre el campo GF(2).
Finalmente combinando los teoremas T3.12 y T.3.13, resultará el siguiente teorema:
T3.14. Sea φ(x) el polinomio mínimo de un elemento β proveniente del campo GF(2m). Y sea e el
e
entero más pequeño tal que
β2 = β
. Entonces:
e −1
φ ( x) = ∏ ( x + β 2 )
i
i =0
El resultado al que llega el teorema T3.14, es básico para generar el polinomio mínimo de un elemento
β proveniente de GF(2m), a partir de él mismo y de sus conjugados. A continuación se ejemplifica todo
lo anterior.
Considerando la extensión de campo GF(24) que se muestra en la tabla 3.11, y sea el caso de β = α3,
entonces sus conjugados son:
aplicando
β2
0
β 1 = (α 3 ) 2 = α 3
l
1
β 2 = (α 3 ) 2 = α 6
si tomamos el caso de
2
3
3
β 2 = (α 3 ) 2 = α 24 = α 9
2
β 2 = (α 3 ) 2 = α 12
= 4,
4
4
β 2 = (α 3 ) 2 = α 48 = α 3
se puede observar que resulta un elemento repetido, por lo tanto sólo hay 4 raíces: α3, α6, α12, y α9.
Por lo tanto el polinomio mínimo de β = α3 es:
φ ( x) = ( x + α 3 )( x + α 6 )( x + α 12 )( x + α 9 )
= [( x + α 3 )( x + α 6 )][( x + α 12 )( x + α 9 )]
= [ x 2 + (α 3 + α 6 ) x + α 9 ][ x 2 + (α 12 + α 9 ) x + α 21 ]
después de simplificar, queda:
37
φ ( x) = x 4 + x 3 + x 2 + x + 1
Sólo habrá que recordar que el polinomio φ(x) obtenido es un polinomio irreducible con coeficientes
en el campo GF(2).
La tabla 3.12 resume todos los casos de polinomios mínimos correspondientes a su conjunto de raíces
conjugadas que conforman los elementos del campo GF(24) generados por el polinomio primitivo p(x)
= x4 + x + 1.
Raíces conjugadas
Polinomio mínimo
0
x
1
x+1
2
4
8
α,α ,α ,α
x4 + x + 1
α3 , α6 , α9, α12
x4 + x3 + x2 + x + 1
α5, α10
x2 + x + 1
α7 , α11 , α13, α14
x4 + x3 + 1
Tabla 3.12. Polinomios mínimos de los elementos de GF(24) generados por p(x) = x4 + x + 1.
Solamente hay que resaltar de la tabla 3.12, que el grado del polinomio mínimo de cualquier elemento
proveniente de GF(2m) divide exactamente a m, (en este caso m = 4).
Se presentan a continuación dos tablas más para los casos de m = 3 y m =5, que serán utilizadas más
adelante en el presente capítulo.
Raíces conjugadas
Polinomio mínimo
0
x
1
x+1
2
4
α,α ,α
x3 + x + 1
α3 , α5 , α6
x3 + x2 + 1
Tabla 3.13. Polinomios mínimos de los elementos de GF(23) generados por p(x) = x3 + x + 1.
Raíces conjugadas
Polinomio mínimo
0
x
1
x+1
2
4
8
16
α,α ,α ,α ,α
x5 + x2 + 1
α3 , α6 , α12, α17, α24
x5 + x4 + x3 + x2 + 1
α5 , α9, α10, α18, α20
x5 + x4 + x2 + x + 1
α7 , α14, α19, α25, α28
x5 + x3 + x2 + x + 1
α11 , α13, α21, α22, α26
x5 + x4 + x3 + x + 1
α15 , α23, α27, α29, α30
x5 + x3 + 1
Tabla 3.14. Polinomios mínimos de los elementos de GF(25) generados por p(x) = x5 + x2 + 1.
38
3.9 Introducción a los códigos BCH
Los códigos BCH constituyen una de las clases más importantes y poderosas de los codificadores de
bloque, principalmente como códigos cíclicos correctores de errores aleatorios múltiples. Estos códigos
fueron desarrollados conjuntamente por Bose y Ray-Chaudhuri en 1960 e independientemente por
Hocquenghem en 1959; además de que posteriormente en 1960 Peterson diseñó el primero de los
algoritmo para la decodificación BCH.
Estos códigos son relativamente sencillos de implementar, tanto para codificar como para decodificar,
ya que fundamentalmente esta última hace uso de la decodificación algebraica. La decodificación
algebraica es realizable porque existe una considerable estructura matemática en dichos códigos, que
hace posible el desarrollo de algoritmos para la resolución de la ecuación del síndrome.
Los codificadores BCH son códigos de corrección de t errores en el sentido de que pueden detectar y
corregir hasta t errores aleatorios por palabra de código. Además de que es posible describir los códigos
Hamming (códigos correctores de un solo error) como códigos BCH, esto hace resaltar lo genérico que
pueden ser los códigos BCH.
3.10 Descripción general del caso binario
Para cualquier entero positivo m ≥ 3 y con t ≤ 2m-1, existe un código BCH binario con los siguientes
parámetros:
Longitud del bloque
n = 2m - 1
Número de dígitos de paridad
n – k ≤ mt
Distancia mínima
dmin ≥ 2t + 1
Se puede observar que dicho código es capaz de corregir cualquier combinación de t o menos errores
en un bloque de n = 2m – 1 dígitos binarios. En otras palabras se habla de un “código binario BCH
corrector de t errores”.
Inclusive como los códigos BCH son códigos cíclicos, estos son también definidos por un polinomio
generador g(x), el cual para su caso, se encuentra especificado en términos de sus raíces provenientes
del campo GF(2m).
39
Asumiendo que α es un elemento primitivo de GF(2m). El polinomio generador g(x) de estos códigos
BCH con longitud del bloque código n = 2m – 1 es el polinomio de más bajo grado sobre el campo
GF(2) el cual tiene:
α , α 2 , α 3 ,. . . , α 2t
como sus raíces [ g( α i ) = 0 para 1< i < 2t ].
Retomando algunos teoremas sobre las propiedades de las extensiones de campo GF(2m) y la parte de
los polinomios mínimos; se asumirá que Mi(x) sea el polinomio mínimo de α i. Entonces g(x) debe ser
el m.c.m. (mínimo común múltiplo) de M1(x), M2(x), . . . , M2t(x), quedando g(x) como:
g ( x) = m.c.m.{M 1 ( x), M 2 ( x), . . . , M 2t ( x)}
Lo anterior nos brinda un preámbulo para establecer los términos generales del diseño para un
codificador BCH.
3.11 Lineamientos de diseño para los codificadores BCH
Un código BCH sobre GF(2) de longitud n capaz de corregir al menos t errores, se encuentra
especificado por:
1. Determinado valor de m más pequeño tal que GF(qm) tiene una n-ésima raíz primitiva de unidad
β. Lo que designará a n como n = qm − 1 (primitivo)
2. Determinado entero no negativo b. Generalmente seleccionado con b = 1 (sentido estricto).
3. Listado de las 2t potencia consecutivas de β:
β b , β b+1 , . . . , β b+ 2t −1
Determinando el polinomio mínimo con respecto a GF(q) de cada una de estas potencia de β.
4. El polinomio generador g(x) es el mínimo común múltiplo (m.c.m.) de esos polinomios
mínimos.
Por otra parte, se puede denominar a un código BCH como un código cíclico ( n, n − grado [g(x)] ).
Debido a que el polinomio generador es construido a partir de polinomios mínimos respecto a GF(q),
g(x) tiene coeficientes en GF(q), ello también da lugar a que el código esté en GF(q) (polinomio de las
palabras código resultantes).
40
Para profundizar en esto último, se puede mencionar que existen dos campos involucrados en la
construcción de los códigos BCH, conocidos como el “campo menor” y el “campo mayor”. El campo
menor GF(q) es donde el polinomio generador tiene sus coeficientes y también es el campo donde los
elementos de las palabras código se encuentran. Por su parte el campo mayor GF(qm), es el campo
donde el polinomio generador tiene sus raíces. Y para efectos de pura codificación es suficiente trabajar
sólo con el campo menor, mientras que para la decodificación se requiere del campo mayor.
Ejemplificando lo anterior; se toma m = 5, por lo que n = 31 = 25 – 1, además se asumirá que β es una
raíz del polinomio primitivo x5 + x2 + 1 en GF(25) (q = 2 ⇒ binario). Lo anterior resultará en la
q m −1
=1
construcción de un código primitivo (ya que la raíz β tiene su orden n = 31 que cumple con β
n
31
o β = β = 1 siendo β primitivo). Se designa b = 1 (sentido estricto), además con la condición de
que sea va a construir un código corrector de un error t = 1.
Las 2t potencias consecutivas de β ( t = 1; 2•1 = 2 potencias) son β, β 2. El polinomio mínimo de β y
β 2 con respecto a GF(2) es el mismo ya que las dos raíces son conjugadas, y dicho polinomio se denota
como M1(x). A partir de que β es primitivo, se tiene que M1(x) = x5 + x2 + 1, según la tabla 3.15; y
como sólo existe un polinomio mínimo de las dos raíces, se entiende que g(x) = mcm[ M1(x) ],
entonces:
g ( x) = M 1 ( x) = x 5 + x 2 + 1
Y como el grado de g(x) es 5, este código se denomina (31, 26). Además se observar que de hecho se
trata de un código Hamming.
Raíces conjugadas
Polinomio Mínimo
0
M_(x) = x
1
M0(x) = x + 1
α, α 2, α 4, α 8, α 16
M1(x) = x5 + x2 + 1
α 3, α 6, α 12, α 17, α 24
M3(x) = x5 + x4 + x3 + x2 + 1
α 5, α 9, α 10, α 18, α 20
M5(x) = x5 + x4 + x2 + x + 1
α 7, α 14, α 19, α 25, α 28
M7(x) = x5 + x3 + x2 + x + 1
α 11, α 13, α 21, α 22, α 26
M11(x) = x5 + x4 + x3 + x + 1
α 15, α 23, α 27, α 29, α 30
M15(x) = x5 + x3 + 1
Tabla 3.15. Lista de polinomios mínimos de los elementos en GF(25) generada
con respecto a GF(2) del polinomio primitivo p(x) = x5 + x2 + 1.
41
Otros ejemplos para seguir identificando los parámetros claves involucrados en la construcción de un
código BCH, son los siguientes:
Ejem. 1) Asumiendo que m = 5 resulta que n = 31, pero ahora t = 2 (corregir 2 errores), con b = 1, y β
siendo un elemento primitivo y raíz del polinomio x5 + x2 + 1 en GF(25). Las respectivas 2t = 4
potencia consecutivas de β serán { β , β 2, β 3, β 4 }. Estas raíces conjugadas se pueden dividir en dos
grupos de acuerdo a la tabla 1 anterior { β , β 2, β 4 } y { β 3 }, siendo sus polinomios mínimos los
siguientes:
M 1 ( x) = x 5 + x 2 + 1
M 3 ( x) = x 5 + x 4 + x 3 + x 2 + 1
por lo tanto g(x) = mcm[ M1(x), M3(x) ] = ( x5 + x2 + 1 ) ( x5 + x4 + x3 + x2 + 1 ), entonces
g ( x) = x10 + x 9 + x 8 + x 6 + x 5 + x 3 + 1
La denominación del presente código binario sería (31, 31 – 10) = (31, 21).
Ejem. 2) Retomando todos los anteriores valores del ejemplo 1, salvo que ahora t = 3 para tener la
capacidad de corregir 3 errores en la palabra código. Las respectivas 2t = 6 potencia consecutivas de β
serán { β , β 2, β 3, β 4, β 5, β 6 }. Estas raíces conjugadas se puedes dividir en tres grupos { β , β 2, β 4 },
{ β 3, β 6 } y { β 5 }, siendo sus polinomios mínimos los siguientes (de acuerdo a la tabla 3.15):
M 1 ( x) = x 5 + x 2 + 1
M 3 ( x) = x 5 + x 4 + x 3 + x 2 + 1 M 5 ( x) = x 5 + x 4 + x 2 + x + 1
Y calculando el m.c.m. de estos polinomios mínimos de tales raíces conjugadas, el polinomio
generador resulta ser:
g ( x) = M 1 ( x) M 3 ( x)M 5 ( x) = ( x 5 + x 2 + 1)( x 5 + x 4 + x 3 + x 2 + 1)( x 5 + x 4 + x 2 + x + 1)
g ( x) = x15 + x11 + x10 + x 9 + x 8 + x 7 + x 5 + x 3 + x 2 + x + 1
Por su parte, la denominación de este código binario será (31, 31 – 15) = (31, 16).
Se podrá observar que al ir aumentando la capacidad de corrección se incrementa la cantidad de dígitos
de paridad del código, ya que va aumentando el grado del polinomio generador.
Finalmente, lo que resta es obtener las palabras código a partir del polinomio generador y las posibles
palabras dato, con base en la siguiente expresión:
c( x) = d ( x) ⋅ g ( x)
Esta última ecuación se utiliza para la codificación de tipo no sistemática, donde d(x) es el polinomio
de la palabra dato y c(x) es el polinomio de la palabra código.
42
Sin embargo, la codificación más utilizada es la de tipo sistemático, la cual se caracteriza por contener
tal cual la palabra dato d(x) en la propia palabra código c(x), facilitando así el proceso de la
decodificación en el receptor, debido a que sólo hay que ubicar el segmento donde inicia la palabra
dato dentro de la palabra recibida r(x) previamente ya corregida. Por lo cual, estos codificadores son
los que se abordarán en la presente tesis.
La siguiente expresión determina el cálculo de la palabra código para un codificador cíclico sistemático
c ( x) = x n − k d ( x ) + b ( x )
y donde b(x) se obtiene conforme a la siguiente expresión:
 x n − k d ( x) 

b(x) = Res 
g
(
x
)


además donde n y k son las longitudes de las palabras código y dato respectivamente.
Para entender esta codificación, se muestra brevemente el siguiente ejemplo para el caso de un
codificador (7,4) con g(x) = 1 + x + x3 y con un vector dato d = 1 0 1 0, siendo su palabra código la
siguiente:
c(x) = ( x7-4 ) d(x) + b(x) = ( x3 ) d(x) + b(x)
d(x) = 1 + x2
b(x) = Res [( x7-4 ) d(x) / g(x) ] = Res [ x3 ( 1 + x2 ) / ( 1 + x + x3 )]
= Res [( x3 + x5 ) / ( 1 + x + x3 )]
c(x) = ( x3 ) (1 + x2 ) + x2 = x3 + x5 + x2
= x5 + x3 + x2
y en formato binario queda:
c=0011010
Finalmente se podrá observar, que los cuatro dígitos finales de izquierda a derecha corresponden a la
palabra binaria del dato d = 1 0 1 0 .
43
Las tablas 3.16 y 3.17 muestran los polinomios mínimos para los casos de m = 3 y m = 4.
Raíces conjugadas
Polinomio Mínimo
0
M_(x) = x
1
M0(x) = x + 1
α, α 2, α 4
M1(x) = x3 + x + 1
α 3, α 6, α 5
M3(x) = x3 + x2 + 1
Tabla 3.16. Lista de polinomios mínimos de los elementos en GF(23) generada
con respecto a GF(2) del polinomio primitivo p(x) = x3 + x + 1.
Raíces conjugadas
Polinomio Mínimo
0
M_(x) = x
1
M0(x) = x + 1
α, α 2, α 4, α 8
α 3, α 6, α 9, α 12
M1(x) = x4 + x + 1
M3(x) = x4 + x3 + x2 + x + 1
α 5, α 10
M5(x) = x2 + x + 1
α 7, α 11, α 13, α 14
M7(x) = x4 + x3 + 1
Tabla 3.17. Lista de polinomios mínimos de los elementos en GF(24) generada
con respecto a GF(2) del polinomio primitivo p(x) = x4 + x + 1.
44
3.12 Lineamientos generales para el proceso de decodificación BCH
La decodificación BCH algebraica tiene los siguientes pasos:
1. Cálculo del síndrome S = {S1, S2, . . . , S2t}. Por medio del polinomio de la palabra recibida r(x).
2. Determinación de un polinomio localizador de error Λ(x). Ello con el uso de los componentes
del síndrome S1, S2, . . . , S2t.
Dicho polinomio es nombrado así, ya que sus raíces proporcionan un indicativo de dónde se
encuentran los errores a corregir. Esta etapa tiene varios métodos (tanto para BCH como RS)
para encontrar dicho polinomio localizador de error:
Algoritmo de Peterson para códigos BCH
Algoritmo de Berlekamp-Massey para códigos BCH
Algoritmo Euclidiano, inclusive
Técnica basada en transformada de Fourier para campos de Galois
El algoritmo que se abordará en la presente tesis es el de Berlekamp-Massey.
3. Buscar las raíces del polinomio localizador de error Λ(x). Esto usualmente se realiza utilizando
la denominada “búsqueda de Chien”, la cual consiste en una búsqueda exhaustiva de raíces con
todos los elementos del campo.
4. Determinar el polinomio patrón del error e(x), el cual está conformado por los denominados
localizadores de error {Xi}. Estos últimos son los recíprocos de las raíces de Λ(x).
5. Corregir el error mediante la suma del polinomio patrón del error e(x) con el polinomio de la
palabra recibida r(x), y así obtener la palabra de código c(x) enviada originalmente.
Es importante aclarar que para efectos de la presente tesis se analizará la construcción de codificadores
y decodificadores BCH binarios, primitivos y de sentido estricto (b = 1).
Matriz verificadora de paridad
Al analizar la etapa de decodificación de un codificador de canal, es básico primero hacer referencia a
una matriz que coadyuva al cálculo del síndrome, y que se conoce como la matriz verificadora de
paridad, la cual se desarrollará primero en este apartado, para que después se dé lugar al síndrome de
un código BCH.
45
Sea α un elemento de GF(qm) y asumiendo el código (n, k) BCH de distancia mínima dmin ≥ 2t + 1
que se construye a partir de un polinomio generador g(x) sobre GF(q). Y ya que los códigos BCH se
asumen como códigos cíclicos, se puede retomar la expresión de que c(x) = d(x) • g(x), donde
c( x) = cn −1 x n −1 + cn − 2 x n − 2 + . . . + c1 x + c0
es un polinomio código de grado n – 1 sobre GF(q) y
d ( x ) = d k − 1 x k − 1 + d k − 2 x k − 2 + . . . + d1 x + d 0
es un polinomio dato de grado k – 1 sobre GF(q).
Se puede observar que el polinomio código c(x) es divisible entre el polinomio generador g(x). A partir
de que g(x) tiene
α b , α b + 1 , α b + 2 , . . . , α b + 2 t −1
como raíces del código (n, k) BCH, c(x) tiene esas mismas raíces como propias. Por lo que se tendrá:
0 = c(α b ) = cn −1 (α b ) n −1 + cn − 2 (α b ) n − 2 + . . . + c1α b + c0
0 = c(α b +1 ) = cn −1 (α b +1 ) n −1 + cn − 2 (α b +1 ) n − 2 + . . . + c1α b +1 + c0
M
0 = c(α b + 2t −1 ) = cn −1 (α b + 2t −1 ) n −1 + cn − 2 (α b + 2t −1 ) n − 2 + . . . + c1α b + 2t −1 + c0
En un formato de matrices, lo anterior resulta:
0 = [c0
c1 . . .
1
 1
 αb
b +1
α

cn −1 ]  (α b ) 2
(α b +1 ) 2

M
 M
b
n
−
1
b
+
(α )
(α 1 ) n −1
Y simplificando:
0 = CH T
46
1


K
α

K (α b + 2t −1 ) 2 

M

b + 2 t −1 n −1 
K (α
) 
K
b + 2 t −1
Por lo tanto, la matriz verificadora de paridad de un código (n, k) BCH de distancia mínima dmin ≥ 2t
+ 1 puede expresarse como:
1
(α b ) 2
L
(α b ) n −1 
αb

b +1
b +1 2
b + 1 n −1 
1
(
)
L
(
)
α
α
α

H =
M

M


b + 2 t −1
(α b + 2 t −1 ) 2 L (α b + 2 t −1 ) n −1 
1 α
Siendo la dimensión de esta matriz de t × n.
3.13 Cálculo del síndrome
El proceso algebraico de la decodificación BCH inicia con el cálculo del síndrome de la palabra
recibida. Partiendo nuevamente con b = 1, y t errores a corregir por el código. Sea c(x) el polinomio
código, con notación vectorial
C = [c0 c1 K cn −1 ]
además
e( x) = en −1 x n −1 + en − 2 x n − 2 + . . . + e1 x + e0
como el polinomio patrón de error e(x), con notación vectorial
E = [e0 e1 K en −1 ]
y un nuevo elemento que es
r ( x) = rn −1 x n −1 + rn − 2 x n − 2 + . . . + r1 x + r0
conocido como el polinomio de la palabra recibida r(x), con vector:
R = [r0 r1 K rn −1 ]
Así, el polinomio recibido es:
r ( x ) = c ( x ) + e( x )
y
RH T = CH T + EH T
= 0 + EH T
= EH T
47
donde, a partir de la matriz H T obtenida del apartado anterior, y con b = 1 se tiene que:
HT
 1
 (α )1

=  (α ) 2

 M
(α ) n −1
1
(α 2 )1
(α 2 ) 2
M
(α 2 ) n −1
1

K (α 2 t )1 
K (α 2 t ) 2 

M 
K (α 2 t ) n −1 
K
El vector del síndrome S está definido como:
S = RH T
S = EH T
S = [ S1 , S 2 ,. . . , S 2t ]
donde, podemos generalizar que:
S i = r (α i )
= rn −1 (α i ) n −1 + rn − 2 (α i ) n − 2 + . . . + r1 (α i ) + r0
o
S i = e(α i )
Ec. 3.1
= en −1 (α i ) n −1 + en − 2 (α i ) n − 2 + . . . + e1 (α i ) + e0
para 1 ≤ i ≤ 2t. Y es hasta aquí donde se concluye el procedimiento para calcular los elementos del
síndrome S = {S1, S2, . . . , S2t}. Sin embargo, a continuación se demuestra la relación que existe entre
dichos elementos y los denominados localizadores de error.
Ahora, si se supone que el vector de patrón de error tiene v dígitos no cero localizados en j1, j2, . . . ,
jv (v es la cantidad de dígitos erróneos), entonces
e( x ) = e jv x jv + e jv −1 x jv −1 + . . . + e j2 x j2 + e j1 x j1
donde 0 ≤ j1 < j2 < . . . < jv ≤ n
y v ≤ t. La (ec. 3.1) Si = e(α i) se desarrolla como:
48
S1 = e jvα jv + e jv −1α jv−1 + . . . + e j2α j2 + e j1α j1
S 2 = e jv (α jv ) 2 + e jv −1 (α jv −1 ) 2 + . . . + e j2 (α j2 ) 2 + e j1 (α j1 ) 2
Ec. 3.2
M
S 2t = e jv (α jv ) 2t + e jv−1 (α jv −1 ) 2t + . . . + e j2 (α j2 ) 2t + e j1 (α j1 ) 2t
, α son desconocidos. El anterior sistema de ecuaciones para el
donde α , α , . . . , α
síndrome (ec. 3.2), se puede expresar como:
j1
jv −1
j2
jv
Si =
v
∑
l =1
e jl (α jl ) i
Ec. 3.3
y donde se recordara que i = 1, 2, . . . , 2t.
El conjunto de funciones en la ecuación (ec. 3.2) es conocido como funciones simétricas de sumas de
potencias en
tiene que
α j ,α j , . . . ,α j ,α j
1
v −1
2
v
. Para los códigos binarios que se estarán abordando se
e j1 = e j2 = . . . = e jv−1 = e jv −2 = 1
de valor 1), y asumiendo un cambio de variable
como:
Si =
v
∑
l =1
X li
(es decir, si hay un error no cero, este debe ser
X l = α jl , entonces la (ec. 3.3) puede escribirse
i = 1, 2, . . . , 2t
Ec. 3.4
Si se conoce Xl , entonces se sabe la localización del error. Así Xl se le denomina el localizador de
error.
Ahora la siguiente etapa, es determinar el polinomio localizador del error, el cual contiene los
denominados localizadores de error, y ello mediante la solución de la (ec. 3.2) que está en función de
los elementos del síndrome previamente calculados por la (ec. 3.1).
49
3.14 Búsqueda del polinomio localizador de error
Cualquier algoritmo de decodificación que resuelva el sistema de ecuaciones (ec. 3.2) es un método de
decodificación para los códigos BCH, donde j1, j2 . . . jv indican la ubicación de los errores en el
polinomio e(x).
Es decir, resolviendo este conjunto de funciones no lineales de manera directa, se podrán relacionar los
componentes del síndrome con los coeficientes de un polinomio localizador de error y de esa forma
encontrar los errores de la palabra recibida.
Definiendo al polinomio localizador de error, se tiene:
v
Λ ( x) = Λ v x + Λ v−1 x
v −1
+ . . . + Λ1 x + 1
Ec. 3.5
Λ( x) = (1 − α j1 x) (1 − α j2 x) . . . (1 − α jv x)
v
Λ ( x) = ∏ (1 − α jl x)
l =1
Λ ( x) =
y recordando que
X l = α jl
entonces
v
∏ (1 − X x)
Ec. 3.6
l
l =1
donde las raíces de Λ(x) son (α ) (inversos de Xl para 1 ≤ l ≤ v). Es decir, las raíces del
polinomio localizador del error son los recíprocos de los localizadores de error Xl. La primera parte de
las técnicas para encontrar Λ(x) y calcular sus raíces se describe a continuación.
jl
−1
A partir de la expansión de la (ec. 3.5) e igualando ésta con la (ec. 3.6), se tiene que:
Λ ( x) =
v
∏ (1 − X x) = Λ x
l
l =1
v
v
+ Λ v −1 x
v −1
+ . . . + Λ1 x + 1
Ec. 3.7
Evaluando (Ec. 3.7) para el caso de v = 3 (recordar que v es número de errores que tiene R en las
localidades j1, j2, . . . , jv) se tiene:
50
3
Λ ( x) = Λ 3 x + Λ 2 x
2
+ Λ1 x + 1
Λ ( x) = − x 3 ( X 1 X 2 X 3 ) + x 2 ( X 1 X 2 + X 1 X 3 + X 2 X 3 ) − x( X 1 + X 2 + X 3 ) + 1
Lo anterior es un ejemplo para inducir el caso general, el cual describe, que para cualquier polinomio
localizador de error de grado v, se encuentra que:
− Λ1 =
v
∑X
= X 1 + X 2 + . . . + X v −1 + X v
i
i
Λ2 =
− Λ3 =
v
∑X X
i
i< j
= X 1 X 2 + X 1 X 3 + . . . + X 1 X v + . . . + X v − 2 X v + X v −1 X v
j
v
∑X X
i
j
∏X
i
i< j<k
X k = X 1 X 2 X 3 + X 1 X 2 X 4 + . . . + X v − 3 X v −1 X v + X v − 2 X v − 1 X v
M
(−1) Λ v =
v
v
= X1 X 2 . . . X v
i =1
Ec. 3.8
Esto es, el coeficiente del polinomio localizador de error Λi es la suma de los productos de todas las
combinaciones de los localizadores de error tomados de i a la vez. La forma de la ec. 3.8 es referida
como las funciones simétricas elementales de los localizadores de error.
Además, desarrollando la ec. 3.4 (funciones simétricas de sumas de potencias):
Si =
v
∑
l =1
X li
i = 1, 2, . . . , 2t
S1 = X 1 + X 2 + K + X v
S 2 = X 12 + X 22 + K + X v2
M
S 2t = X 12t + X 22t + K + X v2t
51
Ec. 3.9
Esta última expresión (ec. 3.9), proporciona una relación no lineal entre el síndrome y los localizadores
de error. Y las funciones simétricas elementales de la ec. 3.8, proporcionan una relación también no
lineal entre los coeficientes del polinomio localizador de error y los localizadores de error. Pero la
clave de todo esto, es que existe una relación lineal entre el síndrome y los coeficientes del polinomio
localizador de error. Esta última relación es descrita mediante las identidades de Newton.
En el siguiente apartado, se demuestra la anterior relación entre el síndrome y los coeficientes del
polinomio localizador de error, mediante la utilización de varias expresiones previamente establecidas.
3.15 Relación entre el polinomio localizador de error y el síndrome
A continuación se procede a deducir la ecuación que establece dicha relación.
Primeramente, se multiplican los dos miembros de la ec. 3.5 por el término
e jl (α jl ) l '+ v
y se hace evaluar al polinomio localizador de error Λ(x) con
(α jl ) −1
(α jl ) −1 . Entonces, Λ(x) = 0 (ya que
es una raíz de tal polinomio), y la ec. 3.5 se transformará en:
Λ[ x = (α jl ) −1 ] = 0 = e jl (α jl ) l '+ v [Λ v (α jl ) − v + Λ v −1 (α jl ) − v +1 + . . . + Λ1 (α jl ) −1 + 1]
0 = e jl [Λ v (α jl ) l ' + Λ v −1 (α jl ) l '+1 + . . . + Λ1 (α jl ) l '+ v −1 + (α jl ) l '+ v ]
Ec. 3.10
donde l’= j - v, y que es una variable de apoyo para las sumatorias a desarrollar. La ec. 3.10 se
mantiene para cada valor de l y l’. Esto es, para cada valor de l’, se sumará la ec. 3.10 sobre l = 1, 2, .
. . , v. Quedando la ec. 3.10:
v
v
0 = Λ v ∑ e jl (α ) + Λ v −1 ∑ e jl (α )
l =1
jl l '
l =1
jl l ' +1
v
+ . . . + Λ1 ∑ e jl (α )
l =1
jl l ' + v −1
+
v
∑e
l =1
jl
(α jl ) l '+ v
Aplicando la ec. 3.3, a la anterior expresión, se puede reescribir ésta como:
0 = Λ v S l ' + Λ v −1S l ' +1 + . . . + Λ1S l '+ v −1 + S l '+ v
Ec. 3.11
Recordando que v ≤ t, entonces la ec. 3.11 siempre especificará componentes de síndrome Si ya
conocidos, y con 1 ≤ i ≤ 2t, si l’ está en el intervalo 1 ≤ l’ ≤ v. Además, j = l’ + v, se obtiene:
52
0 = Λ v S j − v + Λ v −1 S j − v + 1 + . . . + Λ1 S j −1 + S j
Ec. 3.12
para v + 1 ≤ j ≤ 2v. Las funciones definidas por la ec. 3.12 son lo que anteriormente se identificó como
las identidades de Newton. Ahora realizando un acomodo de los términos, se obtiene:
S j = − Λ1 S j −1 − Λ 2 S j − 2 − . . . − Λ v −1 S j − v + 1 − Λ v S j − v
v
S j = −∑ Λ l S j − l
j = v + 1, v + 2, . . . , 2v
l =1
Ec. 3.13
Esta última expresión es la base para resolver el problema de la decodificación y dicha fórmula se le
conoce como la ecuación clave. Su formato matricial es el siguiente:
 S v +1 
 S1
S 
S
v
+
2

 = − 2
 M 
M



 S 2v 
Sv
S2
S3
S v +1
Sv 
S v +1 
M 

L S 2 v −1 
L
 Λv 
Λ 
 v −1 
 M 


 Λ1 
Ec. 3.14
Esta última expresión relaciona a los coeficientes de Λ(x) con los componentes del síndrome y que
pueden ser determinados por inversión de la matriz cuadrada contenida.
3.16 Introducción al caso del algoritmo de Berlekamp-Massey
La mayoría de los cálculos requerido para decodificar códigos BCH usando el algoritmo de Peterson se
centra en la solución de la ecuación matricial (ec. 3.14), que también se puede desarrollar de la
siguiente forma:
 S1
S
 2
 S3

M
 S v
S2
S3
S3
S4
S4
S5
S v +1
Sv + 2
Sv 
L S v +1 
L Sv + 2 

M 
L S 2v −1 
L
53
 Λ v   − S v +1 
 Λ  − S 
 v −1   v + 2 
Λ v − 2  =  − S v + 3 

 

M
M


 
 Λ1   − S 2v 
Ec. 3.15
Para valores de v pequeños, el método de solución que aplica el algoritmo de Peterson usando
inversión de matriz no es desproporcionado. Es decir, el número de cálculos necesarios para invertir
una matriz de orden v x v tiene una complejidad computacional4 de O(v3). Sin embargo existen
muchas aplicaciones en la que se requiere utilizar codificadores con una mayor capacidad de corrección
de errores. Para tales casos, la implementación se debe inclinar por un método de solución más
eficiente. Berlekamp en 1965 analizó un método que descarta el hecho de que la matriz de las
ecuaciones ec. 3.14 y ec. 3.15 no son arbitrarias en su forma, más bien, tales matrices tiene un alto
grado en su estructura. Y tal estructuración es una ventaja que toma en cuenta tal método para obtener
el vector Λ mediante un procedimiento más complejo que la simple inversión matricial, pero
computacionalmente mucho más simple, con una complejidad computacional4 de O(v2).
Por su parte Massey en 1972, tuvo un enfoque muy cercano al de Berlekamp, donde este primero
desarrolló un algoritmo iterativo que se basó en la síntesis del polinomio localizador del error como el
de un registro de corrimientos con retroalimentación lineal (LFSR linear feedback shift register).
Estas dos técnicas de decodificación son en ocasiones referidas como un solo procedimiento, el cual es
conocido como el algoritmo iterativo de Berlekamp-Massey (BM), y que a continuación se describirá
brevemente para después detallar en ejemplos de cálculo manual como también en simulaciones tanto
de software como de hardware.
Partiendo de que el vector Λ se desconoce, entonces la primer fila de la ec. 3.15 define Sv+1 en
términos de S1, S2, . . . , Sv. La segunda fila define Sv+2 en términos de S1, S2, . . . , Sv+1 y así en
adelante. Este proceso secuencial es indicado por la propia ec. 3.13.
v
S j = −∑ Λ l S j − l
l =1
j = v + 1, v + 2, . . . , 2v
Ec. 3.13
Si se mantienen fijos los valores de Λ , esto puede dar lugar a una implementación de un LFSR con
sus derivaciones o retroalimentaciones dadas por Λ . Visto de esta forma, el problema se convierte o
transforma en uno de diseño para un circuito LFSR, como se muestra en la siguiente figura, el cual
generará la secuencia conocida de los propios síndromes previamente calculados. Para tal secuencia
pueden existir varios registros de corrimiento, pero se desea encontrar el LFSR de menor longitud, ya
que esto último dará el patrón de error con menor peso que los datos recibidos podrán soportar al
momento de la decodificación, esto es, un polinomio localizador de error Λ(x) del grado más bajo.
Tal polinomio de grado más bajo tendrá el grado v, y hay sólo un polinomio de grado v debido a que
la matriz de orden v x v del problema original es invertible.
________
4
Basado en las referencias Moon [16] pp 253, y Blahut [17], pp 176.
54
v
S j = −∑ Λ l S j − l
l =1
...
−Λ1
−Λ v-2
−Λ2
−Λ v
−Λ v-1
Sj-v-1,
Sj-v-2,
Sj-1
...
Sj-2
Sj-v-1
Sj-v
...
S3,
S2,
S1
Se inicializan con Sv , Sv-1 , . . . , S1
Figura 3.3. Síntesis de un polinomio localizador del error como un circuito de
registro de corrimiento con retroalimentación lineal LFSR.
Por otra parte, la ec. 3.13 establece una relación de recurrencia entre los diferentes parámetros que la
conforma, y para encontrar la recurrencia adecuada se deberá primero determinar dos cantidades: el
polinomio de conexión (polinomio localizador del error) y la longitud L, esto es, un polinomio como
lo establece la ec. 3.7.
v
Λ ( x ) = Λ v x + Λ v −1 x
v −1
+ . . . + Λ1 x + 1
Ec. 3.7
cuyos coeficientes son los que aparecen en la recurrencia dada, y donde L está establecida por el grado
de tal polinomio: deg( Λ(x) ) ≤ L.
En estos códigos BCH que están sobre los ya analizados campos de Galois, una forma de determinar
los coeficientes Λl es por medio del algoritmo ya mencionado de BM, el cual es un proceso inductivo
µ
µ
que en el µ-ésimo paso se construye una pareja (Lµ , Λ( )(x) ) con Λ( )(x) que es un polinomio cuyos
coeficientes generan los primeros µ síndromes, es decir, satisface la relación de recurrencia de la ec.
3.13. La idea de este algoritmo es que en la iteración µ se calcule la siguiente salida del (µ -1)-ésimo
polinomio, esto es
Lµ −1
Sˆ µ = − ∑ Λ(lµ −1) S µ − l
l =1
y posteriormente se reste esta cantidad a la salida deseada para obtener
55
d µ = S µ − Sˆ µ =
Lµ −1
∑
l =0
Λ(lµ −1) S µ − l
En esta última expresión a dµ se le conoce como la µ-ésima discrepancia. Si dµ = 0, no se modifica
el polinomio, pues éste no sólo genera los primeros µ -1 síndromes, sino también el µ-ésimo. Pero si
dµ ≠ 0 se modifica el polinomio en la siguiente forma:
Λ( µ ) ( x) = Λ( µ −1) ( x) − d m−1d µ x µ − m Λ( m −1) ( x)
donde m es la más reciente iteración en la cual fue necesario modificar el polinomio de conexión o sea
L m > L m-1, pues hubo un cambio de longitud. Esta elección de dicho polinomio garantiza que la
discrepancia actual, dm sea nula.
3.17 Estructuración del algoritmo de Berlekamp-Massey (BM)
Este apartado analizará de forma más detallada el algoritmo de BM mediante su diagrama de flujo con
el propósito de conocer el conjunto de iteraciones y funciones a las cuales recurre para determinar el
polinomio localizador del error.
Con base en la figura 3.4, la cual muestra el diagrama de flujo de este algoritmo BM, se tiene la
siguiente designación de variables: para el paso de la µ-ésima iteración se asumirá a Lµ como el grado
del polinomio localizador del error Λ(µ )(x) , a dµ como la µ-ésima discrepancia, a T(x) como el
nuevo polinomio de conexión para el caso de no haber discrepancia ( dµ = 0 ), a B(x) como el antiguo
polinomio de conexión, y a j como la ubicación del símbolo más antiguo dentro del LFSR a partir del
punto donde el registro de corrimiento falló en la secuencia. Además, hay que tener en mente que los
coeficientes de todos los polinomios determinan las derivaciones o conexiones del LFSR; conforme a
lo anterior el algoritmo trabaja como sigue.
Inicialmente, los coeficientes de las derivaciones y la longitud del registro de corrimiento están
habilitados en 1 y 0 respectivamente. Esto implica que el computo o cálculo del polinomio localizador
del error Λ(0)(x) y de su propia longitud, estén con valor 1 y 0 respectivamente. El producto xΛ(0)(x)
es temporalmente almacenado en el polinomio de conexión B(x). Cada vez que un componente del
síndrome es tomado o procesado, un término de la discrepancia dµ es calculado a partir de los
coeficientes de las derivaciones y del contenido de los registros de corrimiento propios del LFSR. Si no
existe discrepancia, los coeficientes de las derivaciones generan la secuencia del síndrome dado y
después el polinomio B(x) es actualizado para la siguiente iteración. Si existe discrepancia ( dµ ≠ 0 ),
los coeficientes de las derivaciones no generan la secuencia del síndrome dado, y por lo tanto un nuevo
polinomio de conexión T(x) para no discrepancia es calculado a partir de: las derivaciones del conjunto
de registros de corrimiento, de la discrepancia dµ y del antiguo polinomio de conexión B(x).
56
La longitud del LFSR es entonces probada. Si la longitud requiere una extensión, el polinomio B(x) es
normalizado y actualizado, además las derivaciones de los registros de corrimiento son modificadas por
los coeficientes del polinomio T(x), también la longitud de T(x), el valor de j y la longitud del registro
de corrimiento Lµ son actualizados; pero si sucede lo contrario las derivaciones del registro de
corrimientos es modificado por los coeficientes del polinomio T(x), mientras que el polinomio B(x) es
actualizado para la siguiente iteración. El algoritmo se detiene al finalizar la iteración µ = 2t y el
resultado de Λ(2t)(x) es finalmente tomado como el polinomio localizador del error Λ(x). El grado de
dicho polinomio encontrado por este algoritmo es siempre el mínimo.
Inicializar
µ = 0, B(x) = x, Λ(0) (x) = 1, Lµ = 0
y
j=0
µ ← µ +1
Cómputo del error en el siguiente síndrome
Lµ −1
∑
dµ = Sµ +
Λl Sµ −l
l =1
¿El actual diseño del
registro de corrimiento da
el siguiente síndrome?
(=
Lµ −1
∑
l =0
Λl Sµ −l )
Si (derivaciones OK)
dµ = 0
No (corregir derivaciones)
Cómputo del nuevo polinomio de conexión para el cual
T ( x) = Λ( µ −1) ( x) − d µ B( x)
Lµ −1 < µ - j
¿Debe ser extendido el
registro de corrimiento?
<
-1
B (x) ← (dµ ) Λ
(µ −1 )
Λ(µ ) (x) ← T (x)
Tµ ← µ − j
j ← µ − L µ -1
Lµ ← Tµ
(x)
No
dµ = 0
Λ(µ ) (x) ← T (x)
≥
Si
Almacenar el antiguo
registro de corrimiento
después de normalización.
B (x) ← x B (x)
Actualizar los registros de
corrimiento.
Actualizar la longitud.
Si
µ = 2t
Detener
Fig. 3.4. Diagrama de flujo algoritmo Belekamp-Massey.
57
No
3.18 Determinación de las raíces del polinomio localizador del error
(búsqueda de Chien)
Una vez que se obtiene el polinomio localizador del error Λ(x), se procede a determinar sus raíces, ya
que éstas indicarán, de forma casi directa, lo posición de los errores detectados por las etapas anteriores
dentro de la palabra de código recibida r(x).
Recordando que el campo que más interesa en la etapa de decodificación es el denominado campo
mayor GF(qm), y siendo este un campo finito, se puede examinar cada elemento de dicho campo para
determinar si tales elementos son una raíz de Λ(x).
La forma más común de factorizar los polinomios sobre campos de Galois, es la llamada “búsqueda de
Chien”, por lo que este apartado describirá el procedimiento matemático que lo caracteriza y en
apartados posteriores se abordará la eficiencia en su etapa de implementación a circuitos lógicos.
Tomando como base un ejemplo, el cual supone la existencia previa de un polinomio localizador del
error y de que v = 3, entonces se tiene de la ec.3.7:
Λ ( x ) = 1 + Λ1 x + Λ 2 x
2
+ Λ3 x
3
Ahora, si se evalúa a Λ(x) para cada elemento no cero del campo en forma sucesiva:
2
x = 1, x = α , x = α , . . . , x = α q
m
−2
se tendrá lo siguiente:
Λ (1) = 1 + Λ1 (1) + Λ 2 (1) 2 + Λ 3 (1)
3
Λ (α ) = 1 + Λ1 (α ) + Λ 2 (α ) 2 + Λ 3 (α )
3
Λ (α 2 ) = 1 + Λ1 (α 2 ) + Λ 2 (α 2 ) 2 + Λ 3 (α 2 )
3
M
Λ (α q
m
−2
) = 1 + Λ1 (α q
m
−2
) + Λ 2 (α q
m
) + Λ 3 (α q
−2 2
m
−2 3
)
La automatización en el cálculo de la anterior secuencia se puede implementar eficientemente en
dispositivos de hardware (circuitos lógicos secuenciales), como se muestra en la fig. 3.5, donde se
observa que un conjunto de v registros son cargados inicialmente con los coeficientes del polinomio
localizador del error Λ1, Λ2 . . . , Λv , y donde la salida inicial es la suma
A=
v
∑
j =1
Λ j = Λ ( x ) − 1 x =1
58
Si A = 1, entonces un error ha sido localizado (a partir de que Λ(x) = 0). En el siguiente paso, cada
registro es multiplicado por α j, j = 1, 2, . . . , v, así los registros contendrán Λ1α , Λ2α 2, Λ3α 3 , ... ,
Λvα v . Ahora la salida es la suma
A=
v
∑
j =1
Λ jα j = Λ ( x) − 1 x =α
Los registros son multiplicados otra vez por potencias sucesivas de α, dando lugar a una evaluación en
α 2. Este procedimiento continua hasta que Λ(x) halla sido evaluado para todos los elementos no cero
del campo.
A
Λ1
Λ2
α
α2
. . .
Λv
αv
Fig. 3.5. Algoritmo general para la búsqueda de Chien.
Finalmente, si las raíces son distintas y todas residen en el campo apropiado, entonces éstas se podrán
usar para determinar la ubicación de los errores. Por el contrario, si dichas raíces no son distintas o
residen en un campo equivocado (no en el campo mayor GF(qm) previamente determinado), entonces
la palabra recibida no está dentro de la distancia t de cualquier palabra código válida.
59
3.19 Determinación del polinomio patrón de error
Una vez obtenidos los elementos no cero del campo GF(qm) que son las propias raíces del polinomio
localizador del error Λ(x), se procede a obtener sus inversos multiplicativos, ya que estos mismos
inversos son los conocidos localizadores de error, y que a su vez son los términos que integran al
denominado polinomio patrón de error e(x), es decir, este último polinomio indica las posiciones de
los errores que tienen que ser corregidos dentro del polinomio recibido r(x).
Conociendo a e(x), lo que finalmente restaría es aplicar la siguiente expresión para que se obtenga la
palabra código valida c(x) ya corregida, la cual fue obtenida por el propio codificador BCH en la parte
del transmisor.
c ( x ) = r ( x ) + e( x )
Para cerrar la explicación de este capítulo, se presenta a continuación un ejemplo numérico detallado,
principalmente del proceso de decodificación BCH, que integra los distintos algoritmos aquí
desarrollados.
3.20 Caso para ejemplificar el proceso de decodificación BCH
Se partirá de los siguientes parámetros y campos para la presente decodificación BCH:
Codificador BCH:
(15,5), t = 3.
Polinomio primitivo:
Polinomio generador:
Polinomio código:
c( x) = 0;
→ 000000000000000
Polinomio recibido:
r ( x) = x12 + x 5 + x 3
→ 000101000000100
p( x) = x 4 + x + 1
g ( x) = x10 + x 8 + x 5 + x 4 + x 2 + x + 1
Se puede observar que el número de errores que tiene la palabra recibida es de 3, y que la capacidad
máxima de corrección del presente decodificador es de t =3 (la obtención de los parámetros y de los
tres primeros polinomios se encuentra explicada al principio de este capítulo). Por lo tanto, se deberá
tener en cuenta el uso de la tabla 3.11 del apartado 3.7, que aquí se vuelve a mostrar de la siguiente
forma:
60
Potencia
0=
Polinomial
0
Binaria
Potencia
0000
α7 =
α8 =
α9 =
α10 =
α11 =
α12 =
α13 =
α14 =
1=
1
1000
α=
α2 =
α3 =
α4 =
α5 =
α6 =
α
α2
α3
0100
1 + α
1100
α + α2
α2 + α3
0110
0010
0001
0011
Binaria
Polinomial
1 + α + α3
1101
1 + α
1010
α + α3
1 + α + α2
α + α2 + α3
1 + α + α2 + α3
1 + α2 + α3
1 + α3
0101
2
1110
0111
1111
1011
1001
Tabla 3.18. Representación de los elementos de GF(24) generados por p(x) = x4 + x + 1.
1ª etapa) Cálculo del síndrome mediante la evaluación del polinomio recibido r(x), y con base en el
número de error máximos a corregir t. El conjunto de elementos del síndrome son
S = [ S1 , S 2 ,. . . , S 2t ] y se obtienen mediante S i = r (α i ) ; por lo tanto se tendrán 6 síndromes
para este caso.
S1 = r (α ) = α 12 + α 5 + α 3 = 1
S 2 = r (α 2 ) = α 24 + α 10 + α 6 = 1
S 3 = r (α 3 ) = α 36 + α 15 + α 4 = α 10
S 4 = r (α 4 ) = α 48 + α 20 + α 12 = 1
S 5 = r (α 5 ) = α 60 + α 25 + α 15 = α 10
S 6 = r (α 6 ) = α 72 + α 30 + α 18 = α 5
Habrá que mencionar que la simplificación polinomial de los términos son con base en los elementos
del campo GF(24) generados por el polinomio primitivo p(x) = x4 + x + 1 (tabla 3.18), es decir, que a
cada potencia de α se tiene que restar 15 (número de elementos no cero del campo) tantas veces hasta
llegar a obtener una de las potencia de los elementos contenidos en dicha tabla. Por ejemplo
α 72 = α 72−15−15−... = α 72−60 = α 12
61
y detallando el caso completo del S6, se tiene:
S 6 = r (α 6 )
S 6 = (α 6 )12 + (α 6 ) 5 + (α 6 ) 3
S 6 = α 72 + α 30 + α 18 = α 12 + α 0 + α 3
S6 = 1 + α + α 2 + α 3 + 1 + α 3 = α + α 2
S6 = α 5
2ª etapa) Aplicación del algoritmo BM para la obtención de r(x) con base en los distintos síndromes
previamente calculados. A continuación se muestran los valores que se obtienen de este algoritmo
según sus valores de inicialización y de la propia secuencia de iteración µ.
Inicializar: µ =0 ; B(x)=x ; Λ(0)(x)=1 ; Lµ=0 ; j=0
µ=µ+1=1
d1= S1+ΣΛlSµ-l = S1 = 1
¿d=0? => NO
T(x)= Λ(0)(x)+d1B(x)=1+x
¿L0=0<1? => SI
B(x)<-d1-1Λ(0)(x)
Λ(1)(x)<-T(x)
T1=1-0=1
J=1-0=1
L1<-T1
B(x)= S1-1 =1
Λ(1)(x)= 1+x
B(x)<-xB(x)
B(x)=x
Tenemos: µ=1 ; B(x)=x ; Λ
µ=µ+1=2
L1=1
(1)
(x)=1+x ; Lµ=1 ; j=1
d2= S2+ΣΛlSµ-l = S2 + ΛlS1 =0
¿d=0? => SI
B(x)<-xB(x)
B(x)=x2
62
Tenemos: µ =2 ; B(x)=x2 ; Λ(2)(x)=1+x ; Lµ=1 ; j=1
µ=µ+1=3
d3=S3+ΣΛlSµ-l=S3+ΛlS2
=S3+ΛlS2=α10+1=α5
¿d=0? => NO
T(x)= Λ(2)(x)+d3B(x)
=1+x+α5x2
¿L2=1< µ-j=2? => SI
B(x)<-d3-1Λ(2)(x)
B(x)=( α5)-1(1+x)
=α10(1+x)
Λ(3)(x)=1+x+α5x2
Λ(3)(x)<-T(x)
T3=3-1=2
J=3-1=2
L3<-T3
L3=2
B(x)<-xB(x)
B(x)= α10(x+x2)
Tenemos: µ=3 ;B(x)=α10(x+x2); Λ(3)(x)=1+x+α5x2 ; Lµ=2 ; j=2
µ=µ+1=4
d4=S4+ΣΛlSµ-l=S4+ΛlS3+Λ2S2
=1+α10+α5=0
¿d=0? => SI
B(x)<-xB(x)
B(x)= α10(x2+x3)
63
Tenemos: µ=4 ;B(x)= α10(x2+x3); Λ(4)(x)=1+x+α5x2 ; Lµ=2 ; j=2
µ=µ+1=5
d5=S5+ΣΛlSµ-l=S5+ΛlS4+Λ2S3
=α10+1+α5α10=α10+1+α15=α10
¿d=0? => NO
T(x)= Λ(4)(x)+d5B(x)
=1+x+α5x3
¿L4=2<µ-j=3? => SI
B(x)<-d5-1Λ(4)(x)
B(x)=( α10)-1(1+x+α5x2)
=α5(1+x+α5x2)
Λ(5)(x)=1+x+α5x3
Λ(5)(x)<-T(x)
T3=5-2=3
J=5-2=3
L3<-T3
L3=3
B(x)= α10x3+α5(x2+x)
B(x)<-xB(x)
Tenemos: µ=5; B(x)= α10x3+α5(x2+x); Λ(5)(x)=1+x+α5x3 ;Lµ=3;j=3
µ=µ+1=
6
d6=S6+ΣΛlSµ-l=S6+ΛlS5+Λ2S4 +Λ3S3
=1+α10+α5=0
¿d=0? => SI
B(x)<-xB(x)
B(x)=
α10x4+α5(x3+x2)
64
La tabla 3.19 resume los parámetros obtenidos por los distintos cálculos conforme se desarrolló cada
iteración µ, con el propósito de observar el desenvolvimiento de tales valores y como se fue
deduciendo el valor del polinomio localizador del error Λ(x) .
Iteración Discrepancia
dµ
µ
0
1
2
3
4
5
6
--S1 = 1
0
α5
0
α10
0
B(x)
x
x
x2
α10 x2
α10 x3
α10 x3
α10 x4
+
+
+
+
α10 x
α10 x2
α5 x2 + α5 x
α5 x3 + α5 x2
1
x+1
x+1
α5 x2
α5 x2
α5 x3
α5 x3
Λ(µ )(x)
j
Lµ
x+1
x+1
x+1
x+1
0
1
1
2
2
3
3
0
1
1
2
2
3
3
+
+
+
+
Tabla 3.19. Pasos del algoritmo iterativo de Berlekamp Massey.
Por lo tanto, el polinomio resultante de toda esta etapa es Λ(x) = α5 x3 + x + 1.
3ª etapa) Determinación de las raíces de Λ(x) por medio de la búsqueda de Chien. Por lo que se
procederá a ejemplificar la evaluación de los distintos elementos no cero (α , α2 , α3 , . . . , α15) del
campo mayor, simplemente substituyendo éstos directamente en tal polinomio y ubicar aquellos que
den Λ = 0.
Probando con α se tiene
Λ (α ) = 1 + (α ) + α 5 (α 3 )
Λ(α ) = 1 + α + α 8 = 1 + α + 1 + α 2
Λ(α ) = α + α 2 ≠ 0
por lo cual α no es una raíz. A continuación se presentan sólo los elementos no cero que si resultan ser
raíces de Λ(x).
65
Λ(α) =
1+α+α5α3
= α+α2
Λ(α3) =
1+α3+α5α9
= 0
Λ(α10) =
1+α10+α5α30
= 0
Λ(α12) =
1+α12+α5α36
= 0
Como se puede observar, la raíces de Λ(x) son α3 , α10 y, α12.
4ª etapa) Obtención de los recíprocos de las raíces de Λ(x), ya que sus inversos indicarán la posición
de los errores dentro de la palabra recibida r(x).
Λ(α3) =
1/α3 = α15/α3
α12
Λ(α10) =
1/α10 = α15/α10
α5
Λ(α12) =
1/α12 = α15/α12
α3
Entonces, las ubicaciones de los errores son α12 , α5 y, α3 , por lo tanto el polinomio patrón de error
será:
e( x) = x12 + x 5 + x 3
5ª etapa) Corrección del error, mediante una simple suman de los propios polinomios e(x) y r(x),
como se muestra a continuación
c ( x ) = e( x ) + r ( x )
c( x) = x12 + x 5 + x 3 + x12 + x 5 + x 3
Y finalmente la palabra que se transmitió fue:
c( x) = 0;
→ 000000000000000
66
3.21 Implementación en hardware de los campos de Galois
Los códigos BCH pertenecen a una clase de codificadores llamados algebraicos, ya que sus procesos de
codificación y decodificación se sustentan en cálculos basados principalmente en la aritmética de los
campos de Galois. Dicha característica los hace fáciles de implementar en dispositivos electrónicos
conformados fundamentalmente en compuertas lógicas y memorias (registros de corrimiento), como se
pudo observar en el análisis del algoritmo BM.
Este apartado describe, mediante ejemplos y simulaciones, la forma en que algunas operaciones entre
polinomios con coeficientes y raíces provenientes de los campos GF(2) y GF(2m) se pueden ejecutar
con el uso de circuitos lógicos.
Además, se tomará como base de los ejemplos la tabla 3.18, que contiene a los elementos de la
extensión de campo GF(24) generados por p(x) = x4 + x + 1.
Potencia
0=
Polinomial
0
Binaria
Potencia
0000
α7 =
α8 =
α9 =
α10 =
α11 =
α12 =
α13 =
α14 =
1=
1
1000
α=
α2 =
α3 =
α4 =
α5 =
α6 =
α
α2
α3
0100
1 + α
1100
α + α2
α2 + α3
0110
0010
0001
0011
Binaria
Polinomial
1 + α + α3
1101
1 + α
1010
α + α3
1 + α + α2
α + α2 + α3
1 + α + α2 + α3
1 + α2 + α3
1 + α3
0101
2
1110
0111
1111
1011
1001
Tabla 3.18. Representación de los elementos de GF(24) generados por p(x) = x4 + x + 1.
Para describir el caso de la multiplicación, se muestra primero el producto de un elemento β cualquiera
dentro de GF(24) con el elemento α perteneciente a la misma extensión de campo GF(24), β puede
quedar expresado como:
β = b0 + b1α + b2α 2 + b3α 3
multiplicando ambos miembros de esta expresión por α, y tomando en cuenta que α4 = 1 + α , se
obtiene:
αβ = b3 + (b0 + b3 )α + b1α 2 + b2α 3
67
Ec. 3.16
Esta última expresión de la ec. 3.16, puede ejecutarse mediante registros de corrimiento con
retroalimentación lineal (LFSR), como se aprecia en la fig. 3.6.
b0
+
b1
b2
b3
Figura 3.6. Circuito LFSR para la multiplicación de un elementos de GF(24) por α.
Como se aprecia en el circuito anterior, b0 es retroalimentado por b3, b1 es el resultado de b3 + b0, b2 es
alimentado por b1 y b3 recibe el valor del registro b2, lo anterior conforme a la que establecen los
coeficientes de la ec. 3.16. Los dispositivos que se usan para almacenar los coeficientes de b0 a b3 son
flip flops tipo J-K.
Por ejemplo, inicialmente se almacenan los valores del elemento β = α6 = α2 + α3 (0 0 1 1) en las
memorias (SR o FF-JK), posteriormente se realiza el primer corrimiento conforme a un pulso de
sincronía y los nuevos valores almacenados en dichos SR serán el producto βα, como se indica a
continuación:
Valores iniciales
Primer corrimiento
b0 = b3
0
1
b1 = b3 + b0
0
1
b2 = b1
1
0
b3 = b2
1
1
Tabla 3.20. Contenido de los SR en el circuito de la fig. 3.6 que indican el producto βα.
El valor almacenado después del corrimiento en los SR es 1 1 0 1, que conforme a la tabla 3.18
pertenece al valor binario de α7 = 1 + α + α3, y que corresponde al producto βα = ( α2 + α3 ) α,
como se detalla a continuación:
αβ = (α 2 + α 3 )α = α 3 + α 4 = α 3 + 1 + α = 1 + α + α 3 = α 7
Con lo anterior, se puede comprobar la funcionalidad de los LFSR para ejecutar una operación
polinomial con base en los campos de Galois.
Este tipo de circuito (fig. 3.6) se utiliza como un generador de secuencias (contador), para la
simulación del modelo en VHDL del código BCH (15,7) (cap. V), ya que almacenando inicialmente los
valores de 1 0 0 0 en los SR, que representa según la tabla 3.18 al elemento α, y al cabo de ir
realizando corrimientos sucesivos, se presentan en tales SR los valores binarios de cada uno de los
elementos no cero del campo GF(24). Al final de 15° corrimiento se tendrá el mismo valor inicial de α.
68
Otro ejemplo es el producto βα3, que se desarrolla analíticamente continuación:
α 3 β = α 3 (b0 + b1α + b2α 2 + b3α 3 )
α 3 β = α 3b0 + b1α 4 + b2α 5 + b3α 6
α 3 β = α 3b0 + b1 (1 + α ) + b2 (α + α 2 ) + b3 (α 2 + α 3 )
α 3 β = b1 + (b1 + b2 )α + (b2 + b3 )α 2 + (b0 + b3 )α 3
b0
b1
b2
Ec. 3.17
b3
Como se puede observar en la ec. 3.17, la asignación de los coeficientes de este polinomio determina la
conexión que habrá entre los SR para diseñar el LFSR que ejecutará el producto βα3. La fig. 3.7
muestra el circuito resultante de tal asignación entre los coeficientes b.
b0
+
b1
+
b2
+
b3
Figura 3.7. Circuito LFSR para la multiplicación de un elementos de GF(24) por α3.
En este caso se almacenan los valores del elemento β = α6 = α2 + α3 (0 0 1 1) en las memorias (SR o
FF-JK), posteriormente se realiza el primer corrimiento conforme a un pulso de sincronía y los nuevos
valores almacenados en dichos SR serán el producto βα3, como se indica a continuación:
Valores iniciales
Primer corrimiento
b0 = b1
0
0
b1 = b1 + b2 b2 = b2 + b3 b3 = b0 + b3
0
1
1
1
0
1
Tabla 3.21. Contenido de los SR en el circuito de la fig. 3.7 que indican el producto βα3.
69
El valor almacenado después del corrimiento en los SR es 0 1 0 1, que conforme a la tabla 3.21
pertenece al valor binario de α9 = α + α3, y que corresponde al producto βα3 = ( α2 + α3 ) α3, como
se detalla a continuación:
α 3 β = α 3 (α 2 + α 3 ) = α 5 + α 6 = α 2 + α + α 2 + α 3 = α + α 3 = α 9
Otro caso más completo es el producto entre dos elementos de la misma extensión de campo GF(24). El
circuito que ejecuta tal operación polinomial se muestra en la fig. 3.8.
+
b0
c0
c1
c2
b1
b2
b3
c3
+
+
+
+
a0
a1
a2
a3
Figura 3.8. Circuito LFSR para la multiplicación de dos elementos cualesquiera de GF(24).
Inicialmente se cargan los valores binarios de los dos elementos a multiplicar en los registros B y C
(uno por cada registro), a su vez el registro A debe estar en ceros. Después los tres conjuntos de
registros (A, B y C)se desplazan cuatro veces y al final del cuarto corrimiento, el contenido que resulte
en los registros de A será el valor del producto de los elementos cargado respectivamente en los
registros B y C.
En esta ocasión para comprobar la operación completa de este LFSR, se desarrolló una simulación con
el ambiente de “simulink”, en el cual se dispuso de registros FF-JK, compuertas AND y XOR que
fueron interconectadas según la fig. 3.8. La configuración en bloques de este circuito se puede observar
en la fig. 3.9.
70
TPN= Transición Positivo a Negativo
Figura 3.9. Modelo en simulink para la simulación del circuito LFSR para la multiplicación de dos
elementos cualesquiera de GF(24).
Para la ejecución del modelo de la fig. 3.9, primero se cargan los datos del elemento α7 (1 1 0 1) en los
registros B, mientras que el elemento α11 (0 1 1 1) se cargan en los registros C, después de 4
corrimientos en los registros A aparecen los valores binarios del elemento α3 (0 0 0 1) que corresponde
al producto de α7α11. Por la parte analítica se tiene lo siguiente:
α 7α 11 = (1 + α + α 3 )(α + α 2 + α 3 )
α 7α 11 = α + α 2 + α 3 + α 2 + α 3 + α 4 + α 4 + α 5 + α 6
α 7α 11 = α + α 5 + α 6 = α + α + α 2 + α 3 + α 2
α 7α 11 = α 3
71
El modelo en simulik arroja 4 gráficas pertenecientes a los mismos cuatro FF-JK de los registros A, que
se presentan a continuación en la fig. 3.10.
Se debe observar que los valores son a partir del segundo 8
0 0 0 1
Figura 3.10. Gráficas del modelo en simulink de los cuatro RS que reflejan los valores del proceso final
de la multiplicación α7α11.
Para complementar este apartado, sólo resta incorporar circuitos más especializados para la
decodificación BCH, que se abordarán o describirán en el siguiente capítulo para el caso del modelado
en VHDL.
72
CAP IV
Desarrollo de simulaciones para medir el desempeño de
codificadores BCH
4.1Descripción de las pruebas
Para tener un panorama completo sobre el desempeño de los codificadores BCH que se están
analizando en esta tesis, se ha desarrollado el presente capítulo en tres apartados, el primero
concerniente a las pruebas de simulación utilizando el modelo matemático5, el cual determina el
cálculo de la probabilidad de error (tanto en bit como en palabra) con base en parámetros básicos (n, k,
peso de Hamming de palabras código) de un codificador de bloque.
El segundo es una simulación utilizando los recursos de la herramienta Simulink de Matlab, mediante
la generación iterativa de palabras dato de manera aleatoria que se hacen procesar por distintos bloques
programados como codificadores BCH, canales BSC y decodificadores BCH, arrojando todo lo
anterior en un cálculo de tasa de error en bit. Finalmente el tercer apartado es el dedicado a las
simulaciones en VHDL para programar dispositivos CPLD como codificadores y decodificadores
BCH. Los resultados arrojados por los tres anteriores esquemas de simulación se muestran en gráficas
que visualizan la probabilidad de error vs. la SNR.
4.2 Modelo teórico
Un criterio simple para medir el desempeño de un codificador de bloque, con un número máximo t de
errores corregidos (decodificación de distancia limitada6) son la Pw y Pb, que están definidas como la
probabilidad de error en palabra y probabilidad de error en bit respectivamente, también conocidas
como el WER y el BER.
Durante la revisión bibliográfica en textos sobre codificación de canal (LIN [4], Lathi [9], Haykin [1] y
Lee [11]), sólo se pudo encontrar referencia de la primera probabilidad Pw de manera muy concreta y
más frecuente, definida por la siguiente expresión:
Pw ≤
 n i
∑  i  p (1 − p) n − i
i = t +1  
n
Ec. 4.1
En esta ec. 4.1, se asume la utilización de un canal BSC (canal binario simétrico), donde p se denota
como su probabilidad de error (probabilidad de cruce).
Básicamente, la anterior desigualdad describe un límite superior para el desempeño de la probabilidad
de error en palabra decodificada para un codificador de bloque (con t errores a corregir como máximo).
Por lo tanto, se tuvo que investigar con acuidad artículos que describieran el cómputo más específico
de la WER y la BER en codificadores de bloque binarios (principalmente BCH). Dando lugar a
fórmulas más especificas para tales cálculos, que a continuación se describen.
________
5
6
Fórmula desarrollada en la referencia Desset [18], pp 914-915.
“bounded-distance decoding” referencia Torrieri [19], pp 613.
73
Para calcular la probabilidad de error en bit posterior a la decodificación Pb (post-decoding BER), se
tiene la siguiente expresión:
Pb = Peb + Pub
Ec. 4.2
Y para calcular la probabilidad de error en palabra decodificada Pw, se tiene la siguiente expresión:
Pw = Pew + Puw
Ec. 4.3
En las anteriores ecuaciones 4.2 y 4.3, se podrá observar que las probabilidades Pb y Pw se conforman
por un par de probabilidades provenientes de dos diferentes tipos de errores propios del proceso de
decodificación, siendo las primeras Peb y Pew, mientras que las segundas son Pub y Puw.
Donde Peb y Pew son las probabilidades de error (para bit y palabra respectivamente) atribuibles a
palabras erróneamente decodificadas (decoding error), mientras que Pub y Puw son las probabilidades
de error (para bit y palabra respectivamente) originadas por decodificación fallida (decoding failures) o
también conocidas por errores provenientes de palabras “indecodificables” (undecodable word). A
continuación se explica el significado que tienen dichos tipos de errores.
Para entender la naturaleza de estos tipos de errores, habrá que hacer referencia al concepto de las
esferas de Hamming, las cuales son una forma espacial (distancias de Hamming) de explicar la
capacidad de corrección que tiene un codificador de bloque mediante circunferencias de radio t (#
máximo de errores a corregir) y como su centro una palabra código. La figura 4.1 muestra lo anterior.
palabras
recibidas a
decodificar
con t - 1
errores
radio
t
palabra
código
c1
palabras
recibidas a
decodificar
con t
errores
t-1
t-1
radio
t
palabra
código
cn
radio
t
t-1
palabra
código
c2
Todas las distancias
que se indican son
distancias de
Hamming
Fig. 4.1. Ejemplo de representación de las esferas de Hamming.
74
Una vez que se hizo referencia a las esferas de Hamming, se puede entonces mencionar que un código
bloque trata de corregir los símbolos erróneos (símbolos binarios para nuestro caso) dentro de una
palabra recibida r si ésta yace dentro de una de las esferas de decodificación, esto es, alrededor de una
de las palabra código (esferas de Hamming). Si el decodificador siempre corrige t o menos símbolos
erróneos, entonces cada esfera de decodificación tiene radio t, y ninguna de las esferas se intersecan
(código perfecto). Pero en un primer caso en el que ocurran más de t errores, la palabra recibida r
puede yacer en una esfera de Hamming equivocada, es decir, estar alrededor de una palabra código
incorrecta; o en un segundo caso, estar ubicada en el perímetro de intersección entre dos o más esferas.
Si la palabra recibida se encuentra en el primer caso, el decodificador selecciona una palabra de código
incorrecta según sea el centro de tal esfera, y así producirá en su decodificación una palabra dato de
salida con los denominados “errores indetectables”, a esto se le conoce como errores provenientes de
palabras erróneamente decodificadas.
Ahora, si la palabra recibida r presenta el segundo caso, es decir, ésta se ubica en la intersección de
tales fronteras, el decodificador no podrá corregir los errores pero si reconoce la existencia de tales
eventos. De esta manera, el decodificador falla en su operación y lo que procede a realizar es
reproducir la palabra dato d tal cual viene incorporada en la palabra r (codificación sistemática). A este
tipo de error se le conoce como decodificación fallida por el arribo de “palabras indecodificables”.
Para comprender mejor lo anterior, se ha desarrollado una serie de ejemplos con palabras código
válidas, provenientes de un codificador BCH (15, 7) con t = 2.
Para este ejemplo, se muestra la palabra dato d y su correspondiente palabra código c, donde ésta
última será afectada por un vector de error e, para que con ello se origine la palabra recibida r (r = c +
e) y con ésta analizar lo que entregará el decodificador a su salida.
Palabra dato d
Palabra código c
x0 X1 x2 x3 x4 x5 x6
0 0 0 0 0 0 1
x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14
0 0 0 1 0 1 1 1 0 0 0
0
0
0
1
Palabra de error e
x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14
0 0 0 1 0 1 0 1 0 0 0
0
0
0
0
Palabra recibida r
x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14
0 0 0 0 0 0 1 0 0 0 0
0
0
0
1
Tabla 4.1. Palabras resultado de la codificación BCH (15,7) para ejemplificar errores provenientes de
palabras erróneamente decodificadas (errores indetectables).
75
Como se podrá observar en la tabla 4.1, la palabra código c es afectada por un vector e con PH = 3
(peso de Hamming), es decir que sobrepasa la capacidad de corrección del actual código que es de t =
2.
Entonces, el decodificador al tener en su entrada la palabra r que se muestra en la tabla 1, éste procede
a calcular sus parámetros importantes para detectar y corregir los errores de tal palabra r (síndrome,
polinomio localizador del error), y entrega a su salida la palabra dato de 7 ceros (d = 0000000), esto
sucede ya que sólo puede corregir como máximo dos errores y como además su algoritmo entrega
síndromes acordes a un doble error, el decodificador determina finalmente que la palabra dato correcta
es d = 0000000.
El ejemplo anterior corresponde a los casos de “errores indetectables”, ya que la palabra recibida fue
erróneamente decodificada por encontrarse dentro de una esfera de Hamming equivocada.
Por otra parte, la ejemplificación para el segundo caso requiere más elementos de comparación, para su
explicación, que a continuación se muestran en la tabla 4.2.
Palabra dato d1
Palabra código c1
x0 x1 x2 x3 x4 X5 x6
1 0 0 0 0 1 0
x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14
1 0 1 0 0 1 0 1 1 0 0
0
0
1
0
Palabra de error e1
x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14
0 1 1 0 0 0 0 0 0 0 0
0
0
1
1
Palabra recibida r
x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14
1 1 0 0 0 1 0 1 1 0 0
0
0
0
1
Tabla 4.2. Palabras resultado de la codificación BCH (15,7) para ejemplificar errores provenientes por
decodificación fallida (palabras –indecodificables-).
Como se puede ver en la tabla 4.2, ahora la palabra c1 es afectada por un vector de error e1 con PH = 4
(hay 4 posiciones con error), sin embargo, el decodificador entregará a la salida la palabra dato d2 =
1000001 (tabla 2), en lugar de la palabra dato original d1 = 1000010, ello debido a que la palabra
recibida r se encuentra en las fronteras comunes (intersección) de dos esferas de Hamming con igual
número de palabras código como sus centros y con radios iguales a 4 (t = 4), provocando que el
decodificador no tenga otra opción que extraer la palabra dato tal cual viene adjuntada a la palabra
recibida r (codificación sistemática).
76
La tabla 4.3 muestra la otra palabra código c2 que interviene en el presente proceso de decodificación.
Palabra dato d2
Palabra código c2
x0 x1 x2 x3 x4 x5 x6
1 0 0 0 0 0 1
x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14
1 0 0 1 1 1 0 0 1 0 0
0
0
0
1
Palabra de error e2
x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14
0 1 0 1 1 0 0 1 0 0 0
0
0
0
0
Palabra recibida r
x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14
1 1 0 0 0 1 0 1 1 0 0
0
0
0
1
Tabla 4.3. Palabras complementarias de la codificación BCH (15,7) para ejemplificar errores
provenientes por decodificación fallida (palabras –indecodificables-).
Se puede observar en la tabla 4.3 que la palabra recibida r, resultado de r = c2 + e2, es la misma palabra
r que se muestra en la tabla 2, sólo que en este última tabla la palabra de error e2 es diferente a e1, pero
con igual número de posiciones con error y que se aplica a la palabra código c2 resultado de codificar a
la palabra dato d1 = 1000001, que es la arrojada originalmente por el decodificador de manera fallida.
palabras
recibidas a
decodificar
con t = 2
errores
t=4
t=4
palabra
código c1
t=2
t=2
palabra
código c2
palabra r que está en la
intersección de las esferas de c1
y de c2 (con t = 4 errores)
Fig. 4.2. Esquemas de esferas de Hamming para el caso de decodificación fallida.
77
La figura 4.2 brinda una esquematización del caso de error por decodificación fallida, donde se muestra
la intersección que presentan dos esferas de Hamming con una palabra r recibida que es común a dos
palabras código pero con dos vectores de error diferentes.
Lo que resta presentar del modelo matemático son el desglose de las ecuaciones 4.2 y 4.3 que a
continuación se aborda.
Conforme a la referencia Desset [18], se tienen las siguientes expresiones que determinan el cálculo
propio de las distintas probabilidades debidas a patrones de error indetectables y palabras
“indecodificables”.
Retomando primeramente la ec. 4.2 perteneciente a la probabilidad de error en bit Pb:
Pb = Peb + Pub
Ec. 4.2
se tiene que la probabilidad Peb está determinada por:
Peb =
n
∑
i = t +1
 n i
b
  p (1 − p) n − i η i
n
i
Ec. 4.4
donde:
p
n
t
es la probabilidad de error perteneciente al canal binario simétrico (BSC)
longitud del código (palabra código)
número de errores máximos a corregir
η
densidad de código
bi
peso promedio de palabras r
n
 
i
combinaciones de n elementos tomados en i maneras (coeficientes binomiales)
El parámetro densidad de código η está definido como la relación entre el número de palabras
contenidas en esferas de Hamming de radio t alrededor de todas las palabras código válidas sobre el
número total de palabras de longitud n, y se determina para el caso binario como:
t
η=
∑
i =0
 n
 
i
2n − k
78
Ec. 4.5
Ahora, el parámetro bi se define como el peso promedio de Hamming de las palabras erróneas de peso i
recibidas después de que han sido decodificadas; el cómputo para los valores de bi se realiza mediante
el conteo del número de formas para decodificar una palabra recibida r de peso i dentro de palabras de
diferentes pesos, para ello se hace uso de la distribución de los pesos de tales palabra y de un factor
Ni,j., que posteriormente se detallan. Entonces la expresión para el cálculo de bi es:
min ( i + t , n )
bi =
∑
Aj N j ,i j
∑
Aj N j,i
Ec. 4.6
j =i −t
min ( i + t , n )
j =i −t
donde:
Aj
Nj,i
es el número de palabras código con peso de Hamming igual a j
factor que denota el número de palabras de peso i pertenecientes a la esfera de Hamming de
radio t alrededor de una palabra código de peso j.
Este último factor se calcula por medio de la siguiente expresión:
min
( (t − δ ) / 2 , i − δ , n − i )
∑
l =0
 i  n − i

 
,
+
l
l
δ

 

δ =i− j ≥0
Ni, j =
Ec. 4.7
min
( ( t − δ ) / 2 , i , n − i − δ )
∑
l =0
i
 
l 
n − i

,
δ
+
l


δ = j−i ≥ 0
Solamente para efectos del orden de los índices i y j que aparecen en la ec. 4.7, se puede reafirmar que
el factor Ni,j es el número de palabras de peso de Hamming igual a j pertenecientes a la esfera de
Hamming de radio t alrededor de una palabra código válida de peso i.
Por su parte, la expresión para calcular la probabilidad Pub es:
Pub =
n
∑
i = t +1
n i
i
  p (1 − p) n − i (1 − η )
n
i
Finalmente, retomando la ec. 4.3 perteneciente a la probabilidad de error en palabra Pw:
79
Ec. 4.8
Pw = Pew + Puw
Ec. 4.3
donde la probabilidad Pew está determinada por:
Pew =
n i
  p (1 − p) n − i η
i
Ec. 4.9
n i
  p (1 − p) n − i (1 − η )
i
Ec. 4.10
n
∑
i = t +1
y para la probabilidad Puw se tiene:
Puw =
n
∑
i = t +1
Con las anteriores ecuaciones se tiene completo ya el modelado matemático7, y con base en éste se ha
desarrollado un esquema de simulación para medir el desempeño de cuatro distintos códigos BCH, que
a continuación se detalla.
________
7
Fórmulas desarrollada en la referencia Desset [18], pp 914-915.
80
4.3 Simulaciones del modelo teórico
Para tales simulaciones vía software, se dispuso del paquete de programación Matlab, con el cual se
obtuvieron una serie de gráficas de desempeño (BER vs SNR, y WER vs. SNR) de algunos
codificadores BCH.
A continuación se describe el diagrama de flujo general que se desarrolló para determinar los valores
de Pb (BER) y Pw (WER), con base en el conjunto de ecuaciones de la 4.2 a la 4.10, expuesta en el
apartado anterior.
Inicio
Definir el valor de
p para el presente
cálculo
Definir datos
básicos del
codificador n, k, t
Cálculo del parámetro
η
Obtener la distribución de
los pesos de Hamming de
las palabras código Aj
Cálculo del parámetro
Νi,j
Cálculo de bi , desde i = t + 1 hasta n
Cálculo de Peb y Pub
Fin
Fig. 4.3. Diagrama de flujo para el cálculo de Pb.
81
Así como se estableció un diagrama para el algoritmo de cálculo para Pb, también se tiene un diagrama
de flujo, pero ahora para calcular Pw.
Inicio
Definir datos
básicos del
codificador n, k, t
Definir el valor de
p para el presente
cálculo
Cálculo del parámetro
η
Cálculo de Pew y Puw
Fin
Fig. 4.4. Diagrama de flujo para el cálculo de Pw.
82
4.4 Resultados gráficos del modelo teórico
En este apartado se presentan las gráficas pertenecientes al desempeño de 3 casos de códigos BCH
basadas en el modelo teórico. Sólo hay que recalcar que el parámetro de la SNR (Eb/N0) que se
presenta en decibeles (dB’s), se obtiene en función de la probabilidad de error p de un BSC, y por ello
se muestra en la parte de anexos una lista de equivalencias entre los valores de estas dos cantidades.
Caso BCH (15, 7) donde t = 2.
Fig. 4.5. Gráfica comparativa entre Pb y Pw, para desempeño del código BCH (15, 7).
83
Caso BCH (15, 5) donde t = 3.
Fig. 4.6. Gráfica comparativa entre Pb y Pw, para desempeño del código BCH (15, 5).
84
Caso BCH (7, 4) donde t = 1.
Fig. 4.7. Gráfica comparativa entre Pb y Pw, para desempeño del código BCH (7, 4).
85
4.5 Simulaciones por bloques de software en simulink.
En este segundo modelado de pruebas se aplicó el concepto de la simulación tipo Monte Carlo, pero
ahora en el ambiente de la herramienta “Simulink”, que permite simular sistemas dinámicos mediante
la utilización e interconexión de diagramas de bloques. Dichos bloque fueron seleccionados de acuerdo
a las distintas etapas básicas de una transmisión digital de banda base con su correspondiente etapa de
codificación de canal (códigos BCH), y al final de dicho proceso se calculó la tasa de errores (por bit y
por palabra) que presentó todo el esquema, con base en un millón de datos binarios procesados.
A continuación se muestra un esquema general de la simulación en “Simulink”, que se configuró para
medir también el desempeño de los cuatro tipos de codificacores BCH que se abordaron en el modelo
matemático anterior.
Fig. 4.8. Modelo general a bloques para la simulación de códigos BCH en “Simulink”.
4.6 Descripción y configuración de los bloques en simulink.
Generador de datos aleatorios.
Es el primer bloque a considerar ya que es tiene como función la de generar el tren de datos binarios
aleatorios que se conformarán en palabras de datos d a ser codificadas; y sus parámetros a configurar
son:
Probabilidad de emitir cero:
Semilla inicial:
[0.5]
[12345]
Tiempo de muestro: 0.00001
Muestras por trama: 7
86
para 1 millón de datos
para el caso del (15, 7)
Codificador BCH:
Este bloque es el codificador de canal tipo BCH que se desea evaluar. Para el caso de un codificador
BCH (15, 7), se tienen los siguientes parámetros:
Longitud de la palabra código n: 15
Longitud del mensaje (palabra dato k): 7
Canal simétrico binario (BSC):
Este bloque define el tipo de canal por el cual se transmitirán los dígitos binarios de banda base, los
cuales se verán afectados por las características propias de dicho canal. Es importante remarcar que el
parámetro a modificar en este bloque es la probabilidad de error de transición p, pero que estará en
función del valor de la SNR que se desee evaluar con base en el comportamiento de una señal antipodal
(según capítulo II). Por lo anterior, se presenta en los anexos un listado que relaciona los valores de la
SNR con su correspondiente valor de probabilidad de error p. Los datos a configurar de este bloque
son:
Probabilidad de error p: 0.05628
Semilla inicial:
(para una SNR=1dB)
2137
Decodificador BCH:
Aquí se debe emparejar el tipo de decodificador según el codificador BCH que se eligió en la etapa de
transmisión, y sus parámetros son (caso BCH (15, 7)):
Longitud de la palabra código n: 15
Capacidad de corrección de errores t: 2
Longitud del mensaje (palabra dato k): 7
87
Módulo calculador de las tasa de error y su respectivo desplegado de resultados (display):
Probabilidad de error Pb
# de datos erroneos
# de datos procesados
Esta es la última etapa del modelado de simulación dinámica, en el cual se calcula el número de dígitos
binarios procesados, el número de datos errados y la probabilidad de error por bit decodificado (BER),
el cual corresponde al cálculo de Pb del modelo matemático. Los parámetros de este módulo son:
Retardo en recepción: 0 Retardo en el cómputo: 0 Num. Máx. de símbolos: 1e6
Modo de cómputo: Trama completa
Salida de datos: por puerto
(para caso de 1 millón)
(para conectar el display)
El modelo de la fig. 4.8, como resultado de su comparación de datos binarios (uno a uno), arroja la tasa
de error por dígito binario decodificado, el denominado Pb, pero para obtener el valor de la
probabilidad de error por palabra Pw, se tuvieron que almacenar los datos de la palabra dato antes de ser
codificada y los datos después de ser decodificados, en dos variables que posteriormente con
algoritmos en “Matlab” se compararon palabra a palabra para calcular tal tasa. La fig. 4.9 esquematiza
tal adecuación al modelado de “Simulink”
Fig. 4.9. Modelo general a bloques en “Simulink”, para almacenar las palabras d.
88
4.7 Resultados gráficos del modelo de simulación por bloques “simulink”
En este apartado se presentan las gráficas pertenecientes al desempeño de los 3 casos de códigos BCH
abordados anteriormente, pero ahora basadas en el modelo de “Simulink”.
Caso BCH (15, 7) donde t = 2.
Fig. 4.10. Gráfica comparativa entre Pb y Pw, para desempeño en “Simulink” del código BCH (15, 7).
89
Caso BCH (15, 5) donde t = 3.
Fig. 4.11. Gráfica comparativa entre Pb y Pw, para desempeño en “Simulink” del código BCH (15, 5).
90
Caso BCH (7, 4) donde t = 1.
Fig. 4.12. Gráfica comparativa entre Pb y Pw, para desempeño en “Simulink” del código BCH (7, 4).
91
4.8 Estructura de la simulación con elementos de hardware
En este tercer escenario de pruebas se hizo uso del lenguaje VHDL para configurar dispositivos
CPLD’s (familia “Ultra37000” y familia “Delta39K”), tomando como base códigos fuente de la
referencia Jamro [20], que fueron adaptados para ejecutar el siguiente esquema general de simulación.
Carga y
lectura de
datos
Pe
(k)
Generador
de datos
din
Coder
BCH
Vdin
(n,k)
dout
Canal
din
(BSC)
Implementació
n en CPLD’s
Decode
r
BCH
(k)
dout
Vdout
Recolector
de datos
(n,k)
Proceso
en PC
Implementación
en PIC’s
Fig. 4.13. Diagrama a bloques para la simulación en hardware de los códigos BCH.
Para la operación de este esquema de simulación, se requirió de una ejecución por subgrupos de los
módulos, lo anterior para evitar la complejidad de la sincronía conjunta de todas las partes.
Por lo anterior, fue necesario correr la simulación inicialmente con los módulos interconectados al
coder, donde primero se cargaron las palabras dato al generador de datos (vía PC) para que éstas
fueron incorporadas de manera serial al coder, después éste último entregaba al módulo canal la
palabra ya codificada para que finalmente se pudieran leer las palabras código por parte de los procesos
en PC.
Una vez que se obtienen las palabras código en PC, es aquí donde por programación en Matlab se
alteraban dichas palabras para simular el efecto del ruido (AWGN), ello mediante un valor de Pe
específico con base en la SNR de una señal antipodal (ver anexo tabla Pe vs. SNR). Después de que se
modifican las palabras código en PC, estas palabra ahora denominadas “palabras recibidas”, se
introducen en el modulo canal.
92
Después de todo lo anterior, viene la ejecución del otro subgrupo de módulos interconectados ahora al
decoder, donde la palabra recibida es enviada por parte del modulo canal al modulo decoder para su
posterior decodificación; una vez que se tiene la palabra dato corregida, ésta se envía de manera serial
al modulo recolector de datos, para que después sean leídas por los procesos en PC.
Finalmente, ya que se tienen todos las palabras datos antes y después de su paso por todas las etapas del
esquema de la fig. 1, con recursos de Matlab y Excel, se procedió a calcular el número de dígitos
binarios y palabras completas con error, para que con ello se pudieran determinar sus correspondientes
tasas de error.
A continuación se describen los módulos desarrollados en VHDL, para entender la configuración de las
distintas etapas de la codificación y decodificación BCH a las que esta tesis se está abocando.
4.9 El codificador (coder)
El proceso de codificación fue expuesto en el capítulo III, por lo que ahora se abordará la forma en que
dicho proceso fue adaptado para el ambiente en VHDL.
El módulo coder consiste en dos entidades, una (ering) como registro de corrimiento con
retroalimentación lineal (LFSR) y otra (ecount) como sistema de control.
din
Coder BCH
(n,k)
vdin
dout
reset
ering
ecount
clk
Fig. 4.14. Módulo general coder con sus señales de entrada-salida y sus entidades VHDL para un
codificador BCH.
La entidad “ering” se dedica a describir el circuito del codificador cíclico sistemático a simular, siendo
un ejemplo de esto el siguiente circuito para el caso del codificador BCH (15, 7), que se muestra en la
fig. 4.15.
93
rll
R0
R1
R2
R3
+
R4
R5
R6
+
+
R7
+
dout
din
rin
rll señal de control para el LFSR
rin señal para habilitar la salida con din (codificador sistemático)
reset
Fig. 4.15. Circuito lógico para la implementación del codificador BCH (15,7) sistemático mediante un
registro de corrimiento con retroalimentación lineal (LFSR).
Por su parte la entidad “ecount”, tiene como propósito controlar la secuencia de los datos a procesar en
todo el codificador, ello mediante el conteo de ciclos de reloj según el tamaño de la palabra de entrada
(k) y de salida (n). El contador está conformado por un LFSR según el polinomio primitivo p(x) que
genere todos los elementos de la extensión de campo GF(2m). Para el caso del código (15,7), m = 4 y
por lo tanto su polinomio p(x) = x4 + x + 1. El siguiente esquema de la fig. 4.16 muestra tal circuito.
C(0)
+
C(1)
C(2)
C(3)
reset
Fig. 4.16. Circuito lógico secuencial para el conteo de ciclos implementado en la entidad “ecount”, con
base en el polinomio x4 + x + 1 para complementar el control de codificador BCH (15,7) sistemático.
94
La referencia de tiempo (reloj) que tiene este módulo se recibe mediante la señal de entrada “clk” (fig.
4.14) y con la implementación del anterior circuito (fig. 4.16), la entidad “ecount” coordina la
secuencia de las demás señales de entrada-salida “din” (terminal de entrada para la palabra dato) y
“dout” (terminal de salida para la palabra código), y mediante otro conjunto de flip-flops habilita la
señal “vdin” (indicador de control para la recepción de datos en el buffer de entrada) y también
controla la funcionalidad dentro de todo el sistema de la señal “reset” (reiniciar la operación del coder).
Para corroborar el buen funcionamiento de la etapa del codificador (coder) con el lenguaje VHDL, se
ejecutó el software de simulación “Active-HDL Sim”. La fig. 4.17 muestra la interfaz gráfica de dicho
software con las formas de onda resultantes.
MSB
Palabra dato
(d)
Palabra código
(c)
1
0
0
1
1
1
1
1
0
0
1
1
1
1
1
0
1
1
0
0
0
1
MSB
Fig. 4.17. Ventana de la aplicación “Active-HDL Sim” para simular la codificación de una palabra
dato, correspondiente al codificador BCH (15,7) sistemático.
95
4.10 El decodificador (decoder)
El proceso de la decodificación también fue expuesto en el capítulo III, por lo que ahora se abordará la
forma en que dicho proceso fue adaptado para el ambiente en VHDL. El modulo decoder consiste
principalmente de tres procesos que se son:
Cálculo del síndrome
Algoritmo BM
Búsqueda de Chien
Además de otros subprocesos para el control de secuencias, relojes y de corrección de los errores
detectados.
din
dout
Decoder BCH
reset
(n,k)
vdout
clk
Fig. 4.18. Módulo general decoder con sus señales de entrada-salida y sus entidades VHDL para un
decodificador BCH.
din
S1, S2,...
S3, S6,...
S5, S10,...
S2t-1
Calculo del
Síndrome
S3
S2
S1
S2t-1
Sn0
Sn1
Sn2
Sn3
S5
Sn(t)
Sn(t+1)
Sn(2t-2)
Rearreglo del
BMA
Ch0
Ch1
Síndrome
Búsqueda
Ch(t)
Sum
de Chien
Sistema
de
dout
buffer
Control
Fig. 4.19. Diagrama a bloques de las distintas entidades que describen el módulo general decoder.
96
Para corroborar el buen funcionamiento de la etapa del decodificador (decoder) con el lenguaje VHDL,
se ejecutó el software de simulación “Active-HDL Sim”. La fig. 4.20 muestra la interfaz gráfica de
dicho software con las formas de onda resultantes, además se puede observar que la palabra recibida
tiene un error, el cual después de ser decodificada éste es detectado y corregido para dar lugar a la
palabra dato original.
MSB
Palabra recibida
(r)
1
error
0 1 1 1 1 1 1 0 1 1 0 0 0 1
Palabra dato
obtenida
(d)
1
0 0 1 1 1 1
MSB
Fig. 4.20. Módulo general decoder con sus señales de entrada-salida y sus entidades VHDL para un
decodificador BCH con un error procesado.
Como se puede observar en la fig. 4.20, el error aleatorio que presenta la palabra recibida r fue
detectado y corregido por el decodificador BCH (15, 7). Ahora lo que corresponde es mostrar el mismo
proceso pero con dos errores en tal palabra, que se visualiza en la fig. 4.21.
97
MSB
Palabra recibida
(r)
1
error
0 0 0 0 1 1 1 0 1 1 0 0 0 1
Palabra dato
obtenida
(d)
1
0 0 1 1 1 1
MSB
Fig. 4.21. Módulo general decoder con sus señales de entrada-salida y sus entidades VHDL para un
decodificador BCH con dos errores procesados.
Cabe mencionar que algunos programas adaptados para esta simulación se presentan en la parte de
anexos, pero todos los programas utilizados en la tesis se contemplan grabar en un disco compacto
(CD).
98
4.11 Resultados gráficos del modelo en hardware
En este apartado se presentan las gráficas pertenecientes al desempeño de 3 casos de códigos BCH
basadas en el modelo de simulación con CPLD’s utilizando el lenguaje de descripción para dichos
dispositivos VHDL. Nuevamente hay que recalcar que el parámetro de la SNR (Eb/N0) que se presenta
en decibeles, se obtiene en función de la probabilidad de error p de un BSC, y por ello se tiene en el
anexo una lista de equivalencias entre los valores de estas dos cantidades.
Caso BCH (15, 7) donde t = 2.
Fig. 4.22. Gráfica comparativa entre Pb y Pw, para desempeño del código BCH (15, 7).
99
Caso BCH (15, 5) donde t = 3.
Fig. 4.23. Gráfica comparativa entre Pb y Pw, para desempeño del código BCH (15, 5).
Hay que mencionar que debido a la complejidad para integrar varia etapas en la simulación en VHDL y
de la baja capacidad de almacenamiento en algunos elementos, se perdio en cantidad de símbolos a
probar y también aumento el tiempo para poder completar un mayor número de corridas, por lo tanto el
desempeño de este código en especial sólo se tuvo valores confiables hasta los 2 decibeles.
100
Caso BCH (7, 4) donde t = 1.
Fig. 4.24. Gráfica comparativa entre Pb y Pw, para desempeño del código BCH (7, 4).
101
CAP V
Inferencia Comparativa
5.1 Desempeño comparativo
En este apartado se hace una comparación de las distintas gráficas obtenidas en los escenarios de
simulación del capítulo IV, con el objetivo de poder deducir el desempeño individual de cada código y
posteriormente inferir éste respecto de los demás.
Una vez que se han obtenido las graficas de Pb y Pw en los tres modelos, es pertinente mencionar lo
revelador que resultaron dichos desempeños al coincidir en los tres tipos de pruebas, ya que partiendo
desde un análisis teórico pasando por un planteamiento de modelos matemáticos y resolución de
ejemplo, continuando con simulaciones y finalizando con la implementación en hardware, se pudo
demostrar lo provechoso que resulta analizar a los codificadores de canal desde esta perspectiva.
Primeramente se muestran las gráficas de los tres escenarios de prueba para cada código BCH, y
después se intercalan estas graficas con sus correspondientes modelados (teórico y Simulink) sobre los
demás códigos BCH analizados.
Gráficas de Pb para BCH (15,7)
Para obtener las curvas de la fig. 5.1, se realizó una corrida de un millón de datos binarios
pertenecientes al caso en Simulink, mientras que para el modelo en VHDL se realizó una prueba con un
total de 25,500 dígitos binarios por cada valor de SNR. En lo que respecta al caso teórico, se evaluó su
fórmula (Pb) desde 0 a 5 dBs con incrementos de 0.25 dBs.
102
Fig. 5.1. Gráficas de Pb vs. SNR para el desempeño del código BCH (15,7).
Con base en la fig. 5.1, se puede inferir que las curvas de desempeño correspondientes a los modelos
teórico y de simulink se asemejan bastante, llegando a tener una diferencia de ajuste promedio de
0.00018714; mientras que el modelo en VHDL se comienza a separar de los dos anteriores modelos a
partir de los 2 dBs, ello debido al universo limitado datos que se pudieron simular.
Gráficas de Pw para BCH (15,7)
En este prueba el total de datos para el modelo en simulink fue de 142,860 palabras dato (k = 7), y para
la simulación en VHDL fue de 1700 palabras, además el caso teórico fue evaluado desde 0 dBs hasta 5
dBs en incrementos de 0.25 dBs.
103
Fig. 5.2. Gráficas de Pw vs. SNR para el desempeño del código BCH (15,7).
Ahora en la fig. 5.2 se puede observar que nuevamente el modelo teórico y el de Simulink presentan un
desempeño muy similar (error promedio en ajuste de – 9.85614 x 10-6); por su parte el modelo en
VHDL discrepa respecto del caso en Matlab con un error promedio de – 0.00248205.
Gráficas de Pb para BCH (15,5)
En lo que respecta al comportamiento del código BCH (15,5), el cual se recuerda tiene una capacidad
máxima de corrección de tres errores, se dispuso también de una corrida de un millón de datos para el
caso en Simulink, mientras que para el modelo en VHDL se probaron un total de 23,325 dígitos
binarios por cada valor de SNR; en el caso teórico del cálculo de Pb se evaluó desde 0 dBs hasta 5 dBs
con incrementos de 0.25 dBs.
104
Fig. 5.3. Gráficas de Pb vs. SNR para el desempeño del código BCH (15,5).
La fig. 5.3 muestra un comportamiento muy similar entre el modelo teórico y el caso de simulink, salvo
que después de los 4 dBs, el último modelado ya no arrojaba datos confiables, es decir su valor de Pb
era cero. Lo anterior se puede adecuar ejecutando una corrida de diez millones de dígitos binarios, sólo
hay que aclarar que en esta oportunidad no se contaba con la capacidad suficiente en memoria de PC
para ello. También sucedió lo mismo para el caso en VHDL, ya que posterior a los 2 dBs el valor en la
probabilidad de error en bit se obtenía de cero.
Gráficas de Pw para BCH (15,5)
Para las pruebas en el cálculo de Pw pertenecientes al código BCH (15,5), se compararon un total de
200,000 palabras dato (k=5) para el caso de simulink, mientras que para el modelo en VHDL se
ejecutaron pruebas a 1,555 palabras. El modelo teórico fue evaluado de 0 dBs a 5 dBs.
105
Fig. 5.4. Gráficas de Pw vs. SNR para el desempeño del código BCH (15,5).
El análisis que se observa de este código a partir de esta fig. 5.4 es el de un desempeño muy regular
entre los tres modelos, ello hasta donde la cantidad de las palabras simuladas lo permite,
principalmente en caso de VHDL.
Gráficas de Pb para BCH (7,4)
Para obtener las curvas de la fig. 5.5, se realizó una corrida de un millón de datos binarios
pertenecientes al caso en simulink, mientras que para el modelo en VHDL se realizó una prueba con un
total de 25,480 dígitos binarios por cada valor de SNR. En lo que respecta al caso teórico, se evaluó su
fórmula (Pb) desde 0 a 5 dBs con incrementos de 0.25 dBs.
106
Fig. 5.5. Gráficas de Pb vs. SNR para el desempeño del código BCH (7,4).
Según se observa en la fig. 5.5, se puede concluir que las curvas de desempeño correspondientes a los
modelos teórico y de Simulink se asemejan bastante; mientras que el modelo en VHDL se comienza a
separar de los dos anteriores modelos a partir de los 3 dBs, ello debido al universo datos que se
pudieron simular.
Gráficas de Pw para BCH (7,4)
En este prueba el total de datos para el modelo en simulink fue de 250,000 palabras dato (k = 7)
mientras que para la simulación en VHDL fue de 3460 palabras, además el caso teórico fue evaluado
desde 0 dBs hasta 5 dBs en incrementos de 0.25 dBs.
107
Fig. 5.6. Gráficas de Pw vs. SNR para el desempeño del código BCH (7,4).
Ahora en la fig. 5.6 se puede observar que nuevamente el modelo teórico y el de Simulink presentan un
desempeño muy similar; por su parte el modelo en VHDL comienza a discrepar respecto de los
anteriores a partir de los 4 dB’s., ello por el número de palabras que se pudieron simular en VHDL.
108
Gráficas comparativas de Pb entre los códigos BCH analizados
En este sección se presentan las gráficas del desempeño teórico (Pb) pertenecientes a todos los códigos
BCH que se simularon. Además, para tomar un comportamiento de referencia sin un proceso de
codificación de canal, se incorporó en cada figura la curva de desempeño para una señal antipodal que
se analizó en el capítulo II.
1.3 dB’s
de
diferencia
2.4 dB’s
de
diferencia
Fig. 5.7. Gráficas de Pb para comparar el desempeño teórico entre los código BCH.
Observando la fig. 5.7 se puede inferir que hay un mejor desempeño del código BCH (15, 5) respecto
al código BCH (15, 7) en el parámetro de Pb (diferencia de 1.3 dB’s a un BER = 0.0032), sin embargo
si se hace referencia al parámetro de eficiencia ( η = k / n ), se podrá advertir que el código BCH (15,7)
es más eficiente (η = 0.466) que el código (15, 5) (η = 0.333), ya que dentro de su palabra código
alberga una palabra dato de mayor longitud (7 > 5) y por lo tanto se tendrá una mayor tasa de
información de la fuente. Lo anterior también se aplica para el caso de comparar el código BCH (15, 5)
y el código BCH (7, 4), en el que existe una diferencia de 2.4 dB’s.
109
A continuación se conjuntaron las gráficas del desempeño en Simulink (Pb) pertenecientes a todos los
códigos BCH que se analizaron.
2.8 dB’s
de
diferencia
1.3 dB’s
de
diferencia
Fig. 5.8. Gráficas de Pb para comparar el desempeño en Simulink entre los código BCH.
Nuevamente en esta fig. 5.8 se identifica el mismo comportamiento que en la fig. 5.7, el cual también
presenta una diferencia de 1.3 dB’s en promedio a favor del código BCH (15, 5) respecto al código
BCH (15, 7) y de 2.8 dB’s en referencia al código BCH (7, 4).
110
Gráficas comparativas de Pw entre los códigos BCH analizados
Ahora se intercalaron las gráficas del desempeño teórico (Pw) pertenecientes a todos los códigos BCH
que se simularon; también se incorporó en cada figura la curva de desempeño para una señal antipodal.
2.1 dB’s
de
diferencia
1.5 dB’s
de
diferencia
Fig. 5.9. Gráficas de Pw para comparar el desempeño teórico entre los código BCH.
Tanto en la fig. 5.9 como en la fig. 5.10 se puede observar una diferencia promedio de 1.5 dBs a favor
del código BCH (15,5), ello cuando se trata de la tasa de error en palabra codificada Pw, esto se puede
advertir por dos razones, la primera que hay una mayor capacidad de corrección de errores en el primer
código (t = 3) y segundo por el tamaño de la palabra dato (k = 5) que tiene respecto al código (15,7) (k
= 7), lo que genera un menor universo de palabra código (32 en el primer caso y 128 en el segundo) y
que por consecuencia se tenga una menor incidencia en la decodificación de tipo errónea y en la
decodificación fallida (Pew y Puw, cap. IV).
Además se observa en la misma fig. 5.9 una diferencia de 2.1 dB’s entre el código BCH (15,5) y el
código BCH (7,4), que se debe a las mismas razones anterior mente expuesta.
111
2.1 dB’s
de
diferencia
1.5 dB’s
de
diferencia
Fig. 5.10. Gráficas de Pw para comparar el desempeño en simulink entre los código BCH.
También en esta comparación (fig. 5.10) entre los distintos codificadores respecto al parámetro Pw, con
base en el modelo de simulink, se observan las mismas diferencia en dB’s que al igual existen en el
análisis de la fig. 5.9. Lo anterior nuevamente se debe a la capacidad de corrección de errores que tiene
el código BCH (15,5) respecto a demás, pero todo tiene un costo, y es que al ganar capacidad de
corrección también se gana en complejidad sobre el diseño del algoritmo para el codificador pero sobre
todo en el algoritmo del decodificador.
112
5.2 Conclusiones
Conforme a lo analizado y desarrollado durante esta tesis, se puede concluir lo siguiente:
Lo abstracto del álgebra moderna, en especial los sistemas denominados campos de Galois, tienen en
los sistemas de comunicaciones digitales un buen ejemplo para materializar sus aplicaciones. Lo
anterior fue el corazón de este trabajo, y donde se demostró la estrecha vinculación que existe entre las
matemáticas y la ingeniería.
La forma en que se describió la operabilidad de los GF, hace posible su implementación tanto
electrónicamente (hardware) como lógicamente (software) de forma muy eficiente cuando se trata de
diseñar algoritmos para codificadores de canal, en particular los códigos algebráicos como los BCH.
Se confirmó la similitud en el desempeño de los códigos BCH analizados, con base en sus parámetros
BER y WER, lo anterior mediante pruebas integrales en hardware y software de tres modelos de
simulación: teórico, Matlab y VHDL (electrónico), como se pudo describir en el apartado anterior 5.1.
En lo que respecta al modelo teórico, éste se menciona o se aborda de manera somera en los principales
libros en materia de codificadores de canal consultados, si acaso se hace referencia a fórmulas para
determinar la WER sin tomar en cuenta los 2 tipos de errores y decodificaciones fallidas que se
mencionan en el capítulo IV. Además, lo que se expone gráficamente en algunas referencias
bibliográficas son desempeños de SNR vs. Pw como fronteras o límites superiores a las que un código
BCH está caracterizado (ec. 4.1).
Con base en los escenarios de simulación en software y hardware que fueron trabajados, se puede
mencionar que para tener una visión amplia y rápida sobre el comportamiento de los códigos cíclicos,
al menos en los parámetros Pb y Pw, los modelos teóricos y de Simulink son una buena alternativa.
Las herramientas de hardware y software que fueron desarrolladas en la presente tesis, con base en
referencias tanto escritas como de internet, junto con casos detallados de codificación, decodificación y
las gráficas que muestran el desempeño de los códigos BCH, integran un documento didáctico para
incrementar el potencial cognitivo del estudiante en ingeniería respecto a los codificadores de canal.
Finalmente, el documento aquí desarrollado se puede considerar como un medio de enseñanza, es decir
“software con el necesario hardware en un contexto particular de comunicación instruccional”.
5.3 Trabajos a futuro
Para ampliar el rango y mejorar el tiempo de operación del modelado en VHDL, será necesario contar
con un esquema de prueba integral el cual opere en tiempo real, el cual cuente con un circuito
codificador y decodificador con plena sincronía entre todos los módulos que intervienen en dicha
simulación.
113
Referencias
[1] Simon Haykin, Sistemas de Comunicación, (Limusa Wiley, 2002)
[2] J. G. Proakis, M. Salehi, Contemporary Communication System Using Matlab, (The PWS
BookWare Companion Series, 1998)
[3] R. Ziemer, W. Tranter, Principles of Communications, (John Wiley & Sons, Inc., 5th ed., 2002)
[4] S. Lin, D. J. Costelo, Error Control Coding, (Prentince Hall, 2nd ed., 2004)
[5] W. Wesley, E. J. Weldon, Error-Correcting Codes, (The MIT Press, 2nd ed., 1996)
[6] B. Carlson, P. B. Crilly and J. C. Rutledge, Communication System, (Mc Graw Hill, 5th ed., 2002)
[7] L. W. Couch II, Sistemas de Comunicación Digitales y Analógicos, (Pearson, 5ª ed., 1998)
[8] H. Hsu, Analog and Digital Communications, (Mc Graw Hill, 2nd ed., 2003)
[9] B. P. Lathi, Sistemas de Comunicación, (Interamericana Mc Graw Hill, 1986)
[10] J. Kurzweil, An Introduction to Digital Communications, (John Wiley & Sons, 2000)
[11] L. H. Charles Lee, Error-Control Block Codes for Communications Engineers, (Artech House)
[12] I. N. Herstein, Álgebra Modernar, Grupos-Anillos-Campos-Teoría de Galois, (Trillas, Biblioteca
de Matemática Superior, 5ª reimpresión, 2006).
[13] A. G. Kurosh, Curso de Álgebra Superior,
[14] L. H. Charles Lee, Error-Control Block Codes for Communications Engineers, (Artech Hose,
2000).
[15] W. W. Peterson, E. J. Weldon, Jr., Error-Correcting Codes, (The MIT Press, 2nd ed., 1996).
[16] T. K. Moon, Error Correction Codes, Mathematical Methods and Algorithms, (WileyInterscience, 2005).
[17] R. E. Blahut, Theory and Practice of Error Control Codes (Reading, MA: Addison-Wesley,
1983).
114
[18] C. Desset, L. Vandendorpe, B. Macq, “Computing the Word-, Symbol-, and Bit Error Rates for
Block Error-Correcting Codes”, IEEE Trans. Commun., vol. 52, pp. 910-921, Jun 2004.
[19] D. J. Torrieri, “Information-bit, information-symbol, and decoded-symbol error rates for linear
block codes”, IEEE Trans. Commun., vol. 36, pp. 613-617, May 1988.
[20] Ernest Jamro, The design of a VHDL based synthesis toll for BCH codecs, a thesis submitted to the
University of Huddersfield for the degree of master of philosophy, School of Engineering the
University of Huddersfield, Sep 1997.
[21] S. Brown, Z. Vranesic, Fudamentals of Digital Logic with VHDL Design (McGraw-Hill
International edition, 2nd ed., 2005).
[22] F. Pardo, J. A. Boluda, VHDL Lenguaje pas síntesis y modelado de circuitos (Alfaomega Ra-Ma,
2000).
[23] J. M. García, E. J. Pérez, Dispositivos Lógicos Programables (PLD) Diseño práctico de
aplicaciones (Alfaomega Ra-Ma, 2006).

[24] C. Pérez, Matlab
2002).
y sus Aplicaciones en las Ciencias y la Ingeniería (Pearson Prentince Hall,
[25] E. R. Berlekamp, Algebraic Coding Theory, (McGraw-Hill, 1984).
[26] E. R. Berlekamp, “On Decoding Binary Bose-Chaudhuri-Hocquenghem Codes”, IEEE
Transactions on Information Theory, vol. 11, pp. 557-579, Oct 1965.
[27] J. L. Massey, “Step-by-step Decoding of the Bose-Chaudhuri-Hocquenghem Codes”, IEEE
Transactions on Information Theory, vol. 11, pp. 580-585, Oct 1965.
[28] J. L. Massey, “Shift-Register Synthesis and BCH Decoding”, IEEE Transactions on Information
Theory, vol. 15 (1), pp. 122-127, Jan 1969.
[29] C. L. Chen, “High-Speed Decoding of BCH Codes”, IEEE Transactions on Information Theory,
vol. 27(2), pp. 254-259, Mar 1981.
115
[30] F. I. Peralta, G. I. Duchen, R. Vázquez, “Complejidad Lineal y Algoritmo Berlekamp-Massey para
la Construcción de Generadores de Secuencias Pseudoaleatorias”, Información Tecnológica, vol. 17 N°
3-2006, pp. 167-178, 2006, versión on-line.
[31] L. N. Childs, A concrete Introduction to Higher Algebra, (Springer, 2nd ed., 2000).
[32] S-W. Wei, “High-speed hardware decoder for double-error-correcting binary BCH Codes”, IEE
Proceedings, vol. 136, N° 3, pp. 227-231, Jun 1989.
[33] M. A. Hasan, M. Wang, V. K. Bhargava, “Modular Construction of Low Parallel Multiplier for a
Class of Finite Fields GF(2m)”, IEEE Transactions on Computer, vol. 41, N° 8, pp. 962-971, Aug 1992.
[34] J. Beltrán Llera, J. A. Bueno, Psicología de la Educación, (Alfaomega Marcombo, 1997).
[35] J. A. Vargas Mendoza, Álgebra Abstracta, (Limusa, 1986).
[36] Thomas M. Cover, Joy A. Thomas, Elements of Information Theory, (John Wiley & Sons, 1991)
116
Evariste Galois (1811 - 1832)
JOVEN Y REVOLUCIONARIO:
Évariste Galois, nació el 25 de octubre de 1811 en Bourg-la-Reine una pequeña población
en los alrededores de París, en el momento del máximo esplendor del Imperio de Napoleón,
en una familia republicana, que sufre las dificultades de la caída en 1814 de Napoleón y la
vuelta de la monarquía derrocada en la revolución de 1789.
Su padre Nicholas Gabriel Galois, director de la escuela de la localidad que llegaría a ser
alcalde de la comuna al frente del partido liberal, partidario de Napoleón. Su madre
Adelaida Marie Demante, era una persona de indudables cualidades intelectuales hija de
una familia de abogados muy influyente de París.
Hasta los doce años, Évariste fue educado por su madre, junto con su hermana mayor
Nathalie-Theodore, consiguiendo una sólida formación en latín y griego, así como en los
clásicos. La educación regular de Galois comenzó en 1823, cuando ingreso en el “Collage
Royal de Louis le Grand”, de París. En el Louis le Grand, Galois comenzó en este colegio
inmediatamente a sensibilizarse políticamente; sus simpatías liberales y democráticas
adquiridas de sus padres, estaban en consonancia con las simpatías de la mayoría de los
alumnos. No obstante, durante el primer año de Galois en el Louis le Grand, las relaciones
entre el alumnado y el rector recién nombrado fueron ásperas y tirantes. Los alumnos
sospechaban que el nuevo rector se proponía devolver el colegio a los jesuitas. Los alumnos
hicieron un plan sin excesiva trascendencia: se negaron a cantar en la capilla, a recitar en
clase y a brindar por Luís XVIII en un banquete colegial. En represalia, el rector expulso a
40 alumnos sospechosos de haber encabezado la rebelión. Aunque Galois no fue expulsado,
la arbitraria acción de tal rector contribuyó sin duda a fomentar los recelos que Galois
pudiera sentir hacia la autoridad.
A1
Durante 1824 y 1825, Galois ganó varios premios de griego y latín. Aunque durante el
tercer año, su trabajo en retórica fue considerado insuficiente y tuvo que repetir curso.
En febrero de 1827 fue decisivo en la vida de Galois. Tomó su primera clase de
matemáticas. El curso, impartido por Hippolyte Jean Vernier, despertó el genio
matemático de Galois. Tras engullir a toda velocidad los manuales de texto, fue derecho
hacia las obras maestras de la época, devorando Los elementos de Geometría de Adrien
Marie Legendre, inmediatamente después se enfocó con las memorias originales de
Joseph Louis Lagrange: La resolución de ecuaciones algebraicas, La teoría de funciones
analíticas y Lecciones sobre cálculo de funciones. Fue sin duda de Lagrange de quien
aprendió por primera vez la teoría de ecuaciones. El descubrimiento de las matemáticas
provocó un sorprendente cambio en la personalidad de Galois. Empezó a descuidar las otras
materias, atrayendo hacia si la hostilidad de los profesores de humanidades. Incluso
Vernier, aunque sin pretender enfriar la pasión matemática de Galois, le insistió en la
necesidad de trabajar más sistemáticamente. Los informes escolares de Galois lo
empezaron a describir como singular, excéntrico, original y hermético.
En 1828 a la edad de dieciséis años solicitó su ingreso en la “Ecole Polytechnique”. Esta
era la universidad más importante de París y es probable que Galois se haya visto motivado
a ingresar a ella por razones académicas. Pero también deseaba entrar a esta institución por
los fuertes movimientos políticos que existían entre sus estudiantes dado que Galois al igual
que sus padres, era un ferviente republicano. La admisión para la Ecole Polytechnique era
mediante examen oral. Sabemos ahora que Galois, a esa edad, era un matemático superior
a sus sinodales o examinadores. Galois rehusó contestar las preguntas elementales y
respondió a las más elevadas con tal profundidad de conocimientos que sus examinadores
no pudieron entender sus respuestas. Está por demás, decir que Galois fue reprobado en el
examen de admisión.
De vuelta al Louis le Grand, Galois se incorporó a la clase de matemáticas de Louis
Richard, quien se percató inmediatamente de las dotes de Galois solicitando que éste fuera
admitido sin examen previo en la Ecole Polytechnique. Aunque su recomendación no fue
atendida, el estímulo de Richard produjo en Galois resultados sobresalientes.
En abril de 1829 Galois logró publicar su primer trabajo, se titulaba Demostración de un
teorema sobre fracciones continuas periódicas, y apareció en Annales de mathematiques
pures et apliques, de Joseph Díaz Georgonne. Sin embargo, este artículo no fue su
objetivo primordial, ya que Galois había dirigido su atención hacia la teoría de ecuaciones,
tema que había explorado por primera vez en las obras de Lagrange.
A sus diecisiete años estaba atacando uno de los más difíciles problemas de las
matemáticas; un problema que había mantenido en jaque a los matemáticos durante más de
un siglo. Lo que Galois consiguió fue dar criterios definitivos para determinar si las
soluciones de una ecuación polinómica podrían ser o no calculadas por radicales. Sin
embargo, lo más notable quizá de los descubrimientos de Galois en teoría de ecuaciones
fueron los métodos que ideó para estudiar el problema. Sus investigaciones abrieron las
puertas de una teoría cuyas aplicaciones desbordan con mucho los límites de la teoría de
ecuaciones: la teoría de grupos.
A2
La tragedia golpeó a Galois el 2 de julio de 1829 fecha en que su padre se suicidó. El
reverendo de Bourg-la-Reine incluyó el nombre del alcalde Galois en maliciosos epigramas
falsificados dirigidos a los familiares de Galois. El padre de Galois era un hombre
bondadoso y el escándalo que se suscitó fue mayor de lo que el pudo soportar. Se colgó en
su departamento de París ubicado a unos pasos del Lycee Louis-le-Grand donde estudiaba
su hijo. Esta muerte impactó fuertemente a Galois y marcó el resto de su vida. Pocas
semanas después de la muerte de su padre Galois nuevamente solicitó su ingreso a la Ecole
Polytechnique cuando tenía dieciocho años. Durante el examen, uno de los sinodales inició
una controversia matemática. Galois estaba en lo justo y lo sabia. En un acceso de cólera,
mezclado con desesperación, arrojó a su sinodal el borrador del pizarrón. Galois no fue
admitido en la Ecole Polytechnique.
Viéndose obligado a tomar en consideración la escuela menos prestigiosa la “Ecole
Normale”, Galois se presentó a los exámenes de bachillerato necesarios para ser admitido,
en noviembre de 1829. Esta vez fue aprobado en razón de una excepcional calificación en
matemáticas, recibiendo la categoría de universitario aproximadamente al mismo tiempo
que sus trabajos sobre teoría de grupos iban a ser presentados a la Academia de Ciencias.
Galois envió a Cauchy trabajos posteriores sobre la teoría de las ecuaciones, sin embargo
Cauchy lo rechazó porque su trabajo tenía puntos en común con un reciente artículo
publicado por Abel. Galois siguió los consejos de Cauchy y presentó un nuevo artículo
titulado Condiciones en las que una ecuación pueda ser resuelta con radicales, en febrero
de 1830, y en esta ocasión, Cauchy lo remitió a la Academia para ser considerado para el
Gran Premio en matemáticas. Por lo que fueron enviados a Jean Baptiste Joseph Fourier,
en su calidad de secretario vitalicio de la misma y el encargado de su publicación. Fourier
murió en abril de 1830 y el trabajo de investigación de Galois se extravió por lo que no
pudo ser nunca nominado para el premio. El premio fue otorgado exequo a Abel y a
Jacobi, y Évariste acusó a la Academia de una farsa para desacreditarle.
A pesar de la pérdida de la memoria enviada a Fourier, Galois publicó tres artículos aquel
mismo año en el Bulletin des sciences mathematiques, astronomiques, physiques et
chimiques del Barón de Ferussac. Estos trabajos presentan los fundamentos de la Teoría de
Galois y prueban sin lugar a dudas que el joven había llegado más lejos que ningún otro
matemático en el campo del álgebra relacionado con la resolución de ecuaciones
polinómicas, ya que a sus diecinueve años Galois dominaba totalmente las ecuaciones
algebraicas, en las cuales había demostrado que no podía existir una fórmula general para
los grados mayores que 4 (esto era el principio de sus grandes desarrollos). Continuó
describiendo aquellas ecuaciones que podían resolverse usando la adición, la multiplicación
y la extracción de raíces. Por la misma época Abel había iniciado algo en este sentido, sin
embargo Galois lo obtuvo todo, no sólo demostró que no hay ninguna fórmula general que
sirva para todas las ecuaciones de quinto grado, sino que, aun suponiendo que se deseara
establecer un método especial para cada ecuación particular, hay ecuaciones que
algebraicamente no tienen solución. Con una perspicacia superior a los de otros, dio
renovados enfoques a dichos problemas.
A3
En julio de 1830 estalló la revolución, los republicanos se levantaron en armas y obligaron
al rey Carlos X a exiliarse. Hubo desordenes en las calles de París y el director de la Ecole
Normale, M. Guigniault, encerró a los estudiantes para que no participaran en las
manifestaciones. Indignado Galois intentó sin éxito escalar los muros; al no conseguirlo no
tomó parte en la breve revolución. Aunque los republicanos consideraron que la abdicación
del Borbón fue una gran victoria, su triunfo fue efímero. Para frustración de Galois y de
otros liberales de ideología afín, el trono fue nuevamente ocupado, esta vez por Luís Felipe
de Orleáns.
En diciembre de 1830 M. Guigniault escribió artículos para el diario atacando a los
estudiantes y Galois escribió una respuesta para la Gazette des Ecoles contraatacando a M.
Guigniault por haber encerrado a los estudiantes en el colegio y llamándolo traidor por su
actitud durante la revolución de julio. Fue expulsado por ello de la Ecole Normale. Tras su
expulsión de la Ecole Normale se mudó a la casa de su madre en París; tan difícil resultaba
convivir con él, que su propia madre le abandonó.
A finales de 1830, 19 oficiales de la Artillería de la “Garde Nationale” fueron arrestados y
acusados de conspirar contra el gobierno. Fueron absueltos y el 9 de mayo de 1831, 200
republicanos se reunieron en una cena para celebrar la absolución. Durante la cena Galois
alzó la copa y con una daga descubierta en su mano amenazo abiertamente al rey LouisPhillipe. A causa de esta acción desafiante fue detenido al día siguiente y encarcelado
durante más de un mes en la prisión de Sainte-Pelagie. En el juicio, la defensa de Galois
sostuvo que el brindis había sido: “¡Por Luís Felipe, si traiciona!” pero la frase “si
traiciona” había quedado ahogada por el clamor de los comensales. No se sabe si los
jurados creyeron este alegato o si se conmovieron por la juventud de Galois, que contaba
entonces con 19 años; lo cierto es que le absolvieron en pocos minutos.
Dos trabajos de menor importancia, un abstract en los Annales de Gergonne y una carta
sobre la enseñanza de la ciencia en la Gazette des Ecoles el 2 de enero de 1831 fueron las
ultimas publicaciones de su vida. Galois trató de volver a las matemáticas en enero de
1831. Organizó algunas clases de álgebra superior que atrajeron a 40 estudiantes a la
primera sesión sin embargo, el interés decayó rápidamente. Durante aquel año de 1831
Galois por fin había redondeado las cuestiones pendientes en su trabajo y lo había sometido
a la consideración de Poisson quien le recomendó presentar a la Academia una tercera
versión de su memoria sobre ecuaciones y así lo hizo el 17 de enero.
Era el 14 de julio, día de La Bastilla, y Galois fue arrestado nuevamente. Estaba usando el
uniforme de la Artillería de la “Garde Nationale”, lo que era ilegal, y llevaba también
consigo un rifle cargado, varias pistolas y una daga.
Galois fue enviado de vuelta a la prisión de Sainte-Pelagie. Durante su confinamiento se le
notificó que su memoria había sido rechazada. El propio Poisson, a pesar de su enorme
prestigio matemático y de sus esfuerzos, no llegó a comprender los resultados que le
presentaba aquella memoria. Después Poisson animó a Galois a publicar una más completa
relación de su trabajo. Durante su confinamiento en la prisión de Sainte-Pelagie, Galois
trató de suicidarse apuñalándose con una daga pero los otros prisioneros lo impidieron (en
otros textos se hace referencia a que lo trataron de asesinar).
A4
En marzo de 1832 una epidemia de cólera barrió París, y los prisioneros incluyendo a
Galois, fueron transferidos al internado “Sieur Faultrier”. Fue allí donde al parecer se
enamoró de Stephanie-Felice du Motel, la hija del médico residente. Tras ser liberado el 29
de abril, Galois intercambio correspondencia con Stephanie sin embargo, ella trató de
distanciarse de aquella aventura. El nombre de Stephanie aparece varias veces en los
manuscritos de Galois en notas al margen.
Los detalles que condujeron a su duelo no están claros aunque se suponen dos causas, la
primera a causa de un lío de faldas y la segunda es que los realistas lo consideraban tan
peligroso adversario que arreglaron para que fuera desafiado a un duelo de honor.
Lo que queda para la historia es la noche anterior al evento. Évariste Galois estaba tan
convencido de lo inmediato de su muerte que pasó toda la noche escribiendo cartas a sus
amigos republicanos y componiendo lo que se convertirla en su testamento matemático.
Galois escribió a sus amigos:
Pido a los patriotas y a mis amigos no me reprochen
que muera por otra causa que no es la de mi patria.
Muero víctima de una infame coqueta. Mi vida se
extingue en una miserable disputa. ¿Por qué morir por
una cosa tan trivial, tan despreciable?
. . . . Conserven mi recuerdo, ya que el destino
no me ha dado suficiente vida para que mi país
conozca mi nombre.
A5
En estos papeles describió someramente las implicaciones del trabajo que había
desarrollado en detalle y anotó una copia del manuscrito que había remitido a la academia
junto con otros artículos.
El 30 de mayo de 1832 a primera hora de la mañana, Galois se batió a duelo con Perscheux
d’Herbinville, su adversario lo hirió en el abdomen y su padrino abandonó el campo en
busca de un médico. Ni el padrino ni el médico regresaron. Un campesino, que pasaba
casualmente por el lugar, lo llevó a un hospital. El hermano menor de Galois rompió en
llanto al visitarlo en el hospital. Galois trató de consolarlo y de confortarse a si mismo,
diciéndole: “No llores; necesito todo mi valor para morir a los veinte años”. Falleció en la
mañana del 31 de mayo de 1832.
El hermano de Galois y su amigo Chevalier copiaron sus trabajos matemáticos y se los
enviaron a Gauss, Jacobi y otros. Había sido el deseo de Galois que Jacobi y Gauss dieran
una opinión sobre su obra. No hay evidencia de ningún comentario que éstos hayan hecho.
Las contribuciones matemáticas de Galois fueron publicadas finalmente en 1843 cuando
Joseph Liouville revisó sus manuscritos y declaró que aquel joven en verdad había resuelto
el problema de Abel por otros medios que suponían una verdadera revolución en la teoría
de las matemáticas empleadas. El manuscrito fue publicado en el número de octubre de
1846 del “Journal des mathematiques pures et appliquees”.
Las obras reunidas de Galois abarcan un total de sesenta páginas. Tales breves páginas de
matemáticas, escritas entre los dieciséis y los veinte años, han dado nueva forma desde
entonces a la matemática.
A6
SNR_dBa
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
1.1
1.2
1.3
1.4
1.5
1.6
1.7
1.8
1.9
2
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
2.9
3
3.1
3.2
3.3
3.4
3.5
3.6
3.7
3.8
3.9
4
4.1
4.2
4.3
4.4
4.5
4.6
4.7
4.8
4.9
Tabla de la SNR vs. Probabilidad de error para una señal antipodal
Pe
SNR_dBa
0.0786496
0.07627397
0.07392678
0.07160898
0.06932149
0.0670652
0.06484099
0.06264974
0.06049227
0.05836941
0.05628195
0.05423065
0.05221625
0.05023945
0.04830091
0.04640128
0.04454114
0.04272106
0.04094156
0.0392031
0.03750613
0.03585102
0.03423812
0.03266771
0.03114003
0.02965529
0.0282136
0.02681507
0.02545972
0.02414752
0.02287841
0.02165224
0.02046885
0.01932797
0.01822932
0.01717254
0.01615724
0.01518295
0.01424916
0.01335532
0.01250082
0.011685
0.01090715
0.01016654
0.00946237
0.00879381
0.00816001
0.00756005
0.00699302
0.00645796
5
5.1
5.2
5.3
5.4
5.5
5.6
5.7
5.8
5.9
6
6.1
6.2
6.3
6.4
6.5
6.6
6.7
6.8
6.9
7
7.1
7.2
7.3
7.4
7.5
7.6
7.7
7.8
7.9
8
8.1
8.2
8.3
8.4
8.5
8.6
8.7
8.8
8.9
9
9.1
9.2
9.3
9.4
9.5
9.6
9.7
9.8
9.9
10
A7
Pe
0.00595387
0.00547975
0.00503457
0.0046173
0.00422687
0.00386223
0.0035223
0.00320601
0.00291229
0.00264007
0.00238829
0.0021559
0.00194187
0.00174517
0.00156481
0.0013998
0.0012492
0.00111207
0.00098751
0.00087466
0.00077267
0.00068075
0.00059812
0.00052404
0.00045782
0.0003988
0.00034634
0.00029986
0.0002588
0.00022264
0.00019091
0.00016315
0.00013894
0.00011791
0.00009971
0.000084
0.0000705
0.00005894
0.00004909
0.00004071
0.00003363
0.00002766
0.00002265
0.00001847
0.00001499
0.00001211
0.00000974
0.00000779
0.0000062
0.00000491
0.00000387
Listado del programa en VHDL para el codificador (15,7)
-- Codificador BCH (15,7), t=2
--------------------------------------------------------------------------- disposición del LFSR para el codificador
library ieee;
use ieee.std_logic_1164.all;
ENTITY ering IS
PORT (clk, rll, din: IN BIT;
dout: OUT BIT); --salida de datos serial
END ering;
ARCHITECTURE eringa OF ering IS
SIGNAL rin, rout: BIT_VECTOR(0 TO 7);
SIGNAL rin0: BIT;
BEGIN
dout<= rout(7);
rin0 <= (din XOR rout(7)) AND rll;
rin(0)<= rin0;
rin(1)<= rout(0);
rin(2)<= rout(1);
rin(3)<= rout(2);
rin(4)<= rout(3) XOR rin0;
rin(5)<= rout(4);
rin(6)<= rout(5) XOR rin0;
rin(7)<= rout(6) XOR rin0;
-- Polinomio generador --100010111
PROCESS BEGIN
WAIT UNTIL clk'EVENT AND clk='1';
rout<= rin;
END PROCESS;
END eringa;
--------------------------------------------------------------------------- Contador LFSR para - control de señales
library ieee;
use ieee.std_logic_1164.all;
ENTITY ecount IS
PORT (clk, reset: IN BIT;
vdin: OUT BIT);
END ecount;
ARCHITECTURE ecounta OF ecount IS
SIGNAL cout: BIT_VECTOR(0 TO 3);
SIGNAL vdinR, vdinS, vdin1: BIT;
BEGIN
vdinR<= NOT cout(0) AND NOT cout(1) AND cout(2) AND cout(3);
-- reset vdin if cout==k-1
vdinS<= ( cout(0) AND NOT cout(1) AND NOT cout(2) AND cout(3)) OR reset;
-- vdinS=1 if cout==n-1
vdin<= vdin1 AND NOT reset;
PROCESS BEGIN
A8
WAIT UNTIL clk'EVENT AND clk='1';
IF vdinR='1' THEN
vdin1<= '0';
ELSIF vdinS='1' THEN
vdin1<= '1';
END IF;
END PROCESS;
PROCESS BEGIN -- proceso para incremento o restablecimiento del circuito contador
WAIT UNTIL clk'EVENT AND clk='1';
cout(0)<= cout(3) OR reset;
cout(1)<= (cout(0) XOR cout(3)) AND NOT reset;
cout(2)<= cout(1) AND NOT reset;
cout(3)<= cout(2) AND NOT reset;
END PROCESS;
END ecounta;
-----------------------------------------------------------------arquitectura que coordina las entidades ering y ecount
library ieee;
use ieee.std_logic_1164.all;
ENTITY enc IS
PORT (clk, reset, din: IN BIT;
vdin, dout: OUT BIT);
END enc; -- vdin – validación de los datos de entrada
ARCHITECTURE enca OF enc IS
SIGNAL vdin1, rin, rout, rll: BIT;
-- rll-ring loop lock, pe
COMPONENT ecount
PORT(clk, reset: IN BIT; vdin: OUT BIT);
END COMPONENT;
FOR ALL: ecount USE ENTITY WORK.ecount (ecounta);
COMPONENT ering
PORT(clk, rll, din: IN BIT; dout: OUT BIT);
END COMPONENT;
FOR ALL: ering USE ENTITY WORK.ering (eringa);
BEGIN
c1: ecount
PORT MAP (clk, reset, vdin1);
r1: ering
PORT MAP (clk, rll, rin, rout);
rin<= din AND NOT reset;
rll<= vdin1 AND NOT reset;
vdin<= vdin1;
PROCESS BEGIN
WAIT UNTIL clk'EVENT AND clk='1';
dout<= (NOT vdin1 AND rout) OR (vdin1 AND rin);
END PROCESS;
END enca;
A9
Descargar