サーボアナライザ
ロックインアンプをユーザ関数化し、 対象となる制御系の開ループ伝達関数を計測します。
ソースコードやプロジェクトファイルのダウンロードはこちら →servo.zip
ブロック図 | ||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
プログラム | fn=60; dp=1; lockin( in, _sin, _cos ) { x = bqLpf( in * _cos ); // ミキシング後フィルタ y = bqLpf( in * _sin ); // ミキシング後フィルタ amp = sqrt(x*x+y*y); // 振幅 phase = atan2(x,y); // 位相 return amp; } proc { Sin = w_sin( period, 0, level ); // 正弦波発生 Cos = w_sin( period, 0.25, level ); // 余弦波発生 Aout( 0, 0, 1, Cos ); // ch0: 励振信号出力 input = Ain( 0, 0, 1 ); // ch0: 信号 input 入力 output = Ain( 1, 0, 1 ); // ch1: 信号 output 入力 aIn = lockin( input, Sin, Cos ); // 入力信号の振幅 pIn = auxfunc( phase ); // 入力信号の位相 aOut= lockin( output, Sin, Cos ); // 出力信号の振幅 pOut= auxfunc( phase ); // 出力信号の位相 ratio = aOut / aIn; // 振幅比 shift = pOut - pIn; // 位相差 } | |||||||||||||||||||||||||||||||||||||||
説明 |
励振信号の周波数における、計測対象の入出力の振幅比と位相差を計測します。 周波数(または周期)を変化させて記録データを整理すれば、伝達関数のグラフを得ることができます。 以下の関数、信号、パラメータを使っています。
|