Vous êtes sur la page 1sur 19

SY06-TP07 : Signaux aléatoires, estimation et analyse spectrale 20/05/10

Signaux aléatoires, estimation et analyse spectrale

A. Introduction

Lors des TP précédents, nous avons manipulé des signaux déterministes. Cependant, nous ne pouvions pas
modéliser des phénomènes qui échappent à nos mesures comme les interférences, les imprécisions de mesures
ou autres perturbations imprévisibles.
Pour pallier à ce problème, nous pouvons modéliser le signal par une approche probabiliste : la signal aura
une partie déterministe et une partie aléatoire caractérisée par une loi de probabilité. Ainsi, le signal a une
espérance et une variance qui peut dépendre ou non du temps.
Cette indépendance par rapport au temps définit la notion de stationnarité. Dans le cas d'un signal
stationnaire, on peut aussi déterminer s'il est ergodique, c'est à dire si sa moyenne temporelle correspond à la
moyenne du signal (en n'importe quel instant puisqu'il est stationnaire) sur plusieurs tirages. Ainsi, si cette
propriété est vraie, nous n'avons besoin que d'un seul tirage pour déterminer les caractéristiques statistiques du
signal, comme son espérance et sa variance. Cependant il nous faudrait un tirage d'une durée infinie pour
obtenir les valeurs vraies de ces caractéristiques. Ne pouvant faire qu'une mesure de durée limitée, nous avons
recourt aux estimateurs pour modéliser un signal aléatoire à partir d'une série finie.

B. Rappels théoriques

Question : Démontrer que Var X =E [ X² ]−E [ X ]² .


On sait que : Var X =E [ X −E [ X ] ²] , c'est la moyenne des écarts entre le résultat et son espérance au
carré.
En développant l'expression au carré, on a :
Var X =E [ X² −2.X.E[ X ]E [ X ] ²]
Var X =E [ X² ]− E [2.X.E [ X ]]E [ E [ X ]² ]
Var X =E [ X² ]−2.E[ X ]. E [ X ]E [ X ] ² car E[X] est une valeur déterminée et donc son espérance est
cette même valeur ( E[E[X]] = E[X] ).
On montre donc que :
Var X =E [ X² ]− E [ X ]²

Page 1 sur 19
DEHORS Vincent
MARTIN Christophe
SY06-TP07 : Signaux aléatoires, estimation et analyse spectrale 20/05/10

C. Applications

Les manipulations suivantes sont faites sous Matlab.


