* 移動平均法 [#h5df2233] 先日,Twitterでノイズ除去の話が出たので,移動平均法について簡単にまとめてみる. ** 定義 [#c4c9f02b] 欲しい信号の変化が比較的ゆっくりで,除去したい信号(雑音)の変化が激しい場合,過去のサンプリング列の N 個の平均を取り,雑音を除去するのが''移動平均法''と呼ばれる方法である.式で書くと y(n) = ( x(n) + x(n-1) + x(n-2) + ... x(n-N+1) ) / N となる. ** 設計パラメータ [#z0c39b7b] 移動平均法の場合は要するに >何サンプル分の平均値を取ればいいのか つまり,上の式の N を決定することに他ならない. ** 周波数特性 [#adec766c] 実は移動平均法もレッキとしたディジタルフィルタの一種である. 移動平均法の周波数特性(ある周波数の信号を入力した場合にどれだけが出力に伝わるか)は,フーリエ変換の理論から数式の形で導くことができ, y(f) = sinc(f) = sin(f)/f, ただし sinc(0) = 1 であることが知られている. の形になることが知られている. グラフに書くとこんな感じになる(x軸は正規化してある). #ref(movave_lin.png,center) ここで注目するのが,振幅特性が最初に x 軸に交わるところ,つまり上のグラフでは x = 1 の点である. この点より低い周波数に所望信号が,高い点に雑音が分布していれば,うまく信号のみを取り出せそうだ. 実はこの点は移動平均の周期と同じ周期の信号の周波数になる. 図にするとこんな感じ. #ref(nullpoint.png,center,50%) サイン波のちょうど1周期分が移動平均の枠に収まり,上下が足し合わさってキャンセルされている. というわけで,この周波数に注目して移動平均長 N を設定すればいいだろう. ** 遅延 [#s1d7dbf4] 入力サンプル列を目視で監視していたとして,突発的に値が上昇した場合,それが雑音によるものなのか信号によるものなのかは「しばらく様子を見」ないとわからない. しばらく様子を見ることにより,遅延が発生することになる 移動平均法でも同様に遅延が発生する. 遅延の発生量は移動平均長の半分であることが知られている. ** 数値例 [#u21382c8] :サンプリング周波数|8000 Hz :移動平均サンプル数|800 とした場合,上のグラフの x = 1 に相当する周波数は 8000/800 = 10 Hz となる. また,移動平均に伴う信号の遅延は 1/10 / 2 = 0.05 秒となる.