# Matrice génératrice

Une matrice génératrice est un concept de théorie des codes utilisé dans le cas des codes linéaires.
Elle correspond à la matrice de l'application linéaire de E l'espace vectoriel des messages à communiquer dans F, l'espace vectoriel contenant les codes transmis.
La notion de matrice génératrice possède à la fois un intérêt théorique dans le cadre de l'étude des codes correcteurs, par exemple pour définir la notion de code systématique, et un intérêt pratique pour une implémentation efficace.

## Contexte
### Code correcteur

Un code correcteur possède pour objectif la détection ou la correction d'erreurs après la transmission d'un message. Cette correction est permise grâce à l'ajout d'informations redondantes. Le message est plongé dans un ensemble plus grand, la différence de taille contient la redondance, l'image du message par le plongement est transmis. En cas d'altération du message, la redondance est conçue pour détecter ou corriger les erreurs. Un exemple simple est celui du code de répétition, le message est, par exemple, envoyé trois fois, le décodage se fait par vote. Ici, l'ensemble plus grand est de dimension triple à celle du message initial.
Rappelons les éléments de base de la formalisation. Il existe un ensemble E constitué de suites à valeurs dans un alphabet et de longueur k, c’est-à-dire qu'à partir du rang k, toutes les valeurs de la suite sont nulles. Ces éléments sont l'espace des messages que l'on souhaite communiquer. Pour munir le message de la redondance souhaitée, il existe une application φ injective de E à valeurs dans F, l'espace des suites de longueur n à valeurs dans un alphabet. La fonction φ est appelée encodage, φ(E) aussi noté C est appelé le code, un élément de φ(E) mot du code, n la longueur du code et k la dimension du code. Ces notations sont utilisées dans tout l'article.

### Code linéaire

Un code linéaire dispose d'une structure algébrique plus riche que celle du cadre général des codes correcteurs. Les alphabets A et A' sont identifiés et munis d'une structure de corps fini. Le cas le plus fréquent consiste à choisir le corps F$_2$ ou l'une de ses extensions finies. Ce corps correspond à l'alphabet binaire dont les tables d'addition et de multiplication sont données ci-dessous:
| + | 0 | 1 |
| 0 | 0 | 1 |
| 1 | 1 | 0 |
| . | 0 | 1 |
| 0 | 0 | 0 |
| 1 | 0 | 1 |
Les ensembles E et F sont naturellement munis d'une structure d'espace vectoriel de dimensions respectives k et n. Si F$_d$ désigne le corps fini de cardinal d où d est une puissance d'un nombre premier p, alors l'espace vectoriel F est généralement identifié à F$_d$$^n$.
F est muni d'une distance qui dérive du poids de Hamming. La distance entre deux points de F correspond au nombre de coordonnées non nulles de la différence entre les deux points, dans la base canonique. Un code se décrit par trois paramètres, noté [n, k, δ], n est la longueur du code, k la dimension du code et δ la distance minimale entre deux mots du code. Ces notations sont utilisées dans le reste de l'article.
Enfin, l'application d'encodage φ est choisie linéaire, le code est donc un sous-espace vectoriel.

## Définitions

Une notion naturelle apparait et donne lieu à la définition suivante :
   * La matrice génératrice G d'un code linéaire est la matrice de l'application linéaire d'encodage φ dans les bases canoniques.
L'égalité suivante est naturellement vérifiée d'après les propriétés des matrices :
$\forall x\in \mathbb {F} _{q}^{k}\quad G\cdot x=\varphi (x)\in C\subset \mathbb {F} _{q}^{n}$
On remarque que la dimension de la matrice génératrice est n x k car E est de dimension k et F de dimension n.
   * Deux matrices génératrices G et G' sont dites équivalentes si et seulement s'il existe une matrice carrée P d'un automorphisme de E tel que : G' = G •P.
