畳み込みによるデータの平滑化

久しぶりにまじめな記事でも。といっても教科書に書いてあるような当たり前の話だけれども



実験をしてデータを取ると、当たり前だが実験データにはノイズが乗る。データを評価する上ではノイズがあるのはあまり好ましくない
たとえば、こんな感じのデータが得られたとしよう


ここから、想像できるようにノイズが乗っていない正弦波のデータを取り出すにはどうしたらよいだろうか?



たぶん、各点についてその近傍で平均を取れば良いと思いつくのはたやすいことだと思う。



でも、それじゃぁ各点について近傍で平均を取ったデータを計算するかと考えるようだと信号処理論で何を学んできたんだね?君は?と言われてしまう。



普通にその方法で計算すると計算量が馬鹿にならない。計算量はN^2のオーダー。



どうすれば良いかというと、フーリエ変換を使う。

畳み込み積のフーリエ変換フーリエ変換の積だった。各点の近傍で平均を取るというのは元のデータにガウシアンを畳み込むことに相当する。なので元のデータのフーリエ変換にガウシアンのフーリエ変換を掛けて、それを逆変換すれば良いのだ。これだとFFTを使えば計算量はNlogNのオーダーだったはず。

ガウシアンのフーリエ変換はまたガウシアンになるわけだけれども、単純に高周波をカットするということをやった場合だと矩形関数を掛けたことになり、それの逆変換はsinc関数だからsinc関数を畳み込むことに相当するのかな?



ちなみにフーリエ変換を使う場合はデータに周期性を仮定して扱ってしまうので端と端で値が大きく違う場合はあまり良くないような気がする(他方の端の値が平均化に使われてしまう)…そういう時は横軸について反転させたデータをくっ付けてあげればよいのかな?ここらへんは妄想だからよくわからない…





と机上の空論で実際のソースを書かないで終わりにしてしまいましたー