• 20 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 04/02/2020

Recomposer un signal

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

Tout comme les vecteurs peuvent être décomposés sur des vecteurs de base, un signal peut être décomposé sur des composantes de base.

Encore faut-il avoir une base. Je vous le rappelle : pour que des vecteurs forment une base orthonormée, il faut :

  1. autant de vecteurs que la dimension de l'espace

  2. qu'ils soient tous de norme 1

  3. qu'ils soient tous orthogonaux entre eux

Acquérir et visualiser les données

Dans le fichier composition.dat, vous trouverez 5 colonnes correspondant à 5 signaux.

Qu'y a-t-il vraiment dans ce fichier ? Vous pouvez vous rendre compte qu'il s'agit d'un simple fichier texte, malgré le fait que son extension soit ".dat". Vous pouvez le vérifier en utilisant n'importe quel éditeur de texte et en ouvrant le fichier avec. 

Par exemple, sous Windows : clic-droit > ouvrir avec ... > Bloc-notes.

Le premier est un signal quelconque, les 4 suivants sont des vecteurs de base de l'espace dans lequel nous travaillons.

D'ailleurs, quelle est la dimension de cet espace?

Réponse : au bas de cette page.

Commençons par acquérir les données et à regarder ce dont on parle.

data = load('composition.dat'); %chargement des données
signal = data(:,1); %la première colonne est un signal
%les autres colonnes sont des vecteurs de base
b1 = data(:,2);
b2 = data(:,3);
b3 = data(:,4);
b4 = data(:,5);
%On regarde la tête de tout ça:
subplot(5,1,1) % subplot permet de mettre plusieurs graph sur une même figure
plot(signal)
title('signal')
subplot(5,1,2)
plot(b1)
title('b1')
subplot(5,1,3)
plot(b2)
title('b2')
subplot(5,1,4)
plot(b3)
title('b3')
subplot(5,1,5)
plot(b4)
title('b4')

Vous devriez obtenir :

Représenter tous les signaux qui vous sont fournis
Représentez tous les signaux qui vous sont fournis

Avez-vous remarqué que le premier signal semble avoir été composé à partir des quatre signaux de base ?

Composantes de base d'un signal

Le premier signal serait-il une combinaison des autres signaux ?

Pour tester cette hypothèse, nous allons tout simplement utiliser le fait que pour obtenir la composante d'un vecteur sur un vecteur de base, il suffit de le projeter sur le vecteur de base en question (or projeter, c'est simplement effectuer un produit scalaire) :

composante de v sur u1=v,u1

Quelles sont ces composantes dans notre cas ? Aucun souci, puisque vous savez calculer un produit scalaire, vous devriez pouvoir les déterminer.

%on définit une fonction produit scalaire
prodscal= @(u,v) sum(u.*v);
%on détermine les composantes
comp1 = prodscal(signal,b1)
comp2 = prodscal(signal,b2)
comp3 = prodscal(signal,b3)
comp4 = prodscal(signal,b4)

Ici, les composantes semblent réalistes :

comp1 = 1.0061
comp2 = -0.99199
comp3 = 0.59959
comp4 = 0.29124
  • Vous obtenez une composante de 1 pour le premier, ce qui était prévisible en remarquant que le signal et b1 avaient exactement la même forme.

  • Vous obtenez -1 pour le deuxième, ce qui est cohérent avec le triangle inversé dans le signal.

  • Et pour les deux autres, les choses sont moins claires.

Recomposer un signal

Par la relation de Chasles,  on devrait normalement pouvoir recomposer un vecteur sur une base orthonormale {ui,i=1N} :

v=Ni=1v,uiui

Testons cela !

%on recompose le signal:
signal_recomp = comp1*b1 + comp2*b2 + comp3*b3 + comp4*b4;
clf;%nettoie la fenetre graphique
plot(signal,'k')
hold on
plot(signal_recomp,'r')
hold off

Vous devriez obtenir :

Le signal original (en noir) et votre reconstitution (en rouge)
Le signal original (en noir) et votre reconstitution (en rouge)

Pas mal !

Avions-nous bien une base orthonormée ?

Les vecteurs sont-ils unitaires ?

Si la recomposition a si bien marché, c'est que plusieurs conditions ont été réunies. En premier lieu les vecteurs de bases sont bien unitaires.

Vérifions que cette assertion est vraie. Un vecteur unitaire, c'est un vecteur de norme 1, c'est-à-dire que :

u=u,u=1

Testons cela sur le vecteur  b1 (le signal en forme de porte) :

% test du caractère unitaire:
norm1 = sqrt(prodscal(b1,b1))

La console répond :

norm1 = 1.00000

Nous avons donc la confirmation que le premier vecteur de base est bien unitaire. Vous pouvez vérifier que c'est également le cas pour les autres vecteurs.

Les vecteurs sont-ils orthogonaux entre eux ?

Toujours pour que la décomposition soit valide, il faut que les vecteurs de base soient orthogonaux entre eux.

Que signifie orthogonal ? Eh bien, tout simplement que leur produit scalaire est nul :

uvu,v=0

Vérifions si c'est bien le cas pour b1 (le signal en forme de porte) et b2  (le signal en forme de triangle) :

%test de l'orthogonalité
orthob1b2 = prodscal(b1,b2)

La console répond :

orthob1b2 = 0

Là où l'on pourrait être plus sceptique, c'est pour b3 et b4 qui ont des valeurs non nulles au même endroit. Le produit scalaire de ces deux vecteurs risque donc d'être non nul.

Regardons ce qui se passe :

%test de l'orthogonalité
orthob3b4 = prodscal(b3,b4)

Cette fois, la réponse n'est pas tout à fait 0 :

orthob3b4 = -1.2250e-17

Certes, ce n'est pas tout à fait nul, mais c'est très petit. Donc, on pourra considérer que ces deux vecteurs sont quasiment orthogonaux et cela ne devrait pas trop affecter notre décomposition.

Vous allez dire : "c'est un peu un miracle tout ça".

Eh bien, pas tant que ça. Les deux signaux b3 et b4 n'ont pas été choisis au hasard. Comme vous le remarquerez surement, il s'agit dans un cas d'un sinus et dans l'autre d'un cosinus de même période. Et le tout pris sur une période complète.

Or, si vous vous rappelez de vos cours de maths, vous vous souviendrez sûrement (ou pas du tout :-°)  que :

2π0sin(x)cos(x)dx=0

Donc, ce n'est pas tant que ça un miracle.

Vous pouvez vérifier que toutes les combinaisons possibles des vecteurs de base qui vous sont fournis sont orthogonales.

Nous avions donc bien des vecteurs de base orthonormés.

Y-t-il autant de vecteurs de base que la taille de l'espace ?

Enfin, pour que vous soyez assuré de recomposer le signal complètement, il faut autant de vecteurs de base que la taille de l'espace.

Or ici, la taille de l'espace est le nombre de points, il y en a N = length(signal), soit dans notre cas : 100.

Nous n'avions que 4 vecteurs de base, c'est donc bien insuffisant pour pouvoir constituer une base complète, c'est d'ailleurs pour cela qu'il y a au final une différence entre le signal reconstitué et les données.

Conclusion

Vous venez de recomposer un signal à partir d'éléments de base. Pour le moment, ces éléments de base étaient visuellement faciles à reconnaître (triangle, carré, vague) mais ils ne sont pas très utilisés pour le reste des signaux.

Dans la suite du cours, vous allez voir que les signaux de base en forme de sinusoïdes sont particulièrement intéressants.

Exemple de certificat de réussite
Exemple de certificat de réussite