ロックインアンプ

ロックインアンプは、変調信号をキャリア同期で復調することにより、高精度の計測を可能にします。
ミキサで周波数変換して振幅と位相を計算し、フィルタで分解能を高めます。
サーボアナライザの例では、復調部をユーザ関数化しています。

ソースコードやプロジェクトファイルのダウンロードはこちら →lockin.zip

ブロック図
プログラム
proc
{
    Sin = w_sin( period, 0,    level ); // 正弦波発生
    Cos = w_sin( period, 0.25, level ); // 余弦波発生
    Aout( 0, 0, 1, Cos );               // 変調キャリア出力
    signal = Ain( 1, 0, 1 );            // 信号入力
    x = signal * Cos;                   // ミキサ
    y = signal * Sin;                   // ミキサ
    X = bqLpf( x, fn, dp );             // ローパスフィルタ
    Y = bqLpf( y, fn, dp );             // ローパスフィルタ
    amp = sqrt( X*X + Y*Y );            // 振幅
    phase = atan2( X, Y );              // 位相
}
説明

このブロック図は、歪ゲージを使って物体の変位を計測する系の構成例です。 正弦波信号を基準電圧として与えると、差動増幅器で計測されるブリッジ電圧は振幅変調されますので、 元の正弦波に同期してミキシングを加え、ローパスフィルタで変調周波数を除去することにより計測精度が向上します。

以下の関数、信号、パラメータを使っています。

関数
(予約語)
 w_sin 正弦波発生関数です。
位相を0.25(90度)進めると余弦波になります。
 Ain アナログ入力ポートの電圧を数値化する関数です。
 bqLpf 2次ローパスフィルタ関数です。
 sqrt 平方根を計算する算術関数です。
 atan2 4象限で位相角を計算する算術関数です。
信号  Sin正弦波信号です。sinは予約語なので大文字にしています。
 Cos余弦波信号です。 cosは予約語なので大文字にしています。
 signalCos で変調された入力信号です
 x / yCos / Sinでミキシングした信号です。
 X / Yx / y をフィルタした信号です。
 amp検出信号の振幅(絶対値)となる信号です。
 phase検出信号の位相となる信号です。
パラメータ  period変調キャリア信号の周期です。
 level変調キャリア信号の振幅です。
 fnフィルタの固有周波数(帯域、rad/s)です。
 dpフィルタのダンピングファクタです。