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.

Encontrar una señal en una medición

Recibe algunos datos y desea saber si coinciden con un flujo más largo que ha medido. La correlación cruzada permite determinarlo, aunque los datos estén corrompidos por ruido.

Cargue al espacio de trabajo una grabación de un anillo girando sobre una mesa. Recorte un fragmento de un segundo y escúchelo.

load('Ring.mat')

Time = 0:1/Fs:(length(y)-1)/Fs; 

m = min(y);
M = max(y);

Full_sig = double(y);

timeA = 7;
timeB = 8;
snip = timeA*Fs:timeB*Fs;

Fragment = Full_sig(snip);

% To hear, type soundsc(Fragment,Fs)

Represente la señal y el fragmento. Resalte los puntos finales del fragmento como referencia.

plot(Time,Full_sig,[timeA timeB;timeA timeB],[m m;M M],'r--')
xlabel('Time (s)')
ylabel('Clean')
axis tight

Figure contains an axes object. The axes object with xlabel Time (s), ylabel Clean contains 3 objects of type line.

plot(snip/Fs,Fragment)
xlabel('Time (s)')
ylabel('Clean')
title('Fragment')
axis tight

Figure contains an axes object. The axes object with title Fragment, xlabel Time (s), ylabel Clean contains an object of type line.

Calcule y represente la correlación cruzada de la señal completa y del fragmento.

[xCorr,lags] = xcorr(Full_sig,Fragment);

plot(lags/Fs,xCorr)
grid
xlabel('Lags (s)')
ylabel('Clean')
axis tight

Figure contains an axes object. The axes object with xlabel Lags (s), ylabel Clean contains an object of type line.

El desfase en el que la correlación cruzada es más grande es el retardo temporal entre los puntos iniciales de las señales. Vuelva a representar la señal y superponga el fragmento.

[~,I] = max(abs(xCorr));
maxt = lags(I);

Trial = NaN(size(Full_sig));
Trial(maxt+1:maxt+length(Fragment)) = Fragment;

plot(Time,Full_sig,Time,Trial)
xlabel('Time (s)')
ylabel('Clean')
axis tight

Figure contains an axes object. The axes object with xlabel Time (s), ylabel Clean contains 2 objects of type line.

Repita el procedimiento, pero añada ruido por separado a la señal y al fragmento. No se puede distinguir el sonido del ruido.

NoiseAmp = 0.2*max(abs(Fragment));

Fragment = Fragment+NoiseAmp*randn(size(Fragment));

Full_sig = Full_sig+NoiseAmp*randn(size(Full_sig));

% To hear, type soundsc(Fragment,Fs)

plot(Time,Full_sig,[timeA timeB;timeA timeB],[m m;M M],'r--')
xlabel('Time (s)')
ylabel('Noisy')
axis tight

Figure contains an axes object. The axes object with xlabel Time (s), ylabel Noisy contains 3 objects of type line.

El procedimiento encuentra el fragmento que falta pese al nivel de ruido elevado.

[xCorr,lags] = xcorr(Full_sig,Fragment);

plot(lags/Fs,xCorr)
grid
xlabel('Lags (s)')
ylabel('Noisy')
axis tight

Figure contains an axes object. The axes object with xlabel Lags (s), ylabel Noisy contains an object of type line.

[~,I] = max(abs(xCorr));
maxt = lags(I);

Trial = NaN(size(Full_sig));
Trial(maxt+1:maxt+length(Fragment)) = Fragment;

figure
plot(Time,Full_sig,Time,Trial)
xlabel('Time (s)')
ylabel('Noisy')
axis tight

Figure contains an axes object. The axes object with xlabel Time (s), ylabel Noisy contains 2 objects of type line.

Consulte también

Temas relacionados