gain <源节点号> <目的节点号> <增益>
<..>内用具体数值代替。
用python脚本可以轻松地将这些增益值添加到radio对象,test.py文件里的下面这段代码就是做这个事的。
f = open("sparse-grid.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]))
其中sparse-grid.txt中我们看到类似后面的语句gain 0 1 -90.80,这就是表明0号点到1号点的增益,一般-70 -80的都是能通信的, -120或者更小就无法通信了。
另外,TOSSIM使用CPM算法仿真RF模块的噪声。该算法需要先读入若干个噪声记录,然后生成噪声模型。我们使用斯坦福大学Meyer实验室提供的噪声记录meyer-heavy.txt,它是每行一个噪声值。下面的test.py代码是为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)
那么我们做了这些东西都是干嘛的?说白了就是构造虚拟的点你来设定他们之间的通信增益啥的,然后用来调试你的代码。
test.py里还有下面的代码,这代码就是打开dbg通道的,下面代码即表明Forwarder和TestNetworkC的deg信息都会打印出来,终端打的DEBUG (x)表示的是第x个节点的deg信息。如果自己想随意添加deg信息,只要带上字样就行,参考下面的代码。
#t.addChannel("AM", sys.stdout)
#t.addChannel("TreeRouting", sys.stdout)
#t.addChannel("TestNetworkC", sys.stdout)
#t.addChannel("Route", sys.stdout)
#t.addChannel("PointerBug", sys.stdout)
#t.addChannel("QueueC", sys.stdout)
#t.addChannel("Gain", sys.stdout)
t.addChannel("Forwarder", sys.stdout)
t.addChannel("TestNetworkC", sys.stdout)
#t.addChannel("App", sys.stdout)
#t.addChannel("Traffic", sys.stdout)
#t.addChannel("Acks", sys.stdout)
while (t.time() < 1000 * t.ticksPerSecond()):
t.runNextEvent()