B = 8 bit

publicité
Comment compresser avec le CODEC mlaw
Jean-Paul Stromboni, mardi 4 mai 2004
ESSI 1, module SSI , 1h, amphi est
Objectifs de la séance :
•
•
•
•
•
Rappeler comment on quantifie un signal audio avec B bits
Montrer comment on évalue le bruit de quantification
Calculer le rapport signal sur bruit SNRdB(B)
Justifier l’emploi d’une loi de quantification non uniforme
Evaluer le CODEC mlaw à l’aide d’un exemple
1
Pour vous tester sur ce cours 
On annonce un rapport signal
Donner l’expression de la loi m
sur bruit de 48dB. Qu’est ce que inverse :
cela signifie précisément ?
En général, le CODEC mlaw est- Quel est l’effet d’une réduction
il plus performant que le
d’amplitude du signal x sur le
CODEC MPEG audio layer 3 ? SNR ?
Un signal aléatoire x présente
Quand l’erreur de quantification
une répartition uniforme dans
augmente, quel est l’effet sur le
[-1,1]. Que peut-on en déduire ? rapport signal sur bruit ?
Si le nombre de bits utilisés B
diminue, quel est l’effet sur le
rapport signal sur bruit ?
On ramène nombre de bits de 12 à
8 avec le CODEC mlaw. Quel est
le taux de compression résultant ?
Page 2
Comment quantifier le signal issu du micro
• Quantifier l’échantillon :
1  x(nTe )  1
• c’est le contraindre à une
valeur parmi 2B possibles.
• L’intervalle [-1,1[ est découpé en 2B intervalles Ii
avec i = 0,1,2,… 2B-1 de
la forme Ii = [ai,ai+D[
• Si x(nTe) appartient à l’intervalle i, on lui associe
dans la suite de ce cours :
– la valeur xi au centre de
l’intervalle et
– le code binaire i sur B bits
• On définit ainsi l’erreur
de quantification e(nTe) :
e(nTe )  xi  x(nTe )
Pour B = 8 bit, que vaut D ?
Et dans ce cas que vaut l’intervalle I0 ?
Page 3
Ce n’est pas la seule façon de quantifier
-2-B
et
2-B
2. on choisit pour xi dans
un CAN, la borne inférieure
de l’intervalle. L’erreur
est donc toujours < 0.
Elle varie entre ?
0 et
-2-B+1
Deux lois de quantification (B=3 bits(
1
loi centré e
erreur <0
lieu d'erreur nulle
0.8
valeur xi quantifiée
1. Ici, xi est le centre
de l’intervalle (loi
rouge). L’erreur est donc
tantôt > 0, tantôt < 0,
et nulle en moyenne.
Elle varie entre ?
0.6
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
Amplitude x de l’échantillon à quantifier
Préciser i, xi , et l’erreur de quantification avec les deux lois pour les valeurs
• x= 0.2 ,
• x= -0.2,
• x= 0.9
Page 4
On illustre la quantification avec Matlab
s (t )  sin( 880t )
f e  44100 Hz
La fonction numerise
quantifie sur 8 bits les
échantillons de s(t) et
permet d’analyser l’erreur de quantification :
t=[0:1000]/44100;
s=sin(880*pi*t);
sq=numerise(s,8);
%calculons l'erreur
eq=sq-s;
% étude de l'erreur
max(eq) = 0.004
min(eq) = -0.004
mean(eq) = -3.6*10-5
std(eq) = 2.2*10-3
hist(eq, 64)
signal à quantifier
signal quantifié
1
1
0.5
0.5
0
0
-0.5
-0.5
-1
5
0
0.01
0.02
0.03
-3
x 10erreur de quantification
-1
0
0.01
0.02
0.03
histogramme de l'erreur
20
15
0
10
5
-5
0
0.005
0.01
0
-4
-2
0
2
4
-3
x 10
Qu’observe t’on pour l’erreur ?
Page 5
La qualité de la quantification se mesure en décibel
au moyen du rapport signal sur bruit (ou SNR).
L’erreur de quantification est centrée (à valeur moyenne nulle) :
2 B
E[e] 
2
2
2
e

p
(
e
)
de

0



E
[
e
]

E
[
e
]

E
[
e
]
e

2
 2 B
On en tire la variance de l’erreur
e
2
2
2
1
B 1
2
 2  B e de 

2
B
2
12  2
3  22 B
2 B
et l’expression du rapport signal sur bruit (en décibel) :
 x2
SNRdB  10 log 10 ( 2 )  20 log 10 (2 B 3 x )
e
SNRdB  6.02 B  4.77  20 log 10 ( x )
Page 6
On doit gérer l’erreur comme un signal aléatoire
B
B
• L’erreur de quantification e(nTe) est notée e :  2  e  2
• Elle est traitée comme un signal aléatoire, on dit aussi un bruit.
• On lui associe donc une densité de probabilité p(e) c’est-à-dire
que la probabilité d’avoir e0  e  e0  de est p(e0 )de
2 B
– d’où la valeur moyenne de e : E (e) 
 ep(e)de
 2 B
– et la variance  e ou l’écart-type  e qui mesurent l’écart
moyen de e à la valeur moyenne E(e) :
2
 e  E ((e  E (e)) 2 )  E (e 2 )  E (e) 2
2
2 B
E (e 2 ) 
2
e
 p(e)de
 2 B
Page 7
Hypothèse d’une erreur uniformément répartie
L’hypothèse que p(e) est constante dans [-2-B,2-B] est
B
d’autant plus plausible que 2  1 :
p(e)
e
 2 B
2 B
p(e)  cte, e  [2  B ,2  B ]

B 1
2 B

p
(
e
)

2

et  p(e)de  1

 2 B

Quelle est la probabilité que
 2 B  e  2 B ?
Page 8
Il faut évaluer x à partir du signal x(nTe)
Pour calculer précisément le rapport signal sur bruit, on fera une
étude statistique du signal, comme pour l’erreur de quantification.
En pratique, x(nTe) n’occupe qu’une partie de l’intervalle [-1,1].
 1  xmin  x(nTe )  xmax  1
p (x )
p ( x) : densité de probabilit é de x
1
xmax
1
xmin
E[ x]   xp( x)dx  
xp( x)dx
x
E[ x]  0   x  E[ x 2 ]  E[ x]2
2
1
  x 2 p ( x)dx
1
x
1
xmin
E[x]
xmax 1
évaluer p(x) et x si x est centré et uniformément réparti dans [-1,1[
Page 9
On illustre avec le fichier piano_c3.wav
fe = 44100 Hz
b = 16 bit
N= 77566
max(y)= 0.8533
min(y)= - 0.9999
mean(y) = - 0.0012
std(y) =
0.1528
Nombre d’échantillons
[y,fe,b]=wavread('../Sons/piano_c3.wav');
disp(num2str(fe))
disp(num2str(b))
3500
N=length(y)
3000
mean(y)
std(y)
2500
hist(y,100)
2000
1500
1000
500
0
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
Valeurs des échantillons entre -1 et 1
Le signal x est il centré et uniformément réparti ? Quel est l’effet sur x ?
Page 10
Abaque donnant SNRdB(B) pour x=1/3
L’écart type x mesure
l’occupation de l’intervalle [–1, 1] par le signal x.
Voici le script Matlab qui
trace l’abaque ci-contre
avec x=1/3 :
sigx=1/3
b=0:16;
SNR=6.02*b+4.77+20*log10(sigx);
plot(b,SNR)
grid
xlabel('b=nombre de bits')
ylabel('Signal to noise ratio (dB)')
title('Tracé pour \sigma_x=1/3')
Quel est l’écart de rapport signal sur bruit entre B=8bits et B=12bits ?
Page 11
mlaw: loi de quantification non uniforme
• Les niveaux de quantification sont mal utilisés par le signal
x(nTe) quand la répartition des échantillons n’est pas uniforme,
il en résulte une chute de x, donc du rapport signal sur bruit.
• Le CODEC mlaw applique une non linéarité Q[.] (voir cidessous) au signal x pour répartir mieux les valeurs des
échantillons et donc augmenter le rapport signal sur bruit.
y  Q[ x]  xQ  sgn( x)
ln( 1  m x )
ln( 1  m )
, m  28  1
• Si on quantifie y= Q[x], on peut réduire le nombre de bit B en
dégradant un peu le SNR, d’où on tire des taux de compression
• de l’ordre de C=3/2 (12 bits 8 bits) sur le signal vocal en
téléphonie ou C=2 (16 bits 8 bits).
Page 12
Tracé avec Matlab de y =Q[x] (ici m=28-1)
function [y]=invmulaw(xmu)
mu=255; N=1+mu;
y=sign(xmu).*(exp(log(N)*abs(xmu))-1)/mu;
function yn=numerise(y,b)
% code y sur b bit, retour dans yd
% y est supposé varier entre -1 et 1
N=2^b; yn=(1+2*fix((y+1)*N/2))/N - 1;
yn(length(yn))=yn(length(yn)-1);
function ymu=mulaw(x)
mu=255; N=1+mu;
ymu=sign(x).*log(1+mu*abs(x))/log(N);
% puis dans l’interpréteur Matlab
x=[-1:0.01:1];
plot(x,mulaw(x))
y  Q[x]
1
0.8
0.6
0.4
0.2
x
0
-0.2
-0.4
-0.6
-0.8
-1
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
Page 13
Comment mlaw transforme piano_c3
mlaw
mlaw inverse
Quantifier
b = 8 bit
y  Q[x]
x
y8
xDEC
 SNR
hist(x,64)
hist(y,64)
hist(xdec,64)
hist(y8,64)
1200012000
14000
12000
12000
10000
10000
8000
8000
6000
6000
3000
4000
2000
3500
3000
3000
3000
2500
2500
2000
2000
1500
1500
1000
1000
500
0
-1
0
-1
-0.8 -0.6 -0.4 -0.2
0
0.2
0.4
0.6
0.8
4000
3500
2000
500
-0.8
-0.6
-0.4
-0.2
0
0.2
1
Que démontre cette chaîne ?
0.4
0.6
0.8
1
0
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
0
-1
-0.8 -0.6 -0.4 -0.2
0
0.2
0.4
0.6
0.8
1
Page 14
On vérifie que mlaw améliore le SNR
x(nTe )
Klf1.wav
m
y (nTe )
8 bit
B  16 bit
8 bit
[x,f,b]=wavread('../Sons/klf1.wav');
x8=numerise(x,8);
std(x)
y=mulaw(x);
std(y)
y8=numerise(y,8);
xrec=invmulaw(y8);
% calcul du rapport signal sur bruit
er=x-x8;
snr1=20*log10(std(x)/std(x-xrec))
snr2=20*log10(std(x)/std(er))
y8 (nTe )
B  8 bit
m-1
xrec (nTe )
snr1
x8 (nTe )
B  8 bit
snr2
Résultats de MATLAB
std(x) = 0.0541
std(y) = 0.3567
snr1 = 37.7157 dB
snr2 = 27.5937 dB
Page 15
Comment on utilise mlaw pour compresser
piano_c3
B  16 bit
x(nTe )
1/8
m
y (nTe )
8 bit
y8 (nTe )
-1
8 bit
m
B  8 bit
xrec (nTe )
x8 (nTe )
B  8 bit
[x,fs,b]=wavread('../Sons/piano_c3.wav');
xdiv8=x/8; % on divise le signal par 8 pour dégrader SNR
x8=numerise(xdiv8,8); % on numérise sur 8 bit
% numérise est une fonction à écrire par ailleurs
% compression : on applique la loi mu
y=sign(xdiv8).*log(1+255*abs(xdiv8))/log(256);
y8=numerise(y,8);
% décompression : on applique la loi mu inverse
xrec=sign(y).*(256.^abs(y8)-1)/255;
sound([8*x8;8*xrec],fs) % on joue les deux sons
Comparer x8 et y8 et évaluer le taux de compression
Page 16
Téléchargement