On utilise la fonction randn() pour générer un signal aléatoire de moyenne nulle et de variance 1.
Pour déterminer si cette fonction marche bien, nous calculons la moyenne arithmétique de la série
renvoyée (estimateur de l'espérance), ainsi que la moyenne des écarts au carré (estimateur de la variance).
Dans un premier temps, on calculera l'espérance du premier échantillon de tirages indépendants puis nous
déterminerons si la fonction randn() est stationnaire et ergodique.

I. Estimation de l'espérance et de la variance

Le meilleur estimateur de l'espérance est la moyenne arithmétique :


k
1

m=
k ∑ x i où x est notre série de tirage.
i=1
On calcule la moyenne sur k échantillons :
for k = 1:1:N
rands = randn(k);
%% CALCUL de la moyenne de k tirages (on ne prend qu'un échantillon)
for i = 1:1:k
moy(k) = moy(k) + rands(i,1);
end
moy(k) = moy(k) / k;
end

La fonction randn(k) nous renvoie k trajectoires de k échantillons. Dans cette première partie nous ne
considérons que le premier échantillon en supposant la série stationnaire. Nous verrons ensuite si le signal est
effectivement stationnaire en comparant les espérances à différents échantillons.
La variable moy contient l'estimation de l'espérance en fonction de son indice k qui est le nombre
d'échantillons utilisés lors du calcul de l'estimation. On peut ainsi tracer la moyenne en fonction du nombre
d'échantillons k.

Page 2 sur 19
DEHORS Vincent
MARTIN Christophe
SY06-TP07 : Signaux aléatoires, estimation et analyse spectrale 20/05/10

>> plot(abs(0-moy))
Biais de l'estimateur en fonction du nombre d'échantillons utilisés
On voit bien ici que la moyenne temporelle du signal est d'autant plus précise que le nombre d'échantillons
utilisés est grand. De plus, on confirme que la fonction randn() a bien une espérance de 0 (du moins pour le
premier échantillon).
On peut faire de même pour estimer la variance du premier échantillon.
On sait que : Var X =E [ X −E [ X ] ²]
Or on sait calculer un estimateur d'une espérance.
k
1
v =
k ∑  x i−moy ² Où x est notre série de tirage.
i=1
moy = 0;
for k = 1:1:N
rands = randn(k);
%% CALCUL de la variance de k tirages (un échantillon par tirage)
for i = 1:1:k
var(k) = var(k) + (rands(i,1) - moy)^2;
end
var(k) = var(k) / k;
end

Page 3 sur 19
DEHORS Vincent
MARTIN Christophe
SY06-TP07 : Signaux aléatoires, estimation et analyse spectrale 20/05/10

On trace ensuite l'estimation de la variance du premier échantillon en fonction de la qualité de l'estimation


(c'est à dire le nombre d'échantillons utilisés).

>> plot(var) >> plot(abs(1-var))

On voit que la variance converge vers 1 et que l'écart entre la variance et son estimation tend vers 0 quand
le nombre d'échantillons augmente.
On en conclut que la fonction randn() nous renvoie une série dont les échantillons (au moins le premier)
ont une espérance de 0 et une variance de 1. De plus, nos estimateurs sont correctes et sans biais.

II. Stationnarité et ergodicité de la fonction randn

Tout d'abord, on cherche à déterminer si la série renvoyée par randn() est stationnaire. Pour cela, on
regarde d'abord si l'espérance d'un échantillon est la même quelque soit son rang. Nous avions déjà calculé
l'espérance de l'échantillon, nous n'avons plus qu'à le faire pour les autres en fixant le nombre de trajectoires
utilisées pour faire l'estimation. Nous avons choisi de faire une estimation à partir de 500 trajectoires et pour
500 échantillons.
rands = randn(500);
for i1 = 1:1:500
%% CALCUL de la moyenne sur i2 tirages pour l'échantillon i1
for i2 = 1:1:500
moy(i1) = moy(i1) + rands(i2,i1);
end
moy(i1) = moy(i1) / 500;
end

Page 4 sur 19
DEHORS Vincent
MARTIN Christophe
SY06-TP07 : Signaux aléatoires, estimation et analyse spectrale 20/05/10

On obtient le graphique suivant :

>> plot(moy)
Espérance de chaque échantillon
On constate que l'espérance de chaque échantillon est nulle (pas exactement car on a fait qu'une estimation
sur 500 trajectoires). On en déduit que l'espérance des échantillons ne dépend pas du temps.
Pour qu'une série soit stationnaire, il faut aussi que sa variance ne dépende pas du temps. Pour le
déterminer, on applique le même procédé que pour l'espérance. On regarde si l'estimation de la variance est la
même pour les différents échantillons de notre série :

rands = randn(500);
moy = 0;
for i1 = 1:1:500
%% CALCUL de la variance sur i2 tirages pour l'échantillon i1
for i2 = 1:1:500
var(i1) = var(i1) + (rands(i2,i1) - moy)^2;
end
var(i1) = var(i1) / 500;
end

On peut alors tracer la série « var » :

Page 5 sur 19
DEHORS Vincent
MARTIN Christophe
SY06-TP07 : Signaux aléatoires, estimation et analyse spectrale 20/05/10

>> plot(var)
Variance des échantillons
Comme attendu, la variance de chaque échantillon converge vers 1, on en déduit que la variance ne dépend
pas du temps. On en conclut que notre signal est stationnaire au sens faible : ces deux premiers moments ne
dépendent pas du temps.
Un signal est dit ergodique si sa moyenne temporelle est égale à l'espérance à un instant quelconque (étant
donné qu'il est stationnaire, l'instant importe peu). Vu que nous connaissons déjà l'espérance d'un échantillon et
sa variance, il nous suffit de calculer la moyenne et la variance d'une trajectoire et de comparer ces valeurs.
moyTemp = 0;
varTemp = 0;
rands = randn(1000);
%% CALCUL de la moyenne sur la première trajectoire
for i = 1:1:1000
moyTemp = moyTemp + rands(1,i);
end
moyTemp = moyTemp/1000;

