資源簡介
基于DV-Hop的無線傳感網(wǎng)絡(luò)定位算法的matlab仿真代碼。研究定位誤差與錨節(jié)點個數(shù)和通信半徑的關(guān)系。設(shè)定在100*100的區(qū)域內(nèi),總節(jié)點數(shù)為100,分別計算出通信半徑為15,25,50時,定位誤差隨錨節(jié)點個數(shù)3~30改變時的變化情況。
代碼片段和文件信息
%?BorderLengh----?正方形區(qū)域的邊長,單位:m
%?NodeSum--------?網(wǎng)絡(luò)節(jié)點總數(shù)
%?AnchorSum------?錨節(jié)點數(shù)
%?UnodeSum-------?未知節(jié)點數(shù)=NodeSum-AnchorSum
%?Nxy------------?節(jié)點標號{Nxy}?3*NodeSum
%?Anchor---------?錨節(jié)點坐標矩陣?2*AnchorSum
%?Unode----------?未知節(jié)點坐標矩陣?2*(NodeSum-AnchorSum)
%?R--------------?節(jié)點通信距離
%{
????struct?ANode??----?錨節(jié)點
????{?ID
??????X
??????Y
??????hops(NodeSum)?????????--?與所有節(jié)點的跳數(shù)
??????Md????????????????????--?該節(jié)點的平均每跳距離
??????dis(AnchorSum)????????--?與所有錨節(jié)點的距離
????}
????struct?UNode??----?未知節(jié)點
?????{?ID
???????X
???????Y
???????hops(AnchorSum)??????--?與所有錨節(jié)點的跳數(shù)
???????xx???????????????????--?估計坐標
???????yy
???????dis(AnchorSum1)?????--?該未知節(jié)點到各錨節(jié)點的距離
??????}
%}
clear?all;?close?all;
BorderLength=100;
NodeSum=100;
R=[152550];
ASum=[36912151821242730];
times=100;???????%?times?次測量,取平均定位誤差
for?rs=1:3?????%?R=152550
????
for?as=1:10????%?橫坐標AnchorSum?變化
????clear?AnchorSum;?clear?UnodeSum;?
????AnchorSum=ASum(as);
????UnodeSum=NodeSum-AnchorSum;
????clear?error;?clear?Etemp;?clear?Error;?clear?badNo;
for?T=1:times?
%111111111?初始化網(wǎng)絡(luò)拓撲,隨機生成節(jié)點的坐標?111111111111---------------
clear?Nxy;?clear?Anchor;?clear?Unode;
Anchor=BorderLength.*(rand(2AnchorSum)-0.5);?%?產(chǎn)生隨機坐標錨節(jié)點
Unode=BorderLength.*(rand(2UnodeSum)-0.5);???
Nxy=[[1:NodeSum];Anchor?Unode];???????????%?產(chǎn)生帶邏輯號的節(jié)點坐標
%?畫出節(jié)點分布圖
%{
if?T==1
???figure(1)
???plot(Nxy(21:AnchorSum)Nxy(31:AnchorSum)‘r*‘)?%畫出錨節(jié)點分布圖
???hold?on;?%畫出未知點分布
???plot(Nxy(2(AnchorSum+1):NodeSum)Nxy(3(AnchorSum+1):NodeSum)‘bo‘)
???xlim([-BorderLength/2BorderLength/2]);
???ylim([-BorderLength/2BorderLength/2]);
???title(‘*?錨節(jié)點???o?未知節(jié)點‘)
???grid?on;
end
%}
%2222222222?計算節(jié)點間的最小跳數(shù)?2222222222222222----------
%?初始化節(jié)點間距離、跳數(shù)矩陣
clear?Dnode;?clear?h;
for?i=1:NodeSum
????for?j=1:i
????????Dnode(ij)=sqrt((Nxy(2i)-Nxy(2j))^2+(Nxy(3i)-Nxy(3j))^2);?
????????Dnode(ji)=Dnode(ij);?????????%?第i個節(jié)點與第j個節(jié)點間的相互距離
????????if?(Dnode(ij)<=R(rs))&&(Dnode(ij)>0)
????????????h(ij)=1;?h(ji)=1;????????%?通信范圍內(nèi)為1跳鄰居節(jié)點
????????elseif?i==j
????????????h(ij)=0;??????????????????%?自身節(jié)點跳距為0
????????else?h(ij)=inf;?h(ji)=inf;???%?通信范圍外初始跳數(shù)為無窮大
????????end
????end
end???????
%?最短路徑算法計算節(jié)點間跳數(shù)?
for?k=1:NodeSum
????for?i=1:NodeSum
????????for?j=1:i
????????????if?(h(ik)+h(kj) ????????????????h(ij)=h(ik)+h(kj);
????????????????h(ji)=h(ij);
????????????end
????????end
????end
end
%===============================================================
clear?ANode;?clear?UNode;
for?i=1:AnchorSum
????ANode(i).ID=i;
????ANode(i).X=Anchor(1i);
????ANode(i).Y=Anchor(2i);
????ANode(i).hops=h(i:);???????????????%?--?與所有節(jié)點的跳數(shù)
????ANode(i).Md=0;??????????????????????%?--?平均每跳距離初始化為0
????ANode(i).dis=Dnode(i1:AnchorSum);??%?--?與所有錨節(jié)點的距離
end
for?i=1:UnodeSum
????UNode(i).ID=i;
????UNode(i).X=Unode(1i);
????UNode(i).Y=Unode(2i);
????UNode(i).hops=h(AnchorSum+i1:AnchorSum);??%?--?與所有錨節(jié)點的跳數(shù)
????UNode(i).xx=0;???????????????
評論
共有 條評論