NI製品ディスカッション

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

移動平均について

解決済み
解決策を見る

 

現在、入力信号10Hz(サンプリング周波数1000Hz)に対して、 1周期分(100点)のデータの平均値を出力し、

1サンプル移動して同様に100点のデータの平均値を出力する、というような移動平均のプログラムをFPGAで書きたいと考えております。

FPGAを利用しなければ上記の仕様を満たしたプログラムを構築できるのですが、FPGAを利用するとサポートされていない関数が含まれておりコンパイルできません。

 

FPGAで構築する場合は、フィードバックノード(またはシフトレジスタ)を用いて構築する方法があるかと思いますが、それ以外に方法はありますか。

この方法だと、100点ずらすのに100回フィードバックノードを利用することになると思われるので、できれば避けたいです。

 

添付させて頂いたファイルは、入力信号生成部分のプログラムになります。

 

ご教授、アドバイス等宜しくお願いいたします。

0 件の賞賛
メッセージ1/7
5,049件の閲覧回数

FPGA環境がありませんが、以下のような方法があります。

 

100の配列を初期化して、ループ内部で配列[1]~[99]をまとめて抜き出し、配列連結追加で新しいデータを追加し配列サイズ100とします。

以下の例の注意点は以下です。

 

「1」でデータの幅を増やしています。下流の「2」で配列を全部足し合わせますが、データ幅が同じなので100個も足すとオーバーフローしてしまう可能性があるからです。増やすデータ幅は元のデータの幅、足し合わせる配列要素の数により異なります。

 

FPGAでの割り算はかなりのリソースを使用するだけでなく、シングルサイクルタイミングループの中で行う場合はループが高速すぎるとコンパイルできなくなる原因になりますのでご注意ください。またデータ幅が増えるとその影響も増えます。割る数を100にこだわらず、たとえば128(2の階乗)でもよければ、「2」の部分でビットシフト(10ビットずらす)を使えますので一応触れておきます。その場合、配列の初期化の数を128とし、部分配列を127にする必要があります。ビットシフトで使用するリソースはゼロです。

 

 

moving avg fpga_lv2015.png

TailOfGon
Certified LabVIEW Architect 2013
メッセージ2/7
5,032件の閲覧回数

 

返信ありがとうございます。

アドバイス頂いた方法についてですが、がFPGAでは「Σ」がサポートされていないため、コンパイルできませんでした。

 

別の方法として、以下のようなプログラム(reference1,2はsmoothing.vi。reference3はFPGA.vi。)を構築してコンパイルしました。

現状、コンパイルはできるのですが、FPGA.viにある'Rawdata' FIFOの'time out?' ブール値にランプがつき、タイムアウトになってしまうため、host側で正常に波形が表示されません。

smoothing.vi がない場合は正常に入力信号である正弦波を表示できるため、smoothing.vi に欠陥があると思われます。

何が欠陥なのか教えて頂けると幸いです。

 

以上になりますが、ご教授宜しくお願い致します。

すべてをダウンロード
0 件の賞賛
メッセージ3/7
5,009件の閲覧回数

 

reference3 についてですが、私のミスで前のバージョンのものを添付してしまいました。

再度、アップロードさせて頂きます。

 

アルゴリズムとしては、直近100点の移動平均を常時行うために、

最も古いデータ(100点前のサンプル点)を引き、そして最も新しいデータを足すといったプログラムになっています。

 

以上になりますが、宜しくお願い致します。

0 件の賞賛
メッセージ4/7
5,008件の閲覧回数
解決策
トピック作成者Kenshoが受理

reference3.png VIにおきまして幾つか気づいた点がありましたのでお伝えします。

 

1. While ループにFalse定数が渡っていますがこれでは無限ループになってしまいます。データがホスト側に渡されないのはそのせいではないでしょうか。True定数を渡すのが正しいはずです。

2. シフトレジスタをゼロで初期化してしまっているので、このVIが呼び出されるたびにシフトレジスタが0になってしまいます。ここではシフトレジスタを初期化しない方が思った通りの動きをするはずです。

TailOfGon
Certified LabVIEW Architect 2013
0 件の賞賛
メッセージ5/7
4,944件の閲覧回数

 

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

ご指摘頂いた内容を踏まえて、プログラムを再度構築したところ、

想定通りの結果になりました。

 

ご指導ありがとうございました。

0 件の賞賛
メッセージ6/7
4,884件の閲覧回数

 

今後の参考のためにプログラムの画像をアップロードしておきます。

0 件の賞賛
メッセージ7/7
4,846件の閲覧回数