Образцы по образцам кросс-корреляции (Xcorr) matlab - PullRequest
0 голосов
/ 07 сентября 2011

Я использую функцию xcorr для определения сходства сигналов.Ниже приведен код,

r1 = max(abs(xcorr(S1, shat1,'coeff')));
r2 = max(abs(xcorr(S1,shat2,'coeff')));
if r1>r2
dn=shat2; 
else
dn=shat1; 
end

Он работал отлично.Но проблема в том, что сигналы имеют 40000 отсчетов каждый.Практически я получаю много задержек.Я должен отправить кучу сэмплов (например, 250 сэмплов) в xcorr, чтобы избавиться от задержки.Но как мне это сделать?Я знаю, что должен использовать цикл for, но мне было трудно это сделать.Может кто-нибудь подсказать мне, как мне это сделать. Я попробовал что-то вроде этого

for i=1:250:40000
r1 = max(abs(xcorr(S1(:,i), shat1(:,i),'coeff')));

, но полностью потерялКто-нибудь подскажет что-нибудь, пожалуйста ....

1 Ответ

2 голосов
/ 07 сентября 2011

Если я вас правильно понял, вы хотите взаимно коррелировать блок из 250 выборок, один за другим.Адаптируясь с вашей попытки, попробуйте

for i=1:250:40000
 r1 = max(abs(xcorr(S1(i:i+249), shat1(i:i+249),'coeff')));
end

В качестве примечания, знаете ли вы что-нибудь о максимальной задержке между вашими сигналами?Если вы можете с уверенностью предположить, что временной сдвиг между вашими сигналами меньше 250 (что предполагает идея разделения его на интервалы), вы можете сэкономить время вычислений, изменив исходный код с помощью maxlags, параметра для xcorr:

maxlags=250; %# or some other reasonable value, maybe even 100? 50?
r1 = max(abs(xcorr(S1, shat1,maxlags, 'coeff')));
r2 = max(abs(xcorr(S1, shat2,maxlags, 'coeff')));
...

Я не проверял, как быстро это будет, но я думаю, что вы могли бы избежать этой петли вместе с этим ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...