Vous avez vu dans le chapitre précédent que la convolution pouvait s'avérer bien utile. Dans ce chapitre, vous allez découvrir un outil très similaire à la convolution qui s'appelle l'inter-corrélation.
Elle permet, parmi d'autres utilités, de détecter automatiquement un motif.
Introduction
Dans la première partie du cours, vous avez vu que pour comparer des signaux vous pouviez utiliser la distance.
Mais, si deux signaux sont extrêmement ressemblants, mais juste décalés horizontalement, cette distance sera non nulle.
Acquisition et visualisation
Prenez l'exemple des signaux s1 et s2 que vous trouverez ici :
%acquisition des données
s1 = load('s1.dat');
s2 = load('s2.dat');
%Visualisation
plot(s1); hold on ; plot(s2,'r'); hold off
legend({'s_1' 's_2'})

On aimerait bien avoir un outil qui permette de comparer des signaux, tout en s'autorisant un décalage horizontal. C'est le rôle de l'inter-corrélation.
Une pause théorique
Distance entre deux signaux décalés
Imaginez donc que vous souhaiteriez retrouver le motif s2 au sein du signal s1automatiquement.
Rien de plus simple, ce qu'il faut faire c'est calculer la distance entre les deux signaux, mais avec un paramètre de décalage τ .
La distance d[s1,s2](τ) sera alors minimale pour la valeur de τ qui correspond à la position du motif s2 caché dans s1 .
Et si vous développez un peu cette expression vous trouverez que :
Définition de l'intercorrélation
Or, ce qui nous intéresse, finalement, c'est de minimiser la distance d en fonction de τ .
Comme ni ‖→s1‖ ni ‖→s2(décalé de τ)‖ ne vont varier, avec τ, le problème revient finalement à maximiser ⟨→s1,→s2(τ)⟩.
Or, si l'on se souvient que décaler un signal, c'est effectuer une translation temporelle : s2(décalé de τ)=s2(t−τ) , vous comprendrez pourquoi on a introduit ce que l'on appelle l'inter-corrélation de s1 avec s2 :
C'est lorsque cette fonction est maximale que les deux signaux se ressemblent le plus.
Implémentation
La fonction Matlab qui calcule cette grandeur s'appelle xcorr
. La fonction Matlab renvoie deux arguments : le premier est l’inter-corrélation elle-même et le deuxième est la valeur du décalage.
%Calcul de l'intercorrelation
%pkg load signal % a décommenter si vous travaillez sous linux
[gamma lag] = xcorr(s1,s2); % intercorrelation entre s1 et s2
plot(lag, gamma);

Et assurément, l'intercorrélation est maximale lorsque le décalage vaut 400. Vous pouvez vérifier que si vous décalez le signal s2 rouge de 400 vers la droite dans la figure de départ, vous trouvez bien la position du motif dans le signal s_1.
Alors quel intérêt ? Ici l'intérêt réside dans le fait que vous ayez un critère quantitatif pour retrouver un motif et par conséquent un moyen d'automatiser la procédure de détection de motif.
Par ailleurs, cette méthode fonctionne bien sur des signaux très bruités où même visuellement cette détection s'avère difficile.