Post on 22-Feb-2016
description
S.S.I.I., 2015-16, cours n°8 : Compresser avec un banc de filtresS.S.I.I., 2015-16, cours n°8 : Compresser avec un banc de filtres Page Page 11
Compresser avec un banc de filtres
Contenu de cette séance :
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, ...
Jean-Paul Stromboni, Polytech'Nice Sophia, S.I. 3ème année cours n°8, novembre 2015, durée : 50mn, vidéoprojecteur
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
S.S.I.I., 2015-16, cours n°8S.S.I.I., 2015-16, cours n°8 : Compresser avec un banc de filtresCompresser avec un banc de filtres
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)
Page Page 22
BB QQ
2222
S.S.I.I., 2015-16, cours n°8S.S.I.I., 2015-16, cours n°8 : Compresser avec un banc de filtresCompresser avec un banc de filtres
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
Page Page 33
dBSNReécarttypeyécarttypeSNR dB 8791.11,9207.3)()(
S.S.I.I., 2015-16, cours n°8S.S.I.I., 2015-16, cours n°8 : Compresser avec un banc de filtresCompresser avec un banc de filtres
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.
Page Page 44
//avec Scilab : sig= 'piano.wav'; // fichier audio à traiter [x, fe, B]= wavread(sig); disp(['Son lu :', sig,', fe : ',string(fe),'et B=',string(B)]) t= [0:length(x)-1]/fe; b= 8; Q= 2/(2^b) // pas de quantification xbin= floor(x/Q); xquant= xbin*Q; e= x- xquant; SNR=20*log10(stdev(x)/stdev(e))
)()(log20
)()()(var
)()(
/))(()(var
)(var)(
/)()(
1..0,
1...0,*)/(1..0,
10
22
22
1
02
1
0
eécarttypexécarttypeSNR
emoyemoyeiance
xmoyxmoy
Nxmoyxxiance
xiancexécarttype
Nxxmoy
Nnxxe
NnQQxfloorxxNnxx
d
N
n n
N
n n
Qnn
nQnQ
n
B
S.S.I.I., 2015-16, cours n°8S.S.I.I., 2015-16, cours n°8 : Compresser avec un banc de filtresCompresser 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 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 Page 55
// calcul du vecteur u des bits utiles avec Scilab xmax=max(abs(x)) u=B-floor(-log(xmax)/log(2))
S.S.I.I., 2015-16, cours n°8S.S.I.I., 2015-16, cours n°8 : Compresser avec un banc de filtresCompresser avec un banc de filtres Page Page 66
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.6max(abs(s1))= m1= bits inutilesu 1= bits utiles C1=
-0.25<s2<0.2max(abs(s2))= m2 = ?u2= ?C2=
-0.10<s2<0.10max(abs(s3))= m3= ?u3= ?C3 =
-0.03<s2<0.04max(abs(s4))= m4= ?u4= ?
C4= ?
Taux de compression prévisible pour srec= s1+ s2+ s3+ s4 = s, c’est : C= 4*B/(u1+u2+u3+u4)=
s= s1+s2+s3+s4C=
S.S.I.I., 2015-16, cours n°8S.S.I.I., 2015-16, cours n°8 : Compresser avec un banc de filtresCompresser 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 Page 77
• 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
S.S.I.I., 2015-16, cours n°8S.S.I.I., 2015-16, cours n°8 : Compresser avec un banc de filtresCompresser avec un banc de filtres
Deux caractéristiques de quantification différentes pour coder sur b=3 bits : avantage de la seconde?
Caractéristique1 xq=floor(x/q)*q
Caractéristique2xq= floor(x/q+1/2)*q
Signal à coder … sur 3 bits
moy(e)=0.1259
moy(e)=0.0001
S.S.I.I., 2015-16, cours n°8S.S.I.I., 2015-16, cours n°8 : Compresser avec un banc de filtresCompresser avec un banc de filtres
Exemple de mise en œuvre avec Scilab
// S.S.I.I. - exempleCours9.sce : //test de réduction du nombre de bits // version novembre 2014, JPS sig='piano.wav'; // fichier [s,fe,B]=wavread(sig); disp(['fe : ',string(fe),'et B=',string(B)]) s=0.12*s; // réduit l'amplitude de s d'un facteur 0.12 Q=2/(2^B); // pas de quantification T=length(s)*B; // taille de s en bits sound(s,fe) scf; // crée une nouvelle figure en Scilab t=[0:length(s)-1]/fe; plot2d(t,s) xgrid xtitle(['fichier ',sig], 't (s)', '0.1*s(t)') // // calcul du nombre de bits utiles smax=max(abs(s)) U=B-floor(-log(smax)/log(2)) Tu=length(s)*U disp(['C= ',string(T/Tu), 'Q=',string(Q)]) // // quantification avec moins de bits que les bits utiles b=3 // on fixe à b=3 le nombre de bits conservés Tb=length(s)*b m=B-U // nb bits inutiles Qprime=2/2^(b+m) // nouveau pas de quantification //quantification de s sur b bits (avec le pas Qprime) squantb1=floor(s/Qprime)*Qprime; // caractéristique 1 squantb2=floor(s/Qprime+1/2)*Qprime;// caractéristique 2 disp(['b=',string(b),'C= ',string(T/Tb),'Qprime=',string(Qprime)]) clf; plot2d(t,[squantb1',squantb2'] ) legend(['squantb1','plus1demi']); sound(squantb2,fe) // //SNR signal to noise ratio SNR1=20*log10(stdev(s)/stdev(s-squantb1)) SNR2=10*log10(sum(s.^2)/sum((s-squantb2).^2))
S.S.I.I., 2015-16, cours n°8S.S.I.I., 2015-16, cours n°8 : Compresser avec un banc de filtresCompresser avec un banc de filtres Page Page 1010
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 :
o x x1, x2, x3, x4, c’est donco N*B bits 4*N*B bits, taux de compression, C= 1/4 = 0.25
2. Sous-échantillonnage de rapport 4 o x1, x2, x3, x4 xd1, xd2, xd3, xd4o 4*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 !o 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 <= Bo Le taux de compression devient : C= 4*B / (b1+ b2+ b3+ b4) >=1
4. Sur-échantillonnage de rapport 4o crée xse1, xse2, xse3, xse4 en intercalant des échantillons nuls
5. Étage de filtres interpolateurs, o de coefficients 4*h1, 4*h2, 4*h3, 4*h4o xrec=x1rec+x2rec+x3rec+x4rec est le signal décompressé
*CODEC : coder decoder (ou compression décompression)
Étage decompression
x
x1
x2
xd1xse1
xrec
h1
h2
h3
h4
Bb1
Bb2
…
Bb4
4
4
4
4
4
4
4
4
1
i
i ix4
xM
xd2
xd4
banc de4 filtres
xse2
xse4
Étage interpolateur
14 h
24 h
44 hx4rec
Étage sous-échantillonneur
Étage sur-échantillonneur
xd3
34 h
x1rec
x2rec
xse3x3
x3rec
S.S.I.I., 2015-16, cours n°8S.S.I.I., 2015-16, cours n°8 : Compresser avec un banc de filtresCompresser avec un banc de filtres Page Page 1111
f
Découper le spectre X ci-dessous (à compléter) en quatre bandes de fréquence de largeurs égales fe/4
X
1,0,1,0, RmXXRnxx mTFD
n
f0 fe
R
R/2
R/4R/8
compléter
f
1X
2X
3X
4X
Découper X en quatre bandes égales, B1, B2, B3 et B4
f
f
1,0,1..0, 1111 RmXXRnxx mTFD
n
1x
B1 B1
B2 B2
B3 B3
B4
3x
4x
2x
S.S.I.I., 2015-16, cours n°8S.S.I.I., 2015-16, cours n°8 : Compresser avec un banc de filtresCompresser avec un banc de filtres Page Page 1212
Vérifier qu’on peut compresser x3 comme les autres signaux issus du banc dans un facteur 4
4
4
f0 fe
R
R/2
R/4R/8
R/4
ffe
R
R/2
R/8
R/4
ffe
R
R/2
R/8
R/4
ffe
R
R/2
R/8
R/4
ffe
R
R/2
R/8
3B
34 B
En perdant 10% de l’énergie du signal x, on obtient C=4
3444
333 xxxxxx dec
Bsed
B