JP7FKFの備忘録

ヒトは,忘れる生き物だから.

R言語を使ってアンテナの指向性パターンをグラフ化する

電磁界と戯れる場合,アンテナと戯れることになる.
アンテナを議論する時に,主な評価項目として,VSWRと利得,ビームパターン(指向性)が議論されることであろうと思う.
VSWRと利得は数値として得ることができるから良いものの,ビームパターンは測定には電波暗室が必要であるし,個人でやる上ではビームパターンを測定することすら難しいであろう.

仮に測定できた場合や,シミュレーションで角度と利得の数値が得られたとしても,グラフ化するソフトがあまりないのだ.
今回はこのグラフ化に関して書いていきます.

フリーで指向性パターンを描画できる簡単なソフトとして,plot32 (Plots32の詳細情報 : Vector ソフトを探す!)や,AP Chart(APchart Homepage)というソフトがある.

しかしながらこれらのソフトはイマイチ勝手が効かなかったりすることも多い.
そこで今回は統計解析言語であるR言語のグラフプロット機能を利用してみることにする.

R言語による指向性パターンの描画には protrixパッケージを用いて,レーダーチャートを利用して描画を行う.
レーダーチャートとはその名の通りレーダーのような図であり,一般に複数の項目のバランスなどを議論する際によく用いられます.
ゲームとかでよくあるこんなやつですね.
f:id:jp7fkf:20161115085556p:plain:w300

レーダーチャートをベースとして指向性パターンを描いていきたいと思います.
必要な情報は,アンテナを回したときの角度と,そのときの利得です.
利得でなくても,受信電界強度などでもよいです.せっかくR言語を使っているのですから,R言語にフリスの伝達公式のとおりに計算して貰えばいい話です.

まずはplotrixをロードします.

# パッケージの読み込み
library(plotrix)

これでplotrixが使えるようになりました.
パッケージがそもそもインストールされていない場合は,

install.packages("plotrix")

でパッケージをインストールします.

アンテナの回転角と利得のデータは,CSVやタブ区切りなどで保存されている場合が多いかと思います.
回転角とそれに対応する利得のデータをロードします.

# ファイルのロード(必要に応じてread.csv()などを用いればいいと思います)
hplane <- read.table("ファイルまでのパス")
#余計なカラムがある場合は,必要なカラムのみにしておくと見やすいと思います.
#たとえば1列目と9列目のみを抽出
hplane <- hplane[,c(1, 9)]

ここからはフリスの伝達公式の計算です.もともと利得がわかっている場合は計算する必要はありません.
電波暗室などで測定したとして,送信電力100mW(20dBm), 送信アンテナのゲインが真数で10, アンテナ間の距離が3m,波長が0.1223642686 m(2.45GHz)と仮定してみます.
hplaneの2列目に受信電界強度[mW]が入っているとすると,下記によって一気に計算してくれます.

send_power <- 100
sender_gain <- 10
distance <- 3
wavelength <- 0.1223642686
calced_hplane <- 10*log10((10^(hplane[,2]/10))/send_power/sender_gain*(4*pi*distance/wavelength)^2) 

calced_hplaneには利得[dB]が入っていることになります.

さらに,角度軸の準備をします.
何度のところに線を引いておきたいかによってこの値をいじります.
45度ずつ,上が0度ならばこんな感じです.

azimath <- c(180, -135, -90, -45, 0, 45, 90, 135)

これでデータの準備はできました.
描画をします.たとえばこんな感じに引数を渡します.

radial.plot(calcd_hplane, labels=azimath, rp.type="p",start=pi/2,clockwise=TRUE, radial.lim = c(-40,20),radial.label = "", lwd=2)

凡例はたとえば以下のように,

legend("topright", legend = c("H-Plane", "E-Plane"), lty = c(1,3), lwd = 3)

これで電磁界解析ソフトを利用したシミュレーション結果をR言語とplotrixを用いて描画してみた結果が以下のようになります.
f:id:jp7fkf:20161115081258p:plain

わりと綺麗に描画できていると思います.
引数はたくさんあるので,リファレンスを参照するとよいでしょう.
たとえばですが,

radial.plot(
  [描画するデータ],
  labels=[ラベルデータ], 
  rp.type="p", #r:radial lines, p:polygon
  start=-pi/2, #描画スタート位置のオフセット,デフォルトは3時の方向
  clockwise=TRUE, #時計回りに描画
  radial.lim = c(-20,15), #ここでいうゲイン軸の範囲,つまり円に垂直な軸の範囲
  lty = c(1,2), #line type, 直線,破線,いろいろあります.
  lwd = 2, #line width, 線の太さ
  main="Directivity" #主題です.
)

等,いろいろあります.
plotコマンドに使い慣れていれば,それをサポートしているらしいので,似たような感覚で使えると思います.
R言語は統計解析の計算のみならず,可視化にも優れています.
こういう風に,アンテナの指向性パターンも綺麗に描画できました.めでたし.

# References
http://ww36.tiki.ne.jp/~natsu/
レーダーチャートを描く - langstat blog
グラフィックス | Rで各種グラフの描き方,折れ線,散布図,ヒストグラム,棒グラフ,円グラフ,ボックスプロット
https://cran.r-project.org/web/packages/plotrix/plotrix.pdf