S.S.I.I., , cours n°9 : Compresser avec un banc de filtres Page 1 Compresser avec un banc de filtres Contenu de cette séance : T.D. n° 9 : application avec Scilab appliquer au signal audio tiré du fichier ‘piano.wav’, avec un banc de M=4 filtres de R=512 coefficients. 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 si temps disponible, appliquer à ‘Bbc.wav’, avec M=8, ou … à d’autres sons wave avec d’autres M Jean-Paul Stromboni, Polytech'Nice Sophia, S.I. 3 ème année cours n°9, novembre 2014, durée : 50mn, vidéoprojecteur On réunit les acquis des séances précédentes Scilab, sous-échantillonnage, quantification, filtrage, bancs de filtres, … pour compresser et décompresser un signal audio : Structure de compression/décompression utilisant un banc de quatre filtres 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 Exemple de ‘piano.wav’ avec quatre filtres Choix de la caractéristique de quantification Mise en œuvre dans un script Scilab
S.S.I.I., , cours n°9Compresser avec un banc de filtres S.S.I.I., , cours n°9 : Compresser avec un banc de filtres Page 2 Structure de principe d’un CODEC* utilisant un banc de M= 4 filtres 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 : 1.Banc de M=4 filtres, décompose x en quatre signaux : ox x1, x2, x3, x4, c’est donc oN*B bits 4*N*B bits, taux de compression, C= 1/4 = Sous-échantillonnage de rapport 4 ox1, x2, x3, x4 xd1, xd2, xd3, xd4 o4*N*B 4* (N/4)*B bits, taux de compression C= N*B / N*B = 1 3.Etage de compression: pour avoir C > 1, il faut réduire B ! oSi 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 oLe taux de compression devient : C= 4*B / (b1+ b2+ b3+ b4) >=1 4.Sur-échantillonnage de rapport 4 ocrée xse1, xse2, xse3, xse4 en intercalant des échantillons nuls 5.Étage de filtres interpolateurs, ode coefficients 4*h1, 4*h2, 4*h3, 4*h4 oxrec=x1rec+x2rec+x3rec+x4rec est le signal décompressé *CODEC : coder decoder (ou compression décompression) Étage de compression x x1x1 x2x2 xd 1 xse 1 x rec h1h1 h2h2 h3h3 h4h4 Bb1Bb2…Bb4Bb1Bb2…Bb4 xMxM xd 2 xd 4 banc de 4 filtres xse 2 xse 4 Étage interpolateur x 4rec Étage sous- échantillonneur Étage sur- échantillonneur xd 3 x 1rec x 2rec xse 3 x3x3 x 3rec
S.S.I.I., , cours n°9Compresser avec un banc de filtres S.S.I.I., , cours n°9 : Compresser avec un banc de filtres Quantification (rappel du le cours n°3 sur Scilab) x signal d’amplitude comprise entre -1 et 1 est codé sur B bits Il y a donc 2 B valeurs possibles espacées de Q (pas de quantification) : On calcule donc le signal quantifié sur b comme suit xbin n = partieEntière(x n /Q) = floor(x n /Q) xquant n =xbin n *Q erreur de quantification : e n = x n – xquant n SNR= 20*log 10 (écartType(x)/écartType(e)) Page 3
S.S.I.I., , cours n°9Compresser avec un banc de filtres S.S.I.I., , cours n°9 : Compresser avec un banc de filtres 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 2 B valeurs différentes espacées de Q=2/2 B, les B bits sont utilisés. Par contre, si l’amplitude du signal reste dans l’intervalle allant de -0.5 à 0.5, il suffit de 2 B-1 valeurs espacées de Q= 2/2 B, donc de B-1 bits pour coder x, il y a m=1 bit inutile, et ainsi de suite …. calcul de m en général: soit x max =max(abs(x)), maximum en valeur absolue des x n, n=0.. N-1 s’il existe m tel que 2 -m-1 < x max < 2 -m, alors m bits sont inutiles D’où – (m+1)*ln(2)< ln(x max )< -m*ln(2) soit : m < - ln(x max ) / ln(2) < m+1, m= partieEntière(-log 2 (x max )) u = B- m est le nombre de bits utiles taux de compression résultant : C= B/u Page 4
S.S.I.I., , cours n°9Compresser avec un banc de filtres S.S.I.I., , cours n°9 : Compresser avec un banc de filtres Page 5 Exemple : le signal audio tiré de ‘piano.wav’ codé sur B= 16 bits est filtré par un banc de M=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))= m= bits inutiles ? u = bits utiles ? -0.25<s2<0.2 max(abs(s2))= m = ? u= ? -0.10<s2<0.10 max(abs(s3))= m= ? u= ? -0.03<s2<0.04 max(abs(s4))= m= ? u= ? C= ?
S.S.I.I., , cours n°9Compresser avec un banc de filtres S.S.I.I., , cours n°9 : Compresser avec un banc de filtres Pour réduire le nombre de bits au-delà de u, il faut augmenter le pas et donc l’erreur de quantification Page 6 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 2 B-m valeurs différentes espacées de Q=2/2 B 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 2 b valeurs différentes pour coder l’intervalle allant de -2 -m à 2 -m. Il faut donc augmenter le pas de quantification qui devient Qprime : 2 b *Qprime = 2 B-m *Q soit Qprime=2*2 -m /2 b =2/2 b+m Si b Q L’erreur de quantification augmente, et le signal x est modifié irrémédiablement Le taux de compression augmente : C=B/b
S.S.I.I., , cours n°9Compresser avec un banc de filtres S.S.I.I., , cours n°9 : Compresser avec un banc de filtres Deux caractéristiques de quantification : quelle est la différence ? Avantage et inconvénient ? Caractéristique 1 floor(x/q)*q Caractéristique 2 : floor(x/q+1/2)*q Signal à coder … sur 3 bits
S.S.I.I., , cours n°9Compresser avec un banc de filtres S.S.I.I., , cours n°9 : Compresser avec un banc de filtres Exemple de mise en œuvre avec Scilab
S.S.I.I., , cours n°9Compresser avec un banc de filtres S.S.I.I., , cours n°9 : Compresser avec un banc de filtres Deux caractéristiques de quantification
S.S.I.I., , cours n°9Compresser avec un banc de filtres S.S.I.I., , cours n°9 : Compresser avec un banc de filtres Page 10 f Découper le spectre X ci-dessous (à compléter) en quatre bandes de fréquence de largeurs égales fe/4 f 0fe R R/2 R/4 R/8 compléter f Découper X en quatre bandes égales, B1, B2, B3 et B4 ff B1 B2 B3 B4
S.S.I.I., , cours n°9Compresser avec un banc de filtres S.S.I.I., , cours n°9 : Compresser avec un banc de filtres Page 11 Vérifier qu’on peut compresser x3 comme les autres signaux issus du banc dans un facteur 4 f 0fe 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
S.S.I.I., , cours n°9Compresser avec un banc de filtres S.S.I.I., , cours n°9 : Compresser avec un banc de filtres Page 12 Vérifier qu’on peut compresser x3 comme les autres signaux issus du banc dans un facteur 4 f 0fe 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