この記事で扱っていること
- チャープ信号を出力する方法
を紹介しています。
注意:すべてのエラーを確認しているわけではないので、記事の内容を実装する際には自己責任でお願いします。また、エラー配線は適当な部分があるので適宜修正してください。
信号出力のパターンの一つとして、チャープパターンがあります。これは時間ともに周波数が変化していくという信号パターンになっています。
LabVIEWの関数でチャープパターンという関数があり、これで波形を出せるようなのですが、この関数の出力は数値配列であり、例えばNational Instruments社のDAQ製品を扱う際に便利な波形データタイプにはなっていません。
そこで、波形データタイプでチャープパターンを生成するプログラムを作ってみました。もちろんこれはただ単にフロントパネル上のグラフで見るだけではなく実際にハードウェアから出力することができます。
どんな結果になるか
チャープ信号を生成するプログラムで指定するべきパラメタは、信号周波数の最初と終わりです。最初は何Hzの信号で最終的に何Hzにしたいのか、を決めます。
また、その周波数の変化は何秒かけて行うのか、という部分もパラメタになります。例えば「最初1 Hzで5秒かけて最終的に10 Hzとする」といった具合です。
あとは波形データということでアップデートレート(DAQのサンプルではサンプリングレートと記載があることがありますが、出力時にサンプリングという表現だとよくわからないので出力信号の変化のレートということでこちらの呼び名にしています)もパラメタとなります。
あとでDAQのプログラム内でサブVIとして使用する関係でエラーの入出力もつけています。
このプログラムを実際に動かすとこのようになります。
なお、今回のサンプルでは線形チャープ信号を扱っています。特に意識していなかったのですが、時間とともに周波数が増加する、あるいは減少する、どちらも対応できるようになっています。
プログラムの構造
チャープ信号を出すための計算をしてやるだけなのですが、そもそも開始の周波数(f0)と終わりの周波数(f1)、そしてその間の時間(T)をパラメタとして考えたときに、ある瞬間の周波数はどのように表されるかを考えます。Wikipediaによると、ある瞬間tの周波数f(t)は
f(t) = f0 + kt (ただしk=(f1-f0)/T)
と表されるということなので、これをそのままブロックダイアグラムに落とし込みます。
Forループの中では正弦波形の関数からの出力波形データのY値配列から指標配列で指標番号0の要素を取り出し、これをつなぎ合わせていきます。
数値をつなぎ合わせる際に配列連結追加をなるべく使用したくないこと、およびTとアップデートレートから全体のサンプル数がわかることから、配列初期化であらかじめ必要個数のデータ分の配列を用意し、その中身を部分配列置換でどんどん置換しています。
Forループが終わったらあとは最終的な結果と波形作成の関数を使用して波形データとしています。
DAQプログラムへの実装
実際にこの信号を出すプログラムを、DAQを使用する場合を例にして紹介します。
ベースとなるアナログ信号出力のプログラムはNIサンプルファインダの中のサンプルを使用し、トリガなどもないシンプルな形としました。下の図のchirp_generator.viが上で紹介したviをサブvi化したものになっています。
実際に信号を測定した場合の結果も載せておきます。
信号出力のやり方はもちろん自由に組めばいいのですが、LabVIEWにもともとある波形生成の関数を工夫して使用することで色々な複雑な波形も組むことができます。今回紹介した方法はあくまでその一例で、よりよい実装方法があるかもしれませんが、参考になればうれしいです。
ここまで読んでいただきありがとうございました。
コメント