Comment décimer les sons numériques

16
1 Comment décimer les sons numériques Jean-Paul Stromboni, Jean-Paul Stromboni, mars 2005 mars 2005 ESSI 1, module SSI, Amphi Est vidéo projecteur ESSI 1, module SSI, Amphi Est vidéo projecteur Durée : 1h Duré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 filt rer Filtres simples Nous sommes ici !

description

Jean-Paul Stromboni, mars 2005 ESSI 1, module SSI, Amphi Est vidéo projecteur Durée : 1h. Où en est-on ?. Dans cette séance, on voit :. Comment décimer les sons numériques. Signal numérique. Nous sommes ici !. spectre. un modèle mathématique de l’échantillonnage - PowerPoint PPT Presentation

Transcript of Comment décimer les sons numériques

Page 1: 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: Comment décimer les sons numériques

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: Comment décimer les sons numériques

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: Comment décimer les sons numériques

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: Comment décimer les sons numériques

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: Comment décimer les sons numériques

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: Comment décimer les sons numériques

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: Comment décimer les sons numériques

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: Comment décimer les sons numériques

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: Comment décimer les sons numériques

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: Comment décimer les sons numériques

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: Comment décimer les sons numériques

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: Comment décimer les sons numériques

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: Comment décimer les sons numériques

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: Comment décimer les sons numériques

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: Comment décimer les sons numériques

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;