%% CALCUL de la variance sur la première trajectoire


for i = 1:1:1000
varTemp = varTemp + (rands(1,i) -moyTemp)^2;
end
varTemp = varTemp/1000;

Obtient les valeurs suivantes :


• moyTemp = 0.0534

Page 6 sur 19
DEHORS Vincent
MARTIN Christophe
SY06-TP07 : Signaux aléatoires, estimation et analyse spectrale 20/05/10

• varTemp = 1.0121
On constate que la moyenne temporelle converge vers 0 et la variance vers 1 ce qui correspond à
l'espérance et à la variance du tirage d'un échantillon. On en conclut que le signal renvoyé par la fonction
randn() est ergodique.

III. Loi de probabilité de la fonction randn

Pour déterminer la loi de probabilité de la fonction randn, on utilise la fonction Matlab : hist qui compte le
nombre d'échantillons qui sont compris dans un intervalle. Si on fait tendre le nombre d'échantillons vers l'infini
et la taille des intervalles vers 0, on obtient la loi de probabilité de la fonction. On note aussi que ce procédé
fonctionne grâce à l'ergodisme de la fonction randn.

>> hist(randn(10000,1), 50)

On reconnaît la loi normale comme celle illustrée par la figue ci-après.


Il s'agit d'une loi normale avec µ = 0 et σ = 1

Page 7 sur 19
DEHORS Vincent
MARTIN Christophe
SY06-TP07 : Signaux aléatoires, estimation et analyse spectrale 20/05/10

On peut s'en assurer en tapant la commande : help randn sous Matlab. Et on obtient :
« R = RANDN(N) returns an N-by-N matrix containing pseudorandom values drawn from the standard
normal distribution »

IV. Covariance et autocorrélation d'un signal aléatoire

La fonction de covariance s'écrit :


C xx t 1, =E [ x t 1−E [ x t 1].  x t 1−E [ x t 1]]
Or on a vu précédemment que l'espérance de chaque échantillon est nulle.
On a donc :
C xx t 1, =E [ x t1 . x t 1]
On remarque qu'il s'agit de l'expression de l'autocorrélation de x.
C xx t 1, = Rxx 
On note aussi que la fonction ne dépend que de  car le signal x est stationnaire. Si cela n'avait pas été le
cas, l'autocorrélation de ce signal n'aurait pas eu de sens.
Afin d'analyser notre signal, on se propose de calculer sa fonction d'autocorrélation. Pour cela, nous avons
créé le script Matlab suivant :
Rxx = zeros(1000, 1);
N = 4000;
rands = randn(N);

for k = 1:1:1000
for i = 1:1:N-abs(k-499)
Rxx(k) = Rxx(k) + (rands(1,i) * rands(1,i+abs(k-499)));
end
Rxx(k) = Rxx(k)/N;
end

Page 8 sur 19
DEHORS Vincent
MARTIN Christophe
SY06-TP07 : Signaux aléatoires, estimation et analyse spectrale 20/05/10

Ce script calcule l'estimation de l'autocorrélation à partir de l'estimée suivante :



1
R xx  k = ∑ x [i ]. x [ik ] , avec =N −∣k∣−1
N
i=0
Pour notre calcul, nous avons pris N = 4000 et k variant de -499 à 500.
Après exécution du script, nous affichons la fonction d'autocorrélation calculée :

>> plot(-499:1:500, Rxx)


Fonction d'autocorrélation du signal aléatoire
On constate que la fonction d'autocorrélation du signal est nulle sauf en 0 où elle vaut 1.
On peut alors l'écrire sous la forme suivante :
R xx  k =a [k ] , avec a=1
Or on avait calculé que la variance était aussi égale à 1.
On peut donc en conclure que la variance est égale à la valeur en 0 dans la fonction d'autocorrélation.
De plus, la fonction d'autocorrélation nous apprend que le signal est un bruit blanc car il est entièrement
décorrélé avec lui-même.

