微信:HuangL1121
核心代码:
clc;
clear;
close all;
warning off;
pack;
addpath 'func\'
%区域长度
RoomLength = 5;
RoomWidth = 1;
%信标数
Num_xb = 30;
%信标节点间的距离
Dis = RoomLength/(Num_xb-1);
%节点的通信距离
Good_radius= 15;
%选取的信号强度最大的节点数目
Best_xb = 5;
%仿真采用时间
Stimes = 50;
Alpha = 3;
for m=1:Stimes
m
RandStream.setDefaultStream(RandStream('mt19937ar','seed',m));
%生成节点坐标
Position_X = (0.7*rand)*RoomLength;
Position_Y = (0.7*rand)*RoomWidth;
Position = [Position_X,Position_Y];
%计算节点到信标的距离
for i=1:Num_xb
XB(:,i) = [i;(i-1)*Dis;0];
Dist(:,i) = sqrt((Position_X-((i-1)*Dis))^2+Position_Y^2);
end
%基于RSS的定位算法
for i=1:Num_xb
Number_rssi(1,i) = i;
%每个信标节点的RSSI值
if Dist(i) > Good_radius
Number_rssi(2,i) = 0;
else
Number_rssi(2,i) = func_RSSI_cal(Dist(i),Alpha);
end
end
%将RSSI值从大到小排列
for i = 1:Num_xb
for j = i:Num_xb
if Number_rssi(2,i) < Number_rssi(2,j)
a = Number_rssi(1,j);
b = Number_rssi(2,j);
Number_rssi(2,j) = Number_rssi(2,i);
Number_rssi(1,j) = Number_rssi(1,i);
Number_rssi(1,i) = a;
Number_rssi(2,i) = b;
end
end
end
%RSSI值最大的信标的距离
for i=1:Best_xb
Dist(i) = Dis*( (func_RSSI_cal(Dis,Alpha)/Number_rssi(2,i))^(1/2.8) );
end
%求未知节点坐标
for i=1:Best_xb
Beaconn(1,i) = XB(2,Number_rssi(1,i));
Beaconn(2,i) = XB(3,Number_rssi(1,i));
end
All_num=Best_xb;
for i=1:2
for j=1:(All_num-1)
a(i,j) = Beaconn(i,j)-Beaconn(i,All_num);
end
end
A =-2*(a');
for i=1:(All_num-1)
B(i,1)=Dist(i)^2-Dist(All_num)^2-Beaconn(1,i)^2+Beaconn(1,All_num)^2-Beaconn(2,i)^2+Beaconn(2,All_num)^2;
end
%计算X坐标
X1 = pinv(A'*A)*A'*B;
X_pos = X1(1,1);
%计算Y坐标
z = 0;
for j=1:Best_xb
z = z + sqrt(abs(Dist(j)^2-(X_pos-Beaconn(1,j))^2));
end
Y_pos = z/Best_xb;
Loc = [X_pos;Y_pos];
%点位误差
error1(m) = sqrt((abs(Position_X-Loc(1)))^2+(abs(Position_Y-Loc(2)))^2);
%横坐标误差
error2(m) = abs(Loc(1)-Position_X);
%纵坐标误差
error3(m) = abs(Loc(2)-Position_Y);
end
figure;
subplot(311);
stem(error1,'b-o');
legend('节点的点位误差');
subplot(312);
stem(error2,'b-o');
legend('节点的X误差');
subplot(313);
stem(error3,'b-o')
legend('节点的Y误差');
save result.mat error1 error2 error3
联系:highspeedlogic
QQ :1224848052
微信:HuangL1121
邮箱:1224848052@qq.com
微信扫一扫: