Codage convolutif et décodage de Viterbi


codage convolutif

Les codes convolutifs sont des codes non bloquants qui conviennent généralement à la correction d'erreurs directe. Dans les codes de bloc, un bloc de n symboles générés par le codeur est entièrement déterminé par les informations d'entrée de k bits pendant cette période. Le bit de supervision dans ce groupe de codes supervise uniquement les k bits d'information dans ce groupe de codes. Bien que les codes convolutifs codent également des segments d'informations de k bits en groupes de codes de n bits, les symboles de supervision ne sont pas seulement liés au segment d'informations de k bits actuel, mais également aux informations m = (N -1) précédentes. Le segment est lié , de sorte que l'unité de code de supervision dans un groupe de codes supervise N segments d'informations. Il est courant de désigner N comme degré de contrainte de codage et nN comme longueur de contrainte de codage.
De manière générale, pour les codes convolutifs, les valeurs de k et n sont des entiers relativement petits, et n est supérieur à k, le code convolutif est enregistré comme (n,k,N) et le débit de code est défini comme kn \ frac{k} {n}nk.
Le codeur se compose de trois composants principaux, dont Nk registres à décalage d'étage , n additionneurs modulo 2 et un commutateur rotatif . Le nombre de bornes d'entrée de chaque additionneur modulo 2 peut être différent. Il est connecté à la borne de sortie de certains registres à décalage. La borne de sortie de l'additionneur modulo 2 est connectée à un commutateur rotatif. Le commutateur rotatif tourne une fois par créneau horaire et produit n bits. Divisez le temps en intervalles de temps également espacés. Dans chaque intervalle de temps, k bits entrent dans le registre à décalage par l'extrémité gauche et les informations temporairement stockées à chaque niveau du registre à décalage sont décalées de k bits vers la droite.
Le schéma fonctionnel général d’un codeur convolutionnel est présenté dans la figure ci-dessous.
Insérer la description de l'image ici
Le schéma fonctionnel d'un codeur convolutif (3,1,3) est présenté dans la figure ci-dessous.
Insérer la description de l'image ici
D'après le schéma fonctionnel ci-dessus :
ci = bi {c_i}={b_i}cje=bje
di = bi ⊕ bi − 2 {d_i}={b_i}⊕{b_{i-2}}dje=bjebje 2
ei = bi ⊕ bi − 1 ⊕ bi − 2 {e_i}={b_i}⊕{b_{i-1}}⊕{b_{i-2}}eje=bjebje 1bje 2
Parmi eux, bi {b_i}bjeest le bit d'information actuellement entré, bi − 1 {b_{i-1}}bje 1Bi japonais − 2 {b_{i-2}}bje 2Les deux premiers bits d'information stockés dans le registre à décalage.
D'après M 3 M 2 {M_3M_2}M3M2Différent, la table d'état définie est la suivante.

M3M2 {M_3M_2}M3M2 statut correspondant
00 un
01 b
dix c
11 d

La relation entre l'état du registre à décalage et les symboles d'entrée et de sortie est indiquée dans le tableau suivant.

État précédent du registre à décalage M 3 M 2 {M_3M_2}M3M2 Importer bi {b_i}bje M 3 M 2 M 1 {M_3M_2M_1}M3M2M1 cidiei {c_id_ie_i}cjedjeeje État suivant du registre à décalage M 3 M 2 {M_3M_2}M3M2
un(00) b 1 = 0 {b_1} = 0b1=0 000 000 un(00)
un(00) b 1 = 1 {b_1} = 1b1=1 001 111 b(01)
b(01) b 2 = 0 {b_2} = 0b2=0 010 001 c(10)
b(01) b 2 = 1 {b_2} = 1b2=1 011 110 d(11)
c(10) b 3 = 0 {b_3} = 0b3=0 100 011 un(00)
c(10) b 3 = 1 {b_3} = 1b3=1 101 100 b(01)
d(11) b4 = 0 {b_4}=0b4=0 110 010 c(10)
d(11) b 4 = 1 {b_4} = 1b4=1 111 101 d(11)

