安装Leach协议的步骤

安装Leach协议的步骤:

1.       打开cywin,进入目录/ns-allinone-2.28/ns-2.28,输入startxwin.bat启动小窗口。

2.       在小窗口中,进入目录/ns-allinone-2.28/ns-2.28,将mit.tar.gz考到此目录下。

3.       先将目录/ns-allinone-2.28/ns-2.28下的文件都备份一下,以便以后我们运行的时候出问题时,可以回来对着原始的文件查找。

4.       输入gunzip mit.tar.gz解压

5.       输入tar –xvf mit.tar解压,这样我们即把Leach协议装到了我们的工作环境中。

但是,这时还不能运行。需要有一些修改。还有一点就是,这样安装进来的文件会把原来的相关文件给覆盖,也就是说,以前添加的协议将不能运行。所以这种方法行不通。

 

下面,我们就要解决这个问题,既不让覆盖我们以前添加的协议,也使得我们的新添加的协议也能运行,那么这种方法就比较复杂了,需要的人工劳动多了一点。

6.       首先我们先找个目录把mit.tar.gz文件解压开来,一开始我是用的winrar解压的,但是后来发现解压出来的文件有的不全,所以我还是使用的gunzip mit.tar.gztar –xvf mit.tar解压,但是不直接解压到目录/ns-allinone-2.28/ns-2.28下了。

7.       将解压出来的文件A一一的对应我们/ns-allinone-2.28/ns-2.28目录下的文件B进行修改,将A中与B内容不同的地方,添加进B去,切记,不是完全复制,是添加进去,而B中多出来的内容,也许是你以前添加进去的协议,不要删掉。注意一点,添加的过程中,声明变量的地方,有时会是两种声明方式,其中一种被注释掉了,这时,如果需要更改声明另一种方式时,一定要把第一种注释掉,避免重复声明的错误产生。

8.       强调一点,mac/channel.cc文件中:

distCST_ = TwoRayGetDist(wifp->getCSThresh(), wifp->getPt(), 1.0, 1.0, highestZ , highestZ);

改成

distCST_ = wifp->getDist(wifp->getCSThresh(), wifp->getPt(), 1.0, 1.0,

                           highestZ , highestZ, wifp->getL(),

                           wifp->getLambda());

9.       mac/wireless-phy.cc文件中的(node*)改成(MobileNode*

10.   修改MakeFile文件,按照下面三步来进行:

1)将DMIT_uAMPS添加到DEFINE行的最后,即为

DEFINE  = -DTCP_DELAY_BIND_ALL …… -Drng_test -DMIT_uAMPS

(2)       I./mit/rca  I./mit/uAMPS 添加到 INCLUDE列的后面,即为

INCLUDES = /

      ……

      -I./diffusion3/lib/main -I./diffusion3/lib /

      -I./diffusion3/lib/nr -I./diffusion3/ns /

      -I./diffusion3/filter_core -I./asim/ -I./qs /

      -I./mit/rca -I./mit/uAMPS /

……

11.   将代码

mit/rca/energy.o mit/rca/rcagent.o /

mit/rca/rca-ll.o mit/rca/resource.o /

mac/mac-sensor-timers.o mac/mac-sensor.o mit/uAMPS/bsagent.o /

添加到代码gaf/gaf.o /之前

12.   MakeFile文件中的mit/mit.o mit/mit注销掉。

 

这样,文件我们就都修改完了,下面就是编译了,即需要make了。

13.   进入到/ns-allinone-2.28/ns-2.28目录下,输入make clean

14.   如果没有出错,输入make,这时就需要很长时间的等待了。

15.   如果你改的文件是makefile.in,那么应该有提示说你的makefile.in文件比make文件新,需要重新configure,这时输入

./configure

    即可。

16.   make成功后,我们就要测试一下我们的Leach文件是否能够运行了。这时,你也许会直接输入

./test

估计肯定会有Line3Line5行的提示错误,要处理这个问题,只需打开test文件,将里面的代码改为:

#!/bin/bash

cd tcl/ex

ns wireless-demo-csci694.tcl

sleep 2

cd ../../

./leach_test

即可。重新运行,应该就会得到结果了,显示如下:

num_nodes is set 3

node-config

warning: Please use -channel as shown in tcl/ex/wireless-mitf.tcl

create-wireless-node

DSDV

INITIALIZE THE LIST xListHead

create-wireless-node

DSDV

create-wireless-node

DSDV

Loading connection pattern...

Loading scenario file...

Starting Simulation...

channel.cc:sendUp - Calc highestAntennaZ_ and distCST_

highestAntennaZ_ = 1.5,  distCST_ = 550.0

SORTING LISTS ...DONE!

NS EXITING...

17.   这时,打开/mit/leach_sims/leach.err,也许你会看到有错误,应该是环境变量设置的问题。那么就要对环境变量进行设置,需要在.bashrc中加入环境变量

export RCA_LIBRARY=$(ns的安装目录)/mit/rca

export uAMPS_LIBRARY=$(ns的安装目录)/mit/uAMPS

注意,“ns的安装目录”要改成你自己的目录。

