Send Your Paper/Abstract to nsallinone@gmail.com for Implementation/Guidance

Friday, 13 March 2015

Aqusim (Under Water Sensor Network) in ns2

Overview: 


Underwater acoustic communication is a technique of sending and receiving message below water. There are several ways of employing such communication but the most common is using hydrophones. Under water communication is difficult due to factors like multi-path propagation, time variations of the channel, small available bandwidth and strong signal attenuation, especially over long ranges. In underwater communication there are low data rates compared to terrestrial communication, since underwater communication uses acoustic waves instead of electromagnetic waves.

Aqua-Sim Overview

Aqua-Sim can effectively simulate acoustic signal attenuation and packet collisions in underwater sensor networks. Moreover, Aqua-Sim supports three-dimensional deployment. Further, Aqua-Sim can easily be integrated with the existing codes in NS-2. Aqua-Sim is in parallel with the CMU wireless simulation package. As shown in the figure below, Aqua-Sim is independent of the wireless simulation package and is not affected by any change in the wireless package. On the other hand, any change to Aqua-Sim is also confined to itself and does not have any impact on other packages in NS-2. In this way, Aqua-Sim can evolve independently.





Advantages of Aqua-Sim 

  • Discrete-event driven network simulator 
  • Support 3D networks and mobile networks 
  • Simulate underwater acoustic channels with high fidelity 
  • Implement a complete protocol stack from physical layer to application layer

    Aqua-sim in ns2:

    TCL file:
     set opt(chan)               Channel/UnderwaterChannel  
     set opt(prop)               Propagation/UnderwaterPropagation  
     set opt(netif)               Phy/UnderwaterPhy  
     set opt(mac)               Mac/UnderwaterMac/BroadcastMac  
     set opt(ifq)               Queue/DropTail  
     set opt(ll)                    LL  
     set opt(energy)     EnergyModel  
     set opt(txpower)    0.6  
     set opt(rxpower)    0.3  
     set opt(initialenergy) 10000  
     set opt(idlepower)   0.01  
     set opt(ant)      Antenna/OmniAntenna ;#we don't use it in underwater  
     set opt(filters)    GradientFilter  ;# options can be one or more of   
                     ;# TPP/OPP/Gear/Rmst/SourceRoute/Log/TagFilter  
     set opt(max_pkts)          300  
     set opt(interval_)          0.2 ;# [lindex $argv 0]   
     set opt(pkt_len)          80; #[lindex $argv 2] ;# pkt length of cbr  
     # the following parameters are set fot protocols  
     set opt(bit_rate)             5.0e3 ;#[lindex $argv 1];#1.0e4  ;#bandwidth of the phy link  
     set opt(encoding_efficiency)     1  
     set opt(ND_window)          1  
     set opt(ACKND_window)         1  
     set opt(PhaseOne_window)       3  
     set opt(PhaseTwo_window)       1  
     set opt(PhaseTwo_interval)      0.5  
     set opt(IntervalPhase2Phase3)     1   
     set opt(duration)           0.1  
     set opt(PhyOverhead)         8   
     set opt(large_packet_size)      480 ;# 60 bytes  
     set opt(short_packet_size)      40 ;# 5 bytes  
     set opt(PhaseOne_cycle)        4 ;  
     set opt(PhaseTwo_cycle)        2 ;  
     set opt(PeriodInterval)        2  
     set opt(transmission_time_error)   0.0001;   
     set opt(dz)                   10  
     set opt(hop)                        7 ;#     [lindex $argv 4]  
     set opt(ifqlen)                 50     ;# max packet in ifq  
     set opt(nn)                       [expr $opt(hop)+1] ;#5     ;# number of nodes in the network  
     set opt(layers)                  1  
     set opt(x)                       300     ;# X dimension of the topography  
     set opt(y)                      300 ;# Y dimension of the topography  
     set opt(z)                     10  
     set opt(seed)                       648.88  
     set opt(stop)                       1000 ;#[lindex $argv 3] ;#150     ;# simulation time  
     set opt(prestop)                 80   ;# time to prepare to stop  
     set opt(tr)                       "uw_rwp.tr"     ;# trace file  
     set opt(nam)                   "uw_rwp.nam" ;# nam file  
     set opt(adhocRouting)              Vectorbasedforward   
     set opt(width)                   20  
     set opt(adj)                    10  
     set opt(interval)                 0.001  
     set start_time                    10  
     # ==================================================================  
     LL set mindelay_          50us  
     LL set delay_               25us  
     LL set bandwidth_          0     ;# not used  
     #Queue/DropTail/PriQueue set Prefer_Routing_Protocols  1  
     # unity gain, omni-directional antennas  
     # set up the antennas to be centered in the node and 1.5 meters above it  
     Antenna/OmniAntenna set X_ 0  
     Antenna/OmniAntenna set Y_ 0  
     Antenna/OmniAntenna set Z_ 1.5  
     Antenna/OmniAntenna set Z_ 0.05  
     Antenna/OmniAntenna set Gt_ 1.0  
     Antenna/OmniAntenna set Gr_ 1.0  
     Mac/UnderwaterMac set bit_rate_ $opt(bit_rate)  
     Mac/UnderwaterMac set encoding_efficiency_ $opt(encoding_efficiency)  
     #Mac/UnderwaterMac/AlohaOverhear set MaxResendInterval_ 0.2  
     #Mac/UnderwaterMac/AlohaOverhear set DeltaDelay_ 1  
     Node/MobileNode/UnderwaterSensorNode set position_update_interval_ 1.0  
     # Initialize the SharedMedia interface with parameters to make  
     # it work like the 914MHz Lucent WaveLAN DSSS radio interface  
     Phy/UnderwaterPhy set CPThresh_ 100 ;#10.0  
     Phy/UnderwaterPhy set CSThresh_ 0 ;#1.559e-11  
     Phy/UnderwaterPhy set RXThresh_ 0  ;#3.652e-10  
     #Phy/UnderwaterPhy set Rb_ 2*1e6  
     Phy/UnderwaterPhy set Pt_ 0.2818  
     Phy/UnderwaterPhy set freq_ 25 ;#frequency range in khz   
     Phy/UnderwaterPhy set K_ 2.0  ;#spherical spreading  
     # ==================================================================  
     # Main Program  
     # =================================================================  
     #  
     # Initialize Global Variables  
     #   
     #set sink_ 1  
     #remove-all-packet-headers   
     set ns_ [new Simulator]  
     set topo [new Topography]  
     $topo load_cubicgrid $opt(x) $opt(y) $opt(z)  
     #$ns_ use-newtrace  
     set tracefd     [open $opt(tr) w]  
     $ns_ trace-all $tracefd  
     set nf [open $opt(nam) w]  
     $ns_ namtrace-all-wireless $nf $opt(x) $opt(y)  
     set total_number [expr $opt(nn)-1]  
     set god_ [create-god $opt(nn)]  
     set chan_1_ [new $opt(chan)]  
     global defaultRNG  
     $defaultRNG seed $opt(seed)  
     $ns_ node-config -adhocRouting $opt(adhocRouting) \  
                -llType $opt(ll) \  
                -macType $opt(mac) \  
                -ifqType $opt(ifq) \  
                -ifqLen $opt(ifqlen) \  
                -antType $opt(ant) \  
                -propType $opt(prop) \  
                -phyType $opt(netif) \  
                #-channelType $opt(chan) \  
                -agentTrace ON \  
          -routerTrace ON \  
          -macTrace ON \  
          -movementTrace ON \  
          -topoInstance $topo\  
          -energyModel $opt(energy)\  
          -txpower $opt(txpower)\  
          -rxpower $opt(rxpower)\  
          -initialEnergy $opt(initialenergy)\  
          -idlePower $opt(idlepower)\  
          -channel $chan_1_  
     set node_(0) [$ns_ node 0]  
     #$node_(0) set sinkStatus_ 1  
     #$node_(0) set passive 1  
     $god_ new_node $node_(0)  
     $node_(0) set passive 1  
     set a_(0) [new Agent/Null]  
     $node_(0) set-mobilitypattern RWP  
     $node_(0) set max_speed 5  
     $node_(0) set min_speed 1  
     $ns_ attach-agent $node_(0) $a_(0)  
     for {set i 1} {$i<$total_number} {incr i} {  
     set node_($i) [$ns_ node $i]  
     $node_($i) set sinkStatus_ 1  
     $god_ new_node $node_($i)  
     $node_($i) set-cx  50  
     $node_($i) set-cy  50  
     $node_($i) set-cz  0  
     $node_($i) set_next_hop [expr $i-1] ;# target is node 0   
     $node_($i) set-mobilitypattern RWP  
     $node_($i) set max_speed 5  
     $node_($i) set min_speed 1  
     }  
     #puts "the total number is $total_number"  
     set node_($total_number) [$ns_ node $total_number]  
     $god_ new_node $node_($total_number)  
     $node_($total_number) set-cx 50  
     $node_($total_number) set-cy 50  
     $node_($total_number) set-cz 0  
     $node_($total_number) set_next_hop [expr $total_number-1] ;# target is node 0   
     $node_($total_number) set-mobilitypattern RWP  
     $node_($total_number) set max_speed 5  
     $node_($total_number) set min_speed 1  
     set a_($total_number) [new Agent/UDP]  
     $ns_ attach-agent $node_($total_number) $a_($total_number)  
     $ns_ connect $a_($total_number) $a_(0)  
     set cbr_(0) [new Application/Traffic/CBR]  
     $cbr_(0) set packetSize $opt(pkt_len)  ;#80  
     $cbr_(0) set interval_ $opt(interval_)  
     $cbr_(0) set random 1  
     $cbr_(0) set maxpkts_ $opt(max_pkts)  
     $cbr_(0) attach-agent $a_($total_number)  
     for {set i 0} { $i < $opt(nn)} {incr i} {  
      $ns_ initial_node_pos $node_($i) 2  
      $node_($i) setPositionUpdateInterval 0.01  
      $node_($i) random-motion 0  
      $ns_ at 5.0 "$node_($i) start-mobility-pattern"  
     }  
     $ns_ at $start_time "$cbr_(0) start"  
     #$ns_ at 15 "$a_($total_number) cbr-start"  
     #$ns_ at $start_time "$a_($total_number) exp-start"  
     #$ns_ at 4 "$a_(0) cbr-start"  
     #$ns_ at 2.0003 "$a_(2) cbr-start"  
     #$ns_ at 0.1 "$a_(0) announce"  
     puts "+++++++AFTER ANNOUNCE++++++++++++++"  
     ;#$ns_ at $opt(stop).001 "$a_(0) terminate"  
     ;#$ns_ at $opt(stop).002 "$a_($total_number) terminate"  
     for {set i 1} {$i<$total_number} {incr i} {  
     #;$ns_ at $opt(stop).002 "$a_($i) terminate"  
          $ns_ at $opt(stop).002 "$node_($i) reset"  
     }  
     $ns_ at $opt(stop).003 "$god_ compute_energy"  
     $ns_ at $opt(stop).004 "$ns_ nam-end-wireless $opt(stop)"  
     $ns_ at $opt(stop).005 "puts \"NS EXISTING...\"; $ns_ halt"  
      puts $tracefd "vectorbased"  
      puts $tracefd "M 0.0 nn $opt(nn) x $opt(x) y $opt(y) z $opt(z)"  
      puts $tracefd "M 0.0 prop $opt(prop) ant $opt(ant)"  
      puts "starting Simulation..."  
      $ns_ run  
    
    
    




    OUTPUTS:

    NAM Window:


    Trace File:





    AQUSIM 3D View: