Comment décimer les sons numériques
description
Transcript of Comment décimer les sons numériques
1
Comment décimer les sons numériquesJean-Paul Stromboni, Jean-Paul Stromboni, mars 2005mars 2005ESSI 1, module SSI, Amphi Est vidéo projecteurESSI 1, module SSI, Amphi Est vidéo projecteurDurée : 1hDurée : 1h
Dans cette séance, on voit :• un modèle mathématique de
l’échantillonnage• le phénomène d’aliasing du
spectre du signal échantillonné• comment reconstruire le signal à
partir des échantillons• pourquoi et comment décimer
(sous-échantillonner)• pourquoi et comment
sur échantillonner
Où en est-on ?
Signal numérique
spectre
décimer échantillonner
filtrer
Filtres simples
Nous sommes ici !
Page 2
Donner le signal échantillonné s* asso-cié à :
A quoi correspond la décimation d’un signal avec M=2 ?
Quel est le spectre du signal échantillonné s*(t) précédent ?
Qu’appelle t’on aliasing du spectre ?
Donner le filtre reconstructeur de Shannon pour s*(t)
Expliquer la raison et donner le principe du filtre anti-aliasing
Peut-on décimer les signaux continus et les signaux discrets ?
Dans quel cas le filtre de Shannon reste t’il inefficace ?
kHzft e 4),10002cos(5.0
Savez vous répondre aux questions suivantes ?
Page 3
On notera maintenant signal échantillonné s*(t) le produit du signal s(t) par la fonction peigne de Dirac
Le signal continu :)20002cos()( tts
Le signal discret :
)20002cos()( tts kHzfe 8
Le signal échantillonné :
nee
T
nTtnTs
tPeignetstse
)()(
)()()(*
On distingue :
s2000
1
)(st
)(st
)(st
Page 4
Le spectre du signal échantillonné s*(t) s’obtient en répétant le spectre de s(t) autour des multiples de fe
L’échantillonnage détermine donc une démultiplication, (en anglais aliasing) du spectre S(f) du signal s(t) :
n ee
n ee
T
TnfS
T
Tnf
TfS
tPeigneTFtsTFtsTFe
)(1
)(1*)(
)]([*)]([)](*[
nT
T Tnf
TfPeigne
TtPeigneTF )(1)(1)]([ 1
On a vu que la transformée de Fourier d’un peigne est un peigne :
Page 5
On peut illustrer l’aliasing ou démultiplication du spectre sur le cas particulièrement simple d’un signal s1(t) sinusoïdal
)(kHzf88 0
)](*[ 1 tsTF
kHzftts e 8),20002cos()(1
eT21
eT21
eT21
eT21
eT21
eT21
Page 6
Reprendre pour s2(t) ci-dessous et donner le spectre de s2*(t)
kHzftts e 8),30002cos()(2
)(kHzf88 0
)](*[ 2 tsTF
eT21
eT21
eT21
eT21
eT21
eT21
En d’autres termes, comment gommer les répliques du spectre, tout en conservant l’original …
Comment retrouver le spectre de s2(t) à partir du spectre de s2*(t), c’est le problème que se pose C. E. Shannon (~ 1947)
Page 7
La réponse de Shannon à cette question, c’est … un filtre
)(kHzf88 0
)(e
e ffT
sTe 8000/1)/( ee ffT
Un filtre multiplie les composantes du spectre d’un signal par un coefficient atténuateur ou amplificateur selon la fréquence. Les effets du filtre de Shannon sont résumés par sa réponse fréquentielle, ici par exemple pour fe=8kHz :
Décrire les effets du filtre de Shannon ci-dessus :
44
Page 8
Retrouver le spectre de s2 avec le filtre de Shannon précédent
kHzftts e 8),30002cos()(2
)(kHzf88 0
)](*[ 2 tsTF
eT21
eT21
eT21
eT21
eT21
eT21
eT
Page 9
Pour retrouver s(t) à partir des échantillons s(nTe) dans s*(t), on élimine du spectre de s*(t) par filtrage tous les alias hors de [-fe/2, fe/2] pour récupérer le spectre de s(t), puis on trouve s(t) par Transformée de Fourier inverse, en d’autres termes :
On en tire une formule, dite formule de Shannon, applicable si et seulement si la condition de Shannon est respectée.
*)(sTF
)(1e
e
ffST
)(1e
e
ffST
)(1 fSTe
efef 0 2/ef2/eff
eTfiltre reconstructeur de Shannon
D’où le moyen de retrouver s(t) à partir de s*(t) … si la contrainte de Shannon est vérifiée
)](*[)()( 1 tsTFffTTFtse
e
Page 10
La formule de Shannon (pour information)On sait maintenant trouver la formule de Shannon
qui calcule s(t) à partir des échantillons s(nTe) :1. Puisque s(t) est la transformée inverse d’un produit (cf. ci-dessous)2. la transformée de Fourier d’un produit est un produit de convolution3. Puisque le produit de convolution par l’impulsion de Dirac décale
n
eee
e
ee nTtnTs
TtTt
TTts )()(
/)/sin(1)(
n ee
eee TnTt
TnTtnTsts
/)()/)(sin(
)()(
)](*[)()( 1 tsTFffTTFtse
e
Page 11
On ne peut pas reconstruire le spectre de s3(t) ci-dessous
)50002cos()(3 tts
)(kHzf88 0
)](*[ 3 tsTF
eT21
eT21
eT21
eT21
eT
D’où vient le problème ?
Page 12
Pour pouvoir supprimer proprement les alias, il ne doit pas y avoir de mélanges des alias, ou recouvrements du spectre
Si fe diminue, ou si le spectre du signal s(t) est trop large, les alias se mélangent, le filtre de Shannon est incapable de récupérer s(t).
La parade est le filtre antialiasing ou prefilter (à expliquer)
*)(sTF)(1
ee
ffST
)(1 fSTe
efef 0 2/ef2/eff
2/ef 2/ef
Page 13
La méthode la plus simple pour compresser un son numérique consiste à le « décimer » c’est-à-dire à le sous-échantillonner
Symbole :
M
Décimer ou sous-échantillonner un signal discret x(nTe) dans un rapport M, c’est ne conserver qu’un échantillon tous les M échantillons
La décimation réduit le nombre d’échantillons dans un facteur M, l’effet sur la fréquence d’échantillonnage est une division par M
Par conséquent, il peut s’avérer nécessaire de préfiltrer le signal hors de avant de le décimer pour éviter des recouvrements du spectre
MfMf ee /,/
Mff edécimation
e /
t
s(nTe)
Page 14
L’effet de la décimation sur le spectre d’un signal est égal à l’effet d’une division de la fréquence d’échantillonnage
k
ee kffsftsTF )(~)](*[Puisque :
1
0)(~)(~ M
kee
M Mf
kfsMf
fsC’est donc :
Conserver un échantillon sur M revient à diviser par M la fréquence d’échantillonnage fe
Avec MATLAB, pour décimer le vecteur sig dans un facteur M: >> sdecime = s(1:M:length(sig))
est divisé par M et il y a M fois plus d’alias)(~ fs M
Page 15
Pour décompresser un signal décimé, on doit le suréchantillonner
L’opération inverse du sous-échantillonnage consiste à ajouter dans un premier temps M -1 échantillons nuls entre deux échantillons du signal décimé.
Il faut ensuite lisser les M-1 valeurs nulles ajoutées en appliquant un filtre interpolateur pour reconstruire un signal audio de bonne qualité.
M
Symbole :
t
Page 16
Effet du sur-échantillonnage sur le spectrePour sur-échantillonner un signal, on insère tout d’abord M-1 échantillons nuls entre deux échantillons :
)(~)()()(~ 22 fxenxekyfxn
ifnMT
k
ifkTM
ee
eifnMTTF enxfxnx 2)()(~)(
MnksiMnksinxkx M
0,)()(
Avec MATLAB, pour faire cette opération sur le vecteur x, on procède en deux temps :
xM = zeros(1, M*length(x));xM(1:M:M*length(x)) = x;