Ну, йода дал хороший ответ, но я все равно упомянул об этом на всякий случай. Возвращаясь к определению дискретной взаимной корреляции, вы можете вычислить ее, не используя (слишком много) встроенных функций Matlab (что должно быть тем, что Matlab делает с xcorr
). Конечно, есть место для улучшения, поскольку я не пытался векторизовать это:
n=1000;
x1=rand(n,1);
x2=rand(n,1);
xc=zeros(2*n-1,1);
for i=1:2*n-1
if(i>n)
j1=1;
k1=2*n-i;
j2=i-n+1;
k2=n;
else
j1=n-i+1;
k1=n;
j2=1;
k2=i;
end
xc(i)=sum(conj(x1(j1:k1)).*x2(j2:k2));
end
xc=flipud(xc);
Что соответствует результату функции xcorr
.
ОБНОВЛЕНИЕ: забыл упомянуть, что, на мой взгляд, Matlab не является подходящим инструментом для проведения кросс-корреляции в реальном времени больших наборов данных, я бы лучше попробовал его на C или других скомпилированных языках.