やっと、PLL を使って BPSK 変調された信号を復調してみようか、というところまで来ました。
BPSK 変復調に関して詳しく説明し出すと大変というか、自分では正確に出来る自信がないので、こちらをご覧下さい。
http://www.circuitdesign.co.jp/jp/technical/Modulation/modulation_PSK.asp
簡単に言うと、入ってきた変調信号の搬送波周波数と同じ周波数の発振信号を用いて位相同期を掛け、位相同期が掛かった状態でその発振信号を 90 度位相シフトさせた信号と変調信号を掛け算してから搬送波周波数を除去することで、復調信号を得るというものです。
そこでいきなりですが、前回使った PLL 動作確認 Xcos を次のように書き換えます。

最初に以前に BPSK 信号を作成しましたが、その code という名称のデータを次のコマンドで呼び出します。
-->load('BPSKdata')
参考:http://blogs.yahoo.co.jp/susanoo2001_hero/5576520.html
左端、紫のブロックはこの code というデータ列を Xcos 上に入力信号として持ってきます。
そこから右の一連のブロックは PLL 関連トピックで作成したブロックを使います。これらで入力信号に対して VCO の発振信号の位相を合わせます。
下側へ行って、赤のブロックが先ほどの発振信号の位相を 90 度シフトさせるブロックです。今回は特定周波数で 90 度位相がシフトするオールパスフィルタを使いました。
伝達関数は、(1-Ts)/(1+Ts)です。T=1/2/π/32
シミュレーション結果は以下のようになりました。

残念ながら、なかなか位相が正しくロックせずに復調できたように思われるのは、40 秒後ぐらいでしょうか。
これは最初の位相比較が開始されたとき、入力信号と出力信号の位相差がゼロ、すなわちロック点から見ると 90 度位相差という最大位相差から始まったために、BPSK 信号という位相がゼロになったり逆相になったりする信号が入ってくると、ロックできなくなってしまうと考えられます。VCO の入力を見ても BPSK 変調によって、信号がプラスになったりマイナスになったりしているのが分かります。
通常は BPSK 信号の 1 ビットの時間が位相ロックするために十分あるので、こういうことは起きにくいですが、今回はデータ量の都合上こうなってしまいました。別の解決策として、BPSK 信号が来る前に位相変化のない固定周波数を受信しておいて、位相を同期させておくこともあると思います。
さて、これでは上手く復調できたとはいえないのでズルします。
次の図です。前のとどこが違うのかというと、VCO の計算式が sin から cos に変わっています。このため、入力信号は 32Hz の sin で入ってきますから、位相も周波数もすでのロックした状態です。

シミュレーション結果は次のようです。

最初からきれいに位相ロックしていて、復調信号もちゃんとすぐに出てきます。
拡大図です。

なんだこれなら、最初っから PLL なしで全部合わせておいて復調したのと同じじゃん、ということですが、この次は入力信号にノイズを重畳したらどうなるかをやってみようと思います。
BPSK 変復調に関して詳しく説明し出すと大変というか、自分では正確に出来る自信がないので、こちらをご覧下さい。
http://www.circuitdesign.co.jp/jp/technical/Modulation/modulation_PSK.asp
簡単に言うと、入ってきた変調信号の搬送波周波数と同じ周波数の発振信号を用いて位相同期を掛け、位相同期が掛かった状態でその発振信号を 90 度位相シフトさせた信号と変調信号を掛け算してから搬送波周波数を除去することで、復調信号を得るというものです。
そこでいきなりですが、前回使った PLL 動作確認 Xcos を次のように書き換えます。

最初に以前に BPSK 信号を作成しましたが、その code という名称のデータを次のコマンドで呼び出します。
-->load('BPSKdata')
参考:http://blogs.yahoo.co.jp/susanoo2001_hero/5576520.html
左端、紫のブロックはこの code というデータ列を Xcos 上に入力信号として持ってきます。
そこから右の一連のブロックは PLL 関連トピックで作成したブロックを使います。これらで入力信号に対して VCO の発振信号の位相を合わせます。
下側へ行って、赤のブロックが先ほどの発振信号の位相を 90 度シフトさせるブロックです。今回は特定周波数で 90 度位相がシフトするオールパスフィルタを使いました。
伝達関数は、(1-Ts)/(1+Ts)です。T=1/2/π/32
シミュレーション結果は以下のようになりました。

残念ながら、なかなか位相が正しくロックせずに復調できたように思われるのは、40 秒後ぐらいでしょうか。
これは最初の位相比較が開始されたとき、入力信号と出力信号の位相差がゼロ、すなわちロック点から見ると 90 度位相差という最大位相差から始まったために、BPSK 信号という位相がゼロになったり逆相になったりする信号が入ってくると、ロックできなくなってしまうと考えられます。VCO の入力を見ても BPSK 変調によって、信号がプラスになったりマイナスになったりしているのが分かります。
通常は BPSK 信号の 1 ビットの時間が位相ロックするために十分あるので、こういうことは起きにくいですが、今回はデータ量の都合上こうなってしまいました。別の解決策として、BPSK 信号が来る前に位相変化のない固定周波数を受信しておいて、位相を同期させておくこともあると思います。
さて、これでは上手く復調できたとはいえないのでズルします。
次の図です。前のとどこが違うのかというと、VCO の計算式が sin から cos に変わっています。このため、入力信号は 32Hz の sin で入ってきますから、位相も周波数もすでのロックした状態です。

シミュレーション結果は次のようです。

最初からきれいに位相ロックしていて、復調信号もちゃんとすぐに出てきます。
拡大図です。

なんだこれなら、最初っから PLL なしで全部合わせておいて復調したのと同じじゃん、ということですが、この次は入力信号にノイズを重畳したらどうなるかをやってみようと思います。