WSN定位蒙特卡洛方法MCL的MATLAB实现源码_第1页
WSN定位蒙特卡洛方法MCL的MATLAB实现源码_第2页
WSN定位蒙特卡洛方法MCL的MATLAB实现源码_第3页
WSN定位蒙特卡洛方法MCL的MATLAB实现源码_第4页
WSN定位蒙特卡洛方法MCL的MATLAB实现源码_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、clear;clc;%初始化工作Ns = 20;Nn = 200;Vmax = 20;Xrange = 200;Yrange = 200;tr = 50;step = 20;N = 20;Nf = 3; %采样盒子确定时,估计位置要扩大圆面积ns_range = 200; %每个采样盒子的最大采样次数for i = 1:Ns Xseed(1,i)=rand(1,1)*Xrange; Yseed(1,i)=rand(1,1)*Yrange;endfor i = 1:Nn Xnode(1,i)=rand(1,1)*Xrange; Ynode(1,i)=rand(1,1)*Yrange; Xnode

2、_g(1,i)=Xnode(1,i); %MCL估计位置,初始值设置为真实位置 Ynode_g(1,i)=Ynode(1,i);end%初始时刻的粒子群,for every nodefor i = 1:Nn for j = 1:N lx(i,j,1) = Xnode_g(1,i); ly(i,j,1) = Ynode_g(1,i); endend%figure(1);%plot(Xseed,Yseed,bo,Xnode,Ynode,k*);%节点们开始运动,每次定位完成才开始下一次运动,这里假设这个定位过程耗时非常短%仿真步数for k=2:step %新的时刻,节点们先运动一下,RWP模型

3、for i = 1:Ns r = rand(1,1)*Vmax; thita = rand(1,1)*2*pi; Xseed(k,i) = Xseed(k-1,i) + r*cos(thita); if Ynode(k,i) Yrange | Ynode(k,i) 0 Xnode(k,i) = Xnode(k-1,i) + r*cos(thita); Ynode(k,i) = Ynode(k-1,i) - r*sin(thita); end end %对每一个node逐个进行定位 for i = 1:Nn %测试每个seed是否可以用来定位 A1 = ; %存储1跳锚节点序号 A2 = ; %

