gnuradioの複素数値のヘテロダイン
私はSDRとGNURadioがどのように機能するかについて自分自身を教育することに取り組んできました。
ヘテロダインを示すために、2つの信号発生器、Multiplyブロック、およびQTGUI周波数シンクで構成されるフローグラフを設定しました。2つのジェネレーター信号をヘテロダインするために、ジェネレーターはMultiplyブロック入力に接続され、Multiplyブロック出力はFreqSinkに接続されます。
ジェネレーターの周波数はスライダーにリンクされています。1つのジェネレーターはslider_valueで、もう1つはslider_value +2000です。ジェネレーターは両方ともコサイン波形を出力しています。
すべての入力をfloatに設定すると、スライダーを動かすと、期待どおりの結果が得られます。
常に2000Hzに1つのピークがあります:slider_value-slider_value + 2000 = 2000。つまり、差信号です。
ジェネレーター出力の合計に別のピークがあります:slider_value + Slider_value + 2000 =(2 * Slider_value)+2000。
ただし、すべての入力と出力を複素数に切り替えると、値の合計にある1つのピークしか表示されません。差にピークは見られません。つまり、2000には何も見られません(slider_value = 0の場合を除く)。
複素数の信号を乗算するときに差信号が表示されない理由を誰かに説明してもらえますか?
回答
これは、複雑な信号の数学がどのように機能するかです。
証明はオイラーの公式から始まります:
$$ e^{i\varphi} = \cos \varphi + i \sin \varphi \tag 1 $$
信号処理の代わりに $\varphi$、私たちは通常、角周波数での正弦波振動について考えています $\omega$ それは時間とともに変化します $t$、次のように書くことができます:
$$ e^{i\omega t} \tag 2 $$
これは、正弦波モードで複雑な出力の場合に、信号発生器ブロックが出力するものです。上記の(1)により、実数部と虚数部の両方が角周波数で正弦波であることがわかります。$\omega$、位相を90度オフセットするだけです。
これらの複雑な正弦波の2つを周波数で乗算すると、 $\omega_1$ そして $\omega_2$、あなたは得る:
$$ e^{i\omega_1 t} e^{i\omega_2 t} \tag 3 $$
これは単純化して
$$ e^{i (\omega_1 + \omega_2) t} \tag 4 $$
これも(1)により、周波数で単一の複素正弦波になります $\omega_1 + \omega_2$。違いの用語はありません。
この数学の結果はそれです $\omega$負になる可能性があります。そのため、GNU Radioで、たとえば48 kHzのサンプルレートの複雑なストリームがある場合、-48kHzから48kHzまでの96kHzの帯域幅を表すことができます。
実数値関数をヘテロダインするときの和と差の項は、実関数が正と負の周波数を明確に表すことができないために発生しますが、数学的にはまだ存在しています。
どうやって?周波数で2つの複素正弦波を考えます$\omega$ そして $-\omega$、合計:
$$ e^{i\omega t} + e^{-i\omega t} = \cos \omega t + i \sin \omega t + \cos -\omega t + i \sin -\omega t \tag 5 $$
三角関数公式の検討:
$$ \cos x = \cos −x \\ \sin x + \sin -x = 0 \tag 6 $$
現在、(5)は次のように簡略化されています。
$$ e^{i\omega t} + e^{-i\omega t} = 2\cos(\omega t) \tag 7 $$
つまり、2つの実正弦波を乗算して信号をヘテロダインすると、次のようになります。
$$ \cos \omega_1 t \times \cos \omega_2 t \tag 8 $$
次に、(7)と2の因数を無視することにより(結果の振幅を変更するだけであり、それは重要ではないため)、同等に次のことを行います。
$$ (e^{i\omega_1 t} + e^{-i\omega_1 t}) (e^{i\omega_2 t} + e^{-i\omega_2 t}) \\ = (e^{-i(\omega_1-\omega_2)} + e^{i(\omega_1-\omega_2)}) + (e^{-i(\omega_1+\omega_2)} + e^{i(\omega_1+\omega_2)}) \tag 9 $$
左側の周波数の違いと右側の合計に注目してください。各グループは、同じ周波数の正と負の変動で構成されます。これは、(7)によって、実数値の正弦波に単純化されることがわかっています。したがって、(9)はさらに単純化して(ここでも2の係数を無視して)次のようにします。
$$ \cos((\omega_1-\omega_2) t) + \cos((\omega_1+\omega_2) t) \tag {10} $$
そして、そこにあなたの共通の実数値関数ヘテロダイン方程式があります。
したがって、実数値関数には正と負の両方の周波数が含まれますが、負の周波数は正の周波数の単なる「ミラー」です。LSB復調がスペクトルを「反転」させるのはこれらの負の周波数のためであり、実数値関数をヘテロダインするときに差項を引き起こすのは負の周波数です。