niszetの日記

アナログCMOS系雑用エンジニアが頑張る備忘録系日記

(R) アラン分散を求めるには(メモ)

allanvarパッケージを使ってみる

今回はヘルプにある実行例をそのまま実行しただけですが…

高精度な発振器のジッタ計測などに使われる(らしい)アラン分散ですが、どうもあまり資料がなく。まぁ信号処理とか測定の方はRではあまり情報がないからなぁ… ジャイロ等で使用することが多いそうですが、ジャイロ良く知らないな…

アラン分散で検索すると、たとえばこちら

https://img.atwikiimg.com/www13.atwiki.jp/usonx/attach/40/79/%E3%82%A2%E3%83%A9%E3%83%B3%E5%88%86%E6%95%A3%E3%81%AB%E3%82%88%E3%82%8B%E8%A9%95%E4%BE%A1.pdf

やこちら

Allan variance(アラン分散) | 株式会社デプロ

などの資料が見つかりますね。

Rのパッケージにないのかなと探してみたところ、allanvarパッケージなるものがありました。

CRAN - Package allanvar

あまり更新されてないようですが、まぁシンプルなパッケージだし、あまり更新することもないかもしれない。もう一つ、gmwmパッケージというのもあるようですが、今回はallanvarパッケージの方を使ってみます。

gyrozデータセット

allanvarパッケージに含まれているデータですが、ヘルプで説明を読んでみるとこれは実測データではなく、Rで作成したダミーデータとのことです。
とりあえず見てみるです。

data(gyroz)
plot(gyroz)

…で、plotして見てみるとこんな感じです。

f:id:niszet:20180217170716p:plain

ノイズが大きく、トレンドらしきものが見えるような…見えないような…という感じのデータですね。

とりあえず実行してみよう。

library(allanvar)

# コピペ…
#Load data 
data(gyroz)

#Allan variance computation using avar
avgyroz <- avar(gyroz@.Data, frequency(gyroz))
plotav(avgyroz)
abline(1.0+log(avgyroz$time[1]), -1/2, col="green", lwd=4, lty=10)
abline(1.0+log(avgyroz$time[1]), 1/2, col="green", lwd=4, lty=10)
legend(0.11, 1e-03, c("Random Walk"))
legend(25, 1e-03, c("Rate Random Walk"))

で、結果は

f:id:niszet:20180217184148p:plain

のようになります。なんか字が見切れていますが…。縦軸も工夫して桁が見えるようにしないといけない気がする…。

一応、それっぽくは表示されていますが、もうちょっと工夫が必要だな~…。
表示された値それぞれにエラーバーがついていて、やはりτが大きい方が誤差が大きいようですね。1。 んー、これは自分で計測するかダミーデータ作って使ってみないといけませんな…

allanvarについての日本語の資料が全然ないのでとりあえずメモから残していきます。

Enjoy!?


  1. 測定期間が一定なら周期の短い方が多く観測できるので誤差は減っていくだろうという浅い理解です。が、多分そうなんだと思う。元になった論文とか読まないとかな…。