NI製品ディスカッション

キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 

移動平均について

解決済み
解決策を見る

はじめまして。

sho.kと申します。

 

早速ではございますが、表記についてです。

 

現在、

①信号源からの値(生データ)

②生データを式に代入して得られた換算値

③換算データを移動平均(前後数個での平均)した値

について、チャート表示と1ループ毎に保存というプログラムを作成しています。

①、②については所望の動作をしていることを確認しましたが、③については希望通りの動作を実現させることが出来ませんでした。

 

添付したviファイルのように②をサブvi『smooth』に接続しましたが、

・1ループ(1秒)毎の移動平均になってしまう

・上記が原因でサンプリングレートを1Hzにすると、②=③となってしまう

という動作になってしまいました。

 

1ループ毎の移動平均ではなく、実行している間全てのデータに対して移動平均を行わせるためにはどのようにすればよろしいでしょうか。

 

ご教授のほどよろしくお願いいたします。

 

すべてをダウンロード
0 件の賞賛
メッセージ1/6
10,773件の閲覧回数

前回の換算データをシフトレジスタに保存しておき

今回の換算データの先頭部に前回の最後から必要な要素数だけ追加すればよいと思います。

もしくは

次回に必要な要素数分だけをシフトレジスタに渡して、

次回の先頭部に追加しても良いです。

 

 

 

0 件の賞賛
メッセージ2/6
10,686件の閲覧回数

xyzz様

 

おはようございます。

返信して頂きありがとうございます。

 

xyzz様からのアドバイスを試してみたいと思います。

ただ、私自身まだまだ初心者なもので、具体的にどのようなプログラムを作成すればよいかが思い浮かばないのが現状です。

 

お手数おかけして申し訳ございませんが、もう少し具体的にご説明いただけないでしょうか。

よろしくお願いいたします。

0 件の賞賛
メッセージ3/6
10,678件の閲覧回数

移動平均について検索してみたところ、

意外と分かりやすいサンプルがなかったので作ってみました。

 

このサンプルは他の移動平均のサンプルとほぼ同じ動作ですが、

PtByPtの平均化の関数を使ってるのと、初めて呼び出されたかどうかを検知する関数を使ってるのがポイントです。

 

PtByPtの関数を使用することで、平均化の部分が見やすくなります。

そして初めて呼び出す?の関数を使用することで、VI が初めて実行したときだけ平均化の関数内で初期化されますので、

VI を実行し続け平均化を行なっても問題はありません。

 

サンプルのブロックダイアグラムでは上下に異なる方法が2つ並んでいますが、

希望に近いのは波形データに変換しやすい方法1かなと思います。

そして最初のみ初期化されますので、方法1全体をループで囲んでも、

次回ループに前回の計測データが保持されます。

メッセージ4/6
10,646件の閲覧回数

doradorachan様

 

返信が遅くなってしまい、申し訳ございません。

 

添付していただいたファイルを参考にして、プログラムを作成してみます。

ご丁寧な説明ありがとうございました。

0 件の賞賛
メッセージ5/6
10,625件の閲覧回数
解決策
トピック作成者sho.kが受理

doradorachan様

 

返信が遅くなってしまい、申し訳ございません。

doradorachan様の方法を用いることで、所望の動作をさせることが出来ました。

この度は、誠にありがとうございました。

0 件の賞賛
メッセージ6/6
10,534件の閲覧回数