三边测量定位算法py求解x.y_三边测量法定位怎么计算

hacker|
127

文章导读:

在无线传感器网络中,如何根据接收信号的强度来判断发送者的距离?有具体的计算公式么?

基于RSSI的定位

RSSI测量,一般利用信号传播的经验模型与理论模型。

对于经验模型,在实际定位前,先选取若干测试点,记录在这些点各基站收到的信号强度,建立各个点上的位置和信号强度关系的离线数据库(x,y,ss1,ss2,ss3)。在实际定位时,根据测得的信号强度(ss1′,ss2′,ss3′)和数据库中记录的信号强度进行比较,信号强度均方差最小的那个点的坐标作为节点的坐标。

对于理论模型,常采用无线电传播路径损耗模型进行分析。常用的传播路径损耗模型有:自由空间传播模型、对数距离路径损耗模型、哈它模型、对数一常态分布模型等。自由空间无线电传播路径损耗模型为:

式中,d为距信源的距离,单位为km;f为频率,单位为MHz;k为路径衰减因子。其他的模型模拟现实环境,但与现实环境还是有一定的差距。比如对数一常态分布模型,其路径损耗的计算公式为:

式中,Xσ是平均值为O的高斯分布随机变数,其标准差范围为4~10;k的范围在2~5之间。取d=1,代入式(1)可得,LOSS,即PL(d0)的值。此时各未知节点接收锚节点信号时的信号强度为:

RSSI=发射功率+天线增益一路径损耗(PL(d))

2.2 基于RSSI的三角形质心定位算法的数学模型

不论哪种模型,计算出的接收信号强度总与实际情况下有误差,因为实际环境的复杂性,换算出的锚节点到未知节点的距离d总是大于实际两节点间的距离。如图1所示,锚节点A,B,C,未知节点D,根据RSSI模型计算出的节点A和D的距离为rA;节点B和D的距离为rB;节点C和D的距离为rC。分别以A,B,C为圆心;rA,rB,rC为半径画圆,可得交叠区域。这里的三角形质心定位算法的基本思想是:计算三圆交叠区域的3个特征点的坐标,以这三个点为三角形的顶点,未知点即为三角形质心,如图2所示,特征点为E,F,G,特征点E点的计算方法为:

同理,可计算出F,G,此时未知点的坐标为由仿真得,在图2中,实际点为D;三角形质心算法出的估计点为M;三边测量法算出的估计点为N。可知,三角形质心算法的准确度更高。

3 基于RSSI的三角形质心算法过程

3.1 步骤

(1)锚节点周期性向周围广播信息,信息中包括自身节点ID及坐标。普通节点收到该信息后,对同一锚节点的RSSI取均值。

(2)当普通节点收集到一定数量的锚节点信息时,不再接收新信息。普通节点根据RSSI从强到弱对锚节点排序,并建立RSSI值与节点到锚节点距离的映射。建立3个集合。

锚节点集合:

(3)选取RSSI值大的前几个锚节点进行自身定位计算。

在B_set:中优先选择RSSI值大的信标节点组合成下面的锚节点集合,这是提高定位精度的关键。

对锚节点集合,依次根据(3)式算出3个交点的坐标,最后由质心算法,得出未知节点坐标。

(4)对求出的未知节点坐标集合取平均,得未知节点坐标。

3.2 误差定义

定义定位误差为ER,假设得到的未知节点的坐标为(xm,ym),其真实位置为(x,y),则定位误差ER为:

4 仿 真

利用Matlab仿真工具模拟三角形质心算法,考察该算法的性能。假设在100 m×100 m的正方形区域内,36个锚节点均匀分布,未知节点70个,分别用三边测量法和三角形质心定位算法进行仿真,仿真结果如图3所示。由图3可知,三角形质心算法比三边测量法,定位精度更高,当测距误差变大时,用三角形质心算法得出的平均定位误差比用三边测量法得出的小得多。

5 结 语

在此提出了将RSSI方法和三角形质心定位算法相结合的方法,通过仿真实验,将该算法和三边测量算法相比较,证明了该算法的优越性。下一步将研究在锚节点数量不同时的平均定位误差。

利用matlab分别对三边测量定位算法和改进算法进行仿真和验证 急求源程序

%% 清空环境变量

clc

clear

load data

%% 数据累加作为网络输入

[n,m]=size(X);

for i=1:n

y(i,1)=sum(X(1:i,1));

y(i,2)=sum(X(1:i,2));

y(i,3)=sum(X(1:i,3));

y(i,4)=sum(X(1:i,4));

y(i,5)=sum(X(1:i,5));

y(i,6)=sum(X(1:i,6));

end

%% 网络参数初始化

a=0.3+rand(1)/4;

b1=0.3+rand(1)/4;

b2=0.3+rand(1)/4;

b3=0.3+rand(1)/4;

b4=0.3+rand(1)/4;

b5=0.3+rand(1)/4;

%% 学习速率初始化

u1=0.0015;

u2=0.0015;

u3=0.0015;

u4=0.0015;

u5=0.0015;

%% 权值阀值初始化

t=1;

w11=a;

w21=-y(1,1);

w22=2*b1/a;

w23=2*b2/a;

w24=2*b3/a;

w25=2*b4/a;

w26=2*b5/a;

w31=1+exp(-a*t);

w32=1+exp(-a*t);

w33=1+exp(-a*t);

w34=1+exp(-a*t);

w35=1+exp(-a*t);

w36=1+exp(-a*t);

theta=(1+exp(-a*t))*(b1*y(1,2)/a+b2*y(1,3)/a+b3*y(1,4)/a+b4*y(1,5)/a+b5*y(1,6)/a-y(1,1));

