アナログ入力をFFT解析してグラフ表示する手順 (2/5)
サンプリング
-
ここでは5kHzまで観測できるようにサンプリング周波数を10kHzにします
サンプル数は4096個としておよそ0.5秒間のサンプリングすることにします
また、必要に応じてアナログ入力にフィルタをかけますが、ここではハイパスフィルタを使って1kHz以下の周波数をカットしてからFFTの計算をしてみます
手順1:高速アナログユニットの設定
手順2:アナログの値にフィルタをかけて配列に入れる
-
2-1. アナログの値の取り込み
-
内部変数 AnalogInputData[20] を作成して
N1_Ch1_Analog_Input_Value_1_10とN1_Ch1_Analog_Input_Value_11_20をAnalogInputDataにREAL型にキャスト(型変換)しながら格納していきます
-
2-2. ハイパスフィルタをかける
-
ファンクションにHPFファンクションをアナログフィルタのサンプルからコピーしておきます
次に、内部変数に下記の変数を作成します
cnt UINT
buf REAL[4]
AnalogFileteInput LREAL[20]
2-1で配列に入れたアナログ入力データを先頭からハイパスフィルタを通してAanalogFilterInputの配列に格納します
サンプリング周波数は10kHz、カットオフ周波数は100Hzとします
手順3:FFT演算処理
-
3-1. アナログ値をFFT用の配列へ保存
-
グローバル変数 FFTData[4096] を作成して、ここへFFT演算用データを保存することにします
FFTStartフラグがONで自己保持してデータ保存中はFFTRunフラグをONにします
FFTRun中は1スキャンで取得できるアナログデータ20個をFFTDataの配列に順番に入れていきます
FFTDataCntが4096になったらデータの準備が整ったのでFFTDataSetFlgをONにしてFOR文を抜けます
-
3-2. プログラム追加
-
ファンクションにFFTファンクションをFFTのサンプルからコピーしておきます
FFTは演算に時間がかかるのでイベントタスク用のプログラムを追加してFFT演算をするようにします(ここではProgram1)
プライマリタスクや定周期タスクの空き時間を利用してイベントタスクは実行されるので、FFTの演算が完了したことを知らせるためにグローバル変数CalcFinをONにします
-
3-5. イベントタスクの起動
-
メインのプログラム(Program1)でFFTDataSetFlgがONになったらデータが揃ったということでイベントタスクをActEventTaskで起動します
イベントタスクが実行中は自己保持回路が保持している状態なのでFFTRunはONしています
イベントタスクのFFT演算が終わったらCalcFinがONするのでFFTEndをONして自己保持を切ります
CalcFinフラグをOFFすることを忘れないでください
PowerSpectrumDataの配列は8192個ありますが、FFTの入力データが4096個なのでその半分の2048個にFFT演算結果が入っています
2048以降のデータは無視してください
次のページは
次のページでは、このデータを分かりやすいように表示器でグラフ表示します