Bitácora · FEC · Concepto

El síndrome

Unidad 3 · Códigos de bloque lineales · lo que el receptor puede calcular sin saber qué se mandó, la suma de columnas de H, el calculador del (7,4) y los dieciséis patrones de cada síndrome

El receptor tiene en la mano una sola cosa: lo que llegó. No sabe qué se transmitió —eso es lo que quiere averiguar— ni dónde se equivocó el canal. El síndrome es una cuenta sobre lo recibido que da un resultado que no depende de lo transmitido: sólo de lo que hizo el canal. Toda la decodificación algebraica, de acá hasta BCH, se apoya en eso.

01 · La definición

Se transmite una palabra de código v de un código (n,k) y llega r. Lo que el canal hizo se escribe como un vector más, el patrón de error e, con un 1 en cada posición que el canal invirtió y un 0 en las demás:

r=v+e

La suma es bit a bit, módulo 2: sumar un 1 es dar vuelta el bit. Con H la matriz de paridad del código, de (n−k)×n, el síndrome de lo recibido es el vector de n−k bits

s=rHT=(s0,s1,…,sn−k−1)

Cada bit es una ecuación de paridad: sj es la suma de los bits de r en las posiciones donde la fila j de H tiene un 1, y vale 1 cuando esa ecuación no cierra. En el Hamming (7,4) del curso,

H=( 1011100 1110010 0111001 )

y las tres ecuaciones son

s0=r0+r2+r3+r4 s1=r0+r1+r2+r5 s2=r1+r2+r3+r6

Las cuatro primeras posiciones son el mensaje y las tres últimas la paridad, porque G=[IP] y H=[PTI]. Cada ecuación mezcla tres bits de mensaje con un solo bit de paridad: s0 repite la cuenta con la que el codificador armó v4 y se fija si lo que llegó en la posición 4 coincide.

02 · No depende de lo transmitido

Paso 1: reemplazar lo recibido. El receptor calcula sobre r, que es v+e:

s=rHT=(v+e)HT

Paso 2: distribuir. El producto por una matriz es lineal, también sobre GF(2):

s=vHT+eHT

Paso 3: lo transmitido se anula. v es palabra de código, y una palabra de código es justo un vector con vHT=0: es el criterio de pertenencia. Queda

s=eHT

El receptor no conoce v ni e, pero calcula sobre r una cantidad que es función de e solo. Los dieciséis mensajes del (7,4), con el mismo patrón de error encima, dan el mismo síndrome. Es lo que vuelve viable toda la decodificación: cualquier pregunta sobre el error se puede contestar mirando s, sin pasar por las 2k palabras.

De ahí sale el criterio de detección, que es asimétrico. Si s≠0, hubo error con certeza: ninguna palabra de código da un síndrome no nulo. Si s=0, lo recibido es palabra de código, que no es lo mismo que decir que no hubo error.

03 · La suma de columnas

Leída por columnas, la cuenta se vuelve más útil que la matricial. Con hi la columna i de H y E el conjunto de posiciones con error,

sT=∑i=0n−1eihi=∑i∈Ehi

Las posiciones sin error multiplican su columna por 0 y desaparecen. El síndrome es la suma de las columnas de H donde hubo error, y nada más. Las del (7,4), escritas de arriba abajo como s0s1s2, son

h0=110,h1=011,h2=111,h3=101,h4=100,h5=010,h6=001

los siete vectores no nulos de tres bits, cada uno una vez. Con un solo error en la posición i, el síndrome es hi; como las siete son distintas y ninguna es nula, cada error simple da un síndrome propio y queda localizado.

El ejemplo del apunte: el mensaje u=1001 se codifica como v=1001 011, el canal invierte la posición 2 y llega r=1011 011. Por las ecuaciones, s0=1+1+1+0=1, s1=1+0+1+1=1 y s2=0+1+1+1=1: s=111=h2. Por columnas la cuenta es más corta, porque e=0010 000 elige una sola. En ningún momento se comparó r con las dieciséis palabras.

El apunte y la filmina dicen que, para este código, el síndrome es la posición del error escrita en binario. Con la H sistemática de arriba no lo es: h4 es 100 y h5 es 010, y leídas como números en cualquiera de los dos sentidos las siete columnas no dan 0 a 6 ni 1 a 7. Lo que sí vale es que la correspondencia entre síndromes no nulos y posiciones es uno a uno, y por eso el localizador sigue siendo un decodificador de 3 a 7 líneas: una tabla fija, no la lectura de un número. La H cuyas columnas son las posiciones en binario existe, y es otro ordenamiento de las mismas siete columnas: da un código equivalente, con las posiciones permutadas, no el mismo.

04 · El calculador del (7,4) en SystemVerilog

El calculador de síndrome del RTL del curso es esas tres ecuaciones y una compuerta más. El bit i de cada bus es la posición i, así que cada línea se lee contra una fila de H sin traducir nada:

always_comb begin
    syndrome[0] = message_d[0] ^ message_d[2] ^ message_d[3] ^ message_d[4];
    syndrome[1] = message_d[0] ^ message_d[1] ^ message_d[2] ^ message_d[5];
    syndrome[2] = message_d[1] ^ message_d[2] ^ message_d[3] ^ message_d[6];
end

