Compresser avec un banc de filtres Jean-Paul Stromboni, Polytech'Nice Sophia, S.I. 3ème année cours n°8, novembre 2015, durée : 50mn, vidéoprojecteur Contenu de cette séance : On réunit les acquis des séances précédentes : quantification, sous-échantillonnage, filtrage, bancs de filtres, sur échantillonnage, énergie du signal, pour compresser et décompresser un signal audio : Quantification sur B bits, rappel du cours n°3, Erreur de quantification et rapport signal sur bruit Compression en réduisant la longueur binaire des échantillons Calcul du nombre de bits utiles dans un signal pour compresser sans déformer Réduction du nombre de bits jusqu’à augmenter le pas de quantification et le rapport signal sur bruit Structure de compression/décompression (CODEC) utilisant un banc de filtres T.D. n° 8 : application avec Scilab Premier temps : compresser le signal audio y tiré du fichier ‘piano.wav’, avec la quantification et le codage binaire. Réduire aux bits utiles dans un premier temps, quel est le taux de compression obtenu ? Augmenter le taux de compression C, et juger de la dégradation du signal décompressé en fonction de C Second temps : reprendre avec un banc de M= 4 filtres de longueur R=256 coefficients temps disponible, Selon le temps disponible : appliquer à ‘Bbc.wav’, avec un banc de 8 filtres, à d’autres sons wave, ...
Quantification (rappel du cours n°3) y tiré de piano.wav est quantifié sur B=16 bits On veut quantifier y sur 16 niveaux Pas de quantification Q= 2/16=0.125 Il suffira de B=4 bits pour coder en binaire le niveau de quantification Caractéristique de quantification Avec Scilab, c’est donc yQ= floor(y/Q)*Q avec: Quantifier un signal y crée un signal différent yQ, provoque une erreur de quantification e= y-yQ Change le rapport signal sur bruit (SNR)
Quantification du signal y précédent sur B=4 bits y est quantifié sur 16 niveaux dans le signal yQ Voici l’erreur de quantification e=y-yQ Afin d’évaluer l’importance de relative de l’erreur de quantification, Scilab donne Moyenne(e) = 0.0630 (mean(e) avec Scilab) Écart type (e) = 0.0389 (stdev(e) Scilab) Moyenne(y)= -0.0011 mean(y) Écart type(y)= 0.15 stdev(y) D’où le rapport signal sur bruit de quantification
Rapport signal sur bruit Noter que moy(x2) proportionnelle à l’énergie du signal x Si moy(e) et moy(x) sont nuls, le rapport signal sur bruit varie comme le rapport des énergies de x et de e.
Pour compresser sans modifier le pas de quantifica-tion Q, on supprime les bits inutiles, s’il en existe plus l’amplitude du signal est faible, et plus il risque d’y avoir des bits inutilisés. si le signal couvre tout l’intervalle allant de -1 à 1, avec 2B valeurs différentes espacées de Q=2/2B, les B bits sont utilisés. Si l’amplitude du signal reste dans l’intervalle allant de -0.5 à 0.5, il suffit de 2B-1 valeurs espacées de Q, donc de B-1 bits pour coder x, il y a 1 bit inutile … calcul de m par Scilab : soit xmax=max(abs(x)), maximum en valeur absolue des xn, n=0 .. N-1 s’il existe m tel que 2 -m-1 < xmax < 2 -m, alors m bits sont inutiles D’où – (m+1)*ln(2)< ln(xmax)< -m*ln(2) soit : m < - ln(xmax) / ln(2) < m+1, m= partieEntière(-log2(xmax)) u = B- m est le nombre de bits utiles taux de compression résultant : C= B/u Page 5
Illustration : le signal audio tiré de ‘piano Illustration : le signal audio tiré de ‘piano.wav’ codé sur B= 16 bits et filtré par un banc de 4 filtres Quels sont les bits inutiles m et les bits utiles u pour les signaux suivants s1, s2, s3 et s4 issus des filtres du banc ? Déduire le taux de compression résultant si on conserve les bits utiles seulement. -0.8<s1<0.6 max(abs(s1))= m1= bits inutiles u 1= bits utiles C1= -0.25<s2<0.2 max(abs(s2))= m2 = ? u2= ? C2= -0.10<s2<0.10 max(abs(s3))= m3= ? u3= ? C3 = -0.03<s2<0.04 max(abs(s4))= m4= ? u4= ? C4= ? s= s1+s2+s3+s4 C= Taux de compression prévisible pour srec= s1+ s2+ s3+ s4 = s, c’est : C= 4*B/(u1+u2+u3+u4)=
Pour réduire le nombre de bits au-delà de u, il faut augmenter le pas et donc l’erreur de quantification Le signal x étant codé sur B bits dont m sont inutilisés, il est en définitive codé sur u=B-m bits, et prend 2B-m valeurs différentes espacées de Q=2/2B sur l’intervalle allant de -2-m à 2-m Si on réduit encore le nombre de bits utilisés à b < B-m, on dispose de 2b valeurs différentes pour coder l’intervalle allant de -2-m à 2-m. Il faut donc augmenter le pas de quantification qui devient Qprime : 2b*Qprime = 2B-m*Q soit Qprime=2*2-m/2b=2/2b+m Si b < B-m, on a b+m < B et Qprime > Q L’erreur de quantification augmente, et le signal x est modifié irrémédiablement Le taux de compression augmente : C=B/b Exemple : le signal y précédent est codé sur b=3 bits (au lieu de b=4 bits), SNR chute : SNRdB= 5.73 dB au lieu de 11.88 dB
Signal à coder … sur 3 bits Deux caractéristiques de quantification différentes pour coder sur b=3 bits : avantage de la seconde? Signal à coder … sur 3 bits Caractéristique1 xq=floor(x/q)*q moy(e)=0.1259 Caractéristique2 xq= floor(x/q+1/2)*q moy(e)=0.0001
Exemple de mise en œuvre avec Scilab
Structure de principe d’un CODEC* utilisant un banc de M= 4 filtres Étage sous- échantillonneur Étage de compression Étage sur- échantillonneur Étage interpolateur x1rec h1 x1 xd1 Bb1 Bb2 … Bb4 xse1 h2 x2 xd2 xse2 x2rec x xrec x3 xd3 xse3 h3 x3rec xM h4 xd4 xse4 x4rec Noter que : hi, i= 1 ..4 est la réponse impulsionnelle du filtre dont la réponse fréquentielle est Bi, Bi= fft(hi), i=1..4 x, signal de taille N échantillons codés chacun sur B bits x1, x2, x3, x4, quatre signaux de N échantillons codés sur B bits La structure inclut cinq étages : Banc de M=4 filtres, décompose x en quatre signaux : x x1, x2, x3, x4, c’est donc N*B bits 4*N*B bits, taux de compression, C= 1/4 = 0.25 Sous-échantillonnage de rapport 4 x1, x2, x3, x4 xd1, xd2, xd3, xd4 4*N*B 4* (N/4)*B bits, taux de compression C= N*B / N*B = 1 Etage de compression: pour avoir C > 1, il faut réduire B ! Si xd1 est codé sur b1 bits, b1 <= B, xd2 sur b2 bits, b2 <= B, xd3 sur b3 bits, b3 <= B, et xd4 sur b4 bits, b3 <= B Le taux de compression devient : C= 4*B / (b1+ b2+ b3+ b4) >=1 Sur-échantillonnage de rapport 4 crée xse1, xse2, xse3, xse4 en intercalant des échantillons nuls Étage de filtres interpolateurs, de coefficients 4*h1, 4*h2, 4*h3, 4*h4 xrec=x1rec+x2rec+x3rec+x4rec est le signal décompressé *CODEC : coder decoder (ou compression décompression)
Découper X en quatre bandes égales, B1, B2, B3 et B4 Découper le spectre X ci-dessous (à compléter) en quatre bandes de fréquence de largeurs égales fe/4 compléter f fe R R/2 R/4 R/8 Découper X en quatre bandes égales, B1, B2, B3 et B4 B1 B1 f f B2 f B3 f B4
Vérifier qu’on peut compresser x3 comme les autres signaux issus du banc dans un facteur 4 fe R R/2 R/4 R/8 R/4 f fe R R/2 R/8 R/4 f fe R R/2 R/8 R/4 f fe R R/2 R/8 R/4 f fe R R/2 R/8 En perdant 10% de l’énergie du signal x, on obtient C=4 Page 12