O esquema que se irá seguir de correcção de erros de códigos lineares gerais recorre aos síndromes. Para tal, é preciso calcular o número de erros do código linear à custa de, por exemplo, uma matriz geradora ou de uma matriz de paridade. Listam-se então os síndromes dos líderes de cada classe. Recebido um vector, este é corrigível se o seu síndrome igualar um único síndrome de um líderes, líder esse que é subtraído ao vector recebido por forma a se efectuar a correcção.
Suponha que
é matriz geradora de um código
, onde
Esta matriz tem característica 2:
>> rank(A) 2Como o código é linear, a distância mínima do código é igual ao menor peso de Hamming das palavras-código não nulas. Ou seja,
Para se aplicar o esquema de correcção de erros, é ainda necessário calcular a matriz de paridade. Ou seja, uma matriz com característica 3 tal que
. Ou ainda, uma matriz cujas colunas da transposta formem uma base do espaço nulo de
.
>> nullspace(A) -- +- -+ +- -+ +- -+ -- | | 0 mod 2 | | 1 mod 2 | | 1 mod 2 | | | | | | | | | | | | 1 mod 2 | | 0 mod 2 | | 1 mod 2 | | | | | | | | | | | | 1 mod 2 |, | 0 mod 2 |, | 0 mod 2 | | | | | | | | | | | | 0 mod 2 | | 1 mod 2 | | 0 mod 2 | | | | | | | | | | | | 0 mod 2 | | 0 mod 2 | | 1 mod 2 | | -- +- -+ +- -+ +- -+ --
Neste caso,
>> H:=concatMatrix(nullspace(A)[1],nullspace(A)[2],nullspace(A)[3]) +- -+ | 0 mod 2, 1 mod 2, 1 mod 2 | | | | 1 mod 2, 0 mod 2, 1 mod 2 | | | | 1 mod 2, 0 mod 2, 0 mod 2 | | | | 0 mod 2, 1 mod 2, 0 mod 2 | | | | 0 mod 2, 0 mod 2, 1 mod 2 | +- -+
Em casos mais complexos, será preciso criar um ciclo de forma a se construir a concatenação iterativamente. Repare que a matriz de paridade é a transposta da matriz apresentada em cima. Portanto,
>> H:=transpose(H) +- -+ | 0 mod 2, 1 mod 2, 1 mod 2, 0 mod 2, 0 mod 2 | | | | 1 mod 2, 0 mod 2, 0 mod 2, 1 mod 2, 0 mod 2 | | | | 1 mod 2, 1 mod 2, 0 mod 2, 0 mod 2, 1 mod 2 | +- -+
Os líderes são, visto o código corrigir 1 erro, as linhas da matriz identidade
, e portanto os síndromes dos líderes não são mais que as colunas de
.
Suponha que se recebeu por uma canal simétrico binário com ruído o vector
Calcula-se o síndrome
>> H*transpose(r) +- -+ | 0 mod 2 | | | | 0 mod 2 | | | | 1 mod 2 | +- -+Como o síndrome não é nulo, segue que
>> I5:=M2(matrix::identity(5)): >> c:=r+row(I5,5) +- -+ | 1 mod 2, 0 mod 2, 0 mod 2, 1 mod 2, 1 mod 2 | +- -+