重新运行./test,这时打开/mit/leach_sims/leach.err,也许你还会看到有错误,应该是说环境变量找不到等问题。这时候说明你设置的环境变量没有起作用,那么你可以直接修改

mit/uAMPS/sims/uamps.tcl文件。

将代码

source $env(RCA_LIBRARY)/ns-ranode.tcl

source $env(uAMPS_LIBRARY)/ns-bsapp.tcl

source $env(uAMPS_LIBRARY)/extras.tcl

source $env(uAMPS_LIBRARY)/stats.tcl

#Uncomment these lines to use gdb to debug the c code

#source mit/uAMPS/ns-bsapp.tcl

#source mit/uAMPS/extras.tcl

#source mit/uAMPS/stats.tcl

source $env(RCA_LIBRARY)/resources/ns-resource-manager.tcl

source $env(RCA_LIBRARY)/resources/ns-energy-resource.tcl

source $env(RCA_LIBRARY)/resources/ns-neighbor-resource.tcl

修改成代码

source mit/rca/ns-ranode.tcl

source mit/uAMPS/ns-bsapp.tcl

source mit/uAMPS/extras.tcl

source mit/uAMPS/stats.tcl

source mit/rca/resources/ns-resource-manager.tcl

source mit/rca/resources/ns-energy-resource.tcl

source mit/rca/resources/ns-neighbor-resource.tcl

即可。这会再运行./test应该没有问题了,反正我的安装是没有问题了。

再次打开leach.err文件,里面出现代码:

INITIALIZE THE LIST xListHead

SORTING LISTS ...DONE!

这样就成功了。恭喜你!

 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LEACH(Low Energy Adaptive Clustering Hierarchy)协议是一种用于无线传感器网络的能量高效路由协议。MATLAB可以用来实现LEACH协议的仿真。以下是实现LEACH协议的MATLAB仿真步骤: 1. 定义传感器节点数目和仿真区域大小 定义传感器节点数目和仿真区域大小,例如: ``` n = 100; % 传感器节点数目 x = rand(1,n)*100; % 仿真区域大小 y = rand(1,n)*100; ``` 2. 定义CH(Cluster Head)节点 定义CH节点,即负责整个簇的数据收集和汇总的节点。可以通过计算节点到BS(Base Station)节点的距离,选择最近的节点作为CH节点,例如: ``` BS = [50 50]; % BS节点坐标 distance = zeros(1,n); for i = 1:n distance(i) = sqrt((x(i)-BS(1))^2+(y(i)-BS(2))^2); % 计算节点到BS节点的距离 end [~,CHindex] = min(distance); % 选择距离最近的节点作为CH节点 ``` 3. 簇头选择 使用LEACH协议进行簇头选择,即随机选择节点作为簇头,例如: ``` p = 0.1; % 簇头选择概率 r = rand(1,n); CH = find(r < p); % 随机选择簇头节点 ``` 4. 计算节点到CH节点的距离 计算每个节点到CH节点的距离,例如: ``` distanceCH = zeros(n,length(CH)); for i = 1:n for j = 1:length(CH) distanceCH(i,j) = sqrt((x(i)-x(CH(j)))^2+(y(i)-y(CH(j)))^2); % 计算节点到CH节点的距离 end end ``` 5. 节点加入簇 将每个节点加入距离最近的CH节点的簇中,例如: ``` cluster = zeros(1,n); for i = 1:n [~,index] = min(distanceCH(i,:)); cluster(i) = CH(index); % 将节点加入最近的簇 end ``` 6. 计算簇头到BS节点的距离 计算每个簇头节点到BS节点的距离,例如: ``` distanceBS = zeros(1,length(CH)); for i = 1:length(CH) distanceBS(i) = sqrt((x(CH(i))-BS(1))^2+(y(CH(i))-BS(2))^2); % 计算簇头到BS节点的距离 end ``` 7. 节点向簇头节点发送数据 节点向所属的簇头节点发送数据,例如: ``` data = rand(1,n); % 节点数据 for i = 1:n if i ~= CHindex % 非簇头节点 j = cluster(i); data(j) = data(j) + data(i); % 将节点数据累加到簇头节点 end end ``` 8. 簇头节点向BS节点发送数据 簇头节点将所属簇的数据向BS节点发送,例如: ``` dataCH = zeros(1,length(CH)); for i = 1:length(CH) j = CH(i); dataCH(i) = data(j); % 提取簇头节点的数据 end dataBS = sum(dataCH); % 簇头节点向BS节点发送数据 ``` 9. 仿真结果可视化 绘制传感器节点、簇头节点和BS节点的分布图,以及节点数据的累加图,例如: ``` figure(1); plot(x,y,'o','MarkerSize',5,'MarkerFaceColor','b'); hold on; plot(x(CH),y(CH),'o','MarkerSize',10,'MarkerFaceColor','r'); plot(BS(1),BS(2),'p','MarkerSize',10,'MarkerFaceColor','g'); xlabel('X'); ylabel('Y'); legend('传感器节点','簇头节点','基站节点'); figure(2); bar(data); xlabel('节点'); ylabel('数据'); ``` 以上是LEACH协议的MATLAB仿真步骤,可以根据需要进行修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值