Les codes de longueur n et de dimension k sur un même corps fini possèdent exactement les mêmes propriétés si leurs matrices génératrices sont équivalentes. En particulier, ils possèdent la même distance minimale. En effet, l'image de φ, c’est-à-dire le code reste inchangé par toute permutation préalable sur l'ensemble E, en particulier par un automorphisme. Il n'en est pas de même pour F, un automorphisme peut associer à deux vecteurs à une distance de Hamming de δ, deux vecteurs à une distance de un, ce qui détruirait toutes les propriétés du code.

## Exemples
### Code de répétition

Un code de répétition est un code qui à un message m de longueur k, associe le message m...m. Si son alphabet est choisi comme étant égal à un corps fini, alors le code est linéaire de matrice génératrice G$_r$ égale à :
$G_{r}={\begin{pmatrix}I_{k}\\\vdots \\I_{k}\end{pmatrix}}\quad {\text{ avec }}\quad I_{k}={\begin{pmatrix}1&0&\cdots &0\\0&\ddots &\ddots &\vdots \\\vdots &\ddots &\ddots &0\\0&\cdots &0&1\end{pmatrix}}$

### Somme de contrôle

La somme de contrôle correspond à un code de paramètre [k + 1, k, 2], à un message est associé le mot du code égal au message concaténé avec la somme (à valeur dans le corps fini) de toutes les lettres du message. Si le code est binaire, cela revient à associer un si la somme des lettres est impaire et zéro sinon. Dans le cas général, il a pour matrice génératrice G$_s$ et, en utilisant les notations précédentes :
$G_{s}={I_{k} \choose C}\quad {\text{ avec }}\quad C=(-1,\cdots ,-1)$

### Code de Hamming (7,4)

Le code de Hamming (7,4) est un code binaire de paramètre [7,4,3]. La figure de droite est une représentation graphique de ce code. Le message est le mot d$_1$d$_2$d$_3$d$_4$. Le mot du code est constitué des quatre lettres du mot du message, puis de trois sommes de contrôles p$_1$p$_2$p$_3$. La valeur de p$_i$ est égal à zéro si la somme des trois lettres du message incluses dans son cercle sur la figure est paire et un sinon.
Il possède donc la matrice génératrice G$_h$ suivante :
$G_{h}={\begin{pmatrix}1&0&0&0\\0&1&0&0\\0&0&1&0\\0&0&0&1\\1&1&0&1\\1&0&1&1\\0&1&1&1\end{pmatrix}}$

## Propriétés
### Code systématique

Il existe une forme de la matrice génératrice particulièrement simple, ce qui donne lieu à la définition suivante :
   * Un code linéaire dont la matrice génératrice possède pour k premières colonnes une matrice identité est dit code systématique.
La matrice prend alors la forme suivante :
$^{t}x\cdot G=(x_{1},\cdots ,x_{k})\cdot {\begin{pmatrix}1&0&\cdots &0&c_{1k+1}&\cdots &c_{1n}\\0&\ddots &\ddots &\vdots &\vdots &\ddots &\vdots \\\vdots &\ddots &\ddots &0&c_{k-1k+1}&\cdots &c_{k-1n}\\0&\cdots &0&1&c_{kk+1}&\cdots &c_{kn}\end{pmatrix}}=(x_{1},\cdots ,x_{k},b_{1},\cdots ,b_{n-k})$
Cette forme est particulièrement intéressante, le calcul du mot de code consiste à la détermination des n - k dernières coordonnées, car les k premières correspondent à celles du message initial. De plus, sous réserve d'absence d'altération, le décodage est lui aussi rapide, il consiste à ne considérer uniquement les n premières coordonnées du mot du code. On remarque au passage que le nombre de lignes de la matrice génératrice est égale à l'ordre du vecteur à coder (ici noté k), sans quoi le produit matriciel n'a pas de sens.
   * Les n - k dernières colonnes (c$_{ij}$) de la matrice génératrice sont appelées contrôles de redondance.
   * Les n - k dernières coordonnées (b$_j$) d'un code systématique sont dits bits de contrôle ou parfois somme de contrôle.
Ces coordonnées correspondent exactement à la redondance, leur objectif est la détection ou la correction d'erreurs éventuelles. Dans le cas binaire, elles correspondent à la parité de sommes de lettres du message d'origine, on parle alors souvent de bits de parité.
Les codes linéaires peuvent tous se mettre sous cette forme :
   * Tout code linéaire est équivalent à un code systématique.