On peut voir que le prochain état de l'état a ne peut être que a ou b, le prochain état de l'état b ne peut être que c ou d, le prochain état de l'état c ne peut être que a ou b, et le prochain état de l'état d ne peut être que Peut être c ou d.
La représentation géométrique des codes convolutifs peut être divisée en diagrammes d'arbre de codes, diagrammes d'état et diagrammes en treillis.
L'arbre de code correspondant au codeur convolutif (3,1,3) ci-dessus est illustré dans la figure ci-dessous.
Insérer la description de l'image ici
Dans l'arborescence de codes, si le bit d'information d'entrée est 0, l'état monte, et si le bit d'information d'entrée est 1, l'état descend.
On peut voir qu'à partir de la branche du quatrième niveau, la moitié supérieure et la moitié inférieure de l'arbre de codes sont les mêmes, ce qui signifie qu'à partir du quatrième bit d'information d'entrée, le symbole de sortie n'a rien à voir avec la première information d'entrée. , c'est-à-dire que le degré de contrainte de l'encodeur est N=3. De plus, sur l'arbre de code, il est facile de lire la séquence de sortie après codage en saisissant des bits d'information. Par exemple, la séquence d'entrée est : 1101, puis la séquence de sortie est : 111 110 010 100. Lors de la lecture, si le bit d'information d'entrée est à 1, la branche inférieure est lue, et lorsque le bit d'information d'entrée est à 0, la branche supérieure est lue.
Le diagramme d'état correspondant au codeur convolutif (3,1,3) ci-dessus est illustré dans la figure ci-dessous.
Insérer la description de l'image ici
Dans le diagramme d'état, la ligne pointillée indique la route de transition d'état lorsque le bit d'information d'entrée est 1, et la ligne continue indique la route de transition d'état lorsque le bit d'information d'entrée est 0.
Les nombres à 3 chiffres à côté de la ligne sont les bits de sortie codés. La séquence de sortie peut également être facilement obtenue sur la base de la séquence d'entrée à l'aide du diagramme d'état. Lors de la lecture, commencez à partir de l'état a. Si l'entrée est à 1, lisez les 3 bits sur la ligne pointillée comme sortie. Si l'entrée est à 0, lisez les 3 bits sur la ligne continue comme sortie. Puis passez à l'état suivant. et continuez à lire.
Le diagramme de grille correspondant au codeur convolutif ci-dessus (3,1,3) est illustré dans la figure ci-dessous.
Insérer la description de l'image ici
Dans le diagramme en grille, la ligne pointillée indique que le bit d'information d'entrée est 1 et la ligne continue indique que le bit d'information d'entrée est 0.
On peut voir que le motif de grille après le 4ème créneau temporel répète complètement le modèle du 3ème créneau temporel, ce qui reflète également que la longueur de contrainte du code convolutif est de 3.


Décodage de Viterbi

L'algorithme de décodage de Viterbi a été proposé par Viterbi en 1967. Cette méthode de calcul est relativement simple et rapide, elle a donc été largement utilisée. Le principe de base est le suivant : comparer la séquence de signaux reçue avec toutes les séquences de signaux transmises possibles et sélectionner la séquence avec la plus petite distance de Hamming comme séquence de signaux transmise actuelle.
En théorie de l'information, la distance de Hamming entre deux chaînes de longueur égale est le nombre de caractères différents dans les positions correspondantes des deux chaînes . Autrement dit, c’est le nombre de caractères qu’il faut remplacer pour transformer une chaîne en une autre. Par exemple, la distance de Hamming entre 0000 et 1111 est de 4 et la distance de Hamming entre 0000 et 0101 est de 2.
L'exemple suivant utilise cet exemple pour illustrer le processus de décodage de Viterbi. Supposons que la séquence envoyée soit 1101 et que la séquence codée soit 111 110 010 100.
Puisqu'il s'agit d'un code convolutionnel (n,k,N) = (3,1,3), le degré de contrainte de la séquence de transmission est N = 3, il faut donc d'abord examiner les premiers nN = 9 bits, soit 111 110 010, et à chaque fois sur le chemin Il y a 4 états au premier niveau, et chaque état n'a que deux chemins à atteindre. Il y a donc 8 chemins d'arrivée dans les 4 états. Comparez maintenant la distance de Hamming entre les séquences correspondantes de ces 8 chemins et la séquence reçue 111 110 010, se répertorient comme suit.

