60Hzを除去する1msサンプリング17段移動平均フィルタ

ひさびさに技術の話。

とあるテーマで、センサのアナログ信号を16ビットADカードでパソコンに取り込むことになった。

当然、WindowsリアルタイムIO制御「MOS Bench(モスベンチ)」でサポートされているCONTEC社16bitADカード「AD16-16U(PCI)EV」を使う。

Ad_2

パラメータ設定で該当チャンネルを許可すれば、勝手に1msサンプリングをしてくれる。(上の画像の「アナログ入力チャネルの有効(1)無効(0)」の部分)

パラメータ設定で入力範囲を-10Vから+10Vの指定をすれば、16bitデータを[V]に変換してくれる。(上の画像の「アナログ入力チャネルの入力レンジの下限値-10.00、および、アナログ入力チャネルの入力レンジの上限値10.00」の部分)

また、パラメータ設定で移動平均回数を指定すれば、勝手に移動平均をしてくれて、平均後のデータを下図の画面表示しながら、ロギングデータファイルに12万行保存できる。

1stage

以下は、20回移動平均後の出力。この波形は、ロギングデータのcsvファイルをエクセルに読み込んで、編集したもの。

20

200ms間に12個の波がある。200ms/12=16.7ms。この逆数は、60Hz。ACラインのノイズが入っている。約2.5mVp-p。

1ms、すなわち1000Hzサンプリングなので、1000Hz/60Hz=16.7で、17回の移動平均をしてみる。

ちなみに、1000Hz/17=58.8Hz。

例によって、「MOS Bench」のパラメータ設定画面で、移動平均回数を17回に設定する。(下の画像の「アナログ入力チャネルのフィルタ段数」の部分)

17_2

以下は、17回移動平均後の出力。

ノイズの振幅は約1mVp-p。3LSBにわたって動いている。前述の波形に対して、1/2.5のノイズになった。

目標とする仕様から判断すれば、これで十分。

しかし、200ms間に5個の波がある。200ms/5=40ms。この逆数は、25Hz。

Photo