基于某四元十字阵的声源定位终期报告材料.doc
word一、实验要求 设计要求一设计要求 设计微弱声源定位系统,要求: 1 声源功率尽量小; 2 写出数学模型,说明详细算法; (3) 能够现场演示。评分依据1 功能实现;2 性能指标;3 工程规软件规、可靠性等;4 理论水平;5 团队分工合作情况。在确定了项目小组之后,我们组的组员一起讨论了该如何实现这个微弱声源定位系统并进展了分工,经过我们的讨论之后,我们大致把项目设计分为如下几个过程: 1搞懂设计方案的原理,利用所学知识以与上网查找资料, 初步确定设计的方向。 2 分析这个项目的功能要求,一起讨论并编写代码。 3利用代码使用MATLAB进展实验,对一些地方进展修改加工。 4进展最后的调整,然后纂写报告。 二、实验原理1 概述本实验采用的环境为Matlab,核心算法为四元十字算法。声源定位根本原理是将传声器在空间布置成一定几何形状的阵列,以接收目标噪声的声场信息,通过检测或计算各传声器所测得的信号的时延来确定目标的位置。对于无方向性传声器,各个传声器接收到同一声源的信号先后,反映了声源所在传声器连线的方向和距离。 声学阵列的设计在被动声定位中具有十分重要的意义。采用的传声器阵列可分为线阵、面阵和立体阵。对于固定式阵列,线阵由于其轴对称性,故在定位时会造成空间模糊。立体阵可以对整个空间进展定位,但其算法要复杂的多。面阵可以在整个平面对目标进展定位,也可以对阵列所在平面为界的半个空间进展定位。一般要对目标进展定位,至少需要四个阵元组成的声传感器阵列。由于十字形阵列具有分维持性(指二维参量可分开估计),且阵列冗余度也较小,因此,平面十字阵是较为适宜的阵形。 平面四元十字阵进展分析。 对十字形声传感器阵列,可建立如图3.1.1所示的直角坐标系。四个阵元的坐标分别为S1 (D /2,0,0) , S2(0, D / 2,0) , S3 (-D / 2,0,0) , S4 (0,-D / 2,0),设目标声源的直角坐标为(x, y, z)、球坐标为(r, , ),即目标到坐标原点的距离为r,方位角为,俯仰角为 ,D为十字阵对角线阵元之间的距离 。 假设目标为点声源,目标产生的声源以球面波形式传播,声源到达阵元S1的传播时间为t1,相对于S1声源到达阵元S2 , S3 , S4的时延分别为 12, 13 ,14。目标到坐标原点的距离为r,俯仰角为(0<=<=90),方位角为(0<=<=90)与时延 12, 13 , 14与阵元间距D的关系式可推导如下:(设C为声速)球坐标和直角坐标之间的互化 。如式:求解方程式,消去x,y,z可得出目标距离,方位角和俯仰角,得出结果。 3. 时延估计常用的时延估计方法有广义互相关法(Gcc )、互功率谱相位法(csP )、自适应滤波法和参量模型法等多种方法,广义相互函数法、互功率谱相位法、自适应滤波法和参量模型法等几种方法中,互功率谱相位法由于目标信号频率较低,实时性要求高,最小二乘拟合次数不能太高,故估计精度一般不高。自适应滤波法运算速度快,但点声源干扰对其估计精度影响较大。广义互相关法具有较好的综合性能,它是目前人们关注较多的时延估计方法。广义互相关法(GCC) 互相关,顾名思义是通过求两路信号的互相关来估计时延D 。 x1 (t) , x2 (t)互相关函数为: 由式(4. 1. 3)可知,x1(t) , x2(t)互相关函数取最大值时,Rss( - D)也取最大值,又因为Rss(-D) < =Rss(0),所有取得最大值的时候的即为时延D. 由于观察时间受限,所以求得的互相关只是一个估计值,记为Rx1x2()在各态历经的过程中,定义为:4. 定位算法5. 伪随机白噪声产生仿真过程中要人为的参加噪声干扰,以模拟目标的运动噪声和观测噪声。在仿真中参加的噪声一般为高斯随机白噪声。其产生方法有三种:第一种利用专门的随机数表:第二种利用物理装置产生随机噪声;第三种利用计算机通过数学方法获得,即运用专门的程序产生伪随机噪声。前面两种由于其固有的缺陷而降低了其使用价值,后一种由于其灵活方便,在计算机仿真中被广泛应用(s。严格说来计算机生成的随机数显然不是真正的随机数,因为它生成的方式是完全确定的,所以常把这种随机数称为伪随机数。一般伪随机数个数远小于它的周期长度,可以当作随机数来使用。在matlab中可以直接用命令来产生伪随机白噪声。 三、代码展示clearfs=10000;%频率t=0:1/fs:4-1/fs;din,fs,nbits=wavread('ao');% 载入音频数据音频,采样频率,采样精度转换成变量R=100;%球坐标:声源位置Fi=30;%声源方位角Sita=45;%声源俯仰角fi=Fi/90*pi/2;%换成小数sita=Sita/90*pi/2;%换成小数D=20;C=340;%声速mx=R*sin(sita)*cos(fi);%球坐标与直角坐标:转化声源x坐标my=R*sin(sita)*sin(fi);%声源y坐标mz=R*cos(sita);%声源z坐标mr1=sqrt(mx-D/2)2+my2+mz2);%与麦克风1的距离md12=sqrt(mx2+(my-D/2)2+mz2)-mr1;%与麦克风1,2的距离之差md13=sqrt(mx+D/2)2+my2+mz2)-mr1;%与麦克风1,3的距离之差md14=sqrt(mx2+(my+D/2)2+mz2)-mr1;%与麦克风1,4的距离之差mt12=md12/C;%1,2时间差mt13=md13/C;%1,3时间差mt14=md14/C;%1,4时间差md=round(fs*mt12 mt13 mt14);%取整%md=(fs*mt12 mt13 mt14);dmax=max(md);%返回最大值%*互相关法延时估计*8x1=din(2*dmax:fs+2*dmax-1);%将信号截取x2=din(2*dmax-md(1):fs+2*dmax-md(1)-1);x3=din(2*dmax-md(2):fs+2*dmax-md(2)-1);x4=din(2*dmax-md(3):fs+2*dmax-md(3)-1); sx=size(x1);%当a是一个n维行向量时,sizex1把其当成一个1×44100的矩阵,因此sizea的结果是44100tx=1:sx(2);y1=awgn(x1,10,'measured');%在某一信号中参加高斯白噪声 'measured',函数将在参加噪声之前测定信号强度。 y2=awgn(x2,10,'measured');% 所谓高斯白噪声中的高斯是指概率分布是正态函数,而白噪声是指它的二阶矩不相关,一阶矩为常数,是指先后信号在时间上的相关性。y3=awgn(x3,10,'measured');%这是考察一个信号的两个不同方面的问题。高斯白噪声:如果一个噪声,它的幅度服从高斯分布,而它的功率谱密度又是均匀分布的,如此称它为高斯白噪声。热噪声和散粒噪声是高斯白噪声。y4=awgn(x4,10,'measured'); cor12=xcorr(y1,y2);%xcorr是来估计随机过程中的互相关序列max120,id120=max(cor12);%找出cor12的最大值以与对应的时间点 d120=sx(2)-id120;%计算与中心点相差的样点数 t120=d120/fs;%计算与中心点相差的样点数对应的时间即为时延 cor13=xcorr(y1,y3);%在Matalb中,求解xcorr的过程事实上是利用Fourier变换中的卷积定理进展的,即R(u)=ifft(fft(f)×fft(g),其中×表示乘法注:此公式仅表示形式计算,并非实际计算所用的公式 max130,id130=max(cor13); d130=sx(2)-id130; t130=d130/fs; cor14=xcorr(y1,y4); max140,id140=max(cor14); d140=sx(2)-id140; t140=d140/fs; %*估计目标位置* gR=C/2*(t1202+t1402-t1302)/(t130-t120-t140);%估算与原点距离 gfi=atan(t140-t120)/t130);%估算方位角 gsita=asin(C/D*sqrt(t120-t140)2+t1302);%估算俯仰角 Gfi=gfi*180/pi;%估算方位角 Gsita=gsita*180/pi;%估算俯仰角 Mx=gR*sin(gsita)*cos(gfi);My=gR*sin(gsita)*sin(gfi);Mz=gR*cos(gsita); disp(''); disp('原目标位置距离,方位角,俯仰角:'); disp(R,Fi,Sita); disp('估算的目标位置距离,方位角,俯仰角:'); disp(gR,Gfi,Gsita); t=0:0.1:100; point1=mx,my,mz; point2=Mx,My,Mz;figure(1)plot3(10,0,0,'-pentagram','markersize',8);%传感器hold on;plot3(0,10,0,'-pentagram','markersize',8);%传感器hold on;plot3(-10,0,0,'-pentagram','markersize',8);%传感器hold on;plot3(0,-10,0,'-pentagram','markersize',8);%传感器hold on;plot3(point1(:,1),point1(:,2),point1(:,3),'r*');%信号源hold on;plot3(point2(:,1),point2(:,2),point2(:,3),'k*');%估计目标hold on;legend('传感器1','传感器2','传感器3','传感器4','信号源','信号源位置估计值');grid on;四、模拟图例五 、制作体会1、遇到的困难当我们拿到题目的时候,我们的第一想法就是用多个麦克风放在不同地方来承受声音,然后根据每个麦克风承受到的信息所用的时间的不算出到每个麦克风的距离,然后再经过计算来确定声源位置。经过我们小组所有人的查询,以与讨论决定用四元十字阵的方法来定位,即用四个麦克风呈矩形放置来定位。于是我们在网上搜索加上自己的一些想法,初步写出了一个matlab的代码,运行时发现许多语法错误,在小组的的讨论以与请教别人的情况下,最终改好了代码,但是当我们运行的时候我们发现我们需要四个麦克风但是我们没有,而且每台笔记本如果不加特殊的设备的话最多装一个或者两个麦克风根据电脑的不同,这就需要两台笔记本以上。但是如果用两台以上笔记本,就会没法使两台同时打开麦克风。然后就会产生很大的差距。肯定无法准确的定位。同时我们也听到其他小组类似的想法,但在实现过程中,麦克风接收信号有一些时间误差,加上噪音的影响,使定位很不准确。于是经过讨论。我们小组觉得声速太快但距离短有一点时间误差的话就会产生很大的偏离,用现实定位肯定有很大的差距。于是我们就想用模拟位置来定位,输入一段语音,然后再模拟一个声源,然后再运行我们的算法,来测试声源与传感器的距离,方位角,俯仰角。然后在matlab中模拟出传感器,声源,声源预估的位置。有了想法就开始行动,经过多方面的查询以与小组讨论,最终编写了一份music算法的代码,根本实现了功能2、制作感受 在完成项目的过程中最大的感受就是课堂上的理论可能看起来并不是很难,但是要想活学活用却还有很长的路要走。在实际的项目制作中要严谨,一个细节的出错都可能会造成不可预估的错误,而且还会给实验带来很大的难度。在设计项目的时候我们在保证严谨的同时还要有足够的自信,相信自己的判断力,当然这要是在有理论支撑的根底上的。我们要敢于尝试,敢于编写代码,计算公式,代码,得出的效果都从测试中得来。遇到困难的时候要敢于不断尝试,有足够的耐心去寻找错误,适当的时候还可以寻求教师同学的帮助。这些经验我们要在以后的项目制作中多加利用。 相比上个学期的课程项目,我们遭遇到了更多的麻烦,但同样是这一次考验,让我们从中得到了磨练,增长的知识。知识是学不完的,能力是不断增长的,在团队的共同努力下,成长、收获,势在必得。单单掌握理论的知识是完完全全不够用的,到了社会中,也许学到的理论知识只用上了一小局部,可实践知识、技能却画上了大大的需求符号。只有理论与实践结合,才是一个完整的工科学生。11 / 11