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

     
  • 相关阅读:
    MongoDB
    uni-app同步缓存值 设置 读取 删除
    uni-app路由跳转
    uni-app在小程序上遇见的坑(a-b页面频繁跳转)
    unia-app页面生命周期详解
    uni-app之页面跳转(点击按钮进行页面跳转)
    02如何直接使用uni-app中提供的模板之公告滚动
    01-组件轮播
    uni-app如何只用插件市场中的插件
    uni-app在线引入阿里字体图标库
  • 原文地址:https://www.cnblogs.com/yulele/p/2951957.html
Copyright © 2011-2022 走看看