コードネーム"Magician"こと、井戸中蛙(社会人2年目)の徒然日記→身長172m/体重50g。人生の99%がMacとJ-Popとれいにゃとさゆで出来ています。ガンマ値1.8&Mozilla系ブラウザ(特にFirefox)推奨。
ここ数週間、Excelのデータプロット問題に悩まされている。
詳細はこの辺とかでも触れた通り、仕事で測定しているデータのサンプル数が多過ぎてマトモにプロット出来ないのだ。んでもってWord貼り付け用にIllustratorでEPS化しようにも、データが重くて処理がコケる。
そこで、今日は昨晩紙の上で練っておいたアルゴリズムをVBA実装し、データの間引きに挑戦してみた。
そもそも、単純な間引き処理であれば10行置きにデータ読み込むとか、移動平均取るとかいった安直な方法で片付けてしまえば済む話。しかし、今回対象としている測定データはパルス状に混入しているノイズデータが結構重要で、単純に移動平均や間引きを行ってしまうと貴重なデータが欠落してしまう。
そこで、ローパスフィルタを噛ませつつもデシベルのデカいノイズ成分だけ残してやるというのが本件の非常に厄介な所。
んで、考案したアルゴリズムというのがコレ↓
一見巧くいきそうなのだが、実際やってみると過渡領域の再現性が悪くなったり、頂点数が全然減らなかったり。コーディング自体は予想に反してほぼ一発でOKだったのだが、その後の閾値調整が難航。
結果的にはグラフの形状を極めて良好に保ったままサンプル数を1/6程度まで減らす事に成功したのだが、一番最初に区切った区間に因ってかなり間引き量に差が出てしまい、キレイさっぱり点が無くなってしまった区間もあれば殆ど点が消えなかった区間もあり。確かに定常域に乗ってしまっていたノイズ成分はいい具合に再現されていたものの、6万サンプル処理するのに1分近く掛かってこの程度の結果というのはちょっと残念。
ホントは本気でローパスフィルタ掛けてノイズ部分だけ弾くようなアルゴリズム組めればいいんだけど、自分信号処理専門じゃないしよく分からん。かと言って、勉強する時間なんてある筈もなければ今更勉強する気にもなれない。ただ、持ち合わせている知識を結集して小物を作るのはそれなりに楽しい作業である。
少なくともポリシー持って精密測定やっている手前「移動平均取ればノイズなんて関係無い」「温度の絶対値なんてアテにならないから変動だけ見ればいい」なんて平然と抜かす先輩社員と一緒にされては困る。ノイズが乗ってしまうのであればまずはノイズ対策を施すべきだし、絶対温度が測定出来ていない事自体を正当化するのは明らかに誤りである。矢張りノイズも絶対変動量も大事なのだ。
取り敢えず今のままだとIllustratorにすんなり持ち込める程データが軽く出来ていないので、再度アルゴリズムを練り直す予定。流石に移動平均てのはアテにし難いので、もうちょっとマシに直線近似して巧くデータ馴染ませて、デカいノイズだけ閾値設けて取り出す方向で。
ソースの骨組みだけは今日組んだものが流用出来る筈なので、月曜半日使えば仕上がると思う。多分。
…こんな私ですが一応メカ屋なのよ…。
当サイト(http://homepage.mac.com/f_magician/以下)で公開している全てのテキスト・音声・画像に関する著作権は原則として管理者である井戸中蛙に帰属します。
但し、一部画像につきましてはTV、雑誌等からの二次加工品が含まれており、これらの製作に当たり管理者は一切の承諾を受けておりません。
これらは全て非営利を目的として公開しており、著作者の権利を侵害する事を目的としたものでは御座いません。問題のあるコンテンツについては公開を停止させて頂きますので、f_magician@mac.comまで御連絡下さい。