广义互相关
内容目录

关于互相关的基础信息请参考文末链接

互相关

信号r1和r2
$r_1(t) = s(t)+n_1(t)$
$r_2(t) = s(t-D)+n_2(t)$
其中$s(t)$是声音信号,$n_1(t),n_2(t)$是两个声音传感器检测的噪声,$D$是两个声音信号在两个麦克风传感器上的到达时间差

 通常假设声音信号 $s(t),n_1(t),n_2(t)$ 是广义稳定随机过程且三者之间不相关,可以用互相关来得到该时间延迟

$$R_{1,2}(\tau) = E{r_1(t)\cdot r_2(t+\tau)}$$

$$\hat{D} = \tau{\text{argmax}} R{1,2}(\tau)$$

  • $R_{1,2}(\tau)$ 表示信号 $r_1(t)$ 和 $r_2(t)$ 之间的互相关函数,它是在时延 $\tau$ 的情况下两个信号的乘积的期望值。
  • $r_1(t)$ 和 $r_2(t)$ 分别是两个信号的波形,$\tau$ 是我们要估计的时延。
  • $E$ 表示期望值,即对时域上的所有可能的时刻进行平均。
  • $D^{\hat{}}$ 表示估计出的时延,它是使广义互相关函数 $R_{1,2}(\tau)$ 达到最大值的时延值。
  • $\arg\max{\tau}$ 表示找到使 $R{1,2}(\tau)$ 达到最大值的时延值 $\tau$。
    换句话说,我们首先计算两个信号之间的互相关函数 $R_{1,2}(\tau)$,然后找到使其取得最大值的时延值 $\tau$,这个时延值就是我们要估计的信号之间的时延。

广义互相关

在互相关的基础上进行进一步处理,以增强鲁棒性
表现为,通过一系列操作使互相关函数的峰值更为陡峭

Pasted image 20240321165009

代码

def Gcc_Phat(signal1, signal2):  
    # 求两个信号的互功率谱  
    signal1_fft = np.fft.fft(signal1)  
    signal2_fft = np.fft.fft(signal2)  
    cross_power_spectrum = signal1_fft * np.conj(signal2_fft)  

    # 给互功率谱加权(PHAT)  
    phat_weight = 1 / np.abs(cross_power_spectrum)  
    weight_cross_power_spectrum = cross_power_spectrum * phat_weight  

    # 通过逆傅里叶获得互相关函数  
    c12 = np.fft.ifft(weight_cross_power_spectrum).real  # 仅保留实部  

    index = np.argmax(c12[1:])  
    return index
import numpy as np  

def Gcc_Phat(signal1, signal2):  
    # 求两个信号的互功率谱  
    signal1_fft = np.fft.fft(signal1)  
    signal2_fft = np.fft.fft(signal2)  
    cross_power_spectrum = signal1_fft * np.conj(signal2_fft)  

    # 给互功率谱加权(PHAT)  
    phat_weight = 1 / np.abs(cross_power_spectrum)  
    weight_cross_power_spectrum = cross_power_spectrum * phat_weight  

    # 通过逆傅里叶获得互相关函数  
    c12 = np.fft.ifft(weight_cross_power_spectrum).real  # 仅保留实部  
    c12 = np.fft.fftshift(c12)  

    index = np.argmax(c12)  
    shifted_indices = np.arange(-len(c12) // 2, len(c12) // 2)  
    number = shifted_indices[index] + len(signal2)  

    return number

返回最大互相关索引
比np.correlate要快一个数量级,且准确度比np.correlate高

参考

信号之间的时延估计(续) | Xiaoli's Blog (xiaoli1368.github.io)
广义互相关计算TDOA_广义互相关算法-CSDN博客
音视频开发(40)---麦克风阵列声源定位 GCC-PHAT-CSDN博客
信号时延估计算法—Gcc-Phat原理及实现-CSDN博客

上一篇