Main Content

Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Alinear dos señales simples

Este ejemplo muestra cómo utilizar la correlación cruzada para alinear las señales. En el caso más general, las señales tienen diferentes longitudes, y para sincronizarlas correctamente, debe tener en cuenta las longitudes y el orden en el que se introducen los argumentos en .xcorr

Considere dos señales, idénticas excepto por el número de ceros circundantes y por el hecho de que una de ellas se relague con la otra.

sz = 30; sg = randn(1,randi(8)+3); s1 = [zeros(1,randi(sz)-1) sg zeros(1,randi(sz)-1)]; s2 = [zeros(1,randi(sz)-1) sg zeros(1,randi(sz)-1)];  mx = max(numel(s1),numel(s2));  subplot(2,1,1) stem(s1) xlim([0 mx+1])  subplot(2,1,2) stem(s2,'*') xlim([0 mx+1])

Determinar cuál de las dos señales es más larga que la otra en el sentido de tener más elementos, ya sean ceros o no.

if numel(s1) > numel(s2)     slong = s1;     sshort = s2; else     slong = s2;     sshort = s1; end

Calcular la correlación cruzada de las dos señales. Ejecute con la señal más larga como primer argumento y la señal más corta como segundo argumento.xcorr Trazar el resultado.

[acor,lag] = xcorr(slong,sshort);  [acormax,I] = max(abs(acor)); lagDiff = lag(I)
lagDiff = 15 
 figure stem(lag,acor) hold on plot(lagDiff,acormax,'*') hold off

Alinee las señales. Piense en la señal de retraso como "más largo" que la otra, en el sentido de que tiene que "esperar más tiempo" para detectarla.

  • Si es positivo, "acortar" la señal larga teniendo en cuenta sus elementos de +1 hasta el final.lagDifflagDiff

  • Si es negativo, "alargar" la señal corta considerando sus elementos de +1 hasta el final.lagDiff-lagDiff

Debe agregar 1 a la diferencia de retraso porque MATLAB® utiliza la indexación basada en uno.

if lagDiff > 0     sorig = sshort;     salign = slong(lagDiff+1:end); else     sorig = slong;     salign = sshort(-lagDiff+1:end); end

Trazar las señales alineadas.

subplot(2,1,1) stem(sorig) xlim([0 mx+1])  subplot(2,1,2) stem(salign,'*') xlim([0 mx+1])

El método funciona porque la operación de correlación cruzada es antisimétrica y porque se ocupa de señales de diferentes longitudes mediante la adición de ceros en la señal más corta.xcorrFinal Esta interpretación le permite alinear las señales fácilmente utilizando el operador MATLAB® sin tener que rellenarlas a mano.end

También puede alinear las señales en un trazo invocando la función.alignsignals

[x1,x2] = alignsignals(s1,s2);  subplot(2,1,1) stem(x1) xlim([0 mx+1])  subplot(2,1,2) stem(x2,'*') xlim([0 mx+1])