Recaler des signaux ayant des heures de début différentes
De nombreuses mesures sont basées sur la collecte asynchrone de données par différents capteurs. Pour pouvoir intégrer ces signaux, il faut les synchroniser. Signal Processing Toolbox™ propose des fonctions à cet effet.
Prenons l’exemple d’une voiture qui traverse un pont. Les vibrations qu’elle produit sont mesurées par trois capteurs identiques positionnés à différents emplacements. Les signaux ont des heures d’arrivée différentes.
Chargez les signaux dans l’espace de travail MATLAB® et tracez-les.
load relatedsig ax(1) = subplot(3,1,1); plot(s1) ylabel('s_1') ax(2) = subplot(3,1,2); plot(s2) ylabel('s_2') ax(3) = subplot(3,1,3); plot(s3) ylabel('s_3') xlabel('Samples') linkaxes(ax,'x')

Le signal s1 est en retard par rapport à s2 mais en avance par rapport à s3. Il est possible de calculer précisément les retards avec finddelay. Nous voyons que s2 a 350 échantillons d’avance sur s1, que s3 a 150 échantillons de retard sur s1 et que s2 a 500 échantillons d’avance sur s3.
t21 = finddelay(s2,s1) t31 = finddelay(s3,s1) t32 = finddelay(s2,s3)
t21 = 350 t31 = -150 t32 = 500
Recalez les signaux en laissant celui qui arrive le premier tel quel et en supprimant les retards des deux autres vecteurs. Ajoutez 1 aux décalages pour tenir compte du fait que l’indexation commence à 1 dans MATLAB®. Cette méthode permet de recaler les signaux en utilisant la première heure d’arrivée comme référence, c’est-à-dire celle de s2.
axes(ax(1)) plot(s1(t21+1:end)) axes(ax(2)) plot(s2) axes(ax(3)) plot(s3(t32+1:end))

Utilisez alignsignals pour recaler les signaux. Cette fonction retarde les signaux qui arrivent en premier. Il faut donc utiliser la dernière heure d’arrivée comme référence, c’est-à-dire celle de s3.
[x1,x3] = alignsignals(s1,s3); x2 = alignsignals(s2,s3); axes(ax(1)) plot(x1) axes(ax(2)) plot(x2) axes(ax(3)) plot(x3)

Les signaux sont maintenant synchronisés et prêts pour d’autres traitements.
Voir aussi
alignsignals | finddelay | xcorr