4、存储2跳锚节点序号 for j = 1:Ns d1 = sqrt(Xnode(k,i)-Xseed(k,j)2+(Ynode(k,i)-Yseed(k,j)2); if d1tr & d1=2*tr for m = 1:Nn if m = i dmi = sqrt(Xnode(k,i)-Xnode(k,m)2+(Ynode(k,i)-Ynode(k,m)2); dms = sqrt(Xnode(k,m)-Xseed(k,j)2+(Ynode(k,m)-Yseed(k,j)2); if dmi=tr & dms=tr A2 = A2 j; end end end end end %接下来要获取采

5、样盒子,每个粒子都要有一个采样盒子,然后还要进行采样,每个采样盒子的采样都要有一个次数限制,这里还是要分四种情况 temp1 = size(A1,2); temp2 = size(A2,2); %第一种情况 if temp1=0 & temp2=0 Xnode_g(k,i)=Xnode_g(k-1,i); Ynode_g(k,i)=Ynode_g(k-1,i); for j = 1:N lx(i,j,k) = 0; %周围没有锚节点,没法进行定位,则粒子群全部置零 ly(i,j,k) = 0; end end %第二种情况 if temp1=0 & temp2=0 for j = 1:N sa

6、mbox1 = Xnode_g(k-1,i)-Nf*Vmax; sambox2 = Xnode_g(k-1,i)+Nf*Vmax; sambox3 = Ynode_g(k-1,i)-Nf*Vmax; sambox4 = Ynode_g(k-1,i)+Nf*Vmax; Xsambox_min(i,j,k) = max(sambox1); Xsambox_max(i,j,k) = min(sambox2); Ysambox_min(i,j,k) = max(sambox3); Ysambox_max(i,j,k) = min(sambox4); %从采样盒子里采样 lx(i,j,k) = unif

7、rnd(Xsambox_min(i,j,k),Xsambox_max(i,j,k),1,1); ly(i,j,k) = unifrnd(Ysambox_min(i,j,k),Ysambox_max(i,j,k),1,1); ns = 1; %滤波 and = ; for m = 1:temp1 d1(m) = sqrt(lx(i,j,k)-Xseed(k,A1(m)2+(ly(i,j,k)-Yseed(k,A1(m)2); end end ns = ns+1; end %进行最终的判断 and = ; for m = 1:temp1 d1(m) = sqrt(lx(i,j,k)-Xseed(k

8、,A1(m)2+(ly(i,j,k)-Yseed(k,A1(m)2); if d1(m)tr and = and 1; end end if sum(and)=0 lx(i,j,k) = 0; ly(i,j,k) = 0; end end %至此 节点 i 的粒子群已经得到 %下面是进行定位,粒子群的优化 num_zero = 0; for j = 1:N if lx(i,j,k) = 0 num_zero = num_zero+1; end end %k时刻的定位位置 if num_zero = N Xnode_g(k,i) = Xnode_g(k-1,i); Ynode_g(k,i) =

9、Ynode_g(k-1,i); end if num_zero = N Xnode_g(k,i) = sum(lx(i,:,k)/(N-num_zero); Ynode_g(k,i) = sum(ly(i,:,k)/(N-num_zero); end %粒子群补全N个 if num_zero = N for j = 1:N lx(i,j,k) = 0; ly(i,j,k) = 0; end end if num_zero = N for j = 1:N if lx(i,j,k) = 0 lx(i,j,k) = Xnode_g(k,i); ly(i,j,k) = Ynode_g(k,i); en

10、d end end end %第三种情况 if temp1=0 & temp2=0 for j = 1:N sambox1 = Xnode_g(k-1,i)-Nf*Vmax; sambox2 = Xnode_g(k-1,i)+Nf*Vmax; sambox3 = Ynode_g(k-1,i)-Nf*Vmax; sambox4 = Ynode_g(k-1,i)+Nf*Vmax; Xsambox_min(i,j,k) = max(sambox1); Xsambox_max(i,j,k) = min(sambox2); Ysambox_min(i,j,k) = max(sambox3); Ysamb

11、ox_max(i,j,k) = min(sambox4); and = and 0; else and = and 1; end end ns = ns+1; end %进行最终的判断 and = ; for m = 1:temp2 d1(m) = sqrt(lx(i,j,k)-Xseed(k,A2(m)2+(ly(i,j,k)-Yseed(k,A2(m)2); if d1(m)tr & d1(m)=2*tr and = and 0; else and = and 1; end end if sum(and)=0 lx(i,j,k) = 0; ly(i,j,k) = 0; end end %至

12、此 节点 i 的粒子群已经得到 %下面是进行定位,粒子群的优化 num_zero = 0; for j = 1:N if lx(i,j,k) = 0 num_zero = num_zero+1; end end %k时刻的定位位置 if num_zero = N Xnode_g(k,i) = Xnode_g(k-1,i); Ynode_g(k,i) = Ynode_g(k-1,i); end if num_zero = N Xnode_g(k,i) = sum(lx(i,:,k)/(N-num_zero); Ynode_g(k,i) = sum(ly(i,:,k)/(N-num_zero);

13、end %粒子群补全N个 if num_zero = N for j = 1:N lx(i,j,k) = 0; ly(i,j,k) = 0; end end if num_zero = N for j = 1:N if lx(i,j,k) = 0 lx(i,j,k) = Xnode_g(k,i); ly(i,j,k) = Ynode_g(k,i); end end end end %第四种情况 if temp1=0 & temp2=0 for j = 1:N sambox1 = Xnode_g(k-1,i)-Nf*Vmax; sambox2 = Xnode_g(k-1,i)+Nf*Vmax;

14、sambox3 = Ynode_g(k-1,i)-Nf*Vmax; sambox4 = Ynode_g(k-1,i)+Nf*Vmax; Xsambox_min(i,j,k) = max(sambox1); Xsambox_max(i,j,k) = min(sambox2); Ysambox_min(i,j,k) = max(sambox3); Ysambox_max(i,j,k) = min(sambox4); %从采样盒子里采样 lx(i,j,k) = unifrnd(Xsambox_min(i,j,k),Xsambox_max(i,j,k),1,1); ly(i,j,k) = unifrn

15、d(Ysambox_min(i,j,k),Ysambox_max(i,j,k),1,1); ns = 1; %滤波 and = ; for m = 1:temp1 d1(m) = sqrt(lx(i,j,k)-Xseed(k,A1(m)2+(ly(i,j,k)-Yseed(k,A1(m)2); if d1(m)=tr and = and 0; end if d1(m)tr and = and 1; end d1(m) = sqrt(lx(i,j,k)-Xseed(k,A2(m)2+(ly(i,j,k)-Yseed(k,A2(m)2); if d1(m)tr & d1(m)=2*tr and = and 0; else and = and 1; end end if sum(and)=0 lx(i,j,k) = 0; ly(i,j,k) = 0; end end %至此 节点 i 的粒子群已经得到 %下面是进行定位,粒子群的优化 num_zero = 0; for j = 1:N if lx(i,j,k) = 0 num_zero = num_zero+1; end end %k时刻的定位位置 if num_zero = N Xnode_g(k,i) = Xnode_g(k-1,i); Ynode_g(k,i) = Ynode_g(k-1,i); end if num_z

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论