2008-09-02 16 views
7

誰でも知っていますか?ソフトウェア位相ロックループ(SPLL)の実際のコード例はどこにもありますか?ソフトウェアフェーズロックループのサンプルコードが必要

私は、1.1KHzから1.3KHzの間のPSK変調信号をトラッキングできるSPLLが必要です。 Googleの検索では、多くの学術論文や特許が得られますが、何も使用できません。ハードウェアPLLに関する書籍がいっぱいの大学図書館への旅行でさえ、SPLLに関する1つの書籍には1つの章しかなく、実際よりも理論的でした。

お時間をいただきありがとうございます。

イラン

+0

http://dsp.stackexchange.com/questions/8456/how-to-perform-carrier-phase-recovery-in-software – Keith

答えて

2

あなたを得る可能性がありますこれはデジタル(すなわちソフトウェア) 位相ロックループ(PLL)を設計するためのインタラクティブデザインパッケージ です。 フォームに記入し、「Submit」ボタンを押すと、 とPLLが設計されます。

Interactive Digital Phase Locked Loop Design

これは、あなたが開始されますが、あなた本当には、後でそれを解決するためにそれを自分で構築するために十分PLL設計の基礎を理解する必要がある - これは、デジタル信号のレルムですブラックマジックではありませんが、デバッグ中はお金を稼ぐことができます。

-Adam

+1

このページはどのブラウザでも動作しません私は試みました - どのようにそれを働かせましたか? – Keith

+0

@Keith Webページは実際には壊れていますが、残念ながらそれを作成した人は2000年に亡くなり、WebページとWebサイトはもはや積極的に維持されていません。このページは、たとえばhttp://www.piclist.com/techref/uk/ac/york/cs/www-users/http/~fisher/mkpll/index.htmにコピーされましたが、元のサーバースクリプトはエントリを拒否しました他のウェブサイトから。サーバーに必要なものを与え、PLLコードを受け取るために、賢明なスクリプトを使って何かを組み合わせることができるかもしれませんが、この時点で人々はこの質問で他の回答を使用する必要があります。 –

2

SimulinkでMATLABを使用していますか? Matlab Central hereには、PLLデモファイルがあります。 MATLABのコード生成機能があるからC.

で書かれたPLLに
12

私は(?あなたがやって終わるんでした何を)これはおそらくあなたを助けるには遅すぎであると仮定し、それは隣の男を助けるかもしれません。私はあなたを説得するために、最初にこの小さなgolfedバージョンを提示

main(a,b){for(;;)a+=((b+=16+a/1024)&256?1:-1)*getchar()-a/512,putchar(b);} 

はここであなたと一緒に歌います私はCの1行で書いたソフトウェアの位相ロックループのgolfed例ですソフトウェアのフェーズロックループは実際にはかなりシンプルなものですが、ソフトウェアは複雑になりがちですが、

stdinで8ビットの線形サンプルをフィードすると、標準出力で1オクターブ上をトラッキングしようとするノコギリ波のサンプルが8ビット生成されます。毎秒8000サンプルでは、​​250Hz付近の周波数を、中間のCよりわずかに上の周波数でトラッキングします.Linuxでは、arecord | ./pll | aplayと入力します。 bの下位9ビットは、入力波形(getchar())を乗算して位相の出力を生成する方形波(1または-1)を生成するオシレータ(ハードウェア実装ではVCOとなる可能性があります)検出器。その出力は次にaにローパスフィルタされ、平滑化された位相誤差信号が生成され、bの周波数を0に向けてaにプッシュします。a == 0の場合、固有周波数はb 16サンプル毎に512(フルサイクル)ずつインクリメントする。毎秒8000サンプルで32サンプルが1/250秒であるため、固有周波数は250Hzです。

次にputchar()は、500Hz程度でのこぎり波を構成するbの下位8ビットを取り、それらを出力オーディオストリームとして吐き出します。

この単純な例から欠落しているいくつかのものがあります。

  1. それはロックを検出するためには良い方法がありません。無音、ノイズ、純粋な250Hz入力トーンがある場合、aはおおよそゼロになり、bはデフォルト周波数で振動します。アプリケーションによっては、信号を検出したかどうかを知りたい場合があります。 Designing Analog Chipsの第12章のCamenzindの示唆は、第2の「位相検出器」を実際の位相検出器から90°位相をずらして供給することである。その平滑化された出力は、あなたが理論的にロックしている信号の振幅を与えます。

  2. 発振器の固有周波数は固定されており、はスイープしません。 PLLの捕捉範囲のは、現在ロックされていないと振動に気付く頻度の間隔がかなり狭いです。そのロック範囲は、一度ロックされると信号に従うために範囲が広がりますが、これははるかに大きくなります。このため、ロックを取得してからスイープを停止するまでは、PLLの周波数を信号を検出したい範囲でスイープするのが一般的です。

ロック検出をするのかが、スイープしません上記の私が今日書いたmuch more readable example of a software phase-locked loop in Cから減少しgolfedバージョン、。私のネットブックのAtom CPUには、PLLあたりの入力サンプルあたり約100 CPUサイクルが必要です。

私があなたの状況にあったとすれば、私は信号処理についてもっと知っている人を探してテストデータを生成するような明白なことを除いて、次のことを行うと思います。私はおそらく、そのような低周波数に既にあるので、フロントエンドで信号をフィルタリングしたりダウンコンバートしたりしないでしょう。 200Hz~400Hzの帯域へのダウンコンバートはほとんど必要ありません。私は、信号が突然位相が90°以上シフトすると、位相ロックを失うので、PSKがいくつかの新しい問題を引き起こすと思われます。しかし、私はこれらの問題が解決しやすいと思っています。

関連する問題