この記事で扱っていること
- データを補間して細かいタイミングの情報を知る方法
を紹介しています。
注意:すべてのエラーを確認しているわけではないので、記事の内容を実装する際には自己責任でお願いします。また、エラー配線は適当な部分があるので適宜修正してください。
LabVIEWを使用してハードウェアで取得したデータを得る際に、何らかのしきい値を超えた時間、タイミングを細かく知りたいという場合にはデータの補間が便利です。
もちろん、恣意的にデータを変更することになりかねないので適用には十分注意をする必要があります。ここで言う「恣意的」とは、どのような補間方法を選ぶかに表れます。
LabVIEWの関数では1D補間という関数がありますが、この関数の方法入力では「最近接」
「線形」「スプライン」「3次エルミート」「ラグランジュ」の5つから選べます。
それぞれの補間方法がどのような内容であるかはヘルプをこの関数のヘルプを確認していただくとして、これらの方法を使って取得したデータの間を補間し、より細かくしきい値を超えたタイミングを知ることができます。
どんな結果になるか
フロントパネル上には、補間をかけたいXの開始位置と終了位置を指定およびその間の各プロット点間で何点補間するかを指定する制御器を設けています。また、補間の方法は列挙体で選べるようになっています。
なお、通常の波形グラフでは横軸は0以上の整数でしか表示されないため、間の値を補間したとしてうまく表示できません。そのため、補間後グラフは波形グラフではなくXYグラフとしています。
調べたいしきい値を入力して実行すると、しきい値を初めて超えたときのXの値が補間数で示した細かさに応じて算出されます。
プログラムの構造
具体的な処理はサブVI(interpolate.vi)としてまとめたので、メインVIには、ダミーのデータを作るサブVIと処理のVIを置いています。
で、肝心の処理については以下のようにしました。
1D補間の関数を使用するために必要な、XとYの値および補間させたいX値の配列(Xi)を入力しています。この関数の結果がXiに対するYの値、Yiとなっているので、これを組み合わせるだけです。
実際のプログラムでは何か具体的な、意味のある値の配列を使用することになると思いますので、今回の記事で紹介しているダミーのデータは使用することはないと思いますが一応載せておきます。
データ補間区域を自動で判別
さて、上で紹介してプログラムでは、ユーザーがある程度見定めてしきい値を超えるであろうXの値を指定する必要がありました。でも実際はそんなXの範囲を予想することはできない場合もあると思います。
かといって、Xの値すべてを補間の対象とするのでは処理も重くデータも多くなってしまいます。
そこで、補間をかけるのはしきい値を超えた付近のXだけにするという自動判別の機能を持たせるようにプログラムを修正することができます。
こうすればわざわざ範囲を指定しなくても、補間点数を指定するだけで細かいタイミングを知ることができます。
同じサブVIを使用して例えば以下のように実装できます。
また、今回の記事では対象とするデータは波形データではなく数値の配列としていましたが、ハードウェアから取得した値は波形データであることも多いと思うので、波形データタイプを扱う際の例も紹介します。
要は波形データからY値配列を取り出し、最終的に元の波形データのt0やdtの値と組み合わせるだけになりますが。
これでハードウェアから取得したデータに対して取得しながら細かいタイミングを知ることができます。
もちろん、冒頭にお話ししたように補間という処理を加えることになるので、補間の方法によって結果が若干変わることがあります。これが気になるのであれば、1D補間の関数のヘルプを見てどの補間方法が一番適切かを確認する必要があります。
補間処理によって、ハードウェアのサンプリングレートよりもさらに細かい情報を知りたいという場合には便利だと思うので参考にして頂けるとうれしいです。
ここまで読んでいただきありがとうございました。
コメント