ns-3上へのspc-macの実装について

重畳符号化をする際にL2バッファのデータ量に基づき適切に電力割りあてをすることで高効率にデータ伝送をするSPC-MAC (Superposition Coding Medium Access Control)をspc-macモジュールとして実装しました。 実装はcsmaca (ns-3上へのCSMA/CAの実装について)モジュールをベースに実装しました。

spc-macの使用方法

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

ns-3.20のインストール

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

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

intro01.png

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

プログラムの配置方法

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

unzip ns-3-spc-master.zip

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

cd ns-3-spc-master

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

ns-3.20の「scratch」に「spc-mac」フォルダが追加されます。 ns-3.20の「src」に「spc-mac」フォルダが追加されます。

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

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

spc-macのチュートリアル

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

ns-3.20のインストール

プログラムの実行方法

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

cd ~/ns-allinone-3.20/ns-3.20/scratch/spc-mac/

以下のコマンドを実行することでシミュレーションを開始します。

./waf --run "spc-mac"

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

#ref(): File not found: "result.png" at page "ns-3上へのSPC-MACの実装について"

引数として --streamを指定するとランダム値を生成するシードを変更することが可能です。 ただし、変更されるのはランダムバックオフのランダム値のみです。

./waf --run "spc-mac --stream=100"

ランダム値を生成するシードを全て変更する場合は、環境変数「NS_GLOBAL_VALUE」に値を設定します。

export NS_GLOBAL_VALUE="RngRun=0"

上記の"0"の値を変更することでランダム値を生成するシードを全て変更することが可能です。

↓の図に環境変数NS_GLOBAL_VALUEの値を変更した場合の実行結果を示します。

#ref(): File not found: "result2.png" at page "ns-3上へのSPC-MACの実装について"

spc-macモジュールの詳細

論文

↓の論文は実装したSPC-MACに関するものです。

青木 勇太, 猿渡 俊介, 渡辺 尚, 重畳符号化を用いた無線通信における転送量に基づく電力割当方式, 情報処理学会研究報告, モバイルコンピューティングとユビキタス通信研究会, 2012年11月

クラス図全体像

↓の図にクラス図を示します。

class.png

spc-macモジュールは黄色で示した15個のクラスから構成されています。クラスは大きく分けてMac層の実装・Phy層の実装・その他の実装に分けることができます。

MAC層の実装

MAC層はSpcMacMacSpcMacQueueSpcMacHeaderSpcMacTrailerNodeInformationTable(Item)の5つのクラスで実装しています。それぞれのクラスの役割を説明していきます。

SpcMac

SpcMacはバックオフやNAV (Network Allocatoin Vector) などの時間の制御やDATA/ACK/RTS/CTS などのフレームの送受信、重畳符号化、電力の割り当てなどの役割を持ちます。


SpcMacQueue

SpcMacMacQueueはMAC層のキューの役割を持ちます。最大で400パケット格納することが可能です。キューにパケットが入りきらなかった場合、入りきらなかったパケットは破棄されます。


SpcMacHeader・SpcMacTrailer

SpcMacHeaderSpcMacTrailerはMAC層のヘッダを構成する役割を持ちます。

↓の図に重畳符号化DATAのフレームフォーマットを示します。

header1.png

↓の図にユニキャストDATA・ユニキャストRTS・重畳符号化RTSのフレームフォーマットを示します。

header2.png

※ TypeはユニキャストDATAの場合000、ユニキャストRTSの場合001、重畳符号化RTSの場合100が代入されます。

↓の図にユニキャストCTS・重畳符号化CTSのフレームフォーマットを示します。

header4.png

※ ユニキャストCTSの場合010、重畳符号化CTSの場合101が代入されます。

↓の図にACKのフレームフォーマットを示します。

header3.png

NodeInformationTable(Item)

NodeInformationTable (Item)はあるノードから各ノードに対するトラヒックと、あるノードから各ノードにフレームを送信する際に生じる伝搬損失を保存する役割を持ちます。

PHY層の実装

PHY層はSpcPhySpcChannelSpcPhyListenerSpcPhyStateSpcPhyStateHelperSpcPreambleの6つのクラスで実装しています。それぞれのクラスの役割を説明していきます。

SpcPhy

SpcPhyは信号の送信と受信の開始や終了を制御する役割をもちます。


SpcChannel

SpcChannlは全てのノードとの信号をやりとりして送信遅延や伝搬損失を 算出する機能を提供する役割を持ちます。送信遅延の算出にはConstantSpeedPropagationDelayModelを利用しています。伝搬損失の算出にはLogDistancePassLossModelを利用しています。


SpcPhyListener

SpcPhyListenerはPHY層で送受信したことをMAC層へ通知する役割を持ちます。具体的には、送信の開始・受信の開始・受信の成功・受信の失敗・キャリアセンス開始を通知します。


SpcPhyState

SpcPhyStateは物理インタフェースのIdle、Busy (Clear Channel Assessment)、TX (Transmission)、RX (Reception) の4 つの状態を持つクラスです。


SpcPhyStateHelper

SpcPhyStateHelperSpcPhyStateで管理している状態の状態遷移を管理する役割を持ちます。


SpcPreamble

SpcPreambleはプリアンブルとPHY層のヘッダを構成する役割を持ちます。

↓の図にプリアンブルとPHY層のヘッダのフレームフォーマットを示します。

preamble.png

POWERにはアドレス1宛てのノードに割り当てた電力を格納します。 SYMBOLSにはMACヘッダとペイロードの長さが格納されます。 N-LENGTHにはアドレス1宛てのノードのMACヘッダとペイロードの長さが格納されます。 F-LENGTHにはアドレス2宛てのノードのMACヘッダとペイロードの長さが格納されます。 Tailには0が格納されます。

その他の実装

SpcNetDevice

SpcNetDeviceはL3のモジュールとspc-macモジュールを接続するためのインタフェースの役割を担います。


SpcInterferenceHelper

SpcInterferenceHelperは、受信信号からSNR (Sginal to Noise Ratio) やPER (Packet Error Rate)を算出する役割を持ちます。PERはシャノン限界の式から受信できるかできないかを判定しています。


SpcRandomStream

SpcRandomStreamは乱数を管理する役割を持ちます。


PacketInfo

PacketInfoはパケットの構造を格納する役割を持ちます。 重畳符号パケットを生成する際のアグリゲーション時に利用します。

パラメータ一覧

↓にspc-macモジュールの主要なパラメータを示します。IEEE 802.11aをベースに値を決定しています。

パラメータ
SIFS16 [us]
DIFS34 [us]
Slot Time9 [us]
CW MIN15
CW MAX1023
RTS/CTS送信スレッショルド1000 [Byte]
RTS再送回数7
DATA再送回数7
最大アグリゲーション数10
トラヒック量測定間隔100 [ms]
受信スレッショルド-96.0 [dBm]
キャリアセンススレッショルド-99.0 [dBm]
送信ゲイン0 [dB]
受信ゲイン0 [dB]
送信電力20 [dBm]

添付ファイル: fileheader1.png 2221件 [詳細] fileheader4.png 2302件 [詳細] fileintro01.png 2398件 [詳細] filepreamble.png 2386件 [詳細] fileheader3.png 2126件 [詳細] fileheader2.png 2139件 [詳細] fileclass.png 2518件 [詳細]

  添付編集
Last-modified: 2015-01-07 (水) 15:13:45 (3618d)