前回の記事でご紹介した「NIDAQ Tools MX」は 、Igor Proを用いてデータ収集を行うための強力なツールでした。この「NIDAQ Tools MX」には、既存のUIから波形を読み取る機能だけでなく、様々な関数とオペレーションも提供されており、波形の読み取りと解析を同時に行うような機能を実装することができます。今回は、「NIDAQ Tools MX」とIgor Pro組み込みオペレーションである「FFT」を用いて、波形の読み取りとFFT解析をリアルタイムで実行する応用例をご紹介します。
複数の機器からの信号を読み取り分析するには、1台数万円の分析機器を用意する必要があります。しかし、「NIDAQ Tools MX」により提供される関数・オペレーションを利用することで、Igor Proで同様の機能を実装することができ、運用コストの削減につながります。次の図は -4 ~ 4V の矩形波をAD変換器を介して取り込み、波形とそのFFT解析の結果を連続で表示させたものです。なお、矩形波は一定の周波数ではなく、周波数が変調しています。

ここでは、上記のような機能を実装するのに有用な「NIDAQ Tools MX」関数・オペレーションをいくつか紹介します。
システム上のNI-DAQmxデバイスの文字列リストを返す関数です。
NI-DAQmxデバイスの読み取りを開始するオペレーションです。以下に主なフラグとパラメータを紹介します。サンプリング数とサンプリングレートは書き出し用ウェーブのポイント数とスケールに依存します。
フラグ
パラメータ
以下に、NIDAQの信号読み取りとFFT解析を同時に行う関数のサンプルコードを紹介します。
Function Main()
//デバイス名を取得
String devNameList = fDAQmx_DeviceNames()
String devName = StringFromList(0, devNameList)
//サンプリング数とサンプリングレート
Variable points = 2000, interval = 0.0001
//FFT表示グラフの縦軸の最大値
Variable fftAxisMaxleft = 2000
//NIDAQ読み取りデータ格納先ウェーブ
Make/O inputWave
//サンプリング数を指定
Redimension/N=(points) inputWave
//サンプリングレートを指定
SetScale/P x, 0, interval, inputWave
//FFT結果格納先ウェーブ
Make/O FFTWave
Variable i = 0
for(i=0;i<100;i+=1)
DAQScanMultiChan(devName, inputWave, FFTWave)
//繰り返し回数表示
print "interations : " + num2str(i)
endfor
End
//DAQScanの本体
Function DAQScanMultiChan(devName, inputWave, FFTWave)
String devName
Wave inputWave, FFTWave
//ウェーブパラメータ用リスト
//チャンネル0から読み取り
String waveParameter = NameOfWave(inputWave) + ", 0;"
DAQmx_Scan/DEV=devName WAVES=waveParameter
FFT/DEST=FFTWave/MAG inputWave
DoUpdate //結果をグラフに反映
End
「NIDAQ Tools MX」では、付属の関数・オペレーションを使用することで、信号の読み取りと波形解析を同時に行うことができます。
このような機能に興味のある方は、ぜひ「Igor Pro」と「NIDAQ Tools MX」をお試しください。
30日間のデモ版もありますので、興味がありましたら デモ版申請フォーム よりお問い合わせください。