汽车发票抵扣联什么用:在Tinyos 2.x下用TOSSIM仿真CTP协议
来源:百度文库 编辑:偶看新闻 时间:2024/04/28 07:24:52
1.让节点间可以通信
不做任何设置的话,TOSSIM中的节点是无法互相通信的。因此我们要先配置网络拓扑结构。TOSSIM默认使用基于信号强度的模型,因而需要每两个节点间的增益,这是由radio对象中的add()方法实现的,代码如下:
t = Tossim([])
r = t.radio()
r.add(src, dest, gain);
其中src中源节点,dest是目的节点,gain是源到目的的增益。由于源到目的与目的到源的增益可能是不同的,因而要分开指定。
一般的仿真,网络中都会有至少上百个节点,手动一个个添加增益是不大现实的。我们用一个文件记录所有节点对间的增益,一行一个,每行的格式如下:
gain <源节点号> <目的节点号> <增益>
<..>内用具体数值代替。
用python脚本可以轻松地将这些增益值添加到radio对象,假设文件名为topo.txt:
f = open("topo.txt","r")
lines = f.readlines()
for line in lines:
s = line.split()
if (len(s) > 0):
if s[0] == "gain":
r.add(int(s[1]), int(s[2]), float(s[3])
另外,TOSSIM使用CPM算法仿真RF模块的噪声。该算法需要先读入若干个噪声记录,然后生成噪声模型。我们使用斯坦福大学Meyer实验室提供的噪声记录meyer-heavy.txt,它是每行一个噪声值。接下来我们先为10个节点各自添加噪声值:
noise = open("meyer-heavy.txt", "r")
lines = noise.readlines()
for line in lines:
str = line.strip()
if (str != ""):
val = int(str)
for i in range(0, 10):
m = t.getNode(i)
m.addNoiseTraceReading(val)
再用CPM算法为每个节点生成噪声模型:
for i in range(0,10):
t.getNode(i).createNoiseModel()
现在节点间终于可以通信了。何以见得?拿最简单的示例程序tinyos-2.x/apps/RadioCountToLedsC来试试手先:
1) 在tinyos-2.x/apps/RadioCountToLedsC目录下新建一个test.py文件,写入如下内容:
#!/usr/bin/env python
from TOSSIM import *
from random import *
import sys
nrNodes = 225
t = Tossim([])
r = t.radio()
f = open("topo.txt", "r")
lines = f.readlines()
for line in lines:
s = line.split()
if len(s) > 0:
if s[0] == "gain":
r.add(int(s[1]), int(s[2]), float(s[3]))
noise = open("meyer-short.txt", "r")
lines = noise.readlines()
for line in lines:
str = line.strip()
if(str != ""):
val = int(str)
for i in range(0,nrNodes):
m = t.getNode(i)
m.addNoiseTraceReading(val)
for i in range(0, nrNodes):
t.getNode(i).createNoiseModel()
for i in range(0, nrNodes):
time = randint(t.ticksPerSecond(), 10 * t.ticksPerSecond())
t.getNode(i).bootAtTime(time)
t.addChannel("RadioCountToLedsC", sys.stdout)
t.addChannel("boot", sys.stdout)
for i in range(0, 100000):
t.runNextEvent()
2) 从上面的代码可以看到,test.py需要读入两个文件topo.txt和meyer-short.txt,去
tinyos-2.x/apps/tests/TestNetwork/找到它们并拷到当前目录下。
3) 编译TOSSIM程序:make micaz sim,修改test.py权限:chmod +x test.py,运行之:./test.py,接着便是华丽的刷屏...仔细的看下输出,可以看到各节点的发送和接收状况。
2. 仿真CTP协议
接下来要仿真的CTP协议比RadioCountToLedsC可要复杂的多,但仿真的方法还是一样的。我们先使用tinyos- 2.x/apps/tests/TestNetwork中现成的代码进行仿真,看看效果如何。先了解下这个程序的功能:用到了collection和 dissemination,设了一个根节点,周期性的把当前节点的父节点地址、ETX值等信息通过汇聚树发送到基站,发送周期可以通过 dissemination来改变。
闲话少说,先仿真之:
make micaz sim
export PYTHONPATH=$TOSROOT/support/sdk/python
python test.py
输出许多调试信息,大多数都是ForwardingEngine的,怎么不见路由引擎和链路估计的信息呢?且看test.py,内容与上次的差别不大。注意到TreeRouting的channel被注释了,而LinkEstimator的压根就没加。加之:
t.addChannel("TreeRouting", sys.stdout)
t.addChannel("LI", sys.stdout)
再仿真一次,可以就看到路由引擎和链路估计的信息。
至此,仿真CTP协议已没有问题,接下去就是对这些调试信息的分析,这应该是下一个话题了。
不做任何设置的话,TOSSIM中的节点是无法互相通信的。因此我们要先配置网络拓扑结构。TOSSIM默认使用基于信号强度的模型,因而需要每两个节点间的增益,这是由radio对象中的add()方法实现的,代码如下:
t = Tossim([])
r = t.radio()
r.add(src, dest, gain);
其中src中源节点,dest是目的节点,gain是源到目的的增益。由于源到目的与目的到源的增益可能是不同的,因而要分开指定。
一般的仿真,网络中都会有至少上百个节点,手动一个个添加增益是不大现实的。我们用一个文件记录所有节点对间的增益,一行一个,每行的格式如下:
gain <源节点号> <目的节点号> <增益>
<..>内用具体数值代替。
用python脚本可以轻松地将这些增益值添加到radio对象,假设文件名为topo.txt:
f = open("topo.txt","r")
lines = f.readlines()
for line in lines:
s = line.split()
if (len(s) > 0):
if s[0] == "gain":
r.add(int(s[1]), int(s[2]), float(s[3])
另外,TOSSIM使用CPM算法仿真RF模块的噪声。该算法需要先读入若干个噪声记录,然后生成噪声模型。我们使用斯坦福大学Meyer实验室提供的噪声记录meyer-heavy.txt,它是每行一个噪声值。接下来我们先为10个节点各自添加噪声值:
noise = open("meyer-heavy.txt", "r")
lines = noise.readlines()
for line in lines:
str = line.strip()
if (str != ""):
val = int(str)
for i in range(0, 10):
m = t.getNode(i)
m.addNoiseTraceReading(val)
再用CPM算法为每个节点生成噪声模型:
for i in range(0,10):
t.getNode(i).createNoiseModel()
现在节点间终于可以通信了。何以见得?拿最简单的示例程序tinyos-2.x/apps/RadioCountToLedsC来试试手先:
1) 在tinyos-2.x/apps/RadioCountToLedsC目录下新建一个test.py文件,写入如下内容:
#!/usr/bin/env python
from TOSSIM import *
from random import *
import sys
nrNodes = 225
t = Tossim([])
r = t.radio()
f = open("topo.txt", "r")
lines = f.readlines()
for line in lines:
s = line.split()
if len(s) > 0:
if s[0] == "gain":
r.add(int(s[1]), int(s[2]), float(s[3]))
noise = open("meyer-short.txt", "r")
lines = noise.readlines()
for line in lines:
str = line.strip()
if(str != ""):
val = int(str)
for i in range(0,nrNodes):
m = t.getNode(i)
m.addNoiseTraceReading(val)
for i in range(0, nrNodes):
t.getNode(i).createNoiseModel()
for i in range(0, nrNodes):
time = randint(t.ticksPerSecond(), 10 * t.ticksPerSecond())
t.getNode(i).bootAtTime(time)
t.addChannel("RadioCountToLedsC", sys.stdout)
t.addChannel("boot", sys.stdout)
for i in range(0, 100000):
t.runNextEvent()
2) 从上面的代码可以看到,test.py需要读入两个文件topo.txt和meyer-short.txt,去
tinyos-2.x/apps/tests/TestNetwork/找到它们并拷到当前目录下。
3) 编译TOSSIM程序:make micaz sim,修改test.py权限:chmod +x test.py,运行之:./test.py,接着便是华丽的刷屏...仔细的看下输出,可以看到各节点的发送和接收状况。
2. 仿真CTP协议
接下来要仿真的CTP协议比RadioCountToLedsC可要复杂的多,但仿真的方法还是一样的。我们先使用tinyos- 2.x/apps/tests/TestNetwork中现成的代码进行仿真,看看效果如何。先了解下这个程序的功能:用到了collection和 dissemination,设了一个根节点,周期性的把当前节点的父节点地址、ETX值等信息通过汇聚树发送到基站,发送周期可以通过 dissemination来改变。
闲话少说,先仿真之:
make micaz sim
export PYTHONPATH=$TOSROOT/support/sdk/python
python test.py
输出许多调试信息,大多数都是ForwardingEngine的,怎么不见路由引擎和链路估计的信息呢?且看test.py,内容与上次的差别不大。注意到TreeRouting的channel被注释了,而LinkEstimator的压根就没加。加之:
t.addChannel("TreeRouting", sys.stdout)
t.addChannel("LI", sys.stdout)
再仿真一次,可以就看到路由引擎和链路估计的信息。
至此,仿真CTP协议已没有问题,接下去就是对这些调试信息的分析,这应该是下一个话题了。
tinyos简介
仿盛大1.85版登陆器在那下
最终幻想x那下在载啊!
英雄X魔王在哪下?
X man在哪可以下
在通话状态下怎么输入x
那里可以下在《X战记》动画片
如何在xpsp2下使用x-scan
用flashget可以下情书和x-man吗?在哪下?
谁有电影X档案的下在地址 用迅雷能下的
51期 圣诞节特辑的X-MAN用迅雷在哪里可以下到?
谁能告诉我在哪下《觉醒仿如昨日》全集?免费!
仿DKU-5数据线哪里可以下载驱动?市面上仿DKU-5线一般使用什么芯片做的?对应的驱动在哪可以下?
请问怎么在LINUX下通过802.1X认证上网
x的0.09次方在VB下怎么表达???
哪位知道X-JAPAN的《TEARS》MTV 在哪里下?
哪位知道X-JAPAN的《TEARS》MTV 在哪里下?
X战记中Forever love 在哪里有下??
itunes有可以在9X下运行的吗??
在哪能下到SBC-2410X的光盘
韩国综艺x man 60期在哪下?
在x下,怎样查看硬盘有无坏道.
在哪能下到x-japan的手机铃声呢
X-SCAN能在winxp下运行吗?