Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

Alinear señales mediante correlación cruzada

Muchas mediciones incluyen datos recogidos de forma asíncrona por múltiples sensores. Si quiere integrar las señales y estudiarlas en conjunto, tiene que sincronizarlas. Para ello, utilice xcorr.

Consideremos el ejemplo de un coche que cruza un puente. Las vibraciones que produce se miden con tres sensores idénticos, situados en distintos puntos. Las señales tienen diferentes tiempos de llegada.

Cargue las señales en el espacio de trabajo de MATLAB® y represéntelas.

load relatedsig

ax(1) = subplot(3,1,1);
plot(s1)
ylabel('s_1')
axis tight

ax(2) = subplot(3,1,2);
plot(s2)
ylabel('s_2')
axis tight

ax(3) = subplot(3,1,3);
plot(s3)
ylabel('s_3')
axis tight
xlabel('Samples')

linkaxes(ax,'x')

Figure contains 3 axes objects. Axes object 1 with ylabel s_1 contains an object of type line. Axes object 2 with ylabel s_2 contains an object of type line. Axes object 3 with xlabel Samples, ylabel s_3 contains an object of type line.

Calcule las correlaciones cruzadas entre los tres pares de señales. Normalícelas para que su valor máximo sea 1.

[C21,lag21] = xcorr(s2,s1);
C21 = C21/max(C21);

[C31,lag31] = xcorr(s3,s1);
C31 = C31/max(C31);

[C32,lag32] = xcorr(s3,s2);
C32 = C32/max(C32);

Las ubicaciones de los valores máximos de las correlaciones cruzadas indican desfases positivos o desfases negativos temporales.

[M21,I21] = max(C21);
t21 = lag21(I21);

[M31,I31] = max(C31);
t31 = lag31(I31);

[M32,I32] = max(C32);
t32 = lag31(I32);

Represente las correlaciones cruzadas. En cada gráfica se muestra la ubicación del máximo.

subplot(3,1,1)
plot(lag21,C21,[t21 t21],[-0.5 1],'r:')
text(t21+100,0.5,['Lag: ' int2str(t21)])
ylabel('C_{21}')
axis tight
title('Cross-Correlations')

subplot(3,1,2)
plot(lag31,C31,[t31 t31],[-0.5 1],'r:')
text(t31+100,0.5,['Lag: ' int2str(t31)])
ylabel('C_{31}')
axis tight

subplot(3,1,3)
plot(lag32,C32,[t32 t32],[-0.5 1],'r:')
text(t32+100,0.5,['Lag: ' int2str(t32)])
ylabel('C_{32}')
axis tight
xlabel('Samples')

Figure contains 3 axes objects. Axes object 1 with title Cross-Correlations, ylabel C_{21} contains 3 objects of type line, text. Axes object 2 with ylabel C_{31} contains 3 objects of type line, text. Axes object 3 with xlabel Samples, ylabel C_{32} contains 3 objects of type line, text.

s2 presenta un desfase positivo con respecto a s1 de 350 muestras; s3 presenta un desfase negativo con respecto a s1 de 150 muestras. Por lo tanto, s2 presenta un desfase positivo con respecto a s3 de 500 muestras. Alinee las señales recortando los vectores con mayor retardo.

s1 = s1(-t21:end);
s3 = s3(t32:end);

ax(1) = subplot(3,1,1);
plot(s1)
ylabel('s_1')
axis tight

ax(2) = subplot(3,1,2);
plot(s2)
ylabel('s_2')
axis tight

ax(3) = subplot(3,1,3);
plot(s3)
ylabel('s_3')
axis tight
xlabel('Samples')

linkaxes(ax,'x')

Figure contains 3 axes objects. Axes object 1 with ylabel s_1 contains an object of type line. Axes object 2 with ylabel s_2 contains an object of type line. Axes object 3 with xlabel Samples, ylabel s_3 contains an object of type line.

De este modo, las señales están sincronizadas y listas para su posterior procesamiento.

Consulte también

| |

Temas relacionados