目次 — 知りたいところから読む
静止しているIMUの出力がゼロからずれていても、そのずれ全部をランダムノイズとは呼べない。平均的な偏り、短時間の散らばり、時間とともに変わる安定性を分けて読む。ここではジャイロ1軸を対象にし、実測CSVにも使える解析コードを、条件が既知の合成データで検証する。
まず静止と時刻を確かめる
IMUを固定し、ウォームアップ、出力レート、フィルタ設定、温度、測定時間、単位を記録する。机の振動やケーブルからの力、温度変化があると、センサ固有の雑音だけを見ているとは言えなくなる。加速度計の静止出力には重力が含まれるため、本記事の「静止ならゼロ付近」という読み方をそのまま適用しない。
平均角速度にはバイアス以外に、感度や設置条件によっては地球自転なども含まれる。ADIのIMU評価ガイドを参考に、無外乱・温度条件を重視する。特定機種向けの収録条件を全IMU共通の仕様として扱わない。
CSVと再現手順
CSVはtime_s,gyro_rad_sの2列、単位は秒とrad/sにそろえる。解析コードを保存し、既知の合成データを作る。
python3 imu_noise.py --synthetic
python3 imu_noise.py stationary.csv
2行目は自分で用意した静止ログを読む場合の別の実行である。Python 3.12.3、NumPy 1.26.4、Matplotlib 3.6.3で合成モードを実行した。コードは100点以上の有限値、時刻の単調増加、標本間隔のずれが中央値の1%以内であることを要求する。この1%は本演習の入力検査であり、IMUの一般的な合格基準ではない。
欠測を詰めて等間隔だったことにすると平均時間が変わる。まず連続した区間へ分ける。再標本化する場合もフィルタや補間で雑音特性が変わることを記録する。
平均と標準偏差で分かること
合成データは100 Hzで600 s、60,000点、seed=7。一定バイアス0.01 rad/sに標準偏差0.002 rad/sの独立な正規雑音を加えた。実行結果は平均0.009991 rad/s、標本標準偏差0.001994 rad/sである。入力CSVと集計JSONを公開した。
平均はこの時間区間の代表値であり、別の温度や電源投入後にも同じという証明ではない。標準偏差だけではゆっくりした変動と高速の雑音を十分に区別できない。そこで平均する時間を変えて見る。
Allan偏差は平均時間ごとの変化を見る
m個ずつ重ならないブロックに分けた角速度平均をȳ、ブロック数をKとする。このコードが計算する非重複Allan偏差は次のとおり。
単位は入力と同じrad/sである。長さがmの倍数でない末尾は、そのmの計算でのみ切り捨てる。隣り合う平均の差を取るので一定のオフセットは消える。したがって、Allan偏差だけでは一定バイアスの大きさは分からない。定義と重複型との違いはNIST SP 1065で確認できる。周波数安定度の資料を参照しているが、ここではジャイロ角速度の隣接平均へ同じ統計式を適用している。
合成結果を読む
独立な白色雑音では、m点平均の散らばりはおおむね1/√mとなり、この合成例の理論線は0.002/√(100τ)である。図の長い平均時間側はブロック数が減って揺らぐ。Allan偏差CSVのadjacent_pairs列に比較数を載せた。コードは少なくとも10ブロックを確保するが、末端の9組程度から強い結論は出せない。
このデータにはバイアス不安定性やランダムウォークを追加していない。曲線が下がったことから、実物のIMUが長時間安定しているとは言えない。また、曲線の最小値を単に「バイアス不安定性」と読むには、雑音モデル、傾き、定義に応じた係数の確認が必要である。
実測の比較表に残す項目
機種名とファームウェア、ODR、帯域、単位、温度範囲、総時間、欠測率、軸、平均、標準偏差、各τの比較数を残す。ODRはセンサ内部の出力データレートであり、ホストが読み出す回数とは別である。同じ機種でもフィルタ設定が違えば曲線は変わる。サンプリングとエイリアシングで、ログを速く読むだけでは情報が増えない理由を確認できる。
コメント
コメントの投稿にはログインが必要です
まだコメントはありません。