Codage Canalï
Dans ce chapitre, nous prĂ©sentons les bases du codage de canal, câest-Ă -dire les codes correcteurs dâerreur (FEC pour Forward Error Correction en anglais), la limite de Shannon, les codes de Hamming, les turbo-codes et les codes LDPC. Le codage de canal est un domaine Ă©norme dans les communications sans fil, et est une branche de la « thĂ©orie de lâinformation », qui est lâĂ©tude de la quantification, du stockage et de la communication de lâinformation.
Pourquoi nous avons besoin du codage des canauxï
Comme nous lâavons appris dans le chapitre le Bruit et les dB, les canaux sans fil sont bruyants, et nos symboles numĂ©riques nâatteindront pas parfaitement le rĂ©cepteur. Si vous avez suivi un cours des rĂ©seaux, vous connaissez peut-ĂȘtre dĂ©jĂ les contrĂŽles de redondance cyclique (CRC pour cyclic redundancy checks en anglais), qui dĂ©tectent les erreurs au niveau de la rĂ©ception. Lâobjectif du codage de canal est de dĂ©tecter et de corriger les erreurs au niveau du rĂ©cepteur. Si nous laissons une certaine marge dâerreur, nous pouvons transmettre avec un systĂšme de modulation dâordre supĂ©rieur par exemple, sans que la liaison soit rompue. Ă titre dâexemple visuel, considĂ©rez les constellations suivantes montrant une QPSK (Ă gauche) et une 16QAM (Ă droite) avec la mĂȘme quantitĂ© de bruit. La QPSK fournit 2 bits par symbole, tandis que la 16QAM offre un dĂ©bit deux fois plus Ă©levĂ© avec 4 bits par symbole. Mais notez comment dans la constellation QPSK, les symboles ont tendance Ă ne pas dĂ©passe pas les frontiĂšres de dĂ©cision des symboles, ou lâaxe des x et lâaxe des y, ce qui signifie que les symboles seront reçus correctement. En revanche, dans le tracĂ© de la constellation 16QAM, il y a un chevauchement des groupes de points et, par consĂ©quent, de nombreux symboles seront mal reçus.
Un Ă©chec du CRC entraĂźne gĂ©nĂ©ralement une retransmission, du moins lorsquâon utilise un protocole comme TCP. Si Alice envoie un message Ă Bob, il est prĂ©fĂ©rable que Bob nâait pas Ă renvoyer un message Ă Alice pour demander Ă nouveau lâinformation. Le but du codage de canal est de transmettre des informations redondantes. La redondance est une sĂ©curitĂ© qui rĂ©duit le nombre de paquets erronĂ©s, de retransmissions ou de donnĂ©es perdues.
Nous avons vu pourquoi nous avons besoin du codage de canal, voyons donc oĂč il intervient dans la chaĂźne de transmission-rĂ©ception :
Observez quâil y a plusieurs Ă©tapes de codage dans la chaĂźne dâĂ©mission-rĂ©ception. Le codage source, notre premiĂšre Ă©tape, nâest pas la mĂȘme que le codage du canal; le codagesource a pour but de compresser les donnĂ©es Ă transmettre autant que possible, tout comme lorsque vous zippez des fichiers pour rĂ©duire lâespace occupĂ©. En dâautres termes, la sortie du bloc de codage de la source doit ĂȘtre plus petite que lâentrĂ©e des donnĂ©es, mais la sortie du codage du canal sera plus grande que son entrĂ©e car la redondance est ajoutĂ©e.
Types de Codesï
Pour effectuer le codage du canal, nous utilisons un « code de correction dâerreur ». Ce code nous dit, Ă©tant donnĂ© les bits que nous devons transmettre, quels sont les bits que nous transmettons rĂ©ellement? Le code le plus Ă©lĂ©mentaire est appelĂ© « code de rĂ©pĂ©tition », et il consiste Ă rĂ©pĂ©ter simplement un bit N fois de suite. Pour le code de rĂ©pĂ©tition-3, on transmet chaque bit trois fois :
0 → 000
1 → 111
Le message 10010110 est transmis sous la forme 111000000111000111111000 aprĂšs codage du canal.
Certains codes fonctionnent sur des « blocs » de bits dâentrĂ©e, tandis que dâautres utilisent une approche par flux continu. Les codes qui fonctionnent sur des blocs, câest-Ă -dire des donnĂ©es dâune longueur dĂ©finie, sont appelĂ©s « codes blocs », tandis que les codes qui fonctionnent sur un flux de bits, oĂč la longueur des donnĂ©es est arbitraire, sont appelĂ©s « codes convolutifs ». Ce sont les deux principaux types de codes. Notre code de rĂ©pĂ©tition-3 est un code de bloc oĂč chaque bloc est de trois bits.
Soit dit en passant, ces codes de correction dâerreurs ne sont pas uniquement utilisĂ©s dans le codage des canaux pour les liaisons sans fil. Vous avez dĂ©jĂ stockĂ© des informations sur un disque dur ou un SSD et vous vous ĂȘtes demandĂ© comment il nây avait jamais dâerreurs de bits lors de la relecture des informations? LâĂ©criture, puis la lecture, de la mĂ©moire est similaire Ă un systĂšme de communication. Les contrĂŽleurs de disques durs et de disques SSD intĂšgrent la correction dâerreurs. Elle est transparente pour le systĂšme dâexploitation et peut ĂȘtre propriĂ©taire puisquâelle est intĂ©grĂ©e au disque dur/SSD. Pour les supports portables comme les CD, la correction dâerreurs doit ĂȘtre normalisĂ©e. Les codes Reed-Solomon Ă©taient courants dans les CD-ROM.
Rendement de Codeï
Toute correction dâerreur comprend une forme de redondance. Cela signifie que si nous voulons transmettre 100 bits dâinformation, nous devrons en fait envoyer plus que 100 bits. Le « dĂ©bit de code » est le rapport entre le nombre de bits dâinformation et le nombre total de bits envoyĂ©s (câest-Ă -dire les bits dâinformation plus les bits de redondance). Pour en revenir Ă lâexemple du codage par rĂ©pĂ©tition-3, si je dispose de 100 bits dâinformation, nous pouvons dĂ©terminer ce qui suit :
300 bits sont envoyés
Seuls 100 bits représentent une information
Taux de codage = 100/300 = 1/3
Le taux de codage sera toujours inférieur à 1, car il existe un compromis entre la redondance et le débit. Un taux de codage plus faible signifie plus de redondance et moins de débit.
Modulation et Codageï
Dans le chapitre Modulation numĂ©rique, nous avons abordĂ© le bruit dans les schĂ©mas de modulation. Pour un SNR (rapport signal Ă bruit) faible, vous avez besoin dâun schĂ©ma de modulation dâordre faible (par exemple, QPSK) pour faire face au bruit, et pour un SNR Ă©levĂ©, vous pouvez utiliser une modulation comme 256QAM pour envoyer plus de bits par seconde. Il en va de mĂȘme pour le codage du canal: vous souhaitez des taux de codage plus faibles Ă des SNR faibles, et Ă des SNR Ă©levĂ©s, vous pouvez utiliser un taux de codage proche de 1. Les systĂšmes de communication modernes disposent dâun ensemble de schĂ©mas de modulation et de codage combinĂ©s, appelĂ©s MCS (pour modulations and coding schemes) en anglais. Chaque MCS spĂ©cifie un schĂ©ma de modulation et un schĂ©ma de codage Ă utiliser Ă des niveaux de SNR spĂ©cifiques.
Les communications modernes modifient de maniĂšre adaptative le MCS en temps rĂ©el en fonction des conditions du canal sans fil. Le rĂ©cepteur envoie un retour dâinformation sur la qualitĂ© du canal Ă lâĂ©metteur. Le retour dâinformation doit ĂȘtre partagĂ© avant que la qualitĂ© du canal sans fil ne change, ce qui peut ĂȘtre de lâordre de la ms. Ce processus adaptatif permet dâobtenir le meilleur dĂ©bit de communication possible et est utilisĂ© par les technologies modernes telles que LTE, 5G et WiFi. Ci-dessous, une visualisation dâune tour cellulaire changeant de MCS pendant la transmission en fonction de la distance entre lâutilisateur et la cellule.
Lorsque vous utilisez un MCS adaptatif, si vous tracez le dĂ©bit en fonction du SNR, vous obtenez une courbe en forme dâescalier comme le graphique ci-dessous. Les protocoles comme LTE ont souvent un tableau indiquant quel MCS doit ĂȘtre utilisĂ© Ă quel SNR.
Code de Hammingï
Examinons un simple code correcteur dâerreurs. Le code de Hamming a Ă©tĂ© le premier code non trivial dĂ©veloppĂ©. Ă la fin des annĂ©es 1940, Richard Hamming travaillait aux Bell Labs et utilisait un ordinateur Ă©lectromĂ©canique qui utilisait des bandes de papier perforĂ©. Lorsque des erreurs Ă©taient dĂ©tectĂ©es dans la machine, celle-ci sâarrĂȘtait et les opĂ©rateurs devaient les corriger. Hamming a Ă©tĂ© frustrĂ© de devoir recommencer ses programmes Ă partir de zĂ©ro Ă cause des erreurs dĂ©tectĂ©es. Il sâest dit : « Bon sang, si la machine peut dĂ©tecter une erreur, pourquoi ne peut-elle pas localiser la position de lâerreur et la corriger? ». Il a passĂ© les annĂ©es suivantes Ă dĂ©velopper le code de Hamming pour que lâordinateur puisse faire exactement cela.
Dans les codes de Hamming, des bits supplĂ©mentaires, appelĂ©s bits de paritĂ© ou bits de contrĂŽle, sont ajoutĂ©s aux informations pour assurer la redondance. Toutes les positions binaires qui sont des puissances de deux sont des bits de paritĂ©: 1, 2, 4, 8, etc. Les autres positions binaires sont destinĂ©es Ă lâinformation. Le tableau situĂ© sous ce paragraphe met en Ă©vidence les bits de paritĂ© en vert. Chaque bit de paritĂ© « couvre » tous les bits oĂč le ET binaire de la paritĂ© et de la position du bit est diffĂ©rent de zĂ©ro, marquĂ© dâun X rouge ci-dessous. Si nous voulons utiliser un bit de donnĂ©es, nous avons besoin des bits de paritĂ© qui le couvrent. Pour pouvoir aller jusquâau bit de donnĂ©es d9, nous avons besoin du bit de paritĂ© p8 et de tous les bits de paritĂ© qui le prĂ©cĂšdent. Cette table nous indique donc le nombre de bits de paritĂ© dont nous avons besoin pour un certain nombre de bits. Ce schĂ©ma se poursuit indĂ©finiment.
Les codes de Hamming sont des codes de bloc, ils fonctionnent donc sur N bits de donnĂ©es Ă la fois. Ainsi, avec trois bits de paritĂ©, nous pouvons opĂ©rer sur des blocs de quatre bits de donnĂ©es Ă la fois. Nous reprĂ©sentons ce schĂ©ma de codage dâerreur par Hamming(7,4), oĂč le premier argument est le nombre total de bits transmis et le second argument est le nombre de bits de donnĂ©es.
Voici trois propriétés importantes des codes de Hamming :
Le nombre minimal de changements de bits nĂ©cessaires pour passer dâun mot de code quelconque Ă un autre mot de code quelconque est de trois.
Il peut corriger les erreurs dâun bit
Il peut détecter mais pas corriger les erreurs de deux bits
Dâun point de vue algorithmique, le processus de codage peut ĂȘtre rĂ©alisĂ© Ă lâaide dâune simple multiplication matricielle, en utilisant ce que lâon appelle la « matrice gĂ©nĂ©ratrice ». Dans lâexemple ci-dessous, le vecteur 1011 reprĂ©sente les donnĂ©es Ă coder, câest-Ă -dire les informations que nous voulons envoyer au rĂ©cepteur. La matrice 2D est la matrice gĂ©nĂ©ratrice, et elle dĂ©finit le schĂ©ma de codage. Le rĂ©sultat de la multiplication fournit le mot de code Ă transmettre.
LâintĂ©rĂȘt de se plonger dans les codes de Hamming Ă©tait de donner un aperçu du fonctionnement du codage des erreurs. Les codes en bloc ont tendance Ă suivre ce type de schĂ©ma. Les codes convolutifs fonctionnent diffĂ©remment, mais nous ne nous y attarderons pas ici ; ils utilisent souvent un dĂ©codage de type Trellis, qui peut ĂȘtre reprĂ©sentĂ© par un diagramme ressemblant Ă celui-ci:
DĂ©codage souple ou durï
Rappelons quâau niveau du rĂ©cepteur, la dĂ©modulation intervient avant le dĂ©codage. Le dĂ©modulateur peut nous dire quel symbole a Ă©tĂ© envoyĂ©, ou il peut nous donner la valeur « souple ». Pour la BPSK, au lieu de nous dire 1 ou 0, le dĂ©modulateur peut dire 0.3423 ou -1.1234, quelle que soit la valeur « souple » du symbole. En gĂ©nĂ©ral, le dĂ©codage est conçu pour utiliser des valeurs dures ou souples.
Décodage à décision souple - utilise les valeurs souples.
Décodage à décision dure - utilise uniquement les 1 et les 0.
Les codes souples sont plus robustes parce que vous utilisez toutes les informations Ă votre disposition, mais ils sont aussi beaucoup plus compliquĂ©s Ă mettre en Ćuvre. Les codes de Hamming dont nous avons parlĂ© utilisaient des dĂ©cisions dures, alors que les codes convolutifs ont tendance Ă utiliser des dĂ©cisions souples.
Limit de Shannonï
La limite de Shannon ou capacitĂ© de Shannon est un incroyable Ă©lĂ©ment de thĂ©orie qui nous indique combien de bits par seconde dâinformations sans erreur nous pouvons envoyer :
C - Capacité du canal [bits/sec]
B - Largeur de bande du canal [Hz].
S - Puissance moyenne du signal reçu [watts].
N - Puissance moyenne du bruit [watts].
Cette Ă©quation reprĂ©sente ce que tout schĂ©ma MCS peut faire de mieux lorsquâil fonctionne Ă un rapport signal/bruit suffisamment Ă©levĂ© pour ĂȘtre exempt dâerreurs. Il est plus logique de reprĂ©senter la limite en bits/sec/Hz, câest-Ă -dire en bits/sec par quantitĂ© de spectre:
avec SNR en termes linéaires (et non en dB). Cependant, lors de la représentation graphique, nous représentons généralement le SNR en dB pour des raisons de commodité:
Si vous voyez ailleurs des courbes de limites de Shannon qui ont lâair un peu diffĂ©rents, ils utilisent probablement un axe x en terme « dâĂ©nergie par bit » ou \(E_b/N_0\), qui est juste une alternative au SNR.
Il pourrait aider Ă simplifier les choses de rĂ©aliser que lorsque le SNR est assez Ă©levĂ© (par exemple, 10 dB ou plus), la limite de Shannon peut ĂȘtre approximĂ©e comme \(log_2 \left( \mathrm{SNR} \right)\), qui est approximativement \(\mathrm{SNR_{dB}}/3\) (expliquĂ© ici). Par exemple, avec un rapport signal Ă bruit de 24 dB, vous obtenez 8 bits/seconde/Hz, donc si vous avez 1 MHz Ă utiliser, cela reprĂ©sente 8 Mbps. Vous vous dites peut-ĂȘtre que ce nâest quâune limite thĂ©orique, mais les communications modernes sont assez proches de cette limite, ce qui vous donne au moins une idĂ©e approximative. Vous pouvez toujours diviser ce chiffre par deux pour tenir compte de les champs additionnels dans les paquets/trames et dâun schĂ©ma MCS sous optimal.
Le dĂ©bit maximal du WiFi 802.11n fonctionnant dans la bande 2.4 GHz (qui utilise des canaux de 20 MHz de large), suivant les spĂ©cifications, est de 300 Mbps. Il est Ă©vident que vous pourriez vous asseoir juste Ă cĂŽtĂ© de votre routeur et obtenir un rapport signal/bruit extrĂȘmement Ă©levĂ©, peut-ĂȘtre 60 dB, mais pour ĂȘtre fiable/pratique, le dĂ©bit maximal MCS (rappelez-vous la courbe en escalier ci-dessus) ne nĂ©cessitera probablement pas un rapport signal/bruit aussi Ă©levĂ©. Vous pouvez mĂȘme jeter un coup dâoeil Ă la liste MCS pour 802.11n. 802.11n va jusquâĂ 64-QAM, et combinĂ© avec le codage de canal, il nĂ©cessite un SNR autour de 25 dB selon ce tableau. Cela signifie que, mĂȘme avec un SNR de 60 dB, votre WiFi utilisera toujours la 64-QAM. Donc, Ă 25 dB, la limite de Shannon est dâenviron 8.3 bits/sec/Hz, ce qui, compte tenu de 20 MHz de spectre, reprĂ©sente 166 Mbps. Cependant, si vous tenez compte de la technologie MIMO, que nous aborderons dans un prochain chapitre, vous pouvez obtenir quatre de ces flux en parallĂšle, ce qui donne 664 Mbps. En divisant ce chiffre par deux, vous obtenez un rĂ©sultat trĂšs proche de la vitesse maximale annoncĂ©e de 300 Mbps pour le WiFi 802.11n dans la bande 2.4 GHz.
La preuve de la limite de Shannon est assez folle; elle implique des calculs qui ressemblent Ă ceci:
Pour plus dâinformations, voir ici.
Codes de lâĂ©tat de lâartï
Actuellement, les meilleurs schémas de codage de canal sont :
Les turbo-codes, utilisés en 3G, 4G, et dans les vaisseaux spatiaux de la NASA.
Les codes LDPC, utilisĂ©s dans la DVB-S2, le WiMAX, lâIEEE 802.11n.
Ces deux codes sâapprochent de la limite de Shannon (câest-Ă -dire quâils lâatteignent presque sous certains SNR). Les codes de Hamming et dâautres codes plus simples sont loin dâatteindre la limite de Shannon. Du point de vue recherche, il nây a plus beaucoup de possibilitĂ©s dâamĂ©lioration des codes eux-mĂȘmes. La recherche actuelle se concentre davantage sur lâamĂ©lioration de lâefficacitĂ© du dĂ©codage en termes de complexitĂ© et sur lâadaptation avec un canal retour.
Les codes Ă contrĂŽle de paritĂ© Ă faible densitĂ© (LDPC pour Low Density Parity Check) sont une classe de codes en bloc linĂ©aires trĂšs efficaces. Ils ont Ă©tĂ© introduits pour la premiĂšre fois par Robert G. Gallager dans sa thĂšse de doctorat en 1960 au MIT. En raison de la complexitĂ© de leur mise en Ćuvre, ils ont Ă©tĂ© ignorĂ©s jusque dans les annĂ©es 1990 ! Ă lâheure oĂč nous Ă©crivons ces lignes (2020), Gallager a 89 ans, est toujours en vie et a remportĂ© de nombreux prix pour ses travaux (des dĂ©cennies aprĂšs les avoir rĂ©alisĂ©s). Le code LDPC nâest pas brevetĂ© et est donc libre dâutilisation (contrairement aux turbo-codes), câest pourquoi il a Ă©tĂ© utilisĂ© dans de nombreux protocoles ouverts.
Les turbo-codes sont basĂ©s sur les codes convolutifs. Il sâagit dâune classe de codes qui combine deux ou plusieurs codes convolutifs plus simples et un entrelaceur. La demande de brevet pour les turbo-codes a Ă©tĂ© dĂ©posĂ©e le 23 avril 1991. Les inventeurs Ă©tant français, et lorsque Qualcomm a voulu utiliser les turbo-codes dans le CDMA pour la 3G, elle a dĂ» conclure un accord de licence payante avec France TĂ©lĂ©com. Le brevet principal a expirĂ© le 29 aoĂ»t 2013.