ns-3上への指向性全二重通信の実装について

directionalfdwifiモジュール

ns-3上で指向性アンテナを用いた無線全二重通信の検証ができるようにdirectionalfdwifiモジュールを実装しました。 directionalfdwifiモジュールとはns-3上への全二重通信の実装に示したfdwifiモジュールを拡張したモジュールです。 directionalfdwifiモジュールでは、中継しながら全二重通信可能なRFD (Relay Full-Duplex)-MACに指向性アンテナを適用しています。directionalfdwifiモジュールを編集することで、ns-3上で指向性アンテナを用いた全二重通信のシミュレーションをすることが可能です。

wifiantenna・orientationモジュール

directionalfdwifiモジュールのアンテナモデルとしてns-3上への指向性通信の実装で示したwifiantennaモジュール、指向性アンテナやノードの方向を表すモデルとしてns-3上への指向性通信の実装で示したorientationモジュールを用いました。

directionalfdwifiのインストール方法

directionalfdwifiはns-3.20のwifiモジュールを改良して作成したため、ns-3.20のみ動作が保証されています。ここではホームディレクトリにns-3.20がインストールされていると仮定してdirectionalfdwifiの使用方法を記載します。ns-3.20のインストールは、↓を参考にして下さい。

ns-3.20のインストール

プログラムのダウンロード

まず、git(ns3-directionalfdwifi)からソースコードをダウンロードします。https://github.com/yusuke-sugiyama/ns-3-directionalfdwifiを開くと↓のページが表示されます。

intro01.png

右下のDownload ZIPをクリックすると「ns-3-directionalfdwifi-master.zip」がダウンロードできます。

プログラムの配置方法

ダウンロードした「ns-3-directionalfdwifi-master.zip」をhomeディレクトリに置いたと仮定して話を進めます。まず、以下のコマンドを利用してzipを解凍します。

unzip ns-3-directionalfdwifi-master.zip

すると、「ns-3-directionalfdwifi-master」ディレクトリが生成されるのでcdコマンドでそのディレクトリに移動します。

cd ns-3-directionalfdwifi-master

次に、「ns-3-directionalfdwifi-master/src」の中身をns-3.20の「src」に上書き、「ns-3-directionalfdwifi-master/scratch」の中身ををns-3.20の「scratch」に追加します。

ns-3.20の「scratch」に「directionafdlwifi」フォルダが追加されます。 ns-3.20の「src」に「wifiantenna」・「orientation」フォルダが追加されます。 ns-3.20の「src/wifi」・「src/antenna」の一部のソースファイルが上書きされますのでご注意ください。

