赞
踩
1.GCC-PHAT介绍
Generalized Cross Correlation-Phase Transform,GCC-PHAT
广义互相关-相位变换
Notes:
①Generalized adj.笼统的;普遍的;概括性的;全面的
②Cross Correlation 互相关
③Correlation n.相互关系;相关;关联
④Phase n.阶段;时期;月相;相位
⑤Transform v.使改变形态;使改变外观(或性质);变换
2.远场模型
如图所示,s(k)为声音信号位于远场,视为平面波,入射角为θ,两个麦克风y1(k)、y2(l)之间的距离为d。
当我们算出入射角θ时,即可定位出声音信号的位置。
当声源位于近场时,可以估计声源到达传感器的角度,并且能够估计声源与麦克风之间的距离。
但声源位于远场时,可以估计入射角度,但难以确定声源与麦克风阵列的距离。
3.互相关方法
互相关函数,CCF,Cross-Correlation Function
对于两个观测信号y1(k)、y2(k)之间的互相关函数定义为
当p=τ时,τ为相对时延,互相关值达到其最大值
Notes:互相关方法易于实现,但容易受多种因素影响,如信号自相关、混响,另外还有空间混叠。
4.广义互相关方法
广义互相关函数,GCCF,Generalized CCF
与互相关方法相同,但此时两个麦克风之间的TDOA估计可以等效为能够使麦克风输出的滤波信号之间的CCF最大的时间间隔
GCC函数:
广义互频谱:
互频谱:
这个公式实际应该是CC函数的互相关函数傅里叶变换
y信号离散傅里叶变化:
Notes:
①DOA(到达方向估计)
②TDOA(到达时间差)
5.相位变换
相位变换,Phrase Transform ,PHAT
TDOA的估计信息是通过互频谱相位而不是幅度表示的。简单的舍弃幅度而仅保留相位:
理想GCC函数:
6.具体定位实现(matlab)
clc clear close all %加载一段声音(matlab自带敲锣声) load gong; %采样频率 Fs = 8192; %采样周期 dt=1/Fs; %music_src为声源 music_src=y; %设置两个麦克风坐标 mic_d=1; mic_x=[-mic_d mic_d]; mic_y=[0 0]; plot(mic_x,mic_y,'x'); axis([-5 5 -5 5]) hold on; quiver(-5,0,10,0,1,'color','black'); quiver(0,-5,0,10,1,'color','black'); %声源位置 s_x=10; s_y=10; plot(s_x,s_y,'o'); quiver(s_x,s_y,-s_x-mic_d,-s_y,1); quiver(s_x,s_y,-s_x+mic_d,-s_y,1); %求出距离 dis_s1=sqrt((mic_x(1)-s_x).^2+(mic_y(1)-s_y).^2); dis_s2=sqrt((mic_x(2)-s_x).^2+(mic_y(2)-s_y).^2); c=340; delay=abs((dis_s1-dis_s2)./340); %设置延时 music_delay = delayseq(music_src,delay,Fs); figure(2); subplot(211); plot(music_src); axis([0 length(music_src) -2 2]); subplot(212); plot(music_delay); axis([0 length(music_delay) -2 2]); %gccphat算法,matlab自带 [tau,R,lag] = gccphat(music_delay,music_src,Fs); disp(tau); figure(3); t=1:length(tau); plot(lag,real(R(:,1))); %cc算法 [rcc,lag]=xcorr(music_delay,music_src); figure(4); plot(lag/Fs,rcc); [M,I] = max(abs(rcc)); lagDiff = lag(I); timeDiff = lagDiff/Fs; disp(timeDiff); %gcc+phat算法,根据公式写 RGCC=fft(rcc); rgcc=ifft(RGCC*1./abs(RGCC)); figure(5); plot(lag/Fs,rgcc); [M,I] = max(abs(rgcc)); lagDiff = lag(I); timeDiff = lagDiff/Fs; disp(timeDiff); %计算角度,这里假设为平面波 dis_r=tau*c; angel=acos(tau*c./(mic_d*2))*180/pi; if dis_s1<dis_s2 angel=180-angel; end disp(angel);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。