首页 > 行业资讯 > 【定位问题】基于CC和GCC算法实现近场声源定位TDOA问题附matlab代码

【定位问题】基于CC和GCC算法实现近场声源定位TDOA问题附matlab代码

时间:2022-04-28 来源: 浏览:

【定位问题】基于CC和GCC算法实现近场声源定位TDOA问题附matlab代码

天天Matlab 天天Matlab
天天Matlab

TT_Matlab

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,完整matlab代码或者程序定制加qq1575304183。

收录于合集

1 简介

声源定位是许多领域里的一个基本问题.声源定位技术的研究一直是个研究热点,涉及到很多技术领域,如声学,信号检测,数字信号处理等,有着广阔的应用前景.目前,该技术在仿人智能机器人上的应用还不是很多.而其作为一种重要的人机交互方式,能够与视觉交互完美结合,弥补其不足. 通过对各种声源定位技术的研究和比较,基于到达时延差(TDOA,Timedelay of arrival)的声源定位技术比较适用.该技术方法的原理不是很复杂,无需很大的计算量,而且实现这种技术的困难较小.对这种技术的研究目前也比较成熟,有着大量的应用.因而对于本课题的研究而言,是一种不错的选择.使用TDOA技术,需要完成两个阶段的工作:前一阶段运用时延估计算法估算出声源信号到达各个麦克风之间的TDOA值,即时间差;第二阶段根据得到的TDOA值,结合阵列几何结构关系和空间位置关系,使用空间定位方法来估算声源的位置.能否得到高精度的TDOA值对整个过程的正确完成相当重要.传统的GCC算法就是该技术中的一种比较经典的方法.该方法能够快速有效的对声源进行定位。

2 部分代码

clc clear all close all %% % *各参数设置* %--声源相关参数 fmin=500; fmax=2000; %Hz: 信源为一频率渐变的余弦信号,最低频率fmin,最高频率fmax S_last=0.1; %s :声源持续时间 %--采样和信号处理相关参数 fs=3e6; %采样率 ts=1/fs; %采样间隔 T=0.12; %s: 搜集数据T秒,计算一次位置 tMic=0:1/fs:T-1/fs; %接收数据时间 nMic=length(tMic); %接收数据长度 %--物理参数设置 v=34000; %cm/s: 音速 %--声源和MIC位置 单位CM d=30; %麦克风间距 Lco_S = [10,10]; Loc_A = [50-d,0]; Loc_B = [50,0]; Loc_C = [50+d,0]; %% % *模拟声源信号及各MIC接收到的信号* %--产生声源 t = 0:ts:S_last; %假设声波持续时间0.2秒 s = chirp(t,fmin,S_last,fmax,’linear’);%源信号, 频率线性递增的余弦信号 nsource=length(s); %--画出声源的波形 figure(); plot(s); xlabel(’时间/itus’); ylabel(’振幅’); title(’声音信号’); %--计算信源传到各MIC之间的延迟点数 diff_SA = sqrt(sum((Lco_S-Loc_A).^2))/v/ts; diff_SB = sqrt(sum((Lco_S-Loc_B).^2))/v/ts; diff_SC = sqrt(sum((Lco_S-Loc_C).^2))/v/ts; %--计算信源与个MIC之间的距离 dis_SA = sqrt(sum((Lco_S-Loc_A).^2)); dis_SB = sqrt(sum((Lco_S-Loc_B).^2)); dis_SC = sqrt(sum((Lco_S-Loc_C).^2)); %--信源到MIC的时间延迟 dis_AC=dis_SA-dis_SC; dis_BC=dis_SB-dis_SC; Lag_SA = dis_SA/v; Lag_SB = dis_SB/v; Lag_SC = dis_SC/v; %--转化成相差点数 diff_AC =round((Lag_SA-Lag_SC)/ts); diff_BC =round((Lag_SB-Lag_SC)/ts); %--MIC接收到的数据 sigMicA=zeros(1,nMic); sigMicB=zeros(1,nMic); sigMicC=zeros(1,nMic); sigMicA(1+diff_SA:nsource+diff_SA)=s; sigMicB(1+diff_SB:nsource+diff_SB)=s; sigMicC(1+diff_SC:nsource+diff_SC)=s; %--信号时域图 figure();subplot(3,1,1); plot(sigMicA); subplot(3,1,2); plot(sigMicB); subplot(3,1,3); plot(sigMicC); %% % *用GCC(Generalized Cross-Correlation) Phase Transform 算法估计时延差* if(DelayDifferAC<5000) distDiffAC=(DelayDifferAC-1)/fs*v; else distDiffAC=(DelayDifferAC-nMic-1)/fs*v; end A=distDiffBC; B=distDiffAC; M=4*A^3-B^3+6*A*B^2-10*A^2*B+4*d^2*A-2*d^2*B; N=-8*A^2-2*B^2+8*A*B; r3=M/N; M1=4*A^3-B^3+4*A*B^2-6*A^2*B+2*d^2*B-4*d^2*A; N1=8*A^2+2*B^2-8*A*B; r2=M1/N1; cos=(r3^2+d^2-r2^2)/(2*d*r3); sin=sqrt(1-cos^2); a=(50-d)+r3*cos;

3 仿真结果

4 参考文献

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

版权:如无特殊注明,文章转载自网络,侵权请联系cnmhg168#163.com删除!文件均为网友上传,仅供研究和学习使用,务必24小时内删除。
相关推荐