chemin Séquence correspondante Distance de Hamming Survivre ou pas
aaaa 000 000 000 6 Non
Abca 111 001 011 4 Oui
aaaab 000 000 111 7 Non
abcb 111 001 100 5 Oui
ABC 000 111 001 6 Non
abdc 111 110 010 0 Oui
aabd 000 111 110 5 Non
Abd. 111 110 101 3 Oui

Comparez les distances de Hamming des deux chemins pour chaque état et conservez le chemin avec la distance la plus petite, appelée chemin survivant. Si les distances de Hamming des deux chemins sont les mêmes, n'importe lequel peut être conservé, de sorte qu'il ne reste plus que 4 chemins.
Ensuite, continuez à étudier les trois chiffres successeurs 100 et calculez les distances de Hamming des huit chemins possibles après que les quatre chemins survivants ci-dessus aient été augmentés d'un niveau, comme indiqué dans le tableau ci-dessous.

chemin Distance de Hamming du chemin original survivant Ajouter un nouveau chemin Ajouter de la distance distance totale Survivre ou pas
abca+a 4 aa(000) 1 5 Non
abdc+a 0 ca(011) 3 3 Oui
abc+b 4 ab(111) 2 6 Non
abdc+b 0 CB(100) 0 0 Oui
abcb+c 5 avant JC (001) 2 7 Non
abdd+c 3 cc(010) 2 5 Oui
abcb+d 5 bd(110) 1 6 Non
abd+d 3 jj (101) 1 4 Oui

La plus petite distance de Hamming dans le tableau est 0, le chemin correspondant est abdcb et sa séquence correspondante est 111 110 010 100, ce qui est cohérent avec la séquence de codage d'entrée, donc sa séquence d'envoi correspondante est 1101 et le décodage est terminé.
S'il y a un petit nombre d'erreurs binaires dans la séquence, le décodage peut également être terminé.
Toujours dans l'exemple ci-dessus, la séquence envoyée est 1101 et la séquence codée est 111 110 010 100. Supposons que des erreurs se produisent dans les bits 4 et 11 de la séquence reçue, c'est-à-dire que la séquence reçue est 111 010 010 110.
La même méthode est utilisée pour l'analyse de liste. Tout d'abord, examinez le premier nN = 9 bits 111 010 010 et comparez la distance de Hamming entre les séquences correspondantes des 8 chemins et la séquence reçue 111 010 010. La liste est la suivante.

chemin Séquence correspondante Distance de Hamming Survivre ou pas
aaaa 000 000 000 5 Non
Abca 111 001 011 3 Oui
aaaab 000 000 111 6 Non
abcb 111 001 100 4 Oui
ABC 000 111 001 7 Non
abdc 111 110 010 1 Oui
aabd 000 111 110 6 Non
Abd. 111 110 101 4 Oui

Ensuite, continuez à étudier les trois chiffres successeurs 110 et calculez les distances de Hamming des 8 chemins possibles après que les quatre chemins survivants ci-dessus aient augmenté d'un niveau, comme indiqué dans le tableau ci-dessous.

chemin Distance de Hamming du chemin original survivant Ajouter un nouveau chemin Ajouter de la distance distance totale Survivre ou pas
abca+a 3 aa(000) 2 5 Non
abdc+a 1 ca(011) 2 3 Oui
abc+b 3 ab(111) 1 4 Non
abdc+b 1 CB(100) 1 2 Oui
abcb+c 4 avant JC (001) 3 7 Non
abdd+c 4 cc(010) 1 5 Oui
abcb+d 4 bd(110) 0 4 Oui
abd+d 4 jj (101) 2 6 Non

La plus petite distance de Hamming dans le tableau est 2, le chemin correspondant est toujours abdcb et sa séquence correspondante est 111 110 010 100, ce qui est cohérent avec la séquence de codage d'entrée, donc sa séquence d'envoi correspondante est 1101 et la traduction correcte a été complété.code.


Tout est question de codage convolutif et de décodage de Viterbi !
Documents de référence pour cet article :
 Principes de communication/Compilé par Fan Changxin et Cao Lina

Je suppose que tu aimes

Origine blog.csdn.net/weixin_42570192/article/details/131124661
conseillé
Classement