V. Filtrage de notre série aléatoire

Nous avons identifié que la série renvoyée par la fonction randn() était un bruit blanc. La question que l'on

Page 9 sur 19
DEHORS Vincent
MARTIN Christophe
SY06-TP07 : Signaux aléatoires, estimation et analyse spectrale 20/05/10

peut se poser maintenant est : est-ce que le signal est toujours un bruit blanc après avoir subit le filtrage d'un
filtre à réponse impulsionnelle finie.
Soit le filtre de réponse impulsionnelle h :
h [k ]=3 [k ]−3[ k −1]
On sait que la sortie est égale à la convolution entre l'entrée et la réponse impulsionnelle du filtre.
s [k ]=x [k ]∗h [k ]

s [k ]= ∑ x [i]. h[ k −i]
i =−∞
Pour déterminer si la sortie est un bruit blanc, on calcul son intercorrélation avec l'entrée (qui est un bruit
blanc). Mais pour cela, il faut connaître l'espérance de la sortie et savoir si celle-ci est centrée ou non.
On calcule l'espérance de la sortie :

E [ s [k ]]=E [ ∑ x [i]. h[ k−i ]]
i=−∞

E [ s [k ]]= ∑ E [ x [i]]. h[ k −i]
i =−∞

E [ s [k ]]=0 . ∑ h [k −i ]=0
i=−∞
L'espérance de la sortie est donc la même que celle de l'entrée, c'est à dire 0.
Nous pouvons maintenant calculer l'intercorrélation entre l'entrée et la sortie :
R xy []= E [ x [k ]. s [k ]]
R xy []= E [ x [k ]. h∗x [k ]]

R xy []= E [ x [k ]. ∑ h [i ]. x [k −i ]]
i=−∞

R xy []= ∑ h[i ]. E [ x [k ]. x [k −i ]]
i =−∞

R xy []= ∑ h[i]. Rxx [−i]
i=−∞
Nous avions trouvé que R xx  k =a [k ] , avec a=1 , on peut donc écrire :

Page 10 sur 19
DEHORS Vincent
MARTIN Christophe
SY06-TP07 : Signaux aléatoires, estimation et analyse spectrale 20/05/10

∞ ∞
R xy []= ∑ h[i]. Rxx [0 ]. [−i]=R xx [0 ]. ∑ h [i ]. [−i ]
i=−∞ i=−∞
On reconnaît la forme de la convolution, or l'impulsion de Dirac est l'élément neutre de cet opérateur, on a
donc :
R xy []= Rxx [0 ]. h [] (dans notre cas Rxx[0] = 1)
Ainsi, en faisant l'intercorrélation entre un bruit blanc et la sortie d'un filtre, on obtient sa réponse
impulsionnelle. Ce résultat peut être très utile pour identifier un filtre que l'on ne connait pas ! Une autre
solution consisterait à envoyer une impulsion en entrée pour avoir la réponse impulsionnelle mais la génération
d'une impulsion est plus compliquée à réaliser.
De plus, si la sortie aurait été un bruit blanc, il ne pourrait pas être corrélé avec un autre bruit blanc. Or, si
le filtre n'a pas pour réponse impulsionnelle un seul Dirac, la sortie est corrélé avec l'entrée et donc ce n'est plus
un bruit blanc.
On se propose de faire un estimateur de l'intercorrélation sous Matlab afin de vérifier le résultat obtenu
précédemment.
function[h] = estime_h(x, y, N)

Rxy = zeros(N, 1);

for k = 1:1:N

for i = 1:1:N-abs(k-N/2)
Rxy(k) = Rxy(k) + (x(i) * y(i+abs(k-N/2)));
end
Rxy(k) = Rxy(k)/N;

end

h = Rxy;
Fonction estime_h créée sous Matlab
Notre fonction permet de déterminer les coefficients de la réponse impulsionnelle en ayant l'entrée et la
sortie du filtre et tel que l'entrée soit un bruit blanc.
On vérifie si elle fonctionne correctement :
• On crée le filtre en définissant sa réponse impulsionnelle.
• On génère un bruit blanc grâce à la fonction randn() de Matlab.
• On calcule la sortie du filtre avec la fonction conv() de Matlab.
• On utilise notre fonction estime_h pour calculer le filtre utilisé.
• On trace le filtre calculé pour vérifier que c'est le même que celui que nous avons définit au début.

