12
S.S.I.I., 2015-16, cours n°8 : Compresser avec S.S.I.I., 2015-16, cours n°8 : Compresser avec un banc de filtres un banc de filtres Page Page 1 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, 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

Compresser avec un banc de filtres

  • Upload
    kioshi

  • View
    31

  • Download
    0

Embed Size (px)

DESCRIPTION

Compresser avec un banc de filtres. Jean-Paul Stromboni, Polytech'Nice Sophia, S.I. 3 ème année cours n°8, décembre 2013, durée : 50mn, vidéoprojecteur. Le contenu de ce cours :. - PowerPoint PPT Presentation

Citation preview

Page 1: Compresser avec un banc de filtres

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

Page 2: Compresser avec 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

Page 3: Compresser avec 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 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)()(

Page 4: Compresser avec 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

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

Page 5: Compresser avec 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

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))

Page 6: Compresser avec 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 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=

Page 7: Compresser avec 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

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

Page 8: Compresser avec 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

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

Page 9: Compresser avec 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

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))

Page 10: Compresser avec 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 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

Page 11: Compresser avec 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 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

Page 12: Compresser avec 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 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