当前位置:   article > 正文

基于广义二次互相关的信号时延估计算法_广义互相关时延估计的优点

广义互相关时延估计的优点

前言

       广义互相关(Generalized Cross Correlation,GCC)利用权函数有效提高了信号时延估计精度,但是抗噪声性能有限,当信噪比较低时,算法性能急剧下降。针对这一问题,广义二次互相关得到了广泛应用,本文将对这一算法的原理以及代码实现进行总结。

广义二次互相关

       信号时延模型以及一次互相关算法可以参考我的另一篇文章:信号时延估计算法—Gcc-Phat原理及实现

       所谓二次互相关,顾名思义,即做两次互相关运算。具体表现为:先对信号进行自相关和互相关运算,然后利用得到的自相关和互相关函数,再进行一次互相关运算,以提高信号抗噪声鲁棒性。

       针对如下两个信号:

x_1 (t)=s(t)+n_1 (t)

x2(t)=s(tτ12)+n2(t)

       首先对x1(t)作自相关以及对x1(t)x_2 (t)作互相关。

Rx1x1=E{x1(t)x1(tτ)}

R_{x1x2}=E\left \{ x_1(t)x_2(t-\tau)\right \} 

       根据噪声假设为零均值的高斯噪声且与信号互不相关,可推得

Rx1x1=Rss(τ)

以及

Rx1x2=Rss(ττ12)

        然后再对这两个相关函数作互相关

RRx1x1Rx1x2=E{Rx1x1(t)Rx1x2(tτ)}

        最终得到

RRx1x1Rx1x2=RRs(ττ12)

        同样由互相关函数性质可知,当\tau =\tau _{12}时,RRx1x1Rx1x2取最大值,即两个麦克风之间的时延。再加上合适的权函数,即可实现广义二次互相关算法。

        流程可总结如下:

  算法实现

        基于上述理论,本文在频域实现广义二次互相关算法,仅供参考。

        输入:信号x1、x2,采样频率fs,信号长度N

        输出:信号x1、x2的时延

  1. function delay = Gqcc(x1,x2,fs,N)
  2. % 自相关
  3. x1dft = fft(x1);
  4. Gx1x1 = x1dft.*conj(x1dft);
  5. % 互相关
  6. x2dft = fft(x2);
  7. Gx1x2 = x1dft.*conj(x2dft);
  8. % 二次互相关
  9. G = Gx1x1.*conj(Gx1x2);
  10. % ROTH加权
  11. w = 1./Gx1x1;
  12. Gw = G.*w;
  13. R12 = ifft(Gw);
  14. R12_shift = fftshift(R12);
  15. [~, idx] = max(abs(R12_shift));
  16. sIndex = -N/2 : N/2-1;
  17. delay = -sIndex(idx)/fs;

测试验证

       接下来仿真生成两个存在时延的信号,并使用上述函数进行时延估计

  1. load gong;
  2. N = numel(y);
  3. tau = 1;
  4. x = delayseq(y,tau,Fs);
  5. delay = Gqcc(x,y,Fs,N);
  6. >> delay = 1

输出估计时延与理论值一致,验证了编写算法的正确性。

算法性能对比

       前面提到二次互相关能够提升抗噪声性能,下面将其与一次互相关算法进行对比。

       同样使用上述两个信号,在信号x中加入白噪声。然后进行1000次蒙特卡洛对比这两种算法,结果如下图:

       显然,由于噪声较大,一次互相关算法的性能急剧下降,而二次互相关的估计精度依然较高,验证了该算法的抗噪声性能。

结语

       感兴趣的可以继续深入探索互相关算法在实际应用中的性能,也欢迎与我私信交流。

总结不易,点个赞吧(●'◡'●)

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号