leach 分析2

leach 分析1对wireless.tcl进行了简要的分析,接下来对Uamps.tcl脚本进行分析。

set opt(Efriss_amp)   [expr [expr 1.1 * $opt(RXThresh) * 16 * $PI * $PI] / \
                            [expr $opt(bw) * $opt(Gt) * $opt(Gr) * $l * $l]]
# Etwo_ray_amp = RXThresh / (Rb Gt Gr ht^2 hr^2)
set opt(Etwo_ray_amp) [expr 1.1 * $opt(RXThresh) / \
                      [expr $opt(bw) * $opt(Gt) * $opt(Gr) * \
                            $opt(ht) * $opt(ht) * $opt(ht) * $opt(ht)]]
set opt(EXcvr)         50e-9              ;# Energy for radio circuitry
set opt(e_bf)          5e-9               ;# Beamforming energy (J/bit)
set opt(Esense)        0                  ;# Sensing energy (J/bit)
set opt(thresh_energy) 0.00               ;# Threshold for power adaptation
set opt(Pidle)         0                  
     ;# Idle power (W)
set opt(Psleep)        0                
     ;# Sleep power (W)

     set initialized 0
set rng_ [new RNG]#用于产生随机数

     首先往opt数组里面添加一些变量,并对这些变量进行初化。opt(Psleep)  opt(Pidle)set opt(thresh_energy)在ns-leach.tcl中使用到,这个是计算单位时间空闲所消耗的能量和休眠所消耗的能量。

这个脚本主要是创建leach节点:

if {$initialized == 0} {
    #remove old trace
      sens_init
        set initialized 1
        }

    # Remove old trace files.
    catch "eval exec rm [glob -nocomplain $opt(dirname)/TDMAschedule.*.txt]"
    catch "exec rm $opt(dirname)/$opt(filename).energy"
    catch "exec rm $opt(dirname)/$opt(filename).data"
    catch "exec rm $opt(dirname)/$opt(filename).alive"
    catch "exec rm $opt(dirname)/startup.energy"
    catch "exec rm $opt(dirname)/init.energy"

如果没有初始化过,则将将以前的跟踪文件删除,接着回到创建leach的函数中,创建节点:

if {$id != $opt(nn_)} {
      puts -nonewline "$id "
      #important
      set node_($id) [new MobileNode/ResourceAwareNode]
    } else {
      puts "($opt(nn_) == BS)"
      set node_($id) [new MobileNode/ResourceAwareNode $BS_NODE]
    }

如果不是簇头节点则将$opt(nn_)-1个节点设置为一般节点,将$opt(nn_)设置为BS节点。newMobileNode/ResourceAwareNode函数是在ns-ranode.tcl中。分析完这个我们接下来分析newMobileNode/ResourceAwareNode这个函数。

set node $node_($id)
   
    if {$id != $opt(nn_)} {
     
 # Set initial node energy.
     
  if {$opt(eq_energy) == 1} {
        $node set-energy $opt(init_energy) $opt(thresh_energy)
     
     } else {

由于eq-energy在leach-test中给定,将eq-energy=1;则每个节点都会对能量尽享初始化,设置节点的初始能量和门槛能量(个人理解,死亡能量)。

set high_e_nodes [list 97 19 12 87 8 22 83 55 34 72]
        if {[lsearch $high_e_nodes $id] == -1} {
          set E 2
        } else {
          set E 200
        }
        $node set-energy $E $opt(thresh_energy)
        set initf [open "$opt(dirname)/init.energy" a]
        puts $initf "$id\t$E"
        close $initf

将不属于list中的能量初始化能量设置为2,将属于list中的能量设置为200.并将初始化能量写到init.energy中,将节点id和节点初始能量写进去。

 else {
     
    # Base station has an infinite amount of energy.
     
  $node set-energy 50000 $opt(thresh_energy)
   
      }

节点问簇头节点,则将节点的初始化能量设置为50000,能量无限。

到此为止,创建节点完成并将每个节点的能量初始化完成。下一节将分析ns-ranode.tcl脚本。区分普通节点和簇头节点的不同。

接下来是配置节点信道和跟踪文件

$ns_ at 0.0 "$node_($id) start-app"   ns在0的时候启动应用,应用在ns-ranode.tcl中分析。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值