Page 11 sur 19
DEHORS Vincent
MARTIN Christophe
SY06-TP07 : Signaux aléatoires, estimation et analyse spectrale 20/05/10

>> x = randn(1000 , 1 );
>> h = [3,-3];
>> y = conv( x , h );
>> h1 = estime_h( x , y , 1000 );
>> plot( -499:1:500 , h1 );

Nous obtenons :
• h1(0) = 3,2
• h1(1) = -3,2
• Les autres échantillons aux alentours de 0

Notre fonction marche donc correctement et nous renvoie bien une estimation de la réponse impulsionnelle
assez précise. On peut se demander quel est l'influence de N sur la précision de notre estimateur, pour cela nous
traçons plusieurs courbes en faisant varier N :
• N = 1000, en rouge
• N = 500, en vert
• N = 200, en bleu

Page 12 sur 19
DEHORS Vincent
MARTIN Christophe
SY06-TP07 : Signaux aléatoires, estimation et analyse spectrale 20/05/10

>> h1 = estime_h(x,y,1000);
>> h2 = estime_h(x,y,500);
>> h3 = estime_h(x,y,200);
>> plot(-499:1:500,h1,'red', -249:1:250,h2, 'green', -99:1:100,h3, 'blue')
Estimation de la réponse impulsionnelle avec plusieurs N
On remarque que plus N est élevé, plus h(0) tend vers 3 et h(1) vers -3. On en conclut que le biais de notre
estimateur est nul, c'est à dire que :
E[h(0)] = 3, E[h(1)] = -3 et les autres ont une espérance nulle. Cela prouve que notre estimateur est correct
et efficace.

D. Analyse spectrale

Tout comme pour l'autocorrélation, on peut utiliser les estimateurs pour calculer la D.S.P qui est la
transformée de fourrier de la fonction d'autocorrélation. Il existe plusieurs estimateurs de la D.S.P mais le plus
puissant est le périodogramme moyenné et c'est celui qui est utilisé par la suite.

I. Biais de l'estimation de la D.S.P.


On cherche à déterminer quel est le biais de l'estimateur de la DSP.

Page 13 sur 19
DEHORS Vincent
MARTIN Christophe
SY06-TP07 : Signaux aléatoires, estimation et analyse spectrale 20/05/10

Calcul de la DSP avec N = 32 Calcul de la DSP avec N = 32 avec une autre


trajectoire

Nous constatons qu'avec 32 échantillons, l'estimation est mauvaise tant en amplitude qu'en précision
fréquentielle. Après avoir fait plusieurs fois l'expérience, on se rend compte que l'espérance est mal centrée (2,2
au lieu de 4), il y a donc un biais de 1,8 pour N=32.
En prenant N = 512, on obtient :

Page 14 sur 19
DEHORS Vincent
MARTIN Christophe
SY06-TP07 : Signaux aléatoires, estimation et analyse spectrale 20/05/10

Calcul de la DSP avec N = 512

On remarque qu'avec 512, la reconstitution est beaucoup plus précise, le biais est nul et la fréquence de
résonance est correcte.
On en conclut que plus N est grand, plus le biais est faible. Asymptotiquement, le biais tend vers 0 quand
N augmente. Cependant, augmenter le nombre d'échantillons peut être problématique dans le cas où on ne peut
faire la capture ou le traitement des données en un temps limité.

II. Variance de l'estimateur de la D.S.P.


On a vu que plus N était grand, meilleure était l'espérance de l'estimation. Cependant, ce n'est pas parce
que la reconstitution est en moyenne centrée sur le signal que les valeurs en sont proches à chaque tirage. Pour
déterminer la dispersion des valeurs autour de l'espérance, il convient d'étudier la variance de l'estimateur.
On prend N = 1024, l'espérance de l'estimateur est donc bien centrée sur l'espérance du signal. Cependant,
si la variance est élevée, les tirages pourront être éloignés du signal.
L'estimateur du périodogramme moyenné utilise plusieurs tronçons de la même séquence. On choisi de
n'en utiliser qu'un.

