我正在尝试编写一个代码,用于将发送信号与接收信号进行交叉关联,以确定采样延迟的数量

时间:2011-10-16 23:10:53

标签: matlab signal-processing cross-correlation

互相关用于通过发射a来测量到飞机的距离 已知的宽带信号并将发射信号与输入信号相关联 通过雷达接待盘接收

发射信号x(n)的长度为N = 512,而接收信号y(n)的长度为N = 2048。

Y(N)= KX(N-d)+ W(N);其中'kx(n-d)'是x(n)延迟d个采样并衰减因子k,w(n)是接收噪声。

我正在尝试编写一个MATLAB程序,将x(n)与y(n)进行交叉关联,以确定d的值,即样本延迟的数量。 并且如果到飞机的距离是确定合适的采样频率 确定在50公里范围内,精度为50米,鉴于传输 接收到的数据正以光速传播。

4 个答案:

答案 0 :(得分:4)

最简单的方法是使用“xcorr”功能。这是matlab的信号处理工具箱的一部分,但应该可用于GNU Octave here。我没有检查八度音阶脚本是否完全兼容MATLAB。

您可以将xcorr功能用作:

[correlation,lags] = xcorr(x,y);

可以使用

找到滞后值
delay = lags(find(correlation==max(correlation)))

在光速下,信号将以3 x 10 ^ 8 m / s的速度传播,因此要获得50 m的分辨率,您应该至少采样(3e8 / 50m)= 6MHz。在此采样率下,每个延迟将为1/6000000秒。如果将延迟乘以此值,则可获得信号传输和接收之间的总时间间隔。将此时间间隔乘以光速以获得距离。

答案 1 :(得分:3)

您可以使用广义互相关 - 相变变GCC PHAT 以下是它的MATLAB代码

function time=GCCPHAT_testmode(b1,b2)

b1f=fft(b1);

b2f=fft(b2);

b2fc=conj(b2f);

neuma=(b1f).*(b2fc);

deno=abs((b1f).*(b2fc));

GPHAT=neuma./deno;

GPHATi=ifft(GPHAT);

[maxval ind]= max(GPHATi);

samp=ind

end

答案 2 :(得分:3)

我们可以忽略matlab中的'find'函数,命令可以改为

delay = lags(correlation==max(correlation))

'xcorr'适合长度较长的矢量;
'gcc'逐帧优先。

答案 3 :(得分:2)

上面的Aj463评论很好,实际上GCC-PHAT比估计宽带信号延迟的非加权相关性更好。

我建议对上面发布的代码进行一些小改进:在分母中添加一个小值epsilon,epsilon - > 0,以避免最终被零除。

因此,我会更改行

deno=abs((b1f).*(b2fc));

deno=abs((b1f).*(b2fc)) + epsilon;