cp -r src/* ../ns-allinone-3.20/ns-3.20/src/
cp -r scratch/* ../ns-allinone-3.20/ns-3.20/scratch/

最後にns-3.20のディレクトリに移動して、「waf」を用いてビルドします。

cd ~/ns-allinone-3.20/ns-3.20/
./waf configure
./waf

これで、プログラムの配置は完了です。

directionalfdwifiのチュートリアル

directionalfdwifiモジュールの ダウンロードからプログラムの配置 を行っていない場合はそちらを先にして下さい。チュートリアルでは、directionalfdwifiモジュールが使用可能であること、ホームディレクトリにns-3.20がインストールされていることとして話を進めていきます。 ns-3.20のインストールは、↓を参考にして下さい。

ns-3.20のインストール

プログラムの実行方法

まず、ns-3.20の「scratch/directionalfdwifi」ディレクトリに移動します。

cd ~/ns-allinone-3.20/ns-3.20/scratch/directionalfdwifi/

以下のコマンドを実行することでデフォルト値でシミュレーションを実行することが可能です。

./waf --run "directionalfdwifi"

↓の図に実行結果を示します。

cmd1.png

プログラムの実行結果確認方法

まず、ns-3.20の「scratch/directionalfdwifi」ディレクトリに移動します。

cd ~/ns-allinone-3.20/ns-3.20/scratch/directionalfdwifi/

catコマンドを利用してシミュレーションの実行結果を確認できます。

cat ../../data-run-xxxxxxxxxx.sca ※ xxxxxxxxxx には数字が入ります

↓の図に実行結果を示します。

cmd2.png

パラメータ

  • phy-tx-primary:全ノードのプライマリ送信の送信回数
  • phy-tx-secondary:全ノードのセカンダリ送信の送信回数
  • phy-tx-other:全ノードのAODVフレームなどその他のフレームの送信回数
  • mac-total-missed-ack:全ノードのACK待ちのタイムアウト回数
  • endTime-xxx:シミュレーションの終了時間
  • delay-xxx:データが生成されてから受信されるまでの時間

プログラムの詳細

シミュレーションのパラメータ

  • ノード数:3
  • データサイズ:1500 [Bytes]
  • データの発生間隔:0.002 [s]
  • ノード間の距離:90 [m]
  • 伝送レート: 6 [Mbps]
  • ルーティングプロトコル:AODV

アンテナのパラメータ

  • 指向性アンテナの範囲内の利得 0 [dB]
  • 指向性アンテナの範囲外の利得 -80 [dB]
  • オムニアンテナの利得 0 [dB]

トポロジ

  • ライントポロジ

↓の図にシミュレーションで用いたトポロジを示します。

topology.png

シミュレーションの終了条件

  • ノード1からノード3が1100回フレームを受信
  • シミュレーション開始から1000秒経過

directionalfdwifiの詳細

仕様説明

実装した全二重通信のプロトコルであるRFD-MACに関する論文を載せます。 適用した指向性アンテナのモデルと指向性アンテナの制御について解説したPDFを載せます。

[英語論文]

Kenta Tamaki, Yusuke Sugiyama, Ari Raptino H., Masaki Bandai , Shunsuke Saruwatari, Takashi Watanabe, Full Duplex Media Access Control for Wireless Multi-hop Networks, Proceedings of the IEEE 77th Vehicular Technology Conference (IEEE VTC2013-Spring), 2013

[日本語論文]

玉置 健太,Ari Raptino H.,杉山 佑介,猿渡 俊介,渡辺 尚,無線全二重通信を利用した中継MACプロトコルの評価,電子情報通信学会技術研究報告, vol. 112, no. 405, AN2012-50, pp. 37-42, 2013

新規に追加したファイル

ns-3上への指向性通信の実装と同じです。

  • wifiantenna/model/wifi-antenna-model.cc (h)
  • wifiantenna/model/wifi-switched-beam-antenna-model.cc (h)
  • orientation/model/orientation-model.cc (h)
  • orientation/model/constant-orientation-model.cc (h)
  • wifi/model/geography-table.cc (h)
  • wifi/model/geography-tag.cc (h)

変更したファイル

antenna/model/angles.cc (h)

変更点

  • phiとthetaを正規化

追加関数

  • Angles Inverse (void)
    phiとthetaの角度を反転する。
  • double NormalizeOverTwoPI (double a)
    引数aを0~2πとなるように正規化して正規化した値を返す。
  • double NormalizeOverPI (double a)
    引数aを0~πとなるように正規化して正規化した値を返す。

変更関数

  • Angles (double p, double t)
    phiとthetaの値を正規化するように変更。
  • Angles (Vector v)
    phiとthetaの値を正規化するように変更。
  • Angles (Vector v, Vector 0)
    phiとthetaの値を正規化するように変更。

wifi/helper/yans-wifi-helper.cc (h)

変更点

  • YansWifiPhyクラスからWifiAntennaModelを参照できるように処理を追加

追加変数

  • Ptr<WifiAntennaModel> m_antenna
    WifiAntennaModelへのポインタを格納する。

追加関数

  • SetAntenna (Ptr<WifiAntennaModel> antenna)
    m_antennaにantennaを格納する。

変更関数

  • YansWifiPhyHelper ()
    m_antennaにWifiAntennaModelへのポインタを格納する処理を追加。
  • Create (Ptr<Node> node, Ptr<WifiNetDevice> device) const
    YansWifiPhyにWifiAntennaModelのポインタを渡す処理を追加。

wifi/model/mac-low.cc (h)

変更点

  • アンテナモードごとのNAVの値が返されるようにNAVに関する変数を配列化
  • 指向性アンテナの方向を制御する処理・関数を追加
  • GeographyTableにノードの位置を登録する処理を追加

追加関数

  • void SetAntennaMode (int mode)
    アンテナモードをmodeに設定する。
  • void SetAntennaMode (Angles bet)
    角度betを基にアンテナモードを設定する。

変更関数

  • MacLow ()
  • ReceiveOk (...)
    ノードの位置情報をGeographyTableに保存する処理を追加。
  • void ForwardDown (...)
    ノードの位置情報を設定したGeographyTagをパケットに付加する処理を追加。
  • void SendDataPacket (void)
    宛先ノードがGeographyTableに存在する場合、そのノードがいる方向にアンテナモードを設定して、存在しない場合はOMNI (無指向性)をアンテナモードに設定する。
  • void SendSecondaryDataPacket (void)
    宛先ノードがGeographyTableに存在する場合、そのノードがいる方向にアンテナモードを設定して、存在しない場合はOMNI (無指向性)をアンテナモードに設定する。
  • void SendAckAfterData (...)
    宛先ノードがGeographyTableに存在する場合、そのノードがいる方向にアンテナモードを設定して、存在しない場合はOMNI (無指向性)をアンテナモードに設定する。

wifi/model/wifi-phy.cc (h)

変更点

  • WifiAntennaModelへのポインタを返す関数を追加

追加関数

  • virtual Ptr<WifiAntennaModel> GetAntenna (void) const = 0;
    WifiAntennaModelのポインタを返す。

wifi/model/yans-wifi-phy.cc (h)

変更点

  • GeographyTableクラスのポインタを追加
  • アンテナモードにより受信電力を計算するように変更

追加変数

  • Ptr<WifiAntennaModel> m_antenna
    WifiAntennaModelへのポインタを格納する。
  • Ptr<GeographyTable> m_geo
    GeographyTableへのポインタを格納する。

追加関数

  • SetAntenna (Ptr<WifiAntennaModel> antenna)
    m_antennaにantennaを格納する。
  • GetAntenna (void) const
    m_antennaを返す。

変更関数

  • YansWifiPhy ()
    m_geoにGeographyTableのポインタを追加。
  • DoDispose
    m_geoを初期化する処理を追加。

wifi/model/yans-wifi-channel.cc (h)

変更点

  • 受信電力をアンテナモードに対応した配列で取り扱うように変更
  • 送信アンテナゲインを受信電力に含めるように変更

変更関数

  • void Send (Ptr<YansWifiPhy> sender, Ptr<const Packet> packet, double txPowerDbm, WifiTxVector txVector, WifiPreamble preamble) const
    送信アンテナゲインを受信電力に含めるように変更。

添付ファイル: filedirectionalfdwifi_module.pdf 2395件 [詳細] filetopology.png 2126件 [詳細] filecmd2.png 2297件 [詳細] filecmd1.png 2076件 [詳細] fileintro01.png 2338件 [詳細]

  添付編集
Last-modified: 2014-12-04 (木) 18:28:08 (3644d)