kk=1;

%% 循环迭代

for j=1:10

%循环迭代

E(j)=0;

for i=1:30

%% 网络输出计算

t=i;

LB_b=1/(1+exp(-w11*t));   %LB层输出

LC_c1=LB_b*w21;           %LC层输出

LC_c2=y(i,2)*LB_b*w22;    %LC层输出

LC_c3=y(i,3)*LB_b*w23;    %LC层输出

LC_c4=y(i,4)*LB_b*w24;    %LC层输出

LC_c5=y(i,5)*LB_b*w25;    %LC层输出

LC_c6=y(i,6)*LB_b*w26;    %LC层输出

LD_d=w31*LC_c1+w32*LC_c2+w33*LC_c3+w34*LC_c4+w35*LC_c5+w36*LC_c6;    %LD层输出

theta=(1+exp(-w11*t))*(w22*y(i,2)/2+w23*y(i,3)/2+w24*y(i,4)/2+w25*y(i,5)/2+w26*y(i,6)/2-y(1,1));   %阀值

ym=LD_d-theta;   %网络输出值

yc(i)=ym;

%% 权值修正

error=ym-y(i,1);      %计算误差

E(j)=E(j)+abs(error);    %误差求和

error1=error*(1+exp(-w11*t));     %计算误差

error2=error*(1+exp(-w11*t));     %计算误差

error3=error*(1+exp(-w11*t));

error4=error*(1+exp(-w11*t));

error5=error*(1+exp(-w11*t));

error6=error*(1+exp(-w11*t));

error7=(1/(1+exp(-w11*t)))*(1-1/(1+exp(-w11*t)))*(w21*error1+w22*error2+w23*error3+w24*error4+w25*error5+w26*error6);

%修改权值

w22=w22-u1*error2*LB_b;

w23=w23-u2*error3*LB_b;

w24=w24-u3*error4*LB_b;

w25=w25-u4*error5*LB_b;

w26=w26-u5*error6*LB_b;

w11=w11+a*t*error7;

end

end

%画误差随进化次数变化趋势

figure(1)

plot(E)

title('训练误差','fontsize',12);

xlabel('进化次数','fontsize',12);

ylabel('误差','fontsize',12);

%print -dtiff -r600 28-3

%根据训出的灰色神经网络进行预测

for i=31:36

t=i;

LB_b=1/(1+exp(-w11*t));   %LB层输出

LC_c1=LB_b*w21;           %LC层输出

LC_c2=y(i,2)*LB_b*w22;    %LC层输出

LC_c3=y(i,3)*LB_b*w23;    %LC层输出

LC_c4=y(i,4)*LB_b*w24;    %LC层输出

LC_c5=y(i,5)*LB_b*w25;

LC_c6=y(i,6)*LB_b*w26;

LD_d=w31*LC_c1+w32*LC_c2+w33*LC_c3+w34*LC_c4+w35*LC_c5+w36*LC_c6;    %LD层输出

theta=(1+exp(-w11*t))*(w22*y(i,2)/2+w23*y(i,3)/2+w24*y(i,4)/2+w25*y(i,5)/2+w26*y(i,6)/2-y(1,1));   %阀值

ym=LD_d-theta;   %网络输出值

yc(i)=ym;

end

yc=yc*100000;

y(:,1)=y(:,1)*10000;

%计算预测的每月需求量

for j=36:-1:2

ys(j)=(yc(j)-yc(j-1))/10;

end

figure(2)

plot(ys(31:36),'-*');

hold on

plot(X(31:36,1)*10000,'r:o');

地形测量,已知两点坐标,三边距离和角,求第三点坐标

先简化坐标,设B位于坐标原点时,C点坐标为(x,y),

则A的坐标为(532.998,164.24)。

由勾股定理得

x^2+y^2=186.323^2 ----------------------------(1)

(532.998-x)^2+(164.24-y)^2=372.559^2 ------------(2)

解(1)(2)组成的方程组可得

x=181.214 y=42.068

加上B点坐标后可得到C点坐标为

C(521305.269,3074860.528)

你的数据太厉害了,幸亏本人当年的算术还没忘。

新手求指教,matlab有错误,求详细讲解,真心做不出来了

你把对A,B,C,dA,dB,dC的赋值都注释掉了,所以matlab认为你的A没有定义

4条大神的评论

  • avatar
    访客 2022-07-11 上午 02:46:31

    机变数,其标准差范围为4~10;k的范围在2~5之间。取d=1,代入式(1)可得,LOSS,即PL(d0)的值。此时各未知节点接收锚节点信号时的信号强度为: RSSI=发射功率+天线增益一路径损耗(PL(d))2.2 基于RSS

  • avatar
    访客 2022-07-11 上午 08:24:13

    文章导读:1、在无线传感器网络中,如何根据接收信号的强度来判断发送者的距离?有具体的计算公式么?2、利用matlab分别对三边测量定位算法和改进算法进行仿真和验证 急求源程序3、地形测量,已知两点坐标,三边距离和角,求第三点坐标4、新手求指教,matlab有错误,求详细讲解,真心做不出来了在无

  • avatar
    访客 2022-07-11 上午 05:22:13

    %LC层输出LC_c2=y(i,2)*LB_b*w22;    %LC层输出LC_c3=y(i,3)*LB_b*w23;    %LC层输出LC_c4=y(i,4)*LB_b*w24;    %LC层输出LC_

  • avatar
    访客 2022-07-11 上午 08:02:55

    (164.24-y)^2=372.559^2 ------------(2) 解(1)(2)组成的方程组可得 x=181.214 y=42.068加上B点坐标后可得到C点坐标为 C(521305.269,30748

发表评论