1

LabVIEWは初めてですが、必要なデータを取得し、データの取得後にテキストファイルに出力する信号アナライザコードを作成しています。私が抱えている問題は、新しいファイルを作成するときに、前の実行からのデータを保持し、それも印刷することです。これは、私が望んでいることではありません。LabVIEW vi(ver.2009)を添付しましたので、ご協力いただければ幸いです。

また、シフトレジスタの混乱よりも、各反復後にデータをRMSするより良い方法を誰かが知っているなら、私はそれを見てうれしいです。

周波数アナライザー(固定)vi

4

3 に答える 3

4

主な質問に答えるには、文字列を作成するコードの一部(シフトレジスタを使用したforループ)は、viを再実行するたびに以前のデータを保存します。必要なのは、空の文字列でシフトレジスタを初期化することです。

vi

また、いくつかのメモ/提案:

  • この場合、シフトレジスタの使用を避けることができます。コードのDAQ部分をたとえば3つの部分に分割します。最初のforループでデータを取得し(配列に格納)、配列を変更し(その後、組み込みのRMS viを使用できます)、UIで視覚化します。
  • 小さなチャンクでコードをビルドし、subViを使用します
  • コードを小さく、すっきりと整理し(コーディング標準を確認してください)、コメントを追加します-これは後で本当に役立ちます
于 2012-11-21T22:28:25.340 に答える
1

使用したRMS機能についてアドバイスを求められたので、コードを詳しく調べました。そして、私は厳しいかもしれませんが、それは意味がありません(ポイントごとに):

  • ループカウンター用

エンドユーザーに実行回数を要求してから、1回減算します。なんで?forループの前にデータを読み取ったためだと思います。(それを削除します)。

  • 使用するFrequencyRMS関数は、平均化をサポートしており、平均の数に制限はありません。次の構成を指定します。 標準の平均化を使用する

これにより、出力データにRMS平均化が追加され、シフトレジスタを使用して独自の計算をすべて失う可能性があります。

  • 次のコードはまったく間違っています。

周波数をシフトしないでください

実際にデータを変更することなく、データをシフトするだけです。開始周波数をインクリメントすることにより、FFTをシフトします。したがって、55 Hzで検出された信号は、56Hzでプロットされません。エンドユーザーにとって、これは誤解を招く恐れがあります。

コードで注意する必要があることの1つは、継続的なサンプリングがないことです。forループを繰り返すたびに、データ取得が開始および停止されます。これは、キャプチャされた波形のt0をプロットすることで確認できます。一定の間隔で開始されないことに気付くでしょう。より良いアプローチは、最初の反復でExpressVIによって作成されたタスクを使用することです。

タスクの再利用

ただし、取得モードを「連続サンプル」に変更する必要があります。

連続サンプル

最後の反復でタスクを閉じることを忘れないでください。

タスクを閉じる

于 2012-11-24T19:37:54.867 に答える
0

シフトレジスタの代わりに、実行するたびに空にする配列を使用する必要があります。

于 2012-11-21T14:28:38.683 に答える