exponenta event banner

Найти сигнал в измерении

Вы получаете некоторые данные и хотите знать, соответствует ли они измеренному более длинному потоку. Перекрестная корреляция позволяет сделать такое определение, даже когда данные повреждены шумом.

Загрузите в рабочее пространство запись кольца, вращающегося на столешнице. Обрезать фрагмент на одну секунду и слушать его.

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)

Постройте график сигнала и фрагмента. Выделите конечные точки фрагмента для ссылки.

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

Figure contains an axes. The axes contains 3 objects of type line.

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

Figure contains an axes. The axes with title Fragment contains an object of type line.

Вычислите и постройте график взаимной корреляции полного сигнала и фрагмента.

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

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

Figure contains an axes. The axes 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;

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

Figure contains an axes. The axes contains 2 objects of type line.

Повторите процедуру, но добавьте шум отдельно к сигналу и фрагменту. Звук не может быть выделен из шума.

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. The axes contains 3 objects of type line.

Процедура находит отсутствующий фрагмент, несмотря на высокий уровень шума.

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

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

Figure contains an axes. The axes 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. The axes contains 2 objects of type line.

См. также

Связанные темы