Page 15 sur 19
DEHORS Vincent
MARTIN Christophe
SY06-TP07 : Signaux aléatoires, estimation et analyse spectrale 20/05/10

Estimation d'un bruit blanc Estimation d'une sinusoïde modulée Estimation d'une sinusoïde bruitée
avec 1 segment avec 1 segment avec 1 segment

On voit bien que les estimations sont assez différentes des espérances qu'on doit avoir. On en déduit que la
variance est élevée. Nous faisons donc une simulation en prenant plusieurs segments.

Estimation d'un bruit blanc Estimation d'une sinusoïde modulée Estimation d'une sinusoïde bruitée
avec 32 segments avec 32 segments avec 32 segments

Le fait d'augmenter le nombre de segments augmente considérablement la précision de l'estimation, la


variance de l'estimateur est donc plus petite. Cependant, si on ne dispose que d'un enregistrement, on ne peut
pas augmenter le nombre segments sans baisser le nombre d'échantillons par segments ce qui a pour
conséquence de détériorer le biais de l'estimateur. Une solution consiste à faire chevaucher les segments pour
en augmenter le nombre, mais l'espace non-chevauché ne doit pas être plus petit que la longueur de la fonction
d'autocorrélation. Il faut trouver un compromis entre le biais et la variance.

Page 16 sur 19
DEHORS Vincent
MARTIN Christophe
SY06-TP07 : Signaux aléatoires, estimation et analyse spectrale 20/05/10

III. Compromis Biais-Variance


On cherche à déterminer expérimentalement un compromis Biais-Variance pour avoir une estimation
convenable.
Pour un bruit blanc, on détermine :

Nombre de segments : 8, Taille d'un segment : 1024 échantillons

Pour une sinusoïde modulée bruitée, on trouve :

Page 17 sur 19
DEHORS Vincent
MARTIN Christophe
SY06-TP07 : Signaux aléatoires, estimation et analyse spectrale 20/05/10

Nombre de segments : 4, Taille d'un segment : 2048 échantillons

Pour une sinusoïde bruitée, on trouve :

Nombre de segments : 8, Taille d'un segment : 1024 échantillons

Page 18 sur 19
DEHORS Vincent
MARTIN Christophe
SY06-TP07 : Signaux aléatoires, estimation et analyse spectrale 20/05/10

Le compromis entre Biais et Variance est globalement le même mais varie un peu suivant le type de signal
utilisé. Cela dépend aussi de nos besoins, par exemple, on peut vouloir favoriser l'espérance sur la variance si
on peut effectuer plusieurs tirages et en faire la moyenne pour diminuer la variance.

E. Conclusion

Ce TP nous a permis de manipuler des signaux aléatoires ainsi que de les caractériser grâce à leurs
moments (espérance et variance) ainsi qu'avec leur fonction d'autocorrélation. Les notions de stationnarité et
d'ergodicité nous ont permis d'estimer expérimentalement un bruit blanc généré par Matlab grâce à la fonction
randn(). L'identification de ce signal en tant que bruit blanc a été possible en analysant la fonction
d'autocorrélation de ce signal qui est un Dirac en 0 multiplié par la variance du signal (1 dans notre cas).
Durant ce TP, nous avons dû utiliser les estimateurs afin d'exprimer les moments d'un signal (espérance et
variance). Pour cela, nous avons créé des scripts sous Matlab qui calculaient des estimateurs dont le biais était
nul afin d'avoir une estimation d'autant plus précise que le nombre d'échantillons est grand.
De plus, l'estimation de l'intercorrélation entre la sortie d'un filtre et son entrée (un bruit blanc) nous a
permis de retrouver la réponse impulsionnelle du filtre de manière assez précise.
De même, nous pouvons utiliser des estimateurs pour l'analyse spectrale et exprimer la D.S.P d'un signal
ergodique avec seulement une série finie d'échantillons.

Page 19 sur 19
DEHORS Vincent
MARTIN Christophe