SQL分析関数 median 中央値 メディアンフィルターでノイズ除去

最近の私といえば、某大手デジタコメーカーの管理サイトをAWS上で構築中である。
そのためブログの更新はサボり気味であったので、広告が強制表示されてしまった。なんかSo-netブログのユーザー登録もしないといけないらしいし。
そのせいか、Google検索にも引っかからなくなってしまった感があるので、ここいらで「更新しなくては」という気持ちでこの記事を朝から書いている。ネタ的には、SQLかな。
先日、
 センサーから得たデータがなんか変なんだけど、これって何とかならない?
といった相談を受けた。まぁ、デジタコなんてセンサーあってナンボでしょうから。
センサーからの数値って意外にノイズがのってしまうんです。「カメラのしくみ」の「ノイズ」でも触れているようにノイズ除去をするような仕組みがカメラには備わっている。photoshopなんかにもノイズ除去フィルターがあるよね。
 カメラのしくみ「ノイズ」
Androidの加速度センサーも例外ではない、そのまま生データを使うと動きがギクシャクするということがあるから、デジタルフィルターをかけてデータを平滑化する、といったことが行われている。
 Androidアプリ センサーの値を取得する
Androidの場合は「ローパスフィルター」をかけることが多い。
そういったわけで、質問を受けたときは、軽い感じで

 センサーからの数値データをローパスフィルターをかけて滑らかにすれば「ノイズ除去できるのでは?」

と回答しておいたのではあるが、実際のデータを見たら移動平均とか中央値(メジアンフィルター)の方が良さそうだった。移動平均や中央値ならSQLの分析関数で計算できるじゃない。
 SQL分析関数 PERCENTILE_CONT PERCENTILE_DISC 中央値(MEDIAN)
というわけでデータを持ってきてSQLでやってみるのであるが、もう仕事を始めないといけない時間である。また今度やろうと思う。

投稿者プロフィール

asai
asai