用于查找信号之间延迟的xcorr与finddelay

时间:2014-11-23 11:39:43

标签: matlab cross-correlation

使用函数finddelay(pulse1,pulse2)计算here所示的两个脉冲之间的时间延迟,得到8.73纳秒的正确值。但是当我使用xcorr(pulse1,pulse2)时,结果大约是11.2纳秒......我在这里做错了什么?

xcorr:

r=xcorr(pulse1,pulse2); 
[a,b]=max(r);
delay=20/4096*b;

here's互相关的图

finddelay:

delay=finddelay(v1,v2);
t=20/4096*delay;

在第一种情况下,延迟= 2308,在第二种情况下延迟= 1788

2 个答案:

答案 0 :(得分:0)

在您的问题中,您没有提及采样频率,因为finddelayxcorr将为您提供样本数量的延迟。

检查此示例,

Fs = 100;
L  = 1000;
t = (-L / 2 : 1 : L / 2) / Fs;
y1 = sinc(t);
y2 = sinc(t - 1);
plot(t,y1,'b'); hold on;
plot(t,y2,'m');
d1 = finddelay(y1,y2) / Fs;
[c,lags]=xcorr(y1,y2);
d2 = -(lags(c == max(c))) / Fs;  % minus is for nature of xcorr

enter image description here

d1d2的答案均为1

答案 1 :(得分:0)

正如上面的答案所暗示的,你的错误是你使用xcorr。您需要同时询问“c”值和“滞后”:

[c,lags]=xcorr(pulse1,pulse2);  %do the cross-correlation
[max_c,I]=max(x);  %find the best correlation
delay = lags(I);  %here is the delay in samples