ns2中的能量模型

ns2中的能量模型主要针对无线网络,如Ad-hoc及WSN。其能量模型的实现在~ns/mobility/energy-model.h/cc,同时在~/ns/mac/wireless-phy.h/cc中进行引用,用来实现能量的控制,如发送能量、接收能量。


1. energy-model.h/cc的修改及实现

 

这里主要注意,当我们希望扩展自己的能量模型时,需要继承或者修改哪些地方。通过查看源代码,发现以下函数是虚拟的,其作用也比较明显,当我们希望利用自己的能量消费模型时,可以对其进行相应的修改继承:

 

    virtual void DecrTxEnergy(double txtime, double P_tx);
    virtual void DecrRcvEnergy(double rcvtime, double P_rcv);
    virtual void DecrIdleEnergy(double idletime, double P_idle);

    virtual void DecrSleepEnergy(double sleeptime, double P_sleep);
    virtual void DecrTransitionEnergy(double transitiontime, double P_transition);

 

 

2. tcl部分使用


默认的,NS不会启用能量模型 ,使用方式为:
$ns_ node-config -energyModel "EnergyModel" /
    -initialEnergy (焦耳)
    -rxPower (瓦)
    -txPower (瓦)
    -idlePower (瓦)
    -sleepPower (瓦)
    -sleepTime (节点开始休眠前需要等待的时间,秒)
    -transitionPower (在sleep和idle状态间切换所需的功率,瓦)
    -transitionTime (在sleep和idle状态间切换所需的时间,秒)

 

trace 文件中,能量模型部分的格式为:
energy [total remaining energy] ei [idle consumption] es [sleep consumption] et [transmition consumption] er [receiving consumption]

 

使用方法1

加入模型:   设置变量
    请根据自己实际需要配置这些变量


    set opt(engmodel) EnergyModel ;# 能量模型
    set opt(initeng) 10000.0 ;# 总能量
    set opt(txPower) 0.660 ;# 传输能量
    set opt(rxPower) 0.395 ;# 接受能量
    set opt(idlePower) 0.035 ;# 待机能量

配置node-config      
$ns_ node-config -adhocRouting $val(rp) /
        -llType $val(ll) /
        -macType $val(mac) /
        -ifqType $val(ifq) /
        -ifqLen $val(ifqlen) /
        -antType $val(ant) /
        -propType $val(prop) /
        -phyType $val(netif) /
             -energyModel $opt(engmodel) /
        -initialEnergy $opt(initeng) /
        -txPower $opt(txPower) /
        -rxPower $opt(rxPower) /
        -idlePower $opt(idlePower) /
        -topoInstance $topo /
        -agentTrace OFF /
        -routerTrace OFF /
        -macTrace ON /
        -movementTrace OFF /
        -channel $chan_1_

使用方法2 .在创建节点的时候,利用addenergymodel方法。

$node addenergymodel [new $opt(energy) $node $opt(initeng)  $opt(txPower) $opt(rxPower) ]

3. 如何在路由层或者其它层调用能量模型?
首先,在希望使用该能量模型的头文件中加入:
#include <mobilenode.h>

接着,可以获取节点的指针:
// Get pointer to the node
iNode = (MobileNode *) (Node::get_node_by_address(index));
注意其中的index一般为节点的id,也称为地址。

接着,可以获取能量模型的指针:
energy = thisnode->energy_model()->energy();

接下来,可以获得任意参数,如:
iEnergy = iNode->energy_model()->energy();


参考:

http://zhm2k.blog.163.com/blog/static/598150682009411105033716/

http://elmurod.net/wps/?p=348

 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值