TS822 : Codage et Compression Chapitre 1 Notions fondamentales sur le codage source et le codage canal Pr Belkacem BENADDA [email protected] I- Introduction Principe utilisé en archéologie 1m = 10 ans d’histoire TAMTAM Les hommes ont toujours communiqués, s’exprimés sur des objets des représentations, des idées. Français : Gâteau Anglais : Cake Polonais : Placek Le nouveau codage créé par un des étudiants de la promotion Master ST M1 2017/2018. Principe du commerce, la monnaie : la monnaie, virtuelle : Un code, Un Software. Importance de la confiance. Internet Internet Réseau de l’opérateur Internet Chaine de transmission : Source Codage Source Codage Canal Bruit Décodage source Décodage canal detection Modulation Canal de communication Démodulation Equalization synchronisation Exemple Codage Source : JPEG. MP4. MP3. DVB. … Exemple codage canal : Manchester. NRZ. CDMA. … II- Rappel sur la théorie de l’information La théorie de l’information est basée sur les travaux de Weaver et Shannon (1964). Il s’agit d’une modélisation de l’aspect quantitatif de l’information. Source Discrète Continue Codage Source Codage Canal Bruit Décodage source Décodage canal Canal de communication Une Source peut générer un symbole à partir d’un ensemble de n symboles. S={A1, A2, … , Ai, … , An}. Chaque symbole est choisi aléatoirement avec une probabilité Pi. La quantité d’information exprimée par : apportée par chaque symbole est 1 𝑃𝑖 La quantité d’information est mesurée en Logon. 𝐼 = 𝑙𝑜𝑔2 L’entropie d’une source S est la mesure de sa quantité d’information moyenne : 𝐻 𝑆 =− 𝑃𝑖 𝑙𝑜𝑔2 𝑃𝑖 𝐴𝑖 ∈𝑆 Objectif du codage source : Représenter l’information en une séquence binaire le plus économiquement que possible; compression. Objectif du codage canal : Reproduire fidèlement une séquence binaire et la protéger contre l’effet du bruit introduit par le canal; ajouter des bits supplémentaires : une redondance. TS822 : Codage et Compression Chapitre 2 Codage Entropique (première partie) Pr Belkacem BENADDA [email protected] I- Introduction La technique du codage est définie en exploitant les principes de la théorie du langage. Dans ce chapitre dédié au codage source la chaine de transmission est réduite aux blocs suivants : Source Consommer l’information Produire une suite de symboles {ai} Caractérisés par une loi de probabilité reproduire la suite de symboles {a’i} Codage Source décodage Source Produire une séquence optimale binaire {cj} le code Soit S un alphabet exemple S={0, 1}. S*={c1, c2, …, ci, …} est l’ensemble de tous les mots finis sur cet alphabet, pour l’exemple précédent S*={Փ, 0, 1, 01, 10, 11, 000, 001, 010, 011, 100, 101, …}. Un code C est un sous ensemble de S*. Les ci є C sont dits les mots du code. Il existe deux types de codage source : Codage sans perte d’information (a’i= ai). Où il est question de représenter la séquence des symboles produits par la source par le plus petit nombre de bits, de façon à pouvoir les décoder sans ambiguïté à la réception. Le Codage sans perte est dit codage entropique (entropy coding). Il s’agit également d’une compression réversible. Exemple : Codage de Huffman, codage de Fano-Shannon, …. Codage avec perte (a’i ≠ ai). Il s’agit d’une compression non réversible. Exemple : JPEG, MPEG, …. II- Terminologies Le codage entropique fait appel aux comportement statistique de la source. La construction / sélection d’un code fait associé le code le plus court au message le plus fréquent en respectant les principes : II-1- Régularité : Un code régulier si tous les mots codes sont distinct et univoque. II-2- Code en bloc : Il s’agit d’un code de longueur fixe tous les mots code possèdent la même longueur. Si non il est dit à longueur variable. Exemple en bloc : Code ASCII sur 8 bits utilisé pour les caractères. Code en boc régulier Caractère code A 0100 0001 4 0011 0100 a 0110 0001 é 1000 0010 II-3- Déchiffrabilité : Un code est déchiffrable si pour toute suite cj , ci , cj , ck , cl , … des mots du code, il est possible de distinguer les cj sans ambiguïté et reconstruire le message à l’émission. Exemple : Séquence 10100000110001 avec le code Caractère Code 1 Code 2 1 1 1 2 01 0 3 00 11 II-4- Instantanéité : Un code est dit instantané s’il est possible de décoder les mots code dés que les symboles qui les constituent sont reçus. II-5- Inégalité de Kraft : Soit un code C ={c1, c2, …, ci, … cM} pris à partir d’un alphabet binaire, ayant des longueurs {L1, L2, …, Li, … LM} L’inégalité suivante dite de Kraft : 𝑀 1 𝑖=1 2𝐿𝑖 ≤1 Alors ce code vérifie la condition nécessaire pour être déchiffrable et instantané. II-6- Extension d’un code : l’extension d’un est un nouveau code construit à partir des mots d’un autre code. III- Codage optimal III-1- Théorème de Shannon : Ce théorème précise la limite inferieure utilisée comme longueur d’un code C ={c1, c2, …, ci, … cM}, ayant respectivement des longueurs {L1, L2, …, Li, … LM}, et des probabilité {P1, P2, …, Pi, … PM} La longueur moyenne de ce code est limité par l’entropie : 𝐿 ≥ 𝐻(𝑆) 𝑀 𝑀 𝐿𝑖 𝑃𝑖 ≥ 𝑖=1 𝑃𝑖 𝑙𝑜𝑔2 𝑖=1 1 𝑃𝑖 𝐻 𝑆 ≤𝐿 ≤𝐻 𝑆 +1 La longueur moyenne est également dite taux du code 𝑅 = 𝐿 III-2- Code optimal : Pour un avoir un code optimal il faut associer les codes ayant une longueur courte aux messages les plus fréquents, les codes long pour les autres. Il faut alors minimiser la longueur moyenne du code : min 𝐿 sachant que 𝑀 1 𝑖=1 2𝐿𝑖 ≤1 En exploitant la méthode du lagrangien en obtient : 𝐿𝑖 = 𝑙𝑜𝑔2 1 𝑃𝑖 III-3- Comportement des sources d’informations : Soit une source S ={a1, a2, …, ai, … aM} ayant respectivement des probabilité {P1, P2, …, Pi, … PM} La redondance est définie par : 𝐻(𝑆) 𝑅 =1− 𝐻(𝑆)𝑀𝐴𝑋 La source est dite sans mémoire si les symboles sont générés de manière indépendante les uns des autres. La source est dite avec mémoire si k symboles successifs sont dépendants. Dans ce cas un vecteur de k échantillons successifs de la source Sk =(an, an+1, …, an+i, … an+k-1)T est par sa probabilité conjointe P(Sk) qui est indépendante du temps si la source est stationnaire. L’entropie dans ce cas vaut : 𝐻𝑘 𝑆 = 𝑆− 𝑃(𝑆𝑘 )𝑙𝑜𝑔2 ( 𝑃(𝑆𝑘 ) TS822 : Codage et Compression Chapitre 2 Codage Entropique (Deuxième partie) Pr Belkacem BENADDA [email protected] IV- Algorithmes Les codes optimaux à longueur variable doivent respecter la condition du préfixe : aucun mot code ne doit être le préfixe d’un autre code. Par conséquent la construction du code exploite une structure binaire en arbre. 0 1 0 0 0 1 1 1 0 0 0 1 1 1 Longueur moyenne Probabilité Symboles IV-1- Codage de Shannon-fano : A 0,35 1,51 B 0,25 C 0,15 2,74 D 0,1 B 0,25 E 0,1 F 0,05 D 0,1 E 0,1 F 0,05 E 0,1 F 0,05 1 00 0 1 B 0,25 C 01 0,15 10 1 2 D 0,1 3,32 E 0,1 3,32 F 0,35 0 0,35 0,05 4,32 0 D 0,15 A 0 A C 1 0,1 0 110 E 0,1 1110 IV-2- Codage d’Huffman : (Voir TD et TP) 1 F 0,05 1111 IV-3- Débit et débit entropique : Source Produire une suite de symboles {ai} Caractérisés par une loi de probabilité Codage Source Produire une suite de codes {Ci} Caractérisés par une loi de probabilité Soit une source S ayant une entropie H(S) et qui génère des symboles avec un débit égal à Ds. Le débit entropique à la sortie du codage source est défini par : De = H(S) Ds Le débit binaire est défini par : Db = 𝑳 Ds L’entropie à la sortie du codage par : 𝐻 𝐶 = 𝐻(𝑆) 𝐿 IV-3- Codage RLE et RLC : Les codes RLE Run Length Encoding et RLC Run Length Coding ne prennent pas en compte le comportement statistique de la source. Ces codeurs exploitent la fréquence d’apparition des symboles. Exemple codage RLE : AAAAAABBBBCCCCDDDDE ->Codeur RLE -> 10 Taux de compression = 19 × 100 = 52,63% 6A4B4C4D1E Problème : ABCDE -> RLE -> 1A1B1C1D1E 10 Taux de compression = 5 × 100 = 200% Le codage RLC est basé sur l’utilisation des séparateurs, dans l’exemple si dessous le caractère ‘|’ est utilisé comme séparateur. Exemple codage RLC : AAAABCCCDDERRRR -> RLC -> |4AB|3CDDE|4R 13 Taux de compression = 15 × 100 = 86,67% IV-4- Codage Dynamique : Les algorithmes dynamiques sont aussi dit par substitution de facteurs. Ces codes sont utilisés pour le format gzip, gif, RAR…. Ils exploitent principalement les techniques proposées par Lempel et Ziv en 1977 et 1978, connus sous le nom de LZ77 et LZ78. L’algorithme LZ77 : Cet Algorithme exploite une partie des symboles compressés comme dictionnaire. Une fenêtre glissante de N caractères parcourt le flux à compresser. La fenêtre est divisée en deux parties le dictionnaire ou tampon de recherche ayant F symboles. La partie lecture ou segment de recherche avec N-F symboles. Fenêtre de N caractères Zone de recherche N-F caractères Dictionnaire F caractères UN VER VERT VA VER UN VERRE VERT Flux de données La fenêtre et le dictionnaire possèdent une taille fixe. L’entrée d’un nouveau symbole dans la fenêtre implique la sortie du plus ancien. Soit N la taille de la fenêtre et F celle du dictionnaire : 1) Introduire les N-F symboles dans le segments de recherche. 2) Soit P le pointeur qui désigne la position dans le dictionnaire des premiers J symboles K de la zone de recherche. 3) La sortie sera alors le triplet (P,J,le symbole de rang (K+J)). Sortie P,J,K Dictionaries 1 2 3 4 5 6 7 Buffer 5 symboles 0,0,U _ _ _ _ _ _ _ UN_VE R_VERT_VA_VER_UN_VERRE_VERT 0,0,N _ _ _ _ _ _U N_VER _VERT_VA_VER_UN_VERRE_VERT 5,1,V _ _ __ _ UN _VER_ VERT_VA_VER_UN_VERRE_VERT _ _ _ UN_V ER_VE RT_VA_VER_UN_VERRE_VERT UN_VE R_VER T_VA_VER_UN_VERRE_VERT 4,4,T _ _UN_VER _VERT _VA_VER_UN_VERRE_VERT 3,2,A ER_VERT _VA_V ER_UN_VERRE_VERT 5,2,E VERT_VA _VER_ UN_VERRE_VERT 0,0,R T_VA_VE R_UN_ VERRE_VERT 1,1,U _VA_VER _UN_V ERRE_VERT 0,0,N A_VER_U N_VER RE_VERT 1,4,R _VER_UN _VERR E_VERT 5,1,_ _U_VERR E_VERT 2,3,T _VERRE_ VERT 0,0,E 0,0,R _ _ RE_VERT L’algorithme LZ78 : Cet Algorithme exploite les symboles compressés comme dictionnaire. dictionnaire est construit progressivement sous la forme (index, symbole à ajouter). Dictionaries Flux 0 (0,NULL) : UN_VER_VERT_VA_VER_UN_VERRE_VERT 1 (0,U) : U N_VER_VERT_VA_VER_UN_VERRE_VERT 2 (0,N) : N _VER_VERT_VA_VER_UN_VERRE_VERT 3 (0,_) : _ VER_VERT_VA_VER_UN_VERRE_VERT 4 (0,V) : V ER_VERT_VA_VER_UN_VERRE_VERT 5 (0,E) : E R_VERT_VA_VER_UN_VERRE_VERT 6 (0,R) : R _VERT_VA_VER_UN_VERRE_VERT 7 (3,V) : _V ERT_VA_VER_UN_VERRE_VERT 8 (5,R) : ER T_VA_VER_UN_VERRE_VERT 9 (0,T) : T _VA_VER_UN_VERRE_VERT 10 (7,A) : _VA _VER_UN_VERRE_VERT 11 (7,E) : _VE R_UN_VERRE_VERT 12 (6,_) : R_ UN_VERRE_VERT 13 (1,N) : UN _VERRE_VERT 14 (11, R) : _VER RE_VERT 15 (6,E) : RE _VERT 16 (14,T) index Le : L’algorithme LZW : Une amélioration des code LZ77 et LZ78 Créée en 1984 par Terry Welsh. Cet Algorithme suppose l’existence au début d’un dictionnaire comportant tous les symboles unitaire du message. 1) Lire la plus longue série des symboles consécutifs dictionnaire. 2) Inscrire l’indice de « x » dans le fichier de sortie. 3) Lire le symbole « i » qui suit « x ». 4) Ajouter « xi » dans le dicionnaire. Exemple : un_ver_vert_va_vers_un_verre_vert. Index Symboles « x » présents dans le Index Symboles sortie Index Symboles sortie 0 _ 9 UN 8 19 A_ 1 1 A 10 N_ 3 20 _VER 15 2 E 11 _V 0 21 RS 4 3 N 12 VE 7 22 S_ 5 4 R 13 ER 2 23 _U 0 5 S 14 R_ 4 24 UN_ 9 6 T 15 _VE 11 25 _VERR 20 7 V 16 ERT 13 26 RE 4 8 U 17 T_ 6 27 E_ 2 18 _VA 11 Dictionnaire initial Dictionnaire construit 6 TS822 : Codage et Compression Chapitre 3 Techniques de compression avec perte Pr Belkacem BENADDA [email protected] I- Introductions Le fondement du codage source avec perte reste similaire à celui du codage source sans pertes. Dans ce chapitre dédié au codage source avec perte la chaine de transmission est réduite aux blocs suivants : Source Consommer l’information Produire une suite de symboles x={a1… ai …aN } Caractérisés par une distribution de probabilité Symboles reconstruits y={a’1 … a’i … a’M} Codage Source Produire une séquence {cj} le code décodage Source Le codage peut être effectué symbole par symbole : codage scalaire, ou bien par bloc de symboles x={a1… ai …aN }. Codage vectoriel. Pour le codage avec perte après décodage les symboles reconstruits sont différents de ceux envoyés : y ≠ x. dans ce cas y est dite séquence estimée. II- Terminologies Si la longueur moyenne est définie par : 𝑴 𝑳= 𝑳𝒊 𝑷𝒊 𝒊=𝟏 Le taux du code : 𝟏 𝑹= 𝑳 𝑵 N étant le nombre de symboles utilisés pour générer le message x. Toutefois, il faut garder la cohérence de l’information et être fidèle au message transmis. Ce type de codage fait intervenir le principe du critère de distorsion D. pour le codage avec perte un niveau de distorsion doit être défini. II-1- L’erreur quadratique moyenne : Dans ce cas on aborde les critères de fidélité utilisés pour mesurer les performance d’un codage source avec perte. L’erreur quadratique mesure la différence entre la séquence estimée Y et la séquence émise X. e= 1 || 𝑁 X - Y||2 N étant le nombre de symboles utilisés pour générer le message X. L’erreur quadratique moyenne est définie comme étant l’espérance sur l’erreur quadratique : 1 E(e)= 𝑁 1 E(e)= 𝑋 𝑁 𝑖𝑒 𝑃𝑖 (𝑋) cas discret 𝑒 𝑓 𝑋 𝑑𝑋 cas continu II-2- Théorème de Shannon : Pour une paire R,D est réalisable s’il existe un codeur décodeur qui satisfait la condition : E(e) ≤ D Pour une source sans mémoire, la fonction taux de distorsion est définie par : 𝑅 𝐷 = min 𝐼(𝑌, 𝑋) 𝑝(𝑌/𝑋) Sachant que E(e) ≤ D Dans ce cas le taux de codage satisfait la condition : R≥R(D) Il est n’est pas possible de comprimer les données au dessous de R(D). III- Quantification III-1- Source scalaire : Source Produire des échantillons X Caractérisés par une densité de probabilité Codage Source Produire une suite de codes {Ci} De longueur moyenne 𝐿 La source est supposée continue qui produit des échantillons aléatoires X. Le taux dans ce cas est R= 𝑳. Le critère de distorsion est donné par : D = (𝒙 − 𝒚)𝟐 𝒑 𝒙 𝒅𝒙 Concevoir un quantificateur revient à partitionner l’ensemble des valeurs possibles de x en K intervalles de quantification I1,I2,...,Ik de sorte que x est quantifié sur le code associé à l’intervalle Ii si et seulement si x ∈ Ii. D= 𝒌 𝒊=𝟏 𝑰𝒊 (𝒙 − 𝒚𝒊 )𝟐 𝒑 𝒙 𝒅𝒙 Pour minimiser D deux variantes se présentent : Cas du plus proche voisin les Ii sont des intervalles du type [ai, ai+1] : ai= 𝑦𝑖 + 𝑦𝑖+1 2 centroid : min (𝒙 − 𝒚𝒊 )𝟐 𝒑 𝒙 𝒅𝒙 𝐼𝑖 Le résultat est : 𝑦𝑖 = 𝐼𝑖 𝐼𝑖 𝑥 𝑝 𝑥 𝑑𝑥 𝑝 𝑥 𝑑𝑥 En haute résolution les intervalles Ii sont infinitésimales Pour une quantification uniforme avec un pas q : D= 𝑞2 12 Pour une quantification non uniforme avec un pas q(x), les performances sont exprimés par la formule de Bennett : 𝟑 𝟏 𝑫= 𝟏𝟐 𝒑(𝒙) 𝒅𝒙 𝟐 𝜸(𝒙) 𝟐−𝟐𝑹 𝟏 = 𝟏𝟐 𝟏 𝒑(𝒙) Avec 𝜸(𝒙) la densité des cellules de quantification : 1 𝜸(𝒙) = 𝑅 2 𝑞(𝑥) 𝟑 𝒅𝒙 𝟐−𝟐𝑹 IV- Codage par transformée Dans ce cas les échantillons de la source X={a1… ai …aN } de N échantillons sont codés par le biais d’une transformée inversible T : C= 𝑇(𝑋) C est le vecteur envoyé par le codeur. Le décodeur va reconstruire les échantillons Y en usant de la transformée inverse : Y= 𝑇 −1 𝐶 Il faux rappeler que les échantillons X sont caractérisés par une distribution de probabilité 𝑝 𝑥 , le critère de distorsion s’écrit : D= 𝐸 𝑋 − 𝑌 2 Exemple : Karhunen and Loeve KLT, Fourier Discrète DFT, Walsh Hadamard WHT, Transformée en Cosinus discrète DCT. (Plus de détails en TD). TS822 : Codage et Compression Chapitre 4 Codage Canal Pr Belkacem BENADDA [email protected] I- Introductions Le codage canal consiste à protéger les données générées par le codage source contre les interférences et les effets du bruits. Codage Source Codes X Codage Canal de k symboles Bruit Décodage source Codes X de k symboles Produire des codes C de N symboles N>k Canal de communication Décodage canal Codes C’ de N Symboles N>k Le canal est une voie de communication qui n’est pas fiable. En circulant sur cette voie, les interférences vont modifier l’information. Le codage canal en ajoutant une certaine redondance permet de corriger ou de détecter les erreurs introduites. II- Codage par blocs linéaires Si k est le nombre des symboles issues du codage source, cette fois considéré comme une source de message. L’ensemble des k est considéré comme un bloc d : Bloc de k symboles issues de la source Le codage par bloc consiste à faire associer au bloc d un nouveau bloc C dit mot code de N symboles N>k. Mot code : un Bloc de N symboles La différence (N- K) représente la quantité de la redondance introduite par le codage canal. Le rapport : 𝐾 T= est dit taux du codage canal. 𝑁 II-1- le CRC Cyclic Redundancy Check : Ce type de codage canal permet uniquement la détection des erreurs. Les blocs à coder de k symboles sont traités comme des polynômes D(x) de degré k, dont les coefficients correspondent à la séquence binaires. Un polynôme générateur G(x) de degré L est définie pour calculer la redondance à ajouter. Les mots code sont définies par le polynôme : 𝑪 𝒙 = 𝒙𝒍 × 𝑫 𝒙 + 𝑹(𝒙) 𝒙𝒍 × 𝑫 𝒙 = 𝑮 𝒙 × 𝑸 𝒙 + 𝑹(𝒙) avec R(x) est le reste de la division euclidienne. 𝒙𝒍 × 𝑫 𝒙 R(x) Le décodeur effectue l’opération : 𝑪′ 𝒙 = 𝑮(𝒙) × 𝑸′ 𝒙 + 𝑹(𝒙) Si R(x) = 0 alors transmission sans erreurs. En cas d’erreurs une retransmission est nécessaire. Exemple d’utilisation : IP, TCP, UDP…. II-2- Codage par bloc linéaire : Dans ce cas les N symboles du mot code sont obtenue à partir d’une combinaison linéaire des k symboles du messages informations. Le codage par bloc linéaire noté C(N,K) exploite une notation matricielle. Le mot information est noté par : 𝑑 = 𝑑0 𝑑1 … 𝑑𝑘−1 𝑇 Le mot code est noté par : 𝐶 = 𝐶0 𝐶1 … 𝐶𝑁−1 𝑇 Une matrice génératrice G de dimension KxN permet d’associer le mot code avec le mot information : 𝐶 =𝑑 ×𝐺 Exemple : • codage par répétition C(3,1) matrice génératrice G=[1 1 1] 𝑘 = 1 • Codage par parité C(3,2) matrice génératrice 𝐺 = 1 0 0 1 𝑘=2 1 1 II-3- Distance de Hamming : La distance de Hamming mesure le nombre de symboles qui diffèrent entre deux mots code. 𝑑𝐻 𝐶1 , 𝐶2 = 𝐶1 . 𝐶2 La distance minimale est définie avec la paire de code ayant la plus faible distance de hamming. code en bloc linéaire peut corriger e nombre d’erreurs égal à : 𝑑ℎ 𝑚𝑖𝑛 − 1 𝑒= 2 II-4- Code de Hamming : Le code de Hamming est un code par bloc C(N,K) décrit par une matrice génératrice H. La matrice est calculée sur la base d’un polynôme générateur G(x) de degré (N-K) est définie pour calculer la redondance à ajouter. Exemple : • 𝑪 𝟕, 𝟔 𝐥𝐞 𝐩𝐨𝐥𝐲𝐧ô𝐦𝐞 𝐠é𝐧é𝐫𝐚𝐭𝐞𝐮𝐫 𝐞𝐬𝐭 𝒑(𝒙) = 𝟏 + 𝒙 • 𝑪 𝟕, 𝟒 𝐥𝐞 𝐩𝐨𝐥𝐲𝐧ô𝐦𝐞 𝐠é𝐧é𝐫𝐚𝐭𝐞𝐮𝐫 𝐞𝐬𝐭 𝒑 𝒙 = 𝟏 + 𝒙 + 𝒙𝟑 • 𝑪 𝟕, 𝟒 𝐥𝐞 𝐩𝐨𝐥𝐲𝐧ô𝐦𝐞 𝐠é𝐧é𝐫𝐚𝐭𝐞𝐮𝐫 𝐞𝐬𝐭 𝒑 𝒙 = 𝟏 + 𝒙𝟐 + 𝒙𝟑 Exemple de matrice de Hamming : 𝟏 H= 𝟎 𝟎 𝟎 𝟏 𝟏 𝟎 𝟎 𝟎 𝟏 𝟏 𝟎 𝟏 𝟎 𝟏 𝟏 𝟎 𝟏 𝟎 𝟏 𝟎 𝟎 𝟏 𝟎 𝟎 𝟎 𝟎 𝟏 III- Codage Conjoint Le codage conjoint fait intervenir un seul algorithme pour le codage source et le codage canal. Source symboles Codage Source et Canal Bruit Consommateur de l’information symboles Produire des codes C de N symboles Canal de communication Décodage Source et canal Codes C’ de N Symboles