平面上圆相交求交点——定位模拟
基站发出报文 {基站坐标:(a1,b1),发出时间:2022-06-02: 10:32:35.23422}
移动端传感器采集3个基站的数据,然后计算距离构建3个圆方程,两两相减得到3个线性方程,对方程组求最小二乘解
代码了引入了线性误差e作用于计算的距离上
clear clc close() c1=[8 10]; c2=[-10,12]; c3=[-4,-4]; e=0.01; p=(rand(1,2)-0.5) * 40 t1= (p -c1).^2; rr1=sqrt(t1(1)+t1(2)); r1=rr1*e * (rand(1)-0.5*2) + rr1; %noices t2= (p -c2).^2; rr2=sqrt(t2(1)+t2(2)); r2=rr2*e * (rand(1)-0.5*2) + rr2; t3= (p -c3).^2; rr3=sqrt(t3(1)+t3(2)); r3=rr3*e * (rand(1)-0.5*2) + rr3; n1=r1^2-c1(1)^2-c1(2)^2 -(r2^2 - c2(1)^2 - c2(2)^2); n2=r1^2-c1(1)^2-c1(2)^2 -(r3^2 - c3(1)^2 - c3(2)^2); n3=r2^2-c2(1)^2-c2(2)^2 -(r3^2 - c3(1)^2 - c3(2)^2); N=[n1;n2;n3]; A=[ -2*c1(1)+2*c2(1), -2*c1(2)+2*c2(2) -2*c1(1)+2*c3(1), -2*c1(2)+2*c3(2) -2*c2(1)+2*c3(1), -2*c2(2)+2*c3(2) ]; C=A\N; p1=C' D=C-p' hold on axis square rectangle('Position',[8-rr1,10-rr1,2*rr1,2*rr1],'Curvature',[1,1]); rectangle('Position',[-10-rr2,12-rr2,2*rr2,2*rr2],'Curvature',[1,1]); rectangle('Position',[-4-rr3,-4-rr3,2*rr3,2*rr3],'Curvature',[1,1]); txt=num2str(p) text(p(1),p(2), txt) text(c1(1),c1(2), num2str(c1)) text(c2(1),c2(2), num2str(c2)) text(c3(1),c3(2), num2str(c3))
以上需要接受端时钟与发送端同步, 但是不同步的情况下,会采用双曲线定位,双曲线的特性,即到2定焦点距离之差一定的轨迹,而空间中是双曲面,4个基站形成3组双曲面的公共焦点则是所求位置