とりあえず、どんどん作っていきます。

今回は、前回作成した VCO を使って PLL を組んでみます。目標は以前に構築したデジタル通信の復調部分です。

PLL というのは古くからある技術で色々解説されていています。
一言で言うと、周波数または位相を目標値にした自動制御です。もちろん負帰還を用いています。
ところが応用によって設計の考え方が結構違うため、「これで分かった!」という状況にならないのではないかと思います。

参考になりそうなサイトを紹介しておきます。(こういうリンクって勝手に貼って良いのでしょうか。マナー違反であれば指摘して下さい。)
http://www3.ocn.ne.jp/~sugai/pll/index.html

http://www.geocities.jp/thermal_diode/pll.html

と、挙げてみましたが、周波数シンセサイザ系が多いですね。

私が経験した PLL についても挙げておきます。
・周波数シンセサイザ → 水晶クロックを分周&逓倍させて、安定な周波数を作る。
・モータ制御 → モータの回転を安定なクロックに同期させて、精度の良い回転数で
           回転させる。
・データ復調 → 外部から来たデジタルデータに復調クロックの位相を同期させて、
           データを復調させる。


PLL といっても、こんな応用があって目標仕様がちょっとずつ違うので、設計が難しいです。この辺りの事情は別トピックで扱おうと思います。

さて、いきなり Xcos によるブロックです。

イメージ 2左側の赤点線で囲ったブロックは、入力信号です。後でこの部分の代わりにデジタル通信の信号が入ります。
次に乗算器がありますが、これが位相比較器です。今回は正弦波入力の信号に対して、VCO も正弦波発振信号なので簡単というところで、乗算器を使いました。

次の伝達関数は、ループフィルタです。その次がノイズ除去です。詳しい定数の決め方は別トピックで扱います。

緑点線で囲ったのが、VCO です。

では、それぞれのゲインを計算してみます。
乗算器=位相比較器のゲインですが、三角関数の公式から導かれます。
思いっきりはしょって、要は同じ周波数の正弦波と余弦波の掛け算ならば(位相差 90 度)、出力はオフセットを持たない周波数が2倍の正弦波が得られます。同相の正弦波ならば、1/2 のオフセットを持った周波数が2倍の余弦波が得られます。
今、位相差が 90 度の時を基準状態と見なせば、同相の場合は片方が 90 度遅れていると見なせます。従って 90 度遅れたときにオフセットが 1/2 発生し、それを中心に2倍の周波数の余弦波ということになります。その余弦波は次のフィルタで除去されるという前提にすると、結局位相比較器の検出ゲインは、(1 / 2) / ( π/ 4) →  2 /π (単位:1/rad)となります。

2つのフィルタは、計算したい周波数付近では1としておきます。(後でそうなるように定数を調整する)

VCO の感度ですが、今回は利得設定定数として、0.02 を入れています。
そうすると、積分器の前のレベルが1変化したとき の時、32 * 0.02 Hz 変化します。そのままゲインです。
これを角周波数表示すると、2 * π * 32 * 0.02 = 1.28 pi (rad)
さらに VCO は周波数の変更感度であって、その周波数変化を位相比較器で位相比較を行うわけですから、自動的に一段積分(1/s)を追加しなくてはいけません。よって VCO ゲインとしては、1.28π / s(rad / sec)となります。
ということでこの一巡ループは、それらを掛けたものですから、

Gpll_open = 2 /π (1/rad) * 1.28π / s(rad / s)= 2.56 /s (1 / sec)

となります。これがフィルタ特性を無視した、オープンループ特性になります。
これから閉ループ特性を計算すると、カットオフ周波数が得られます。

Gpll_close = Gpll_open / (1 + Gpll_opn)
              (2.56/s) /(1 + (1+2.56/s))
       = 1 / (1 + 0.4 s)


となります。
カットオフ周波数 fc は、ここの 0.4 から計算できますから、1 / 0.4 = 2πfc
ゆえに、fc = 2.56 / 2 /π = 0.41 Hz
よってフィルタ特性を無視すると、0.41 Hz の応答帯域になります。(図)

イメージ 1
お気づきだとは思いますが、最初の VCO の変換ゲインを決めた 0.02 は以上の計算を逆算して得ています。
というのは帯域を 32 Hz の 100分の一前後にしたかったからです。

では、フィルタ特性はどうすればいいかというと、0.41 Hz でゲインが1というのを前提にしていたので、それを守りつつ必要な特性が得られるようにしています。
最初のループフィルタは、積分+ HPF 型で DC ゲインは無限大、0.03 Hz 付近でゲインがほぼ1になるようにしてあります。(10 倍強の余裕を持たせています)

イメージ 3
ノイズ除去フィルタは、位相比較器の出力に 64 Hz の信号を含んでいるので、これを除去します。カットオフ周波数が 3 Hz の一次 LPF を2段重ねにしています。
イメージ 4
各フィルタブロックの計算式は以下のようになります。これをそれぞれのブロックをクリックして入力して下さい。

ループフィルタ:num(s) = 1+s/2/%pi/0.03, den(s) = s/2/%pi/0.03
ノイズ除去フィルタ:num(s) = 1, den(s) = (1+s/2/%pi/3)*(1+s/2/%pi/3)

シミュレーション結果は以下のようになりました。

イメージ 5
次回はこの結果を詳しく分析してみます。