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.

Encuentre una señal en una medición

Recibirá algunos datos y le gustaría saber si coincide con una secuencia más larga que haya medido. La correlación cruzada le permite hacer 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)

Trace la señal y el fragmento. Resalte los puntos finales de 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

Calcule y trace 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 desfase en el que la correlación cruzada es mayor es el retardo de tiempo entre los puntos de partida de las señales. Replot 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 ruido por separado para señalar y fragmentar. El sonido no puede ser recogido 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