声源定位和GPS模拟实验报告-推荐下载

  • 格式:pdf
  • 大小:1.85 MB
  • 文档页数:9

声源定位和GPS模拟实验报告一.实验原理1.声源定位(二维)如图所示,3个接收传感器S0、S1、S2的坐标分别是(X0,Y0)、(X1,Y1)、(X2,Y2),当平面上某处(X,Y)发出超声波时,该信号将先后被3个传感器所接收,设时间分别是t0,t1,t2,实验只能测出它们到达各个传感器的时间差△t1=t1-t0,△t2=t2-t0。

设声波沿媒质表面的传播度为c,对换能器S0、S1而言,声源发生的位置应该在到该两点的距离差为c△t1的曲线上,这是一条双曲线。

显然,利用△t1、△t2可以得到两条双曲线,它们的交点即是声源将S0设为原点,声源位置为(X,Y),用极坐标表示,则满足:X2+Y2=r2(X‒X1)2+(Y‒Y1)2=(r+c△t1)2(X‒X2)2+(Y‒Y2)2=(r+c△t2)2化简整理的(X 21+Y 21‒△21)(X 2cos θ+Y 2sin θ+△2)=(X 22+Y 22‒△22)(X 1cos θ+Y 1sin θ+△1)令A =X 2(X 21+Y 21‒△21)‒X 1(X 22+Y 22‒△22)B =Y 2(X 21+Y 21‒△21)‒Y 1(X 22+Y 22‒△22)C =△1(X 22+Y 22‒△22)‒△2(X 21+Y 21‒△21)A cos θ+B sin θ=D,。

则可得AA 2+B2=cos ΦBA 2+B2=sin ΦΦ=tan ‒1BA|θ‒Φ|=cos‒1DA 2+B 2r =X 21+Y 21‒△212(X 1cos θ+Y 1sin θ+△1)至此,声源位置已通过极坐标给出。

2.GPS 模拟本实验对GPS 过程的声学模拟是在一个二维的平面上进行的,位置(X i ,Y i )(i=1,2,……)已知的发送换能器(传感器做发送用,模拟“导航卫星“)发出声波(模拟卫星发出的电磁波),被位置(X,Y )的待求接收传感器(模拟用户)接收,它们之间有关系:(i=1,2,……)(X ‒X i )2+(Y ‒Y i )2=c 2t 2i 式中c 为波的传播速度。

显然,对一个二维的定位问题(确定X 和Y ),如果传播速度已知,要算出X 和Y 可以归结为一个求解两个变量的代数方程问题,也就是说原则上只要有两颗不同位置的模拟卫星就行了。

实际的GPS 定位,则至少要对四颗卫星同时进行测量,才能确定地球坐标系中的三维坐标和因接收机时钟不同步所造成的种差修正。

在本实验中,为了减小时差不准对定位精度的影响,应当获取来自多个“卫星“的位置和时差信息,并通过最小二乘法求得”用户“的位置和声波的传播速度。

即当n大于3时,∑[(X‒X i)2+(Y‒Y i)2‒c2t2i]2F(X,Y,c)==min由此可获得X,Y,c应满足的一组代数方程:∂F=0⇒∑[(X‒X i)2+(Y‒Y i)2‒c2t2i](X‒X i)=0∂X∂F=0⇒∑[(X‒X i)2+(Y‒Y i)2‒c2t2i](Y‒Y i)=0∂Y∂F=0⇒∑[(X‒X i)2+(Y‒Y i)2‒c2t2i]t2i=0∂c这是一个三元的非线性代数方程组,可通过计算方法求得数值解。

若c未知,而且需要考虑钟差修正,则获得一组四元代数方程。

可由牛顿迭代法求数值解。

二.实验仪器传播媒质、模拟源(铅笔芯折断)、压力传感器、接收放大器、时差测定装置、计算机、隔离放大器、单脉冲发生器。

实验电路:三.数据处理1.声源定位选择坐标(50,200)单位:时间us 位置mmi12345678平均t114.515.015.115.415.115.115.515.5t248.847.348.648.848.248.548.249.1t300000000X46.853.149.249.450.549.551.648.649.8 Y202.9202.0201.9201.5201.9201.9201.3201.4201.9实验测得的结果(49.8,201.9)跟实际值相比相差很少,笔芯折断的位置和网格的误差都有可能引起实验结果与实际值的差异。

2.GPS模拟i12345678910t1147.3132.3111.055.8133.3104.273.3158.113.4102.4t1180.9150.3128.891.1138.0107.677.7147.798.184.2t136.354.068.2135.869.290.8119.876.6104.5115.0 t10000000000(x ,y )(5,5)(10,10)(10,15)(10,35)(15,10)(15,20)(15,30)(20,5)(20,20)(20,25)计算的P3的坐标为X=-0.00170731 mm Y=-0.00144067mm实验误差较小主要误差来源:发生器的位置读数有误差,传感器与媒质界面的接触不均匀也可能带来误差。

思考题1.从测量原理、仪器组成和信息特点来讨论声源定位和GPS仿真○1实验的相同点和不同点。

