2016-11-18 5 views
0

Omnet ++シグナルに基づくベクトルを使用して時間の関数として全体的な配信率を計算したいですか?複数のソースと1つのシンクだけが存在する場合、どのように達成できますか?Omnet ++シグナルに基づくベクトルの集計

たとえば、固定APにデータを送信するモバイルノードが10台あり、配信率は(受信/送信パケット)と同じですが、APは受信パケットの量だけを知っています。

私は、次の信号と統計を宣言した:APについては

:ノードの場合

@signal[receivedBndl](type = "int"); 
@statistic[receivedBundle](title="ReceivedBundle";source=receivedBndl;record=count,mean,last,vector); 

@signal[sentBndl](type = "int"); 
@statistic[sentBundle](title="SentBundle";source=sentBndl;record=count,mean,last,vector); 

がで配信比率を計算する別の@statisticsを作成することが可能ですこの2つの信号で時間の関数?

おかげで、

答えて

2

これは、あなたはトップレベルのネットワークモジュール自体の代わりに、実際のノード上で、あなたの統計リスナーをインストールする必要がありますので、単一のノードに関連する何かよりも、より多くのネットワーク全体の統計のようなものです。 OMNeT ++シグナルは包含チェーン上を伝播し、特定のノードに送信された信号はすべて、包含するネットワークモジュールにも配信されます。これにより、ネットワーク上に統計情報をインストールし、そこに与えられた信号を取得することができます(あまりにも)。

これを達成するために、実際に送信/受信されたcPacketオブジェクトを(実際には整数としてカウントされないように)送出するコードを書き直します。統計情報のcount()関数を使用して、パケット数をカウントすることもできます。 APのために

:ノードの場合

@signal[receivedBndl](type = cPacket); 

@signal[sentBndl](type = cPacket); 

それぞれ実際には、送信された/パケットが、今では送信/受信モジュール(およびそれ以上のもの)に放出された受信として、あなたはインストールすることができますトップレベルモジュールの統計量を集計し、単一の統計値にまとめます。

@statistic[deliveryratio](source=count(receivedBndl)/count(sentBndl); record=last); 

この最後のl ineはトップレベルモジュールに2つのシグナルリスナーをインストールし、統計は各モジュールがネットワーク内の任意の場所でパケットを生成または受信するたびにその値を計算します。

+0

あなたが私に何を言っているのかよく分かっていれば、すべての送信者と受信者のモジュールから、これらの統計を処理するグローバルモジュールに信号を送信する必要があります。ベクトルを使用して統計値と時間に対する配送率を引き出します。 – HanniBaL90

+0

また、合計とカウントの違いは何ですか、少し混乱ですか?ありがとう、 – HanniBaL90

+0

いいえ、トップレベルモジュールにすべての信号を送る必要はありません。各信号は、実際のモジュールに放射することができます。統計*をトップレベルモジュールに添付することを提案していました。モジュールに放出された信号は自動的にOMNeT ++のすべての親モジュールおよびモジュールに配信されます。これは、デフォルトでは、トップレベルネットワークモジュールが、ネットワーク内の任意のモジュールに送信されたすべての信号を受信することを意味します。実際のemit()コードを修正するのではなく、トップレベルで統計を集めるだけです。 (COUNT対SUMについてはあなたが正しいです、それは誤解を招き、回答を修正しました) – Rudi

関連する問題