Ce qui signifie que, quitte à modifier la base de E, il est possible d'exprimer la matrice génératrice du code grâce à une matrice systématique.
Remarquons tout d'abord qu'il est peut-être nécessaire de modifier l'ordre de la base canonique de F. En effet, si par exemple, le code est inclus dans l'espace vectoriel engendré par les n - 1 derniers vecteurs de la base canonique, alors il est vain de chercher une forme systématique sans modifier l'ordre de la base. En revanche, une permutation des vecteurs ne modifie pas la distance de Hamming.
Montrons tout d'abord le lemme suivant :
   * La plus grande famille de vecteurs de la base canonique engendrant un sous-espace vectoriel d'intersection réduite au vecteur nul avec le code est de cardinal n - k.
C'est une conséquence directe du théorème de la base incomplète. En effet, considérons une base du code, elle forme une famille libre. Le théorème de la base incomplète indique qu'il est possible de compléter cette base par des éléments d'une famille génératrice quelconque, par exemple la base canonique de F. Les vecteurs complétant la famille sont au nombre de n - k car le code est de dimension k et F de dimension n. Ces vecteurs forment une famille répondant aux hypothèses de la proposition. Toute famille de cardinal supérieur possède une codimension supérieure à la dimension du code et donc l'intersection de l'espace généré par une telle famille et le code est non réduit au vecteur nul.
Démontrons alors la proposition:
   * Tout code linéaire est équivalent à un code systématique.
Soit (f$_j$) où j est un entier compris entre 1 et n la base canonique de F. Quitte à la réordonner, supposons que les n - k derniers vecteurs engendrent un sous-espace d'intersection réduite au vecteur nul avec le code.
L'objectif est de trouver une base de E (e$_i$) où i est un entier compris entre 1 et k tel que :
$(ii)\quad \forall i\in [1,k]\;\exists (c_{ji})_{j\in [k+1,n]}\in \mathbb {F} _{d}^{n-k}\quad /\quad \varphi (e_{i})=f_{i}+\sum _{j=k+1}^{n}c_{ji}\cdot f_{j}$
Soit V$_i$ de F le sous-espace vectoriel engendré par les vecteurs f$_j$ où j est élément de l'union des ensembles {i} et [k + 1, n], où i est choisi élément de [1, k]. V$_i$ contient une intersection non vide avec le code φ(E). En effet, la dimension du code est strictement supérieure à la codimension de V$_i$. Un élément non nul de cette intersection possède une coordonnée sur f$_i$ non nulle car les n - k derniers vecteurs de la base engendre un sous-espace vectoriel d'intersection réduite au vecteur nul avec le code. Choisissons l'élément de l'intersection ayant une coordonnée égal à 1 sur le vecteur f$_i$ et notons e$_i$ son antécédent par φ. Les k égalités décrites en (ii) sont vérifiées.
Il ne reste plus qu'à montrer que la famille (e$_i$) est libre. Considérons une relation de dépendance linéaire de cette famille :
$\sum _{i=1}^{k}\lambda _{i}\cdot e_{i}=0\quad {\text{ avec }}\quad \forall i\in [1,k]\quad \lambda _{i}\in \mathbb {F} _{d}$
L'image par φ de cette relation de dépendance linéaire est encore nulle donc :
$\varphi \left(\sum _{i=1}^{k}\lambda _{i}\cdot e_{i}\right)=\sum _{i=1}^{k}\lambda _{i}\cdot \varphi (e_{i})=\sum _{i=1}^{k}\lambda _{i}\cdot f_{i}+\sum _{j=k+1}^{n}\left(\sum _{i=1}^{k}c_{ji}\lambda _{j}\right)\cdot f_{j}=0$
Or la famille (f$_j$) est une base, donc la relation de dépendance linéaire sur cette base est triviale, ce qui démontre la nullité des coefficients λ$_i$. La famille (e$_i$) est donc libre, c'est une base car son cardinal est celui de la dimension de E, ce qui termine la démonstration.