答:测量原理:前者是已知接收器位置求声源位置;后者是已知发生器位置求接收器位置。

仪器组成:前者:传播媒质、电压传感器、接收放大器、时差测定仪、模拟源。

后者:传播媒质、电压传感器,接收放大器,时差测定仪、隔离放大器、单脉冲发生器。

信息特点:都是位置坐标和时间差。

○2考虑到钢媒质的表面波传播速度约为3000 m/s,传播距离最长约为54cm,那么时差测定仪最大的读数应该不会大于多少?答:t=d/c=180us○12.声源定位的发射源位置如何确定?是否用两个时差就可以了?答:用时间差所确定的双曲线的交点坐标即发射源坐标。

两个时间差就可以了。

○2GPS仿真实验用最小二乘法求数值解时,一般会涉及4个待测参数,除用户接收机的X,Y坐标和传播速度C以外,另一个参数是什么?有无具体的物理意义?答:另一个参数为钟差,它是卫星与接收器时间同步性的一个衡量指标。

1、声源定位:#include <iostream>#include <cmath>using namespace std;#define c 2982#define pai 3.1415926535int main(){double x0,x1,x2,y0,y1,y2,t0,t1,t2,t3,A,B,D,angle1,angle2,dt1,dt2,r;x0=0,x1=0,x2=0.3;y0=0,y1=0.45,y2=0.45;int i = 8;while(i--){cout <<"请输入第"<<8-i<<"组时间数据"<< endl;cin >> t1 >> t2>> t3;t1 = t1 / 1000000;t2 = 0;t3 = t3 / 1000000;dt1 = t1 - t2;dt2 = t3 - t2;A = x2*(pow(x1,2)+pow(y1,2)-pow(c*dt1,2)) - x1*(pow(x2,2)+pow(y2,2)-pow(c*dt2,2));B = y2*(pow(x1,2)+pow(y1,2)-pow(c*dt1,2)) - y1*(pow(x2,2)+pow(y2,2)-pow(c*dt2,2));D = c*dt1*(pow(x2,2)+pow(y2,2)-pow(c*dt2,2)) -c*dt2*(pow(x1,2)+pow(y1,2)-pow(c*dt1,2));angle2 = atan(B/A);if(acos(D/sqrt(pow(A,2)+pow(B,2)))+angle2 < pai/2)angle1 = acos(D/sqrt(pow(A,2)+pow(B,2)))+angle2;elseangle1 = angle2 - acos(D/sqrt(pow(A,2)+pow(B,2)));r = (pow(x1,2)+pow(y1,2)-pow(c*dt1,2))/(2*(x1*cos(angle1)+y1*sin(angle1)+c*dt1));cout << "声源坐标为:("<<r*cos(angle1)*1000<<"mm"<<" , "<<r*sin(angle1)*1000<<"mm)"<<endl;} // end while;return 0;} // end main;2、GPS模拟#include <iostream>#include <cmath>#include <iomanip>using namespace std;#define c 2982#define min 0.0000000001void GPS(double x[10] , double y[10] , double t[10] , double x1 , double y1 , int num){double a1,a2,a3,a4,b1,b2,mult,D=0,E=0;int i;while(1){a1 = a2 = a3 = a4 = b1 = b2 = 0;for(i = 0; i < 10; i ++){a1 = a1-(3*pow((x[i]-x1),2)+pow((y[i]/1000-y1),2)-pow(c*t[i]/1000000,2));a2 = a2+2*(x[i]/1000-x1)*(y1-y[i]/1000);a3 = a2;a4 = a4-(3*pow((y[i]-y1),2)+pow((x[i]/1000-x1),2)-pow(c*t[i]/1000000,2));b1 = b1+(pow((x[i]/1000-x1),2)+pow((y[i]/1000-y1),2)-pow(c*t[i]/1000000,2))*(x1-x[i]/1000);b2 = b2+(pow((x[i]/1000-x1),2)+pow((y[i]/1000-y1),2)-pow(c*t[i]/1000000,2))*(y1-y[i]/1000);} //end for;mult = a3/a1;a4 -= a2*mult;b2 -= b1*mult;E = b2/a4;D = (b1-a2*E)/a1;x1 += D;y1 += E;if((pow(D,2)+pow(E,2)) < min)break;} // end while;x1 = x1*1000;y1 = y1*1000;cout <<"点P"<< num <<"定位于: X = "<< fixed << setprecision(8)<< x1;cout <<"(mm) , Y = "<< fixed << setprecision(8)<< y1 <<"(mm)"<<endl; } // end GPS;int main(){int yy;double t1[10] , t2[10] , t3[10] , x[10] , y[10];cout << "请输入时间数据(us)与坐标数据(mm):" << endl;int i;for(i = 0; i <= 9; i ++){cout << "第" << i+1 << "组:" << endl;cin >> t1[i] >> t2[i] >> t3[i] >> x[i] >> y[i];} // end for;GPS(x,y,t1,0,0.45,1);GPS(x,y,t2,0.3,0.45,2);GPS(x,y,t3,0,0,3);cin>>yy;return 0;} // end main;。