Codificación de Fuente y Canal - Departamento de Teoría de la

Transcripción

Codificación de Fuente y Canal - Departamento de Teoría de la
Codificación de Fuente y de Canal
PRÁCTIC A 7
( 2 sesiones)
Laboratorio de Señales y Comunicaciones
3 curso, Ingeniería Técnica de Telecomunicación
er
Javier Ramos López, Fernando Díaz de María, Fernando Pérez Cruz y
David Luengo García
1. Objetivos
Los objetivos principales de esta práctica son los siguientes:
• Estudiar la cantidad de información media generada por una fuente discreta o por
una fuente continua cuantificada mediante el concepto de entropía.
• Construir códigos de fuente capaces de proporcionar una tasa de salida cercana a la
entropía de la fuente: códigos de Huffman.
• Construir códigos de canal capaces de proporcionar una cierta protección frente a
errores: códigos de Hamming.
2. Contenido Teórico
A continuación se va a realizar una breve descripción de los elementos que van a ser
necesarios para la realización de esta primera práctica: la codificación de fuente
(códigos de Huffman), y la codificación de canal (códigos de Hamming). Esta
descripción no va a sustituir la información recibida en las asignaturas de Teoría de la
Comunicación y Comunicaciones Digitales, y se deberá acudir a las referencias
bibliográficas de estas asignaturas para comprender todos los aspectos teóricos que se
van a tratar en estas prácticas.
2.1. Codificación de Fuente
La salida que se tiene del codificador está en muchos casos correlada, y algunos bits o
cadenas de bits son mucho más probables que otros. Esto provoca que se transmitan
más bits de los que son estrictamente necesarios para enviar la información deseada
entre el transmisor y el receptor. La cantidad de información por símbolo generada por
una fuente viene medida por su entropía. Suponiendo que una fuente discreta es capaz
de generar un total de M valores distintos, cada uno de ellos con probabilidad pi, su
entropía se define como:
M
H = "! pi log 2 pi .
i =1
La entropía proporciona el límite inferior del número de bits por muestra necesarios
para transmitir la información de la fuente sin pérdidas, y es la tasa de salida hacia la
que debe tender un buen codificador de fuente. Cuando la tasa de transmisión es mucho
mayor que la entropía de la fuente, entonces es posible que algunas de las propiedades
de las modulaciones (por ejemplo su anchura espectral) no sean idénticas a los valores
teóricos, lo que puede dar lugar a interferencias con otros sistemas de comunicaciones.
La codificación de fuente se encarga de eliminar dicha correlación de tal forma que los
bits que aparecen a su salida están incorrelados, y todas las cadenas de cualquier
longitud son igualmente probables, obteniéndose un espectro similar al teórico y una
cadena de bits a transmitir lo más corta posible.
Una de las formas más habituales de realizar la codificación de fuente es la codificación
de Huffman, en la que a cada símbolo o cadena de bits de idéntica longitud se le asigna
otra cadena de bits de longitud variable. Cuanto mayor sea la probabilidad de aparición
de un símbolo (o cadena de bits) menor será la longitud de la cadena asignada, de tal
forma que la longitud media de las cadenas resultantes sea menor que la de las cadenas
de bits originales. La ventaja de este tipo de codificadores es que se pueden ilustrar de
manera sencilla mediante un ejemplo.
Ejemplo:
Supongamos que se dispone de una fuente continua que discretizamos empleando un
cuantificador uniforme con 8 niveles. A continuación codificamos sus salidas, asignándole a cada muestra de entrada un símbolo compuesto por tres bits. Las probabilidades
de cada uno de estos símbolos son: P(000) =0.2, P(001) =0.01, P(010) =0.4, P(011)
=0.04, P(100) =0.1, P(101) =0.02, P(110) =0.07 y P(111) =0.16. En consecuencia, la
entropía de esta fuente es
M
H = !" pi log 2 pi = 2.38 ,
i =1
que es significativamente inferior a los 3 bits por muestra que estamos empleando si
tomamos directamente la salida del codificador. La codificación de Huffman le va
asignar a cada cadena de 3 bits una cadena de longitud variable que minimice el número
de bits medio por símbolo. Por supuesto, dichas cadenas de bits deben ser unívocamente
decodificables. Para asignar estas cadenas se ordenan los símbolos de acuerdo con sus
probabilidades: desde el más probable hasta el menos probable. A continuación, se
juntan los dos símbolos menos probables, dando lugar a un nuevo símbolo cuya
probabilidad es la suma de ambos, y se vuelven a ordenar. Esta operación (parte hacia
delante del algoritmo) se repite hasta que se hayan sumado todas las probabilidades,
generándose un árbol de símbolos. En la Figura 1 se muestran las probabilidades
ordenadas en cada iteración del algoritmo para este ejemplo.
Figura 1: Suma de probabilidades para construir el código de Huffman del ejemplo.
Una vez que el árbol está completamente construido (es decir, en el momento en que
todos los símbolos se han juntado en uno solo con probabilidad 1), se recorre el árbol de
derecha a izquierda (parte hacia atrás del algoritmo), asociando con cada bifurcación
(esto es, donde se han sumado 2 probabilidades) un 0 y un 1 en cada una de sus ramas
(se puede hacer de manera arbitraria). En la Figura 2 se muestra dicha asignación, donde
siempre se ha situado el 0 en la rama superior.
Figura 2: Asignación de bits a cada bifurcación del árbol del ejemplo.
Por último, se leen los bits de derecha a izquierda hasta llegar al símbolo original, y
dicha cadena de bits es la que se le asigna a cada símbolo de entrada. En la Figura 3 se
muestra la cadena de longitud variable asignada a cada cadena de tres bits, pudiéndose
apreciar que los símbolos más probables tienen asociadas cadenas más cortas, y los
menos probables cadenas asignadas más largas. Este ejemplo es constructivo en el
sentido de que cualquier código de Huffman se puede obtener de la misma manera.
Además, se puede demostrar que para una asignación no fraccionaria de bits por
símbolo dicho código es óptimo. Es decir, se trata del que más se acerca al límite teórico
dado por la entropía de la fuente.
Figura 3: Asignación de códigos realizada por el codificador de Huffman.
La calidad de un código de fuente se puede medir por diversos parámetros, de los que
en esta práctica únicamente consideraremos dos: la tasa de compresión y la eficiencia.
La longitud media de un código se define como la longitud en promedio de una palabra
del mismo:
M
L = ! pi ni ,
i =1
donde ni es el número de bits usados para codificar el símbolo i-ésimo. Ahora, la tasa
de compresión de un código de Huffman se define como la relación de compresión
lograda frente a un código de longitud fija utilizado para codificar dicha fuente:
log M
# = ! 2 ".
L
Una segunda medida de rendimiento es la eficiencia del código, que mide lo cercana
que se encuentra su longitud media del límite teórico dado por la entropía:
!=
H (X )
.
L
Para un código de Huffman se cumple que " ! 1 , y H ( X ) /(1 + H ( X )) ! " ! 1 . Como
ejemplo, el código del apartado anterior es un buen código, ya que su longitud media es
2.44 (recuérdese que su entropía era 2.38), lo que implica una tasa de compresión de
1.23 y una eficiencia del 97.54 % (el límite anterior nos indica que para esta fuente la
eficiencia de un código de Huffman debe ser superior al 70.41 %).
Por último, aunque los códigos de Huffman sean óptimos para asignaciones no fraccionarias de bits, su rendimiento (longitud media del código) puede encontrarse muy lejos
de la entropía de la fuente. Esto sucede por ejemplo cuando se dispone de una fuente
con probabilidades muy dispares pero muy pocos símbolos para realizar asignaciones de
códigos de longitud variable (por ejemplo, una fuente binaria cuyos símbolos tengan
probabilidades 0.9 y 0.1). En estos casos, el rendimiento se puede mejorar realizando
una extensión del código. La manera más sencilla de hacerlo consiste en suponer que
los símbolos consecutivos son independientes, tomar bloques de k símbolos en lugar de
tomarlos de uno en uno, y diseñar un código de Huffman para los Mk símbolos
resultantes. Se puede demostrar que mejora el rendimiento del código (esto es, que
disminuye su longitud media) conforme aumenta el valor de k, tendiendo su longitud
media hacia el valor de la entropía (límite teórico) cuando k tiende a infinito.
Obviamente, el inconveniente de realizar una extensión del código estriba en que
aumenta su complejidad conforme se van utilizando valores mayores de k.
2.2. Codificación de canal
El codificador de canal introduce redundancia controlada de tal forma que si se produce
algún error en el canal de comunicaciones se pueda detectar y/o corregir. Hay distintos
sistemas de protección contra errores: códigos bloque, códigos convolucionales, códigos
de rejilla (“trellis”), etc. En esta práctica nos vamos a centrar en los más sencillos: los
códigos bloque lineales. Estos códigos toman los bits de la entrada de k en k, y los
transforman en n bits de salida (es decir, añaden r=n-k bits de redundancia). Para llevar
a cabo esta transformación se multiplica un vector fila de k bits por una matriz de k×n
elementos binarios, y se realiza la operación de módulo 2 sobre el vector salida de n
elementos. Los bits de redundancia son los que van a permitir detectar y corregir los
errores que se produzcan en el canal de comunicaciones. En la Figura 4 se muestra de
forma esquemática y algebraica el funcionamiento del codificador.
Figura 4: Modelo esquemático y algebraico del codificador de canal.
Es posible detectar la existencia de un error en el canal de comunicaciones con estos
códigos gracias a que a la salida del codificador se tiene un espacio vectorial de
dimensión n (con 2n posibles vectores por lo tanto), dentro del cual únicamente existen
2k vectores válidos. En consecuencia, 2n – 2k vectores no se pueden dar a no ser que se
haya producido al menos un error en el canal de comunicaciones. Para corregir este
error (o errores) se procede calculando la distancia Hamming (es decir, el número de
bits que son diferentes) entre el vector recibido en el decodificador de canal y los 2k
vectores válidos del código, y decidiendo que se ha transmitido aquel cuya distancia de
Hamming con el recibido es menor.
Para realizar el proceso de detección se suele emplear una matriz de r×n elementos que
transforma el vector recibido en un cadena de r bits, el síndrome, que identifica
unívocamente cada uno de los errores que se han podido producir en el canal de
comunicaciones (hasta un cierto número máximo de errores, que depende de la
capacidad correctora del código bloque, y que está relacionado con la mínima distancia
de Hamming entre dos palabras código). Una vez identificados los bits en que se han
producido los errores, puesto que la señal es binaria, se pueden modificar simplemente
dichas posiciones para obtener los bits supuestamente transmitidos. En la Figura 5 se
muestra de forma esquemática y algebraica el funcionamiento del decodificador.
Figura 5: Modelo esquemático y algebraico del decodificador de canal.
La forma de medir la calidad de estos sistemas de protección contra errores no es única,
aunque habitualmente se basan en lo que se conoce como ganancia de codificación. La
ganancia de codificación se define como el aumento en la energía media por bit que
hay que introducir en la modulación posterior sin codificación de canal para obtener la
misma probabilidad de error que se obtiene con esta codificación. El problema para
medir esta ganancia radica en cómo se debe calcular la probabilidad de error cuando se
introduce el codificador de canal: manteniendo la tasa de transmisión o aumentándola.
En el primer caso el tiempo de bit en la modulación posterior no varía (es decir, se
mantiene la tasa binaria), de modo que la introducción del código bloque va a suponer
una gran ganancia sobre el sistema sin codificar: la probabilidad de error de bit (BER)
del modulador sin codificar no cambia, y el código bloque va a ser capaz de corregir
algunos errores. Sin embargo, en este caso estaremos transmitiendo a una tasa k/n veces
menor que en el sistema original, puesto que por cada n bits que transmitimos
únicamente k son de información (los restantes son bits de redundancia). En
consecuencia, esta comparación puede parecer injusta.
La segunda posibilidad consiste en mantener la amplitud de la modulación constante y
disminuir el tiempo de bit multiplicándolo por k/n (es decir, se aumenta la tasa binaria),
de tal forma que la tasa a la que se envían los bits de información permanece inalterada.
En este caso, al haber reducido la energía por bit, la probabilidad de error del modulador
sin codificar va aumentar, y el código tendrá que compensar además este aumento en la
tasa de error sobre el sistema original. Esta medida (que puede parecer más justa) a
igualdad de potencia transmitida por bit de mensaje y de tasa de bits por segundo,
presenta el inconveniente de aumentar el ancho de banda ocupado. Este efecto provoca
que la comparación sea nuevamente injusta, y en muchas aplicaciones limita su utilidad
porque el ancho de banda disponible puede ser fijo en algunas aplicaciones. El uso de
ambas medidas está ampliamente aceptado, siempre y cuando se especifique claramente
cual se está empleando.
2.3. Canal de comunicaciones
En este último bloque lo único que se va a hacer es sumar ruido Gaussiano y blanco
(AWGN) a la señal de salida del transmisor. En esta práctica nos vamos a centrar en un
canal genérico que únicamente añade ruido a la señal transmitida. El canal va a estar
caracterizado por una densidad espectral de potencia No/2, aunque de momento vamos
a trabajar simplemente con un canal discreto equivalente. Este canal es un artefacto
matemático (no existe en la realidad) que sustituyes los bloques del modulador, canal y
demodulador por un canal (discreto equivalente) que lo único que hace es cambiar de
valor algunos bits a la salida del codificador de canal con una cierta probabilidad de
error prefijada. En la Figura 6 se muestra su funcionamiento de forma esquemática. El
canal discreto equivalente es muy empleado cuando se quiere diseñar un sistema
genérico que no dependa del canal de comunicaciones empleado, dejando su
complejidad al diseño del modulador/demodulador. Además permite trabajar siempre
con bits (símbolos) en lugar de con señales.
Figura 6: Modelo de Canal Discreto Equivalente.
3. Cuestionario previo
3.1.
Calcule la entropía de las siguientes fuentes discretas:
a) Fuente binaria con probabilidades 0.9 y 0.1.
b) Fuente con tres símbolos cuyas probabilidades son 0.73, 0.25 y 0.02.
c) Fuente que puede emitir 6 símbolos con probabilidades 0.4, 0.2, 0.1, 0.1,
0.1 y 0.1.
3.2.
Obtenga un código de Huffman para cada una de las fuentes de la cuestión 3.1.
Compruebe si se trata de buenos códigos o no, calculando en cada caso su tasa de
compresión y su eficiencia.
3.3.
Calcule las probabilidades de los símbolos resultantes de realizar una extensión
del código para la primera fuente de la cuestión 3.1 con k = 2 y k = 3. Halle la
entropía por conjunto de k símbolos y por símbolo en cada caso. ¿Qué conclusiones obtiene respecto al comportamiento de la entropía con k?
3.4.
Obtenga un código de Huffman para los códigos extendidos de la cuestión 3.3, y
compruebe que mejora el rendimiento del código calculando su tasa de compresión y su eficiencia en cada caso.
3.5.
Se dispone de una fuente continua que se cuantifica usando un cuantificador del
tipo “mid-riser” con rango dinámico entre -1 y 1. Calcule la entropía de la fuente
discreta resultante (en función del número de niveles del cuantificador) en los
casos siguientes:
a) La amplitud de la fuente analógica sigue una FDP uniforme entre -1 y 1.
b) La amplitud de la fuente analógica sigue una FDP Gaussiana con media
cero y varianza σ2.
3.6.
Desarrolle sobre el papel las funciones entropia, extension y encod, de los
ejercicios 4.1, 4.5 y 5.1 respectivamente.
3.7.
Rellene las tablas de los ejercicios 5.1 y 5.5 en las que se relaciona el síndrome
obtenido con cada uno de los posibles vectores de error.
4. Codificación de fuente
Ejercicio 4.1. Desarrolle una función que calcule la entropía de una fuente discreta.
Esta función, h = entropia(p), recibirá como entrada un vector p de dimensiones N × 1 o
1 × N con la probabilidad de ocurrencia de cada símbolo de la fuente, comprobará que
se trata efectivamente de un vector de probabilidades válido (devolviendo un mensaje
de error mediante la función error de Matlab en caso contrario), y devolverá su
entropía, h. Evalúe su rendimiento obteniendo la entropía de las tres fuentes de la
cuestión 3.1 y comprobando que coincide con el resultado teórico.
Ejercicio 4.2. Genere 2500 muestras de una señal con una FDP uniforme entre -1 y 1 de
su amplitud, y cuantifíquela usando un cuantificador del tipo “mid-riser” con un número
de niveles entre 1 y 8. Calcule su entropía en cada caso, rellene la columna
correspondiente de la Tabla 1, y compárela con el resultado teórico de la cuestión 3.3.
Repita el procedimiento para una señal cuya amplitud sigue una FDP Gaussiana con
media cero y varianza unidad, rellenando la segunda columna de la Tabla 1, y
comparando los valores obtenidos con el resultado teórico. ¿Aparece alguna diferencia
entre la entropía teórica y la calculada mediante simulación en ambos casos? En caso
afirmativo, ¿a qué cree que es debido? ¿Cómo varía la entropía al aumentar el número
de niveles de cuantificación en ambos casos?
Bits
Uniforme
Gaussiana
1
2
3
4
5
6
Tabla 1: Entropía para diferentes señales y número de bits.
Nota: Para este ejercicio necesitará la función q_midriser desarrollada en la práctica
anterior. Además, para evaluar la entropía de manera práctica deberá obtener previamente la probabilidad de cada símbolo mediante un histograma, como se vio en la
práctica 6. Para ello resulta conveniente utilizar la función histc en este caso en lugar de
hist, ya que permite fijar los límites de los intervalos.
Ejercicio 4.3. La función [H,l] = huffman(p) devuelve un código de Huffman para una
fuente discreta con un vector de probabilidades p. La matriz H contiene el código
asociado a cada símbolo en sus filas, mientras que l es un escalar con la longitud media
del código. Compruebe su correcto funcionamiento observando los códigos generados
para cada una de las fuentes de la cuestión 3.1, obteniendo su tasa de compresión y su
eficiencia y comprobando que coinciden con los valores calculados en la cuestión 3.2.
Ejercicio 4.4. Utilice la función huffman para obtener un código de Huffman para las
señales continuas cuantificadas del ejercicio 4.2 (ambas, la de FDP uniforme y la de
FDP Gaussiana), y rellene la tabla siguiente.
Uniforme
Bits
Tasa de
compresión
Eficiencia
Gaussiana
Tasa de
compresión
Eficiencia
1
2
3
4
5
6
Tabla 2: Tasa de compresión y eficiencia del código de Huffman para diferentes señales
continuas (FDP uniforme y Gaussiana) y número de bits.
Ejercicio 4.5. Codifique la función px = extension(p,k), que obtiene el vector de
probabilidades, px, para una fuente discreta cuyos símbolos siguen el vector de probabilidades p, cuando se toman símbolos de k en k (esto es, se ha realizado una extensión del
código de orden k). Asuma que los símbolos son independientes. Utilice la función para
obtener una extensión de la primera fuente de la cuestión 3.1 con k=1,...,6. Calcule la
entropía de los alfabetos extendidos y obtenga un código de Huffman para cada uno de
ellos. Compruebe que la entropía, la tasa de compresión y la eficiencia coinciden con
los teóricos (calculados en las cuestiones 3.3 y 3.4) cuando sea posible (esto es, para k =
1, 2 y 3). Dibuje la longitud media por símbolo del alfabeto original frente a k, y
compruebe cómo desciende uniformemente hacia el límite teórico dado por la entropía
de la fuente original.
5. Codificación de Canal
Ejercicio 5.1. Desarrolle una función que decodifique una secuencia de bits con un
código de Hamming (n = 15 y k = 11), m = decod(s,r). Para ello se dispone de la
función c = encod(m) que realiza la codificación con la matriz generadora,
&1
$0
$
$0
$
$0
$0
$
G = $0
$0
$
$0
$
$0
$0
$
$%0
0 0 0 0 0 0 0 0 0 0 0 0 1 1#
1 0 0 0 0 0 0 0 0 0 0 1 0 1!!
0 1 0 0 0 0 0 0 0 0 0 1 1 0!
!
0 0 1 0 0 0 0 0 0 0 0 1 1 1!
0 0 0 1 0 0 0 0 0 0 1 0 0 1!
!
0 0 0 0 1 0 0 0 0 0 1 0 1 0! = [I P ],
0 0 0 0 0 1 0 0 0 0 1 0 1 1!
!
0 0 0 0 0 0 1 0 0 0 1 1 0 0!
!
0 0 0 0 0 0 0 1 0 0 1 1 0 1!
0 0 0 0 0 0 0 0 1 0 1 1 1 0!
!
0 0 0 0 0 0 0 0 0 1 1 1 1 1!"
cuya primera parte es una matriz identidad, de modo que los 11 primeros bits de c son
los de m (este es un ejemplo de un código sistemático), y de una función que calcula
los bits de síndrome s, s = sindrom(c), mediante la matriz H mostrada a continuación.
s
E
0000 000000000000000
0001
...
...
...
1111
...
&0
$0
H=$
$1
$
%1
0
1
0
1
0
1
1
0
0
1
1
1
1
0
0
1
1
0
1
0
1
0
1
1
1
1
0
0
1
1
0
1
1
1
1
0
1
1
1
1
1
0
0
0
0
1
0
0
0
0
1
0
0#
0!!
= PT
0!
!
1"
[
I
]
Para realizar la decodificación va a necesitar obtener el error asociado a cada síndrome.
Por lo tanto, se le pide que rellene de forma previa a la práctica la Tabla 3. Compruebe
que cada síndrome distinto del vector nulo se corresponde con una de las columnas de
H, y que la posición de la columna indica el bit erróneo. Esta información va a resultar
imprescindible para realizar la función de decodificación.
Nota: Para llevar a cabo el decodificador se recomienda el uso de las funciones
ser2par2 y par2ser2, que son variantes de las ya empleadas en la sesión anterior.
Síndrome
Vector de error
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
Tabla 3: Síndrome y vector de error asociado para el código de Hamming (15,11).
Ejercicio 5.2. Genere una secuencia de 11000 bits aleatorios y equiprobables. Dese
cuenta de que esto lo puede hacer con la función chan_bin de la sesión anterior (indique
cómo). Codifique dichos bits con el codificador de canal e introdúzcalos en el canal
discreto equivalente implementado por chan_bin con Pe = 0.0003, 0.001, 0.003, 0.01,
0.03, 0.1 y 0.3 (promedie para 10 realizaciones). Calcule la probabilidad de error de bit
entre la entrada y la salida de chan_bin? Introduzca la salida de chan_bin en el
decodificador de canal y compruebe la probabilidad de error de bit a la salida. Obtenga
la razón entre el número de errores a la salida de decod y a su entrada. ¿Qué ocurre
cuando crece Pe?¿Qué significa esto?
Ejercicio 5.3. En el ejercicio anterior se pudo comprobar que al emplear la codificación
de canal los errores producidos por el canal se reducían de forma muy significativa. En
este ejercicio se va a explorar un método alternativo de medir la calidad del sistema
codificado y sin codificar. Suponga que la probabilidad de error del canal de
comunicaciones es Pe = Q ( 2 Eb N 0 ), y que para mantener la tasa de bits de información
por segundo se ha reducido el tiempo de bit, de modo que la probabilidad de error se
incrementa en el canal a Pe = Q ( 2 Eb N 0 k n ). Genere 110000 bits aleatorios, codifíquelos con encod, y páselos por un canal discreto equivalente para diversos valores de
Eb N 0 entre 1 y 8 (utilice un paso de 0.5) usando la probabilidad de error dada por la
segunda fórmula. Decodifique los bits obtenidos a la salida del canal y calcule la
probabilidad de error (promedie para 10 realizaciones). Represente gráficamente,
empleando la función semilogy, la probabilidad de error a la salida del decodificador en
función de Eb N 0 (en dBs) y dibuje sobre ésta la probabilidad de error del sistema sin
codificar, empleando la primera fórmula de probabilidad de error.
Ejercicio 5.4. La ganancia de codificación se define como el valor M por el que hay que
multiplicar Eb N 0 para que las probabilidades de error del sistema sin codificación y
con codificación de canal produzcan la misma BER. Calcule dicha ganancia para los
resultados de los ejercicios 5.2 y 5.3. ¿Cómo se comporta la ganancia de codificación en
cada caso? ¿Existen diferencias apreciables entre ambos métodos de medida? En caso
afirmativo, ¿a qué cree que son debidas?
Ejercicio 5.5. Repita los Ejercicios 5.1 a 5.4 para un código Hamming con n = 7 y k =
4, cuyas matrices G y H se muestran a continuación. Para ello tendrá que modificar las
funciones encod y sindrome para ajustarlas a este código (desarrolle dos nuevas
funciones encod2 y sindrome2), y rellenar la Tabla 4 (página siguiente) con los vectores
de error asociados a cada síndrome en este caso.
&1
$0
G=$
$0
$
%0
0 0 0 0 1 1#
1 0 0 1 0 1!!
0 1 0 1 1 0!
!
0 0 1 1 1 1"
&0 1 1 1 1 0 0 #
H = $$1 0 1 1 0 1 0!!
$%1 1 0 1 0 0 1!"
Síndrome
Vector de error
000
001
010
011
100
101
110
111
Tabla 4: Síndrome y vector de error asociado para el código de Hamming (7,4).

Documentos relacionados