![]() ![]() ![]() | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
tya | 投稿日時: 2012/10/26 4:17 |
半人前 ![]() ![]() 登録日: 2010/11/30 居住地: 投稿: 21 |
指向性受信の切り替えについて いつもお世話になっております.
当方,QualNet5.0.2を使っているのですが、ここで指向性アンテナの受信切り換えについての質問です. 意図的に以下のような動作検証を行いたいと考えております. *1のように、無指向性でRTSを送信後、瞬時にある方向に対して指向性受信ビームを向けるにはどういった処理を行えばよいのでしょうか? *1 A -RTS-> B Aは無指向性でRTSを送信後 瞬時にBの方向に指向性受信ビームを向ける <-CTS- Bは指向性でCTSを返信しAは指向性受信ビームで受信 (Bは無指向性でCTSを返信後,瞬時に指向性受信ビームを向けるといった処理もさせたいです) RTSなどを送信する際は、自身のノード情報より、指向性で送信するか無指向性で送信するかのどちらかの関数に入ります。 前者の場合、送信後は指向性受信ビームで待機します。 後者の場合、送信後は無指向性受信ビームで待機します。 この後者の場合において、送信後は指向性受信ビームで待機させたいのです。 しかし、TransmissionEnd関数のあとや、無指向性で待機している最中に干渉波もしくは希望波の到来を処理するSignalArrivalFromChannel関数で、意図的に指向性にする(Switchedの変数を変更する)処理をさせた場合 AntennaSwitchedBeamGainForThisDirection関数内や AntennaSwitchedBeamGainForThisDirectionWithPatternIndex関数内にある antennaMaxGain_dBi = element[SWITCHED_AZIMUTH_INDEX[switched->patternIndex].gains[angleIndex]; のコード部分で 「qualnet.exe の 0x0074fe6b でハンドルされていない例外が発生しました: 0xC0000005: 場所 0xfeef01be を読み込み中にアクセス違反が発生しました。」 というエラーが発生してしまいました. Switchedの変数を意図的に変更したことによるものなのですが,恐らく、AntennaPatternElementsなどが噛み合ってないからだと思います. デバックと自分の力量不足で申し訳ないのですが 送信後、正しく指向性受信ビームを向けて処理させるにはどこを改変すればよいのでしょうか? ご教授のほうよろしくお願いいたします. |
hiro | 投稿日時: 2012/10/26 10:17 |
長老 ![]() ![]() 登録日: 2005/7/16 居住地: 投稿: 452 |
Re: 指向性受信の切り替えについて 何をどのように改造したのかわかりませんが、
> antennaMaxGain_dBi = element[SWITCHED_AZIMUTH_INDEX][switched->patternIndex].gains[angleIndex]; > 「qualnet.exe の 0x0074fe6b でハンドルされていない例外が発生しました: > 0xC0000005: 場所 0xfeef01be を読み込み中にアクセス違反が発生しました。」 > というエラーが発生してしまいました. ここまでわかっていれば、 SWITCHED_AZIMUTH_INDEX switched->patternIndex angleIndex の値を確認するしかないと思いますけど。 あ、 #define SWITCHED_AZIMUTH_INDEX 0 だから、 switched->patternIndex angleIndex の値ですね。 > switchedの変数を意図的に変更した のであれば、switchedの値が正しいか否かも確認する必要があります。 |
tya | 投稿日時: 2012/10/26 16:32 |
半人前 ![]() ![]() 登録日: 2010/11/30 居住地: 投稿: 21 |
Re: 指向性受信の切り替えについて angleIndexの値が原因なのはわかります.
つまり,パターンを変える前と後のangleIndexによる原因だと認識しているのですが,そうなってくると改変の仕方がわからないです. 改変手順の例として単純なもので MacDot11ProcessMyFrame関数内の MacDot11StationTransmitCTSFrame(node, dot11, msg);が終了時 PhyData* phyData = node->phyData[0]; AntennaSwitchedBeam* switched = (AntennaSwitchedBeam* )phyData->antennaData->antennaVar; if (switched->patternIndex == -1) { switched->antennaIsLocked = 0; switched->patternIndex = 1; で,アンテナを向きと固定しています. これにより,あとの動作は指向性受信として動作してくれると思っていたのですが… |
hiro | 投稿日時: 2012/10/26 17:52 |
長老 ![]() ![]() 登録日: 2005/7/16 居住地: 投稿: 452 |
Re: 指向性受信の切り替えについて えっと、何をどのように改造したのかわからないので、一つずつ確認したいのですが、
antennaMaxGain_dBi = element[SWITCHED_AZIMUTH_INDEX][switched->patternIndex].gains[angleIndex]; における element[SWITCHED_AZIMUTH_INDEX] には、 ある個数(何個入っているかはシナリオ依存)のパターンデータが入っていて、 その中で switched->patternIndex 番目である、 element[SWITCHED_AZIMUTH_INDEX][switched->patternIndex] には、 360個の antennaMaxGain_dBi が gains[] に入っている。 ここまでは、良いですか? > angleIndexの値が原因なのはわかります. という事は、angleIndex の値がおかしいという事がわかった(わかっている)わけですよね。 実際に angleIndex の値がどのような値なのかわかりませんけど、 angleIndex に値を設定した部分を見直すしかないと思います。 |
tya | 投稿日時: 2012/10/26 20:46 |
半人前 ![]() ![]() 登録日: 2010/11/30 居住地: 投稿: 21 |
Re: 指向性受信の切り替えについて 解決できました.
どうやら変数の入力ミスによる問題で,ポインタがおかしなところを指すことによって発生していたようです. switched->antennaIsLocked = 0; switched->patternIndex = 1; ではなく switched->antennaIsLocked = 1; switched->patternIndex = 0; です. しっかり動作することが確認できました. お騒がせしました. 次からはもう少し丁寧に調べてから投稿することにします. hiroさん,本当にありがとうございました. |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |