内容发布更新时间 : 2025/1/8 13:44:59星期一 下面是文章的全部内容请认真阅读。
在Tinyos 2.x下用TOSSIM仿真CTP协议
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(\lines = f.readlines() for line in lines: s = line.split() if (len(s) > 0):
if s[0] == \
r.add(int(s[1]), int(s[2]), float(s[3])另外,TOSSIM使用CPM算法仿真RF模块的噪声。该算法需要先读入若干个噪声记录,然后生成噪声模型。我们使用斯坦福大学Meyer实验室提供的噪声记录meyer-heavy.txt,它是每行一个噪声值。接下来我们先为10个节点各自添加噪声值:noise = open(\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 sysnrNodes = 225 t = Tossim([])
r = t.radio()f = open(\lines = f.readlines() for line in lines: s = line.split() if len(s) > 0: if s[0] == \
r.add(int(s[1]), int(s[2]), float(s[3]))noise = open(\
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())