assign o_syndrome      = syndrome;
assign o_zero_syndrome = (|syndrome == 1'b0);

Cada fila de H tiene cuatro unos, así que cada bit del síndrome es un XOR de cuatro entradas: tres en total, sin memoria. message_d es la palabra recibida r retenida un ciclo de reloj por un registro de entrada; el cálculo en sí es combinacional. Y o_zero_syndrome es el detector: el OR de los tres bits, negado. Vale 1 exactamente cuando s=0, con la misma asimetría de la sección anterior.

Lo que el circuito no tiene es e. Calcula sobre r, que es lo único que le llega, y le sirve porque rHT=eHT. Simulado el (7,4) entero sobre los dieciséis mensajes por los 128 patrones, la bandera de corrección del decodificador —que es o_zero_syndrome negado— se levanta en los 2048 casos exactamente cuando eHT≠0. Cómo se usa ese síndrome para corregir es el standard array y la decodificación por síndrome.

05 · Dieciséis patrones por síndrome

El síndrome tiene n−k bits y el patrón de error n. Hay 2n−k síndromes para 2n patrones, y a cada síndrome le tocan

2n2n−k=2k

patrones distintos. El sistema eHT=s tiene n incógnitas y n−k ecuaciones: está indeterminado, y sus 2k soluciones son un patrón cualquiera más cada una de las palabras de código, porque sumar una palabra no mueve el síndrome. En el (7,4) son 16 por síndrome. Enumerando los 128 patrones y agrupándolos por síndrome y por peso:

síndromepeso 01234567
00010077001
los otros 701344310

Los siete síndromes no nulos tienen el mismo reparto: uno de peso 1, tres de peso 2, y así hasta uno de peso 6. Para s=111 los de peso 2 son 0001 010, 0100 100 y 1000 001: h3+h5, h1+h4 y h0+h6 dan todas h2.

Ninguna cuenta sobre r elige entre los dieciséis: todos cumplen las ecuaciones por igual. La elección es estadística. Sobre un canal que invierte cada bit con probabilidad p, un patrón de peso w tiene probabilidad pw(1−p)n−w, y cada bit de más multiplica por p/(1−p): con p=10−2, el de peso 1 es 99 veces más probable que cada uno de peso 2. Sumando los dieciséis, dado un síndrome no nulo el patrón de peso 1 es el que ocurrió con probabilidad 0,970, y con p=10−1 baja a 0,720. El de menor peso de cada grupo es el líder de coset, y es la apuesta del decodificador.

Simulación El síndrome no mira el mensaje — el mensaje y el patrón de error se eligen por separado. Arriba, lo que se mandó, lo que hizo el canal y lo que llegó; abajo, H con sus columnas marcadas donde hay error, y a la derecha el síndrome. Arranca sin error: tocá un bit de e.
Mensaje u
síndrome — mensajes probados con este e — síndromes que dieron — patrones con este síndrome —

Los patrones con este síndrome

Con e=0 el síndrome es 000 y la lista de abajo son las dieciséis palabras de código. Prendé un bit de e: se marca una columna de H y el síndrome pasa a ser esa columna. Ahora apretá «Siguiente mensaje» varias veces: cambian v y r, cambian los términos de las tres ecuaciones, y el síndrome no se mueve; el contador lleva cuántos mensajes probaste y cuántos síndromes distintos dieron. Con dos bits de error, la suma de dos columnas cae siempre en una tercera, y el síndrome queda igual al de un error solo en otra posición. Con tres bits bien elegidos —1000 110, por ejemplo— la suma da cero.

06 · Lo que el síndrome no puede ver

Las dos cosas que el síndrome no resuelve salen de la misma cuenta.

Un error que es palabra de código pasa sin dejar rastro. Si e es una palabra no nula, eHT=0 y lo recibido es otra palabra válida: el receptor la acepta. En el (7,4) son las 2k−1=15 palabras no nulas, la fila del 000 en la tabla de arriba: siete de peso 3, siete de peso 4 y una de peso 7. Ningún patrón de peso 1 o 2 está entre ellas, porque la distancia mínima es 3; cuánto pesa lo que se escapa está en un síndrome cero no prueba nada.

Dentro de un grupo, el síndrome no distingue. En el (7,4) dos columnas suman siempre una tercera, porque las siete son todos los vectores no nulos de tres bits y la suma de dos distintas no es nula ni igual a ninguna de las dos. Los 21 patrones dobles dan, los 21, el síndrome de un error simple en otra posición: e=1000 010 da h0+h5=110+010=100=h4. El decodificador, que apuesta al patrón más liviano, corrige la posición 4 y entrega una palabra con tres bits mal: con dos errores, el decodificador empeora. No es un defecto del circuito: es el límite de la sección anterior, ocho síndromes para 128 patrones.

Para tener a mano

  1. r=v+e y s=rHT, de n−k bits. Cada bit es una ecuación de paridad evaluada sobre lo recibido.
  2. s=eHT, porque vHT=0: el síndrome depende sólo del error, no de lo que se mandó.
  3. s≠0 prueba que hubo error; s=0 sólo dice que llegó una palabra de código. Pasan sin ser vistos los 2k−1 errores que son palabras.
  4. sT=∑i∈Ehi: la suma de las columnas de H donde hubo error. Un error simple en i da hi.
  5. En el (7,4): s0=r0+r2+r3+r4, s1=r0+r1+r2+r5, s2=r1+r2+r3+r6: tres XOR de cuatro entradas. Las columnas son los siete no nulos de tres bits, pero no en el orden binario de las posiciones.
  6. Cada síndrome corresponde a 2k patrones, uno cualquiera más las palabras de código. En el (7,4), 16 por síndrome; en los no nulos, uno de peso 1 y tres de peso 2. Elegir entre ellos es estadística, no álgebra.
← Anterior Siguiente → Inicio
Relacionados La matriz de paridad y el código dual La distancia mínima El standard array y la decodificación por síndrome Un síndrome cero no prueba nada Con dos errores, el decodificador empeora Los códigos de Hamming El síndrome cíclico