私は現在、音響FSK変調と復調を実装しています。私は信号処理の男ではありません…
あなたはフィルターをマッチさせたと言っており、コヒーレントでない検出について言及しているので、あなたはすでにデジタル通信の大部分をしていると思います– DSPの人になるためのステップはかなり小さいです:)
本格的なシンクロナイザーSDRアプローチ
したがって、これを行うための古典的な方法は、2つのフィルターの出力を(大きさ)二乗し、ローパスフィルターで結果を超えるものにフィルター処理し、フィルター処理中/処理後(可能な場合)、 1秒あたりの操作を無駄にしないこと。2 fシンボル、最大
私は自分で迅速な実数値のバンドパス信号FSK復調を行いました(これをもう一度行うと、2つのバンドパスフィルターを1つの周波数変換と1つのローパスフィルターを組み合わせたものに置き換え、複雑なベースバンドを与えるか、多相フィルターバンクを投げました問題で、しかし何でも)GNU Radioの仲間の助けを借りてGNU Radioで(ここにフローグラフファイル):
ポイントは、除算としきい値ブロックの間でタイミング同期をシンボル化したいということです。後で行うことができます–古典的な「マイクロコントローラーとデジタルハードウェアの設計」アプローチは、実際にはMuller&Muellerクロックシンクであり、それも同じように機能しますが、勾配情報を無駄にしないでください。
そこで、ここに多相クロック同期を追加します。私は、この優れたトム、ハリスの弟子、より策定できなかった認めなければならない文書で行ったの名を冠したGNU無線ブロックの:
多相フィルターバンクを使用したタイミングシンクロナイザー。
このブロックは、フィルター処理された信号の微分を最小化することによってPAM信号のタイミング同期を実行します。これにより、SNRが最大化され、ISIが最小化されます。
罪sinc (0 )= 1 、罪』(0 )= 0
d私[ n ]私バツ私[ n ]
e [ n ] = R { x私[ N ] } ⋅ R { D私[ n ] } + I { x私[ N ] } ⋅ I { D私[ n ] }2.0 。
バツ私[ n ]バツ私[ n ]バツ私[ n ]符号だけでなく、SNRが低い信号に特に適しています。
e [ n ]dkd割合d割合d割合dkd割合dkdαdβdαdβ利得24
これを実現するのはオーディオ周波数です
したがって、このブロックを適切にパラメーター化するbpf_decim
と(おそらくlpf_decim
、シンクロナイザーを減らし、位相をシフトするためのヘッドルームを増やすため)、非常に安定したシンボルタイミングリカバリーを構築できます。
両端でサウンドカードを使用してサンプリングを行っているため、またドップラーを処理する必要がないと想定しているため、シンボルレートはキャリア周波数と一定の関係にあります(たとえば、送信側にはより高いキャリアがあり、サウンドカードのサンプルの期間が8であり、シンボルは常に128のサンプルを例に取るとしましょう。したがって、比率は固定されています)。ショートカットを使用できます。
キャリア周波数とシンボルレートの比率がわかっている場合は、一方を推定するだけで、もう一方を無料で入手できます。この場合、FSK、それは特に簡単です。たとえば、上部の帯域がアクティブになる期間だけ待機し、直交復調器(つまり、実際には)を使用します。dアークタンdt[ n ]
パケット同期について
まあ、信号が存在しないときにおそらく同期が取れなくなる可能性のある復調器が動作しているので、既知の固定データシーケンスを使用してパケットを見つけます。