後処理でデータの間引きを行う | マーブルルール

後処理でデータの間引きを行う

Tips

スポンサーリンク

この記事で扱っていること

  • 後処理でデータの間引きを行う方法

を紹介しています。

注意:すべてのエラーを確認しているわけではないので、記事の内容を実装する際には自己責任でお願いします。また、エラー配線は適当な部分があるので適宜修正してください。

ハードウェアで何か信号を取得する(サンプリングする)場合、どれくらいの時間間隔で一つ一つのデータを取るか、という測定周期の逆数が、サンプリングレートと呼ばれるものです。

サンプリングレートが大きいほど、1秒間に多くのデータをとることができるため、細かくデータを取ることが必要な場合には必然的に大きくする必要がある、のですが、場合によってはそこまで大きいサンプリングレートが必要ない場合もあります。

じゃあそういう場合にはサンプリングレートを小さくすればいいのでは?と思うと思いますが、National Instruments社のDAQデバイスで特にcompactDAQシャーシを使用するアナログ入力の場合、サンプリングレート一つのシャーシに対して3種類までしか指定することができません。

Number of Concurrent Tasks on a CompactDAQ Chassis Gen II – NI

Number of Concurrent Tasks on a CompactDAQ Chassis Gen II
This article explains how many different tasks can be running simultaneously in a single chassis when using multiple modules in your Gen II NI CompactDAQ (cDAQ)...

そこで、そんなにサンプリングレートが高い必要のない測定でも、一度多くデータを取得しておいて後処理で実質的にサンプリングレートを落とす、間引き処理が必要になることがあります。

本記事では間引き処理の便利な実装方法を紹介しています。

スポンサーリンク

どんな結果になるか

紹介するのは間引き処理の適用方法ですが、後で紹介する処理を施した結果以下のように間引きを行うことができます。

基本的に、元々サンプリングしていたときのサンプリングレートの何分の一、といった割合で間引きの指定を行いますが、本記事で紹介するプログラムであれば複数の間引き率を実現するにもケースストラクチャを必要としません。

プログラムの構造

間引き、はデシメート処理なので、そのままずばりの1Dデシメート関数を使用するというのが一つの手になります。

ただし、これには弱点があり、サンプリングレートを1/2にする1/3や1/4にする場合それぞれでデシメート関数の大きさを変更する必要があります。

そこでデシメート処理をForループと条件トンネルの機能を駆使して実装します。

このサブVIを、メインのVIで使用する、ということになります。

例えば以下の図は、冒頭で説明した間引き前後のデータの違いを表示したプログラムの中で今回のサブVIを使用しようとした場合の例です。

DAQを使用したプログラム例

実際にDAQハードウェアを使用する場合のプログラム例について紹介します。

指定したチャンネルそれぞれに対し、得られた波形データに今回の処理を適用します。(サンプリングレートを変えない場合には「1」を指定する)

本記事では、後処理で間引きを行う方法を紹介しました。

サンプリングレートは高いほど細かくデータがとれて都合がいいという場合も多いと思いますが、その分、LabVIEW側でより大きいサイズの波形データを用いなければいけない、データを保存したファイルも必要以上に大きくなってしまう、という不利な点もあると思います。

データをとってさえしまえば後は後処理でどうとでもなる!という一例として参考になればうれしいです。

ここまで読んでいただきありがとうございました。

コメント

タイトルとURLをコピーしました