SSII : séance finale 2013-14, lundi 6/01/2014
Page 1
Sauver un signal audio numérique dans un fichier wave
On trouve dans le fichier ‘la3.wav’ les trois blocs de données : RIFF, fmt et data.
Les données sont disposées comme suit : on lit l’octet de poids faible d’abord, puis les
autres en allant vers l’octet de poids fort (format little endian ou ‘petit-boutien’ )
52 49 46 46, signifie RIFF
24 53 07 00, lire 00 07 53 24,
soit
7*65536+83*256+36=480036
bytes
66 6D 74 signifie fmt en ASCII
format PCM (code 01 00)
monophonie (01 00) une voie
40 1F 00 00, soit fe=8 kHz
40 1F 00 00 est le byte rate en
octets par seconde
01 00 indique qu’un échantillon
est codé sur un octet
08 00, lire 00 08, un échantillon
occupe 8 bits
L’en tête du fichier la3.wav précise
donc : 8kHz, mono,
16 bits/échantillon,
format PCM,
taille 480 044 octets,
bit rate 8000 octets par seconde,
...
Comment doubler fe ?
SSII : séance finale 2013-14, lundi 6/01/2014
Page 2
Quantification d’un signal discret avec Scilab
signal discret : x=[x(nTe)=xn, n=0.. N-1]
xncodé sur B bits, intervalle -1=< xn< 1
le pas de quantification Q= 2/2B
taille de x : N*B en bits
Signal binaire : xbinn= partieEntière(xn/Q)
-2B-1 =< xbinn< 2B-1, par exemple B=8,
-128=<xbinn<128
Signal quantifié (ou numérique) xquantn=xbinn*Q, avec
-1 =< xquantn< 1
Erreur de quantification : en = xnxquantn
Rapport signal sur bruit ou SNR, s’exprime en dB :
SNR= 20*log10(écartType(x)/écartType(e))
Exemple : SNR =72dB sur ligne téléphonique grand public
Page 2
// 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(st_deviation(x)/st_deviation(e))
sound(xquant,fe)
plot2d(t,xquant)
xgrid
xtitle(['chronogramme du signal xbin',sig], t (s)', 's(t)')
SSII : séance finale 2013-14, lundi 6/01/2014
Page 3
Composition fréquentielle ou spectre et TFD
]1..0),([)(]1..0),([ Nk
N
kf
SSsfftSNnnTsss e
k
TFD
en
0 0.005 0.01 0.015 0.02 0.025 0.03 0.035 0.04
-1
-0.5
0
0.5
1
temps (s)
signal s
fenêtre rectangle N=32
0 1000 2000 3000 4000 5000 6000 7000 8000
0
0.1
0.2
0.3
0.4
fréquence (Hz)
spectre/N
spectre d'amplitude/N, N=32 M=256
0 0.005 0.01 0.015 0.02 0.025 0.03 0.035 0.04
-1
-0.5
0
0.5
1
temps (s)
signal s
fenêtre rectangle N=256
0 1000 2000 3000 4000 5000 6000 7000 8000
0
0.1
0.2
0.3
0.4
fréquence (Hz)
spectre/N
spectre d'amplitude/N, N=256 M=2048
Lire
f0= 440 Hz
a0=0.75 (~0.8)
fe =
N =32
NTe =
D
f =250Hz
spectre/N <0.4
M=256 pts
tracés
Lire :
f0=
a0=
fe =
N =
NTe =
D
f =
spectre/N =
1
0
/2
N
n
Nkni
nk esS
SSII : séance finale 2013-14, lundi 6/01/2014
Page 4
Sous échantillonnage d’un signal sinusoïdal pur
0 0.002 0.004 0.006 0.008 0.01
-1
-0.5
0
0.5
1
amplitude
temps t (s)
de 0 à 0.011364 s
0 1000 2000 3000 4000 5000 6000 7000 8000
0
1000
2000
3000
4000
5000
spectre d'amplitude
fréquence Hz
abs(fft(y(1:N))), N=8192
Sous échantillonnage M=8
ssech=s(1:8:length(s));
N devient N/8= 1024
Te devient 8*Te
fe devient fe/8 =1000Hz
a0/2 = 512/1024, a0=1
f0 = 440Hz
taux compression : 8
0 0.002 0.004 0.006 0.008 0.01
-1
-0.5
0
0.5
1
amplitude
temps t (s)
Chronogramme de 0 à 0.011364 secondes.
0 100 200 300 400 500 600 700 800 900 1000
0
100
200
300
400
500
600
spectre d'amplitude
fréquence Hz
abs(fft(y(1:N))), N=1024
SSII : séance finale 2013-14, lundi 6/01/2014
Page 5
Voici la formule de Shannon qui reconstruit s(t) à partir des échantillons
s(nTe) (seulement si la contrainte de Shannon est respectée !) :
En terme de filtrage, la formule de Shannon applique au signal discret le
filtre reconstructeur de Shannon, pour retrouver s(t) :
ce filtre multiplie par Te les composantes fréquentielles entre fe/2 et fe/2, et
multiplie par 0 toutes les autres composantes du spectre pour supprimer
voici la réponse fréquentielle de ce filtre tracée entre -fe et fe :
Si la contrainte de Shannon n‘est pas respectée pour l’échantillonnage, la
formule est impuissante, s(t) est perdu, les échantillons sont inutiles !
Énoncés de la contrainte de ShannonÉnoncés de la contrainte de Shannon
D’après ‘A Mathematical Theory of Communication’, july 1948, in Bell System
Technical Journal, par Claude Elwood Shannon (1916-2001)
Pour échantillonner correctement un signal s(t), il faut respecter la contrainte de
Shannon :
Contrainte de Shannon simplifiée : la fréquence d'échantillonnage doit être égale au
moins au double de la fréquence maximale du spectre du signal :
s'il existe fmax telle que S(f >fmax)=0,
alors fe >=2*fmax
Contrainte de Shannon générale : la fréquence d'échantillonnage doit être égale au moins
au double de la largeur du spectre du signal :
s'il existe fmin et fmax telle que S(f >0) =0 pour f<fmin et pour f>fmax,
alors fe >=2*(fmax-fmin)
Si la contrainte n’est pas respectée, les échantillons ne permettent pas de
reconstituer le signal s(t) !
Conséquence : seuls les signaux ‘à bande limitée’ (c’est-à-dire dont le spectre est
nul au-dessus d’une fréquence fmax) peuvent être échantillonnés correctement,
d’où le filtre dit ‘anti-aliasing’ des cartes sons qui limite le spectre du signal à
l’intervalle [0, fe /2[ avant l’échantillonnage
Filtre reconstructeur et formule de Shannon
nee
ee
ee TnTtTnTt
nTstsnTs/)( )/)(sin(
)()()(
f
fe/2
-fe/2
Te
0
1 / 21 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !