7百万件のデータから1秒以内に波形表示をする

波形表示のサンプルソフトを作っている途中。

20100926_01.jpg

ちと、自分のメモとして。

  • 周波数 2,000 Hz で、約1時間(3,600秒)ということなので、データ数は、7.2M のデータとなる。
  • チャンネル数は 32ch 程度

このデータを、グラフで描画すると、ひどく大変。

データ数が 700万件なんて、まともに処理しようとすると専用のデータベースでも難しい。

のだが、ちょっとコツがあって、

  • 描画するときには、ディスプレイの解像度が上限になる

というものがある。

つまり、横幅は、たかだか 1000ドット程度で十分な訳で、700万件を1000程度に集約すればよいわけだ。

ただ、

ここにも数学、という物理的なトリックを利用する必要があって(サンプリング理論ともいうけど)、

振動値を、普通にサンプリングしてしまう(間引いてしまう)と、本来必要なデータが欠損してしまう場合がある。

欠損というのは、

  • 振動自体は、200Hz の範囲で変化する。
    → 0.1 秒の単位で注視が必要。

という条件がある。

言い換えれば、調べる目的というものがある。

それに沿っていえば、単純に間引いてしまうのは、ちょっとまずい。

200プロットの範囲で、どのくらいの重要なデータ(検出したい異常値)が現れるか、によってサンプリングの方法を工夫する必要がある。

なので、このような振動を検知する場合には、集約対象の範囲で、

  • 単位範囲内の最大値を抽出してプロット
  • 単位範囲内の最小値を抽出してプロット

というサンプリングをしないと、検出したい異常値が取れない。

そんな訳で、先の画像は、最大値と最小値をプロットしている、というわけ。

また、このような方法をとると、単純サンプリング(間引きの方法)とは異なり、集約範囲を自由に決めることができる。

ただし、これもダメな場合があって、

  • 最小値、最大値で振動する場合、これの範囲で超えて、集約させてはいけない。

のですね。

このあたりは、理論になるので省略(気が向いたら、書きます、メモ的に)。

というわけで、この方法をとると、たかだかプロットするデータは1,000ドットになるので、データを集約する計算だけになります。

な訳で、結構なスピード(1秒以下)で、7.2Mのデータが処理できますね。

という話。

 

 

 

カテゴリー: 開発 パーマリンク