2023年9月15日金曜日

FIRフィルタ

移動中に、引き続き MEMS 加速度センサーのノイズを低減する方法を考えていました。

参考書をパラパラ見ていて、目に留まったのがエイリアシング。
ナイキスト周波数よりも高い側に信号が含まれていると、FFTの結果にノイズとなって現れます。これ、大事です。
https://www.analog.com/jp/technical-articles/elusive-tones-aliasing-effects-in-digital-mems-accelerometers-in-condition-monitoring.html

では、どうすれば良いか?
答えは簡単で、事前に LPF を通せば良いわけです。が、カットする高周波を求めるために FFT をかけてしまうとエイリアシングが生じます。
そこで、時刻歴データの段階で LPF をかけてしまうという発想。これがデジタルフィルタ。FIR と IIR が有名ですが、実装上、計算の軽い前者がよく利用されているようです。PolyPhase フィルタも同様です。

FIR フィルタを今まで使ってきたものの、自分で作ったことはありませんでした。今では Python でも簡単に作成できるようです。
帰社後に探してみると、すぐに見つかりました。scipy.signal.firwin で作成できます。https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.firwin.html

FIR filter design using the window method.
This function computes the coefficients of a finite impulse response filter. The filter will have linear phase; it will be Type I if numtaps is odd and Type II if numtaps is even.

これを手元の信号にかけると、位相が遅れます。ま、タップ数の半分の時間を補正してやればOKです。直線位相から最小位相にしたい場合は scipy.signal.minimum_phase で良いみたい。https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.minimum_phase.html

Convert a linear-phase FIR filter to minimum phase

MEMSセンサーから500Hzで吐き出したサンプルに対し作成した係数を乗じ、その後に100Hzへ間引き。Tap 数 201 で 2msec 以内に回るか心配でしたが、全く問題なし。しかも効果は抜群で、ノイズを大きく取り除くことができました。成功です。


2023年9月14日木曜日

桜島

 


久しぶりの出張です。パンデミックにより打ち合わせは完全リモートでしたので、概ね3年ぶりです。
取り巻く状況を反映するかのように曇っていましたが、silver lining が綺麗でした。パンデミックが明けきらない世界でも、希望の兆しが見えていることを願います。


2023年9月13日水曜日

ObsPy で Win データが読めません

 解決はしませんでしたが、ヒントはこちら。

中川ほか「WIN フォーマットデータを ObsPy で読み込む 新しいモジュール」https://www.eri.u-tokyo.ac.jp/GIHOU/archive/26_031-036.pdf

Windows 環境でしたので、パッチを充てるだけに留まりましたが、ダメでした。ま、既にツールはあるので支障はありません。寝かしましょう。

2023年9月3日日曜日

MEMSセンサーのスタック

MEMS加速度センサーのノイズを低減する方法を考えていました。

いくつかの製品を比較してみたところ、同じセンサーを使用していてもプログラムの組み方でノイズが3倍ほど異なります。尊敬すべきプロのこだわりでしょうね。でも、どうするのが正解なのでしょうか?

数日悩みましたが、解決せず。やはりプロの領域です。
素人でもできそうなのはスタック。物理探査ではおなじみの方法です。最後に試してみました。
まずは1台。(ノイズに無関係ですが、40Hzで‐6dBのハイカットフィルターを通しています。)

次に2台の結果をスタック。

若干、小さくなりました。
以前、16個 スタックしてノイズを1/4にした記事も見かけましたが、そこまですると安価ではなくなります。
やはり、スマートな解決策が欲しいところです。