最初に: いいえ、スライド時の奇妙な動作については説明できません。ただし、周波数オフセットを変更すると、デコードされる信号に大きな周波数ジャンプが発生することは間違いありません (これが、結局のところ、それを行っている理由です)。タイミングの回復を担当する構造はそれを好まないでしょう。それは一種の予想です。
残念ながら、私は GNU Radio でまともな本を 1 冊も見つけていません。
なにもない。GNU Radio は急速に進化してきたため、開発の「コア」サークルに近い人々は誰もそのようなものを書く時間がありませんでした。
したがって、私の参照のほとんどは、公式の GNU Radio ページを含むいくつかのランダムな Web サイトに基づいています。
そうですね、GNU Radio の公式 Web サイトは確かにランダムではありませんが、行くには適切な場所です!
ここから、階層ブロック、接続などの GNU ラジオ用語を参照します。これらのすべてを理解していない場合は、公式のガイド付きチュートリアルを読むことをお勧めします!
ソースコード以外のドキュメントがないように見えるGFSKデモブロック
ソース コードにはドキュメンテーション コメントがありますが、これは Sphynx によって抽出されます。ただし、そのドキュメントは GRC では表示されません。私たちはそれに取り組む必要があります!
ただし、ドキュメントのコメントはかなり冗長です。
Hierarchical block for Gaussian Minimum Shift Key (GFSK)
demodulation.
The input is the complex modulated signal at baseband.
The output is a stream of bits packed 1 bit per byte (the LSB)
Args:
samples_per_symbol: samples per baud (integer)
verbose: Print information about modulator? (bool)
log: Print modualtion data to files? (bool)
Clock recovery parameters. These all have reasonble defaults.
Args:
gain_mu: controls rate of mu adjustment (float)
mu: fractional delay [0.0, 1.0] (float)
omega_relative_limit: sets max variation in omega (float, typically 0.000200 (200 ppm))
freq_error: bit rate error as a fraction
float:
基本的に、階層ブロック内に含まれるタイミング リカバリと FM 復調器のパラメータを完全に調整できます。
さて、明らかに、これまでのところうまくいきませんでした!先に進んで、GRC グラフで階層フローを再作成する必要があると思います。
同じソースを読むと、
self.connect(self, self.fmdemod, self.clock_recovery, self.slicer, self)
つまり:
gfsk_demod の階層ブロックとして、
- その入力ポートを の入力に接続し
fmdemod
、
fmdemod
の出力を の入力に接続しclock_recovery
、次に
- クロック リカバリ ブロックの出力を取得し、離散値に変換します ( を使用
slicer
)。
ソース コードの数行上で、これらがどのようにパラメータ化されているかがわかります。
最初にRX信号を「ストック」直交復調ブロックにフィードすることをお勧めします。数学的には、入力信号を受け取り、それをその位相速度 (つまり、サンプリング レートの倍数として表される各サンプルの「瞬間周波数」) に変換します。スコープ/タイム シンクで出力を視覚化します。正しく見えますか、つまり、おおよそガウス型のパルス形状で、「高い」値と「低い」値が交互に表示されますか?
その場合は、GRC で Muller&Mueller クロック リカバリ ブロックを複製します (または、現実世界の信号をより適切に処理する新しい光沢のある PFB クロック リカバリに置き換えます)。出力は正しいですか?
"decimating FIR" を使用して、出力レートをsamples_per_symbol
;減らします。それはまだ「ソフト」値として元のビット ストリームのように見えますか? 存在する場合は、結果をバイナリ スライスします。