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.

Buscar una señal en una medición

Recibirá algunos datos y le gustaría saber si coincide con una secuencia más larga que ha medido. La correlación cruzada le permite tomar esa determinación, incluso cuando los datos están dañados por el ruido.

Cargue en el espacio de trabajo una grabación de un anillo girando sobre una mesa. Recorta un fragmento de un segundo y escúchalo.

load(fullfile(matlabroot,'examples','signal','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)

Trazar 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

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

Calcular y trazar la correlación cruzada de la señal completa y el fragmento.

[xCorr,lags] = xcorr(Full_sig,Fragment);  plot(lags/Fs,xCorr) grid xlabel('Lags (s)') ylabel('Clean') axis tight

El retraso en el que la correlación cruzada es mayor es el retardo de tiempo entre los puntos de partida de las señales. Vuelva a trazar 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

Repita el procedimiento, pero agregue el ruido por separado para la señal y el fragmento. El sonido no se puede elegir 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

El procedimiento encuentra el fragmento que falta a pesar del alto nivel de ruido.

[xCorr,lags] = xcorr(Full_sig,Fragment);  plot(lags/Fs,xCorr) grid xlabel('Lags (s)') ylabel('Noisy') axis tight

[~,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

Consulte también

Temas relacionados