• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

多通道声源定位方法之GCC-PHAT:原理及matlab实现

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

参考文献下载地址:Microphone_Array_Signal_Processing(中文版+英文版)

远场模型


远场信号可以视为平面波,空气中声速为c,因此两个麦克风之间的相对时延为

在麦克风阵列的物理结构确定的条件下(d已知),我们可以通过对时延进行估计,从而求解出声波的入射角度θ。

自由场信号模型

麦克风的接收信号可以被建模成

其中Vn(k)为加性噪声,Xn(k)为源信号与传递函数卷积的结果

互相关方法(Cross-Correlation,CC)

考虑两个麦克风,可以得到两个观测信号y1(k)和y2(k),它们之间的互相关函数(CCF)为

将(9.5)带入(9.12),计算可得

假设信号和噪声之间是不相关的,噪声和噪声之间也是不相关的,所以上式只有第一项不为零,且当p=τ时互相关函数达到最大。因此我们只需要求出互相关函数,计算峰值位置的偏移量,即为两个麦克风的相对时延。

广义互相关方法(Generalized Cross-correlation, GCC)

在麦克风阵列信号处理实际模型中,由于存在混响和噪声影响,导致CCF的峰值不明显,降低了时延估计的精度。为了锐化CCF的峰值,可以根据信号和噪声的先验知识,在频域内对互功率谱进行加权,从而能抑制噪声和混响干扰。最后进行傅里叶逆变换,得到广义互相关函数(GCCF
广义互相关函数(GCCF)可以理解为滤波后的麦克风信号间的CCF,由于时域的互相关函数与频域的互功率谱是一对傅里叶变换对,因此GCCF可以写为

其中Φ可以看做互频谱,因此GCCF可以看做对互频谱进行频域加权后再进行逆FFT的结果
当频谱加权函数θ(f)=1时,GCC方法退化为CC方法。

GCC-PHAT方法

理想情况下,我们总是希望时域的互相关函数能够尽可能的尖锐,甚至趋近于δ函数;并且我们并不关心互相关函数每一点的幅值大小,我们只关心峰值出现的位置,换句话说我们更关心的是这个δ函数的时移。GCC-PHAT方法所采用的的频域加权函数(相位变换加权函数)如下
这样一来,互频谱的幅值部分被归一,广义频谱实则成为了互频谱的相位谱

将(9.32)带入(9.22),得到的GCC函数是一个δ函数的时移

相位变换加权函数实质上是一个白化滤波器,它相当于将x1,x2两个信号白化成了存在一定时移的白噪声(等效于声源发出白噪声,经过一段距离的传播引入了时移,再被麦克风所接受),因此时域上的GCC变得更加尖锐了。

matlab实现

matlab中也提供了相应的函数包可以调用,tau = gccphat(sig,refsig,fs). 如果想了解代码细节可以参考我的程序,欢迎指正不足之处~代码下载地址:GCC-PHAT算法demo
代码中定义正前方为0度,可以通过更改声源s,混响时间reverberation_time,声波入射角度sita等进行仿真实验。通过对比sita_re与sita的差距,可以分析算法在不同条件下的定位精度。
有如下的初步结论,欢迎讨论:

  1. 阵列物理结构不变,混响强度不变,0度附近的声源定位精度更高;
  2. 阵列物理结构不变,增大混响强度,定位精度变差,这是因为建模之初仅考虑了加性噪声,而混响与信号本身具有很强的相关性,建模时并未考虑这一点;
  3. 混响强度不变,适当增大麦克风间距d,定位精度提高。如:将阵元间距增大至0.2m,500ms混响下依然可以准确定位。这是由于高频信号会发生混叠,阵元间隔增大,截止频率也随之升高,混叠减小。

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap