zoukankan      html  css  js  c++  java
  • TOSSIM仿真之网络配置

      无线传感器网络时用到仿真软件TOSSIM,仿真时遇到一个核心问题就是网络的配置。如某论文里这样写到:"本文采用TOSSIM软件对xx算法和xx算法进行仿真,具体的网络配置为:600个节点随机分布于400m×400m区域中,无线信道对称,标准室内环境,背景噪声为-105.0dBm,高斯白噪声为4dB,节点传输速率为1Mbps,节点灵敏度为-108.0dBm,传输距离为50m"。一直不是很明白这些参数在仿真中是如何实现的,今天看了三份英文文档,稍微了解了一些。

      原来,TinyOS1.x中,传输过程中发生的错误是以概率的方式实现的。TOSSIM默认会查看“lossy.nss”文件,里面的内容格式如下:

      <mote ID>:<mote ID>:bit error rate

      例如:

      0:1:0.012333
      1:0:0.009112
      1:2:0.013196

      表示 0号节点 发送1bit数据给 1号节点,出错的概率是1.2%,1号节点 发送1bit数据给 0号节点,出错的概率是0.9%,依次类推。

      在TinyOS2.x中,噪声模型更加复杂。无线链路的好坏主要由两个因素决定:无线信号(radio)的强弱和节点所处环境的背景噪声。因此,为了使仿真更加逼真,这两个数值都必须提供。南加州大学的研究人员已经构建了一个链路层模型。下面依次讲下这两个关键因素:

      无线信号在传输过程中,可能会产生反射、衍射等,导致信号强度发生变化,这种变化可以总结为两个方面:

    (1)相对于距离的增长,信号强度呈指数次衰减;

    (2)如果距离一定,信号强度是随机的,呈对数正态分布。

      另一个关键因素就是背景噪声,TOSSIM采用CPM(近模式匹配算法)仿真节点接收时遇到的射频噪声。CPM采用一个噪声记录作为输入,产生一个统计学模型,仿真射频脉冲及相关现象。下面是一段TinyOS文档中给出的仿真本:

    #! /usr/bin/python
    from TOSSIM import *
    import sys
    
    t = Tossim([])
    r = t.radio()
    f = open("topo.txt", "r")
    
    for line in f:             //这段循环给出了节点间的信号强度
      s = line.split()
      if s:
        print " ", s[0], " ", s[1], " ", s[2];
        r.add(int(s[0]), int(s[1]), float(s[2]))
    
    t.addChannel("RadioCountToLedsC", sys.stdout)
    t.addChannel("Boot", sys.stdout)
    
    noise = open("meyer-heavy.txt", "r")       //这段循环给出了每个节点的噪声模型
    for line in noise:
      str1 = line.strip()
      if str1:
        val = int(str1)
        for i in range(1, 4):
          t.getNode(i).addNoiseTraceReading(val)
    
    for i in range(1, 4):
      print "Creating noise model for ",i;
      t.getNode(i).createNoiseModel()          //创建了噪声模型,后面开始启动节点
    
    t.getNode(1).bootAtTime(100001);
    t.getNode(2).bootAtTime(800008);
    t.getNode(3).bootAtTime(1800009);
    
    for i in range(100):
      t.runNextEvent()

    问题的关键是如何生成上面的“topo.txt”和“meyer-heavy.txt”。TOSSIM有一个工具可以根据理论模型构建一个网络拓扑结构。这个工具是用Java写的,叫作net.tinyos.sim.PropagationModel。该工具使用一个配置文件作为输入,输出一个文档,里面给出了节点间的信号衰减,及单个节点的背景噪声。命令如下所示:
      java net.tinyos.sim.PropagationModel config.txt
      在配置文件config.txt中,我们设置网络参数,工具会自动生成相应的数据。

    配置文件中内容怎么写,我们以一些实例说明:
    例:49个节点均匀分布于100m×100m的正方形区域中,放在一个足球场环境中,背景噪声为-105.0dBm,标准差为4.0dB的高斯白噪声。最终的配置文件为:
        PATH_LOSS_EXPONENT = 4.7; 
        SHADOWING_STANDARD_DEVIATION = 3.2; 
        D0 = 1.0; 
        PL_D0 = 55.4; 

        NOISE_FLOOR = -105.0; 
        S11 = 0.9; 
        S12 = -0.7; 
        S21 = -0.7; 
        S22 = 1.2; 
        WHITE_GAUSSIAN_NOISE = 4; 

        TOPOLOGY = 2; 
        NUMBER_OF_NODES = 49; 
        TERRAIN_DIMENSIONS_X = 100.0; 
        TERRAIN_DIMENSIONS_Y = 100.0;
    其中:
    D0:规定了一对节点间的最小距离,通常是1m;
    PL_D0、PATH_LOSS_EXPONENT、SHADOWING_STANDARD_DEVIATION三个参数设置需根据环境:
    WHITE_GAUSSIAN_NOISE:给出了附加的高斯白噪声的标准差(4dB-5dB之间);
    NOISE_FLOOR:是网络所处的背景噪声(-110dBm到-104dBm之间);
    S = [S11 S12; S21 S22][3.7 -3.3; -3.3 6.0]表示高水平不对称;[0.9 -0.7; -0.7 1.2]表示低水平不对称;
    TOPOLOGY:有四个值可供选择。1表示GRID,区域被划分成网格,每个格中放置一个节点;2表示UNIFORM,可以看作GRID的一种变形,同样是将整个区域划分成一个个小区域,不过每个小区域中节点是随机放置的;3表示RANDOM,节点随机分布于整个区域中;4表示FILE,节点的位置又文件给出。
    NUMBER_OF_NODES:如果是GRID或UNIFORM,每个节点的区域都必须是正方形;如果网络位置由用户直接给出,则不需要给出节点数。
    TERRAIN_DIMENSIONS_X:网络所处区域的长度。
    TERRAIN_DIMENSIONS_Y:网络所处区域的宽度。如果是均匀分布,X和Y必须相同。
    GRID_UNIT:节点间距离,网络分布为GRID时需要使用。
    TOPOLOGY_FILE:用户规定的节点位置的文件名。

    写好网络配置文件后,运行命令:

        $ javac LinkLayerModel.java

        $ java LinkLayerModel configurationFileName

        即可得到这样的拓扑文件,仿真时直接使用即可:

        gain 1 2 -58.3 
      gain 2 1 -60.5 
      gain 1 3 -72.8 
      gain 3 1 -75.3 
      gain 2 3 -77.9 
      gain 3 2 -75.4 
      noise 1 -107.3 5 
      noise 2 -105.2 5 
      noise 3 -103.1 5

    主要参考文档:

    TinyOS1.x中TOSSIM网络配置:http://www.cs.berkeley.edu/~pal/pubs/nido.pdf

    TinyOS2.x中TOSSIM网络配置:http://docs.tinyos.net/tinywiki/index.php/TOSSIM#Variables

    配置文件格式:http://www.tinyos.net/tinyos-2.x/doc/html/tutorial/usc-topologies.html

     
  • 相关阅读:
    haproxy 2.5 发布
    cube.js sql 支持简单说明
    基于graalvm 开发一个cube.js jdbc driver 的思路
    apache kyuubi Frontend 支持mysql 协议
    oceanbase 资源池删除说明
    基于obd 的oceanbase 扩容说明
    jfilter一个方便的spring rest 响应过滤扩展
    cube.js schema 定义多datasource 说明
    typescript 编写自定义定义文件
    meow 辅助开发cli 应用的工具
  • 原文地址:https://www.cnblogs.com/yulele/p/2951957.html
Copyright © 2011-2022 走看看