Seção 8.3 Matrizes Verificadora e Geradora
Devemos encontrar uma forma sistemática de gerar códigos lineares assim como métodos rápidos de decodificação. Examinando as propriedades da matriz \(H\) e escolhendo \(H\) cuidadosamente, é possível desenvolver métodos muito eficientes para codificar e decodificar mensagens. Com este objetivo, introduziremos a matriz geradora padrão e a matriz verificadora canônica.
Suponha que \(H\) é uma matriz de \(m \times n\) com coeficiente em \({\mathbb Z}_2\) e \(n \gt m\text{.}\) Se as últimas \(m\) colunas da matriz formam a matriz identidade de \(m \times m\text{,}\) \(I_m\text{,}\) então a matriz é uma matriz verificadora canônica. Mais especificamente, \(H= (A \mid I_m)\text{,}\) donde \(A\) é a matriz de \(m \times (n-m)\)
e \(I_m\) é a matriz identidade de \(m \times m\)
Com cada matriz verificadora canônica podemos associar uma matriz geradora padrão de \(n \times (n-m)\)
Nosso objetivo será mostrar que existe um \(\mathbf x\) que satisfaça \(G {\mathbf x} = {\mathbf y}\) si e somente se \(H{\mathbf y} = {\mathbf 0}\text{.}\) Dado um bloco \({\mathbf x}\) a ser codificado, a matriz \(G\) nos permitirá codificá-lo rapidamente para uma palavra \({\mathbf y}\) do código linear.
Exemplo 8.3.1.
Suponha que temos as seguintes oito palavras por codificar:
Para
as matrizes geradora padrão e verificadora canônica são
e
respectivamente.
Observe que as linhas em \(H\) representam as verificações de paridade em certas posições das 6-tuplas. Os uns da matriz identidade servem como verificadores de paridade para os uns na mesma linha. Se \({\mathbf x} = (x_1, x_2, x_3, x_4, x_5, x_6)\text{,}\) então
o que produz um sistema de equações:
Aqui \(x_4\) serve como bit de controle para \(x_2\) e \(x_3\text{;}\) \(x_5\) é um bit de controle para \(x_1\) e \(x_2\text{;}\) e \(x_6\) é um bit de controle para \(x_1\) e \(x_3\text{.}\) A matriz identidade impede que \(x_4\text{,}\) \(x_5\text{,}\) e \(x_6\) tenham que checar um ao outro. Logo, \(x_1\text{,}\) \(x_2\) e \(x_3\) podem ser arbitrários, mas \(x_4\text{,}\) \(x_5\) e \(x_6\) devem ser escolhidos de maneira a assegurar as paridades respectivas. O espaço nulo de \(H\) pode ser calculado facilmente
Uma forma ainda mais fácil de calcular o espaço nulo é com a matriz geradora \(G\) (Tabela 8.3.2).
Palavra de Mensagem \(\mathbf x\) | Palavra do código \(G \mathbf x\) |
000 | 000000 |
001 | 001101 |
010 | 010110 |
011 | 011011 |
100 | 100011 |
101 | 101110 |
110 | 110101 |
111 | 111000 |
Teorema 8.3.3.
Se \(H \in {\mathbb M}_{m \times n}({\mathbb Z}_2)\) é uma matriz verificadora canônica, então \({\rm Null}(H)\) consiste de todas as \({\mathbf x} \in {\mathbb Z}_2^n\) cujos primeiros \(n-m\) bits são arbitrários, mas cujos últimos \(m\) bits estão determinados por \(H{\mathbf x} = {\mathbf 0}\text{.}\) Cada um dos últimos \(m\) bits serve como controle de paridade para alguns dos primeiros \(n-m\) bits. Logo, \(H\) da lugar a um código de blocos \((n, n-m)\text{.}\)
Deixamos a demonstração deste teorema como exercício. À luz do teorema, os primeiros \(n - m\) bits de \({\mathbf x}\) são chamados bits de informação e os últimos \(m\) bits se denominam bits de verificação. No Exemplo 8.3.1, os primeiros três bits são de informação e os últimos três são bits de verificação.
Teorema 8.3.4.
Suponha que \(G\) é uma matriz geradora padrão de \(n \times k\text{.}\) Então \(C = \left\{{\mathbf y} : G{\mathbf x} ={\mathbf y}\text{ para }{\mathbf x}\in {\mathbb Z}_2^k\right\}\) é um código de blocos \((n,k)\text{.}\) Mais especificamente, \(C\) é um código de grupo.
Demonstração.
Sejam \(G {\mathbf x}_1 = {\mathbf y}_1\) e \(G {\mathbf x}_2 ={\mathbf y}_2\) duas palavras do código. Então \({\mathbf y}_1 + {\mathbf y}_2\) está em \(C\) pois
Além disso, devemos mostrar que dois blocos de mensagem diferentes não podem ser codificados para mesma palavra do código. Isto é, devemos mostrar que se \(G {\mathbf x} = G {\mathbf y}\text{,}\) então \({\mathbf x} = {\mathbf y}\text{.}\) Suponha que \(G {\mathbf x} = G {\mathbf y}\text{.}\) Então
Mas as primeiras \(k\) coordenadas em \(G( {\mathbf x} - {\mathbf y})\) são exatamente \(x_1 -y_1, \ldots, x_k - y_k\text{,}\) pois estão determinadas pela matriz identidade, \(I_k\text{,}\) que é parte de \(G\text{.}\) Logo, \(G( {\mathbf x} - {\mathbf y}) = {\mathbf 0}\) se e somente se \({\mathbf x} = {\mathbf y}\text{.}\)
Antes de demonstrar a relação entre a matriz verificadora canônica e a matriz geradora padrão, demonstraremos um lema.
Lema 8.3.5.
Seja \(H = (A \mid I_m )\) uma matriz verificadora canônica de \(m \times n\) e \(G = \left( \frac{I_{n-m} }{A} \right)\) a correspondente matriz geradora padrão de \(n \times (n-m)\text{.}\) Então \(HG = {\mathbf 0}\text{.}\)
Demonstração.
Seja \(C = HG\text{.}\) O coeficiente \(ij\)th de \(C\) é
donde
é o delta de Kronecker.
Teorema 8.3.6.
Seja \(H = (A \mid I_m )\) uma matriz verificadora canônica de \(m \times n\) e seja \(G = \left( \frac{I_{n-m} }{A} \right) \) a correspondente matriz geradora padrão de \(n \times (n-m)\text{.}\) Seja \(C\) o código gerado por \(G\text{.}\) Então \({\mathbf y}\) está em \(C\) se e somente se \(H {\mathbf y} = {\mathbf 0}\text{.}\) Em particular, \(C\) é um código linear com matriz verificadora canônica \(H\text{.}\)
Demonstração.
Primeiro suponha que \({\mathbf y} \in C\text{.}\) Então \(G {\mathbf x} = {\mathbf y}\) para algum \({\mathbf x} \in {\mathbb Z}_2^m\text{.}\) Pelo Lema 8.3.5, \(H {\mathbf y} = HG {\mathbf x} = {\mathbf 0}\text{.}\)
Reciprocamente, suponha que \({\mathbf y} = (y_1, \ldots, y_n)^{\rm t}\) está no espaço nulo de \(H\text{.}\) Devemos encontrar \({\mathbf x}\) em \({\mathbb Z}_2^{n-m}\) tal que \(G {\mathbf x}^{\rm t} = {\mathbf y}\text{.}\) Como \(H {\mathbf y} = {\mathbf 0}\text{,}\) devemos satisfazer o seguinte conjunto de equações:
Equivalentemente, \(y_{n-m+1}, \ldots, y_n\) estão determinados por \(y_1, \ldots, y_{n-m}\text{:}\)
Por fim podemos tomar \(x_i = y_i\) para \(i= 1, \ldots, n - m\text{.}\)
Seria bom poder calcular a distância mínima de um código linear diretamente a partir de sua matriz \(H\) para poder determinar as capacidades de detecção e correcção de erros do código. Suponha que
são as \(n\)-tuplas em \({\mathbb Z}_2^n\) de peso 1. Para uma matriz binária \(H\) de \(m \times n\text{,}\) \(H{\mathbf e}_i\) é exatamente a coluna \(i\)-ésima da matriz \(H\text{.}\)
Exemplo 8.3.7.
Observe que
Enunciamos o resultado na seguinte proposição e deixamos sua demonstração como exercício.
Proposição 8.3.8.
Seja \({\mathbf e}_i\) a \(n\)-tupla binária com um \(1\) na \(i\)-ésima coordenada e \(0\) em todas as outras e suponha que \(H \in {\mathbb M}_{m \times n}({\mathbb Z}_2)\text{.}\) Então \(H{\mathbf e}_i\) é a \(i\)-ésima coluna da matriz \(H\text{.}\)
Teorema 8.3.9.
Seja \(H\) uma matriz binária de \(m \times n\text{.}\) Então o espaço nulo de \(H\) é um código que pode detectar um erro se e somente se nenhuma coluna de \(H\) consiste somente de zeros.
Demonstração.
Suponha que \({\rm Null}(H)\) é um código que detecta um erro. Então a distância mínima do código deve ser ao menos 2. Como o espaço nulo é um código de grupo, é necessário que o código não tenha nenhuma palavra de peso menor que 2 , sem contar a palavra de peso 0. Isto é, \({\mathbf e}_i\) não deve ser uma palavra do código para \(i = 1, \ldots, n\text{.}\) Como \(H{\mathbf e}_i\) é a \(i\)-ésima coluna de \(H\text{,}\) a \(i\)-ésima coluna não tem somente zeros.
Reciprocamente, suponha que nenhuma coluna de \(H\) é a coluna zero. Pela Proposição 8.3.8, \(H{\mathbf e}_i \neq {\mathbf 0}\text{;}\) logo, a distância mínima do código é ao menos 2, e o código tem a capacidade de detectar um erro.
Exemplo 8.3.10.
Se consideramos as matrizes
e
então o espaço nulo de \(H_1\) é um código que detecta um erro e o espaço nulo de \(H_2\) não é.
Podemos melhorar o Teorema 8.3.9. Este teorema nos entrega condições sobre a matriz \(H\) que nos dizem quando o peso mínimo do código formado pelo espaço nulo de \(H\) é 2. Também podemos determinar quando a distância mínima de um código linear é 3 examinando a matriz correspondente.
Exemplo 8.3.11.
Se fazemos
e queremos determinar se \(H\) é a matriz verificadora canônica para um código corretor de um erro, é necessário ter certeza que \({\rm Null}(H)\) não contenha nenhuma 4-tupla de peso 2. Isto é, \((1100)\text{,}\) \((1010)\text{,}\) \((1001)\text{,}\) \((0110)\text{,}\) \((0101)\text{,}\) e \((0011)\) não devem estar em \({\rm Null}(H)\text{.}\) O próximo teorema estabelece que podemos saber se o código determinado por \(H\) é corretor de erros examinando as colunas de \(H\text{.}\) Note neste exemplo que \(H\) não só não tem colunas nulas, como que também não possuir colunas repetidas.
Teorema 8.3.12.
Seja \(H\) uma matriz binária. O espaço nulo de \(H\) é um código corretor de um erro se \(H\) não contém colunas de zeros nem colunas iguais.
Demonstração.
A \(n\)-tupla \({\mathbf e}_{i} +{\mathbf e}_{j}\) tem uns nas \(i\)-ésima e \(j\)-ésima posições e zeros nas demais, e \(w( {\mathbf e}_{i} +{\mathbf e}_{j}) = 2\) para \(i \neq j\text{.}\) Como
Só pode ocorrer se a \(i\)-ésima e a \(j\)-ésima colunas são idênticas. Como não contêm palavras de peso menor ou igual a 2, o espaço nulo de \(H\) é um código corretor de um erro.
Suponha agora que temos uma matriz verificadora canônica \(H\) com três linhas. Podemos nos perguntar quantas colunas podemos adicionar a matriz e continuar tendo um espaço nulo que seja um código que detecte e corrija um erro. Como cada coluna tem três entradas, existem \(2^3 = 8\) colunas diferentes possíveis. Não podemos adicionar as colunas
Então podemos adicionar até quatro colunas mantendo uma distância mínima de 3.
Em geral, se \(H\) é uma matriz verificadora canônica de \(m \times n\text{,}\) então existe \(n-m\) posições de informação em cada palava do código. Cada coluna tem \(m\) bits, então existem \(2^m\) possíveis colunas diferentes. É necessário que as colunas \({\mathbf 0}, {\mathbf e}_1, \ldots, {\mathbf e}_m\) sejam excluídas, deixando \(2^m - (1 + m)\) colunas restantes para informação se queremos manter a habilidade de não somente detectar, mas também corrigir um erro.