我有两个传感器分开一段距离,接收来自信号源的信号。纯净形式的信号是频率为17kHz的正弦波。我想估计两个传感器之间的TDOA。我正在使用互相关,下面是我的代码
x1; % signal as recieved by sensor1
x2; % signal as recieved by sensor2
len = length(x1);
nfft = 2^nextpow2(2*len-1);
X1 = fft(x1);
X2 = fft(x2);
X = X1.*conj(X2);
m = ifft(X);
r = [m(end-len+1) m(1:len)];
[a,i] = max(r);
td = i - length(r)/2;
我通过去除低于17kHz的所有频率来过滤我的信号x1和x2。 我对上面的代码有两个问题: 1.传感器和光源位于同一位置,每次都会得到不同的'td'值。我不确定是什么问题。是因为噪音吗?如果是这样,请有人提供解决方案吗?我已经阅读了很多论文,并在stackoverflow上经历了其他问题,所以请用代码和理论回答,而不仅仅是陈述理论。 2.'td'的值有时与使用xcorr计算的延迟不匹配。我究竟做错了什么?下面是我使用xcorr
的td代码[xc,lags] = xcorr(x1,x2);
[m,i] = max(xc);
td = lags(i);
答案 0 :(得分:2)
您可能遇到的一个问题是您只使用一个频率。在f = 17 kHz
和估计的声速v = 340 m/s
(我假设您使用超声),波长为lambda = v / f = 2 cm
。这意味着您的长度测量的明确范围为2厘米(抱歉,无法找到一个好的链接,谷歌自己)。这意味着您需要知道距离超过2厘米,然后才能使用测量结果来改善距离。
以另一种方式考虑它:当在两个完美正弦之间进行互相关时,结果应该是间距等于波长的峰的“梳状”。如果它们完全重叠,并且您将一个信号移位一个波长,它们仍然完美重叠。这意味着您首先必须知道哪些峰值是正确的峰值,否则每次纯粹由随机噪声产生的峰值可能最高。 在尝试盲目找到最大值之前,您是否制作了计算出的互相关图?
此问题与干涉测量法相同,通过测量相位差可以很容易地测量小于波长的分辨率的小距离变化,但您不知道绝对距离,因为你不知道绝对阶段。
解决方法实际上很简单:让您的信号源生成更多频率。在计算互相关时,即使使用(带限)白噪声也应该没有问题,并且它消除了模糊问题。您应该将白噪声看作是正弦的集合。它们中的每一个的互相关将产生梳子,但具有不同的间距。将所有这些梳子加在一起时,它们会在您要查找的延迟时间内仅在一个点上显着累加!
答案 1 :(得分:0)
白噪声,最大长度频率或其他非周期性信号应用作使用交叉相关的时间延迟测量的测试信号。这是因为非周期性信号仅具有一个互相关峰值,并且不存在确定时间延迟的模糊性。可以使用突发类型的周期性信号来完成工作,但SNR会降低。如果必须使用连续周期信号作为测试信号,则只能测量周期性测试信号的一个周期内的时间延迟。这可以解释为什么,在您的情况下,使用较低频率的正弦波作为测试信号工作,而使用较高频率的正弦波则不然。这些视频演示了这些内容:https://youtu.be/L6YJqhbsuFY,https://youtu.be/7u1nSD0RlwY。