Documentos de Académico
Documentos de Profesional
Documentos de Cultura
2017B
Ing. Fanny Flores E.
Codificación de canal
2
Codificación de canal
Técnicas de codificación empleadas en sistemas de
comunicación digital.
Protegen los datos contra ruido (errores) introducidos
durante la transmisión.
Mejoran el rendimiento BER del sistema.
Provee ¨Ganancia de código CG¨ (en dB).
CG es la diferencia en Eb/No entre un sistema codificado
y no codificado para un BER dado.
Costo: expansión de ancho de banda
3
Codificación de canal
Pb
10-1 Coded
10-2
Uncoded
10-3
10-4
10-5
Coding Gain Eb/No (dB)
5
Clasificación de Codificación
de Canal
2. Forward Error Correction
(FEC):
Detección y corrección de
error.
Enlace unidireccional.
FEC se clasifica en:
Códigos de bloque
Ej: Hamming, BCH, RS, Turbo, LDPC,
etc.
Códigos convolucionales
La elección del tipo de código
FEC depende de las
aplicaciones, características
del canal, complejidad de la
implementación y costo. 6
Códigos de bloque
Al vector de información de longitud k se añade r bits de
redundancia (también llamados bits de chequeo o
paridad).
k bits r bits
n bits codeword
Tamaño de la información: k
Bits de paridad: r
Tamaño de la palabra código (codeword): n = k + r
7
Códigos de bloque
El vector de información de k bits es transformado
en una palabra código única de tamaño n.
Transmitter Receiver
Channel
k-bit n-bit n-bit k-bit
Encoder + Decoder
2 k codewords 2 n vectors
Noise
2. La suma de cualquier
par de palabras código
del código de bloque
(n,k) es otra palabra
código del grupo.
k
3. La palabra código (todo 2 vectors constitute
the subspace of codewords
cero) existe en el
grupo.
9
Distancia Hamming
Es el número de posiciones en las que cualquier par de
palabras código difieren.
Denotado por d(U,V) donde U yV son dos palabras código
de longitud n
n
d (U , V ) ui vi (+ suma modulo-2)
i 1
10
Distancia Hamming mínima
Es la distancia más pequeña entre todos los pares de
palabras código.
Denotado por:
d min min{d (U , V )}
Para códigos de bloque lineales, es igual al peso
mínimo Wmin de todas las palabras código (excluyendo
la palabra código todo cero):
d min wmin
Peso: Es el número de elementos diferentes de 0 en una
palabra código.
11
Detección y Corrección de
errores
Detección de error: El número máximo garantizado de
errores que el código puede detectar es:
ed 1
min
14
Códigos de Repetición binaria
Ejemplo más sencillo para corrección de errores.
Codificación: El bit de información es tomado y
repetido r veces.
Ejemplo:
Código (3,1)
n=3, k=1, r=2
número de palabras código = 2k = 2
R = 1/3=0.333
dmin=3
e = 2, t = 1
Menor velocidad de código, pero mejor e y t, que el ejemplo
anterior.
15
Códigos de bloque Hamming
Codificación popular y simple desarrollada por RW
Hamming.
Tipo de códigos de bloque lineales para corrección de
errores. Usados ampliamente en comunicaciones digitales.
Para cualquier entero positivo r 3, existe un código
Hamming con los siguientes parámetros:
Tamaño del código: n = 2r - 1
Número de bits de información: k = 2r - r - 1
Número de bits de paridad: r=n-k
Capacidad de corrección de error: t = 1
Distancia mínima: dmin = 3
Capacidad de detección de error: e = 2
16
Códigos de bloque Hamming
Ej:
r (n,k)
3 (7,4)
4 (15,11)
5 (31,26)
17
Códigos de bloque Hamming
Ejemplo: Código Hamming (7,4)
n=7, k=4, y r=3
No. de palabras código=2k=24=16
Asumimos que los 3 bits de
paridad pi, son generados por:
p1 = m1+m2+m4
p2 = m1+m3+m4
p3 = m2+m3+m4
18
Códigos de bloque Hamming
Cont. Ejemplo:
La palabra código todo cero (0000000) está presente y la suma
módulo 2 de cualquier par de palabras código es otra palabra código
del grupo. Por lo tanto, el código de bloque binario (7,4) es un código
de bloque lineal.
El vector V7 del espacio entero consiste de 2n=27=128 vectores.
El vector del subespacio consiste de 2k=24=16 palabras código.
R = k/n = 4/7 = 0.571
dmin = Wmin = 3
e= dmin-1=3-1=2
t= (dmin-1) / 2= (3-1)/2 =1
Por tanto, este código tiene capacidad de detectar hasta 2 errores y
corregir 1 error.
19
Codificación utilizando la Matriz
Generadora G
Una matriz generadora G, es una matriz de k por n, que
consiste de k vectores linealmente independiente de
longitud n.
V v v ...v
1 11 12 1n
V v v ...v
G 2 21 22
2n
. . . ....
V v v ...v
k k1 k 2
kn
G P | I k
p p ... p 10... 0
11 12 1r
p p ... p 01...0
21 22 2r
. . .... ......
Donde pij =0 or 1
p p ... p 0 0 ...
1
k1 k 2 kr
22
Construcción de G
U mG p p ... p 10 ...0
11 12 1r
p p ... p 01...0
u ,u ,...,un m ,m ,...,m 21 22 2r
1 2 1 2 k . . .... .. ....
p p ... p 00 ...1
Donde k1 k 2 kr
u p m p m p ...m p
1 1 1 11 2 21 k k1
u p m p m p ...m p
2 2 1 12 2 22 k k2
.
ur pr m p m p ...m p
1 1r 2 2r k kr
u m
r 1 1
.
un m
k 23
Presentación de G
Existen dos formas de presentación de G:
➢ Longitud de U es n (n=k+r):
➢ Longitud del mensaje es k.
➢ Longitud de bits de paridad es r.
➢ Dimensión de G es k por n (k filas y n columnas).
➢ Dimensión de Ik es k por k.
24
Codificación utilizando la Matriz
Generadora G
Ejemplo 1:
110100
U [ m][G ] [110] 011010
101001
1(110100) 1(011010) 0(101001) 101110
ó
= 1 , 1+1 , 1 , 1 , 1 , 0 = 101110
27
Codificación utilizando la Matriz
Generadora G
Ejemplo 2:
Para el código (6,3), asumir las siguientes ecuaciones para los bits de
paridad:
p1 m2 m3
p2 m1 m3
p3 m1 m2
a) Contruir G
b) Reescribir la ecuación de chequeo de paridad a partir de G.
c) Codificar m=[111]
28
Codificación utilizando la Matriz
Generadora G
Cont. Ejemplo 2: 0 1 1 1 0 0
(a) G P | I3 1 0 1 0 1 0
1 1 0 0 0 1
(b) U mG
011100
[m1 , m2 , m3 ] 101010
110 001
[(m2 m3 ), (m1 m3 ), (m1 m2 ), (m1 ), (m2 ), (m3 )]
[ p1 , p2 , p3 , m1 ,m2 ,m3 ]
(c) m = 1 1 1 uso U = mG = [0 0 0 1 1 1] 29
Decodificación con la Matriz de
chequeo de paridad H
Para cada matriz generadora G existe una matriz H, de
modo que las filas de G son ortogonales a las filas de H.
GH 0T
H I r | PT
➢ Donde Ir es una matriz identidad (r por r)
➢ PT es la matriz transpuesta (r por k) de la parte de paridad de la
matriz generadora G.
30
Decodificación con la Matriz de
chequeo de paridad H
Es sencillo verificar que:
UH 0 T
S rH T
Este síndrome es el resultado de una revisión de paridad
desarrollada sobre r para determinar si r es una palabra
código válida o no.
Si S=0 entonces r es una palabra código válida y el
decodificador la acepta como su salida.
Caso contrario, si S0 entonces r contiene errores y el
decodificador tomará acciones para localizar los errores y
corregirlos de ser posible.
32
Decodificación con la Matriz de
chequeo de paridad H
Ejemplo 1
Asumir el código (6,3) con la matriz Generadora G mostrada abajo y el
vector recibido r=001110. Determinar si r es una palabra código válida o no
100
110100 100101 010
G 011010
H 010110 001
H
T
ej
El vector recibido r es básicamente la suma de Ui y el
vector error ej.
Por lo tanto, si conocemos el patrón del error ej
entonces es posible encontrar U por simple sustracción.
34
Decodificación del Síndrome
Si el patrón de error causado por el canal es un líder
coset (vector error permitido), entonces el vector
recibido r será decodificado correctamente en la palabra
código transmitida Ui.
Cada fila es llamada coset y el patrón de error en cada fila es
llamada líder coset.
Si el patrón de error no es un líder coset (vector error no
permitido), resultará una decodificación errada.
Tenemos que definir un set de patrones de error
corregibles y calcular el síndrome para cada uno.
35
Decodificación del Síndrome (Cálculo
de Síndrome de un coset)
Si ej es el patrón de error del coset jth, entonces el vector
r = Ui + ej está en este coset.
El síndrome de este vector r es:
S = ej HT
36
Decodificación del Síndrome (Cálculo
de Síndrome de un coset)
37
Decodificación del Síndrome (Pasos)
38
Decodificación del Síndrome (Pasos)
Paso 1:
Calcular el síndrome del vector recibido r utilizando:
S = r HT
Paso 2:
Encontrar el correspondiente patrón de error del síndrome
(calculado en el paso 1) utilizando la tabla de búsqueda de
síndrome.
Este patrón de error es un estimado del error introducido por el
canal.
Denotarlo como e
39
Decodificación del Síndrome (Pasos)
Paso 3:
Encontrar un estimado de la palabra código
transmitida U , restando el patrón de error estimado
𝑒Ƹ de r, así:
Uˆ r eˆ r eˆ
Notar que:
Si e e
entonces U U . Por tanto, error corregible.
Si e e entonces U U . Por tanto, error al decodificar.
40
Decodificación del Síndrome
Ejemplo 1:
Asumir el código de bloque lineal (6,3) con la siguiente
matriz generadora G
110100
G
011010
101001
Determinar si el decodificador es capaz de garantizar
corrección de error simple (1 error)
41
Decodificación del Síndrome
Cont. Ejemplo 1:
42
Decodificación del Síndrome
Cont. Ejemplo 1:
43
Decodificación del Síndrome
Cont. Ejemplo 1:
Definir 8 patrones de error:
Patrón de no error (e1) : 000000
Patrones de 1 solo error (e2-e7): 000001, 000010, 000100, 001000, 010000,
100000
Patrón de 2 errores (e8) : 010001 (elegido arbitrariamente).
Calcular el síndrome para cada patrón de error:
100 100
010 010
001 001
S j ej H T ej e.g . S1 e1 H T [000000] [000]
110 110
011 011
101 101
Repetir los cálculos para obtener S1, S2, S3,….. S8.
44
Decodificación del Síndrome
Cont. Ejemplo 1:
Patrón de error (ej) Síndrome (Sj=ejHT)
000000 000
000001 101
000010 011
000100 110
001000 001
010000 010
100000 100
010001 111
46
Decodificación del Síndrome
Cont. Ejemplo 2:
Paso 3: U r e
= 001110 + 100000
= 101110
47
Codificación BCH
Los códigos Hamming tienen una ganancia de código
limitada ya que solo permiten corregir 1 error.
48
Codificación BCH
Los códigos BCH pueden ser diseñados para corregir casi
cualquier número de errores.
A altas velocidades, típicamente superan a cualquier otro
código de bloque con los mismos n y k a un SNR
moderado.
Ejemplos: (n, k, dmin):
(7,4,3)
(15,11,3)
(15,7,5)
(15,5,7)
(31,26,3)
(31,16,7)
(31,11,11) ….
49
Códigos Convolucionales
La estructura de los Códigos Convolucionales (CC) es
fundamentalmente diferente a los Códigos de Bloque (BC).
En los BC cada secuencia de entrada de k bits de información
es mapeada en una secuencia única de salida de n bits de
longitud de una forma fija, sin considerar los bits de
información previos.
En los CC cada secuencia de entrada de k bits de información
es codificada en una secuencia de salida de n bits de
longitud, pero ésta depende no solo de los k bits de
información sino también de las últimas (K-1)k entradas del
codificador.
50
Códigos Convolucionales
Los CC son códigos con memoria, a diferencia de los BC,
que son sin memoria.
Cada palabra código en BC depende solo de los bits de
entrada a ser codificados.
CC tiene una estructura más compleja.
No podemos separar la secuencia de palabras código de
salida en palabras código independientes, toda la
secuencia debe ser considerada.
CC son principalmente para corrección de errores.
El decodificador Viterbi es el algoritmo de decodificación
más importante.
51
Códigos Convolucionales
Un codificador convolucional está descrito por tres
enteros:
m Convolutional U
(k) Encoder (n)
(K)
52
Códigos Convolucionales
Estructura básica del codificador
1 2 3 ... kK
Input sequence kK -stage
shift register
m=m1, m2, ..., mi, ...
(shifted in k at a time)
1 2 ... n n modulo-2
adder
Suponer que a los tiempos t1, t2, t3, t4, t5 y t6 los bits de
entrada son 101000, respectivamente
54
Códigos Convolucionales
Cont. Ejemplo 1:
+ +
u1 u2 u1 u2
u1 u1
1 t1 1 0 0 1 1
0 t4 0 1 0 1 0
u2 u2
+ +
+ +
u1 u2 u1 u2
u1 u1
0 t2 0 1 0 0 t5
1 0 0 0 1 1 1
u2 u2
+ +
+ +
u1 u2 u1 u2
u1 u1
1 t3 0 t6 0 0 0
1 0 1 0 0 0 0
u2 u2
+ +
0 000 00 00 0 0
1 100 00 10 1 1
0 010 10 01 1 0
1 110 10 11 0 1
0 001 01 00 1 1
1 101 01 10 0 0
0 011 11 01 0 1
1 111 11 11 1 0 56
Códigos Convolucionales
Diagrama de estados
0/00
1/11 00
0/11
1/00
10 01
0/10
1/01 11 0/01
1/10
57
Diagrama Trellis
Diagrama de transición de estados en función del
tiempo.
11 11
10 10
00 00
Branch
10 codeword
10
01
01 01 01 01 01
11
10 10
repeats
Input bit 0
Input bit 1
59
Decodificación Viterbi (VD)
Método de decodificación de códigos convolucionales más
ampliamente utilizado.
61
Decodificación Viterbi (VD)
VD es un decodificador de similitud máxima que elige
el camino trellis con su correspondiente secuencia a la
mínima distancia de la secuencia recibida.
62
Decodificación Viterbi (VD)
State t1 t2 t3 t4 t5 t6
00 2 00 1 00 1 00 1 00 1 ...
00
11 11 11 11 11
0 1 1 1 1
1 1 1
10 11 11 1 11 1
10 1 00 Branch
00 00
2 metric
01 10 10 0 10 2
2
0
01
0 01 2 01 01
01 01 2 01 0
0 0
11
10 2 10 0 10 2
63
Decodificación Viterbi (VD)
Rx Sequence: 11 01 01 10 01
0 / 00 2 [2] 00 1 [3] 00 1 [4,3] 00 1 [4,1] 00 1
00 [2,4]
1 11 1 11 1
1 / 11 11 11
0 1 [3] 1 [4,3]
[0] 1 [4,1] 1
11 11 11 [2,4]
10 1
1 00 1
00 00
10
10 10 10 2
2 2 0
[3,2]
01 [3,4]
[2] [5,0] 0
01 0 2
01 01 01
01 01 01 0
0 0 2
11 0 2 [1,4]
10 2 10 [5,2] 10
Input bit 0 [0] [3,2]
Input bit 1
10 11 11 11
10
01
01
01 01
11
10
66
Distancia libre
Para el ejemplo anterior:
Una ruta de longitud 3 sale desde “todo cero“ al tiempo t1
(estado 00) y regresa al mismo estado al t4.
Secuencia todo cero: U = 00 00 00
Secuencia de eventos de error: V = 11 10 11
d(U,V) = 5
67
Capacidad de corrección de
error
Utilizando la misma ecuación de corrección de error que
en codificación de bloque, con dmin reemplazado por df,
la capacidad de corrección de error de los CC es:
d f 1
t
2
Donde df es la distancia libre del código.
Para el ejemplo previo:
df = 5 t=2
➢ Por tanto, el código puede corregir 2 errores.
68
Codificador convolucional
Ejemplo:
Un codificador convolucional de velocidad 1/3 y con restricción de
longitud 3, se indica a continuación.
1st bit
I/P
O/P
2nd bit
3rd bit 69
Codificador convolucional
Cont. Ejemplo:
1. Construir la tabla de codificación y dibujar el diagrama Trellis
mostrando los bits de entrada y las palabras código de salida en
las ramas Trellis.
2. Asumir un estado inicial S2=1 y S3=0. Indicar la secuencia de
estados y la salida del codificador para (110).
3. Con referencia al diagrama Trellis, utilizar decodificación Viterbi
para decodificar la secuencia recibida Z= (0 1 1 1 0 0 1 1 0 1 1 0
1 1 1), donde el bit de la izquierda es el primero en ser recibido.
4. Mostrar los valores de las métricas de los caminos en cada nodo
en el Trellis. Indicar la salida del decodificador y la
correspondiente secuencia de bits de información.
70
Codificador convolucional
Cont. Ejemplo:
0/ 000 000 000 000
00
011 011 011 011
1 / 011
11
001 001
001
Input bit 0
Input bit 1 71
Codificador convolucional
Cont. Ejemplo:
Secuencia de estados:
72
Codificador convolucional
Cont. Ejemplo:
Rx Secuencia: 011 100 110 110 111
000 2 [2] 000 1 [3] 000 2 [5,4] 000 2 [6,3] 000 3
00 [6,4]
2 2 1
011 011 011 011 011
0 3 [5] 2 [5,2]
[0] 2 [6,1] 1
101 101 101 [4,4]
10 0
0 110 1
110 110
111
111 111 1110
2 1 1
[1,5]
01
[2] 1 [6,1] 1 [3,4] 2
100
100 100 100
010 010 010
0 1 1 2
11 3 2 [3,5]
001 3 001 [3,6] 001
[0] [6,3]
Input bit 0
Input bit 1
Secuencia código O/P = 011 100 010 110 111
Secuencia información O/P = 1 1 0 1 0 73