Section8.3Matrices de contrôle de parité et matrices génératrices
Nous avons besoin de trouver un moyen systématique de générer des codes linéaires ainsi que des méthodes rapides de décodage. En examinant les propriétés d’une matrice \(H\) et en choisissant soigneusement \(H\text{,}\) il est possible de développer des méthodes très efficaces d’encodage et de décodage des messages. À cette fin, nous allons introduire les matrices génératrices standard et les matrices de contrôle de parité canoniques.
Supposons que \(H\) est une matrice \(m \times n\) à entrées dans \({\mathbb Z}_2\) et \(n \gt m\text{.}\) Si les \(m\) dernières colonnes de la matrice forment la matrice identité \(m \times m\text{,}\)\(I_m\text{,}\) alors la matrice est une matrice de contrôle de parité canonique. Plus précisément, \(H= (A \mid I_m)\text{,}\) où \(A\) est la matrice \(m \times (n-m)\)
À chaque matrice de contrôle de parité canonique nous pouvons associer une matrice génératrice standard \(n \times (n-m)\)
\begin{equation*}
G = \left( \frac{I_{n-m}}{A} \right)\text{.}
\end{equation*}
Notre objectif sera de montrer qu’un \(\mathbf x\) satisfaisant \(G {\mathbf x} = {\mathbf y}\) existe si et seulement si \(H{\mathbf y} = {\mathbf 0}\text{.}\) Étant donné un bloc de message \({\mathbf x}\) à encoder, la matrice \(G\) nous permettra de l’encoder rapidement en un mot de code linéaire \({\mathbf y}\text{.}\)
Observez que les lignes de \(H\) représentent les contrôles de parité sur certaines positions de bits dans un \(6\)-uplet. Les \(1\)s dans la matrice identité servent de contrôles de parité pour les \(1\)s dans la même ligne. Si \({\mathbf x} = (x_1, x_2, x_3, x_4, x_5, x_6)\text{,}\) alors
Ici \(x_4\) sert de bit de contrôle pour \(x_2\) et \(x_3\) ; \(x_5\) est un bit de contrôle pour \(x_1\) et \(x_2\) ; et \(x_6\) est un bit de contrôle pour \(x_1\) et \(x_3\text{.}\) La matrice identité évite que \(x_4\text{,}\)\(x_5\) et \(x_6\) aient à se contrôler mutuellement. Ainsi, \(x_1\text{,}\)\(x_2\text{,}\) et \(x_3\) peuvent être arbitraires, mais \(x_4\text{,}\)\(x_5\) et \(x_6\) doivent être choisis pour assurer la parité. Le noyau de \(H\) se calcule facilement :
Si \(H \in {\mathbb M}_{m \times n}({\mathbb Z}_2)\) est une matrice de contrôle de parité canonique, alors \(\Null(H)\) est constitué de tous les \({\mathbf x} \in {\mathbb Z}_2^n\) dont les premiers \(n-m\) bits sont arbitraires mais dont les derniers \(m\) bits sont déterminés par \(H{\mathbf x} = {\mathbf 0}\text{.}\) Chacun des derniers \(m\) bits sert de bit de contrôle de parité paire pour certains des premiers \(n-m\) bits. Par conséquent, \(H\) donne lieu à un code en blocs \((n, n-m)\text{.}\)
Nous laissons la démonstration de ce théorème en exercice. À la lumière du théorème, les premiers \(n - m\) bits de \({\mathbf x}\) sont appelés bits d’information et les derniers \(m\) bits sont appelés bits de contrôle. Dans Exemple 8.3.1, les trois premiers bits sont les bits d’information et les trois derniers sont les bits de contrôle.
Supposons que \(G\) est une matrice génératrice standard \(n \times k\text{.}\) Alors \(C = \left\{{\mathbf y} : G{\mathbf x} ={\mathbf y}\text{ pour }{\mathbf x}\in {\mathbb Z}_2^k\right\}\) est un code en blocs \((n,k)\text{.}\) Plus précisément, \(C\) est un code de groupe.
Soient \(G {\mathbf x}_1 = {\mathbf y}_1\) et \(G {\mathbf x}_2 ={\mathbf y}_2\) deux mots de code. Alors \({\mathbf y}_1 + {\mathbf y}_2\) est dans \(C\) puisque
Nous devons également montrer que deux blocs de messages ne peuvent pas être encodés dans le même mot de code. C’est-à-dire, nous devons montrer que si \(G {\mathbf x} = G {\mathbf y}\text{,}\) alors \({\mathbf x} = {\mathbf y}\text{.}\) Supposons que \(G {\mathbf x} = G {\mathbf y}\text{.}\) Alors
\begin{equation*}
G {\mathbf x} - G {\mathbf y} = G( {\mathbf x} - {\mathbf y}) = {\mathbf 0}\text{.}
\end{equation*}
Cependant, les premiers \(k\) coordonnées de \(G( {\mathbf x} - {\mathbf y})\) sont exactement \(x_1 -y_1, \ldots,
x_k - y_k\text{,}\) puisqu’elles sont déterminées par la matrice identité, \(I_k\text{,}\) partie de \(G\text{.}\) Par conséquent, \(G( {\mathbf x} - {\mathbf y}) = {\mathbf 0}\) exactement quand \({\mathbf x} = {\mathbf y}\text{.}\)
Avant de pouvoir démontrer la relation entre les matrices de contrôle de parité canoniques et les matrices génératrices standard, nous devons démontrer un lemme.
Soit \(H = (A \mid I_m )\) une matrice de contrôle de parité canonique \(m \times n\) et \(G = \left( \frac{I_{n-m} }{A} \right)\) la matrice génératrice standard \(n \times (n-m)\) correspondante. Alors \(HG = {\mathbf 0}\text{.}\)
Soit \(H = (A \mid I_m )\) une matrice de contrôle de parité canonique \(m \times n\) et soit \(G = \left( \frac{I_{n-m} }{A} \right) \) la matrice génératrice standard \(n \times (n-m)\) associée à \(H\text{.}\) Soit \(C\) le code généré par \(G\text{.}\) Alors \({\mathbf y}\) est dans \(C\) si et seulement si \(H {\mathbf y} = {\mathbf 0}\text{.}\) En particulier, \(C\) est un code linéaire avec la matrice de contrôle de parité canonique \(H\text{.}\)
Réciproquement, supposons que \({\mathbf y} = (y_1, \ldots,
y_n)^\transpose\) est dans le noyau de \(H\text{.}\) Nous devons trouver un \({\mathbf x}\) dans \({\mathbb Z}_2^{n-m}\) tel que \(G {\mathbf x}^\transpose = {\mathbf y}\text{.}\) Puisque \(H {\mathbf y} = {\mathbf 0}\text{,}\) le système d’équations suivant doit être satisfait :
Il serait utile de pouvoir calculer la distance minimale d’un code linéaire directement à partir de sa matrice \(H\) afin de déterminer les capacités de détection et de correction d’erreurs du code. Supposons que
sont les \(n\)-uplets de \({\mathbb Z}_2^n\) de poids \(1\text{.}\) Pour une matrice binaire \(m \times n\)\(H\text{,}\)\(H{\mathbf e}_i\) est exactement la \(i\)-ème colonne de la matrice \(H\text{.}\)
Soit \({\mathbf e}_i\) le \(n\)-uplet binaire avec un \(1\) en \(i\)-ème coordonnée et des \(0\) ailleurs, et supposons que \(H \in {\mathbb M}_{m \times n}({\mathbb Z}_2)\text{.}\) Alors \(H{\mathbf e}_i\) est la \(i\)-ème colonne de la matrice \(H\text{.}\)
Soit \(H\) une matrice binaire \(m \times n\text{.}\) Alors le noyau de \(H\) est un code de détection d’erreur simple si et seulement si aucune colonne de \(H\) ne consiste entièrement de zéros.
Supposons que \(\Null(H)\) est un code de détection d’erreur simple. Alors la distance minimale du code doit être au moins \(2\text{.}\) Puisque le noyau est un code de groupe, il suffit d’exiger que le code ne contienne aucun mot de code de poids inférieur à \(2\) autre que le mot de code nul. C’est-à-dire que \({\mathbf e}_i\) ne doit pas être un mot de code pour \(i = 1, \ldots, n\text{.}\) Puisque \(H{\mathbf e}_i\) est la \(i\)-ème colonne de \(H\text{,}\) la seule façon dont \({\mathbf e}_i\) pourrait être dans le noyau de \(H\) serait si la \(i\)-ème colonne était entièrement nulle, ce qui est impossible ; par conséquent, le code doit avoir la capacité de détecter au moins les erreurs simples.
Nous pouvons même faire mieux que Théorème 8.3.9. Ce théorème nous donne des conditions sur une matrice \(H\) qui nous indiquent quand le poids minimal du code formé par le noyau de \(H\) est \(2\text{.}\) Nous pouvons également déterminer quand la distance minimale d’un code linéaire est \(3\) en examinant la matrice correspondante.
et voulons déterminer si \(H\) est ou non la matrice de contrôle de parité canonique d’un code correcteur d’erreurs, il est nécessaire de s’assurer que \(\Null(H)\) ne contient aucun \(4\)-uplet de poids \(2\text{.}\) C’est-à-dire que \((1100)\text{,}\)\((1010)\text{,}\)\((1001)\text{,}\)\((0110)\text{,}\)\((0101)\) et \((0011)\) ne doivent pas être dans \(\Null(H)\text{.}\) Le théorème suivant affirme que nous pouvons effectivement déterminer que le code généré par \(H\) est correcteur d’erreurs en examinant les colonnes de \(H\text{.}\) Remarquez dans cet exemple que non seulement \(H\) n’a pas de colonnes nulles, mais aussi qu’aucune des deux colonnes n’est identique.
Soit \(H\) une matrice binaire. Le noyau de \(H\) est un code correcteur d’erreur simple si et seulement si \(H\) ne contient aucune colonne nulle et aucune des deux colonnes de \(H\) n’est identique.
Le \(n\)-uplet \({\mathbf e}_{i} +{\mathbf e}_{j}\) a des \(1\)s aux \(i\)-ème et \(j\)-ème entrées et des 0s ailleurs, et \(w( {\mathbf e}_{i} +{\mathbf e}_{j}) = 2\) pour \(i \neq j\text{.}\) Puisque
Supposons maintenant que nous avons une matrice de contrôle de parité canonique \(H\) avec trois lignes. Nous pourrions alors nous demander combien de colonnes supplémentaires nous pouvons ajouter à la matrice tout en conservant un noyau qui est un code de détection et de correction d’erreur simple. Puisque chaque colonne a trois entrées, il y a \(2^3 = 8\) colonnes distinctes possibles. Nous ne pouvons pas ajouter les colonnes
En général, si \(H\) est une matrice de contrôle de parité canonique \(m \times n\text{,}\) alors il y a \(n-m\) positions d’information dans chaque mot de code. Chaque colonne a \(m\) bits, donc il y a \(2^m\) colonnes distinctes possibles. Il est nécessaire que les colonnes \({\mathbf 0}, {\mathbf e}_1, \ldots, {\mathbf e}_m\) soient exclues, laissant \(2^m - (1 + m)\) colonnes restantes pour l’information si nous voulons maintenir la capacité non seulement de détecter mais aussi de corriger les erreurs simples.