Hétérodynage des valeurs complexes dans gnuradio

Dec 01 2020

J'ai travaillé à me renseigner sur le fonctionnement de SDR et GNU Radio.

Afin de démontrer l'hétérodynage, j'ai mis en place un diagramme de flux composé de 2 générateurs de signaux, un bloc Multiply et QT GUI Frequency Sink. Les générateurs sont connectés aux entrées du bloc Multiply et la sortie du bloc Multiply est connectée au récepteur Freq, afin d'hétérodyner les deux signaux du générateur.

La fréquence des générateurs est liée à un curseur. Un générateur est slider_value, l'autre est slider_value + 2000. Les générateurs produisent tous deux une forme d'onde cosinus.

Lors de la définition de toutes les entrées sur float, lorsque je déplace le curseur, j'obtiens les résultats attendus:

Je vois toujours un pic à 2000 Hz: slider_value - slider_value + 2000 = 2000. Ie, le signal de différence.

Je vois un autre pic à la somme des sorties du générateur: slider_value + slider_value + 2000 = (2 * slider_value) + 2000.

Cependant, si je commute toutes les entrées et sorties sur complexe, je ne vois qu'un seul pic qui correspond à la somme des valeurs. Je ne vois pas de pic à la différence, c'est à dire, rien à 2000 (sauf quand slider_value = 0).

Quelqu'un peut-il m'expliquer pourquoi je ne vois pas le signal de différence lors de la multiplication de signaux complexes?

Réponses

6 PhilFrost-W8II Dec 01 2020 at 21:47

C'est ainsi que fonctionnent les mathématiques des signaux complexes.

La preuve commence par la formule d' Euler :

$$ e^{i\varphi} = \cos \varphi + i \sin \varphi \tag 1 $$

Pour le traitement du signal, au lieu de $\varphi$, nous pensons généralement à une oscillation sinusoïdale à fréquence angulaire $\omega$ qui varie avec le temps $t$, que nous pouvons écrire comme:

$$ e^{i\omega t} \tag 2 $$

C'est ce que produit le bloc générateur de signaux, en mode sinusoïdal et avec une sortie complexe. Par (1) ci-dessus, vous pouvez voir que les parties réelles et imaginaires sont des sinusoïdes à fréquence angulaire$\omega$, juste décalé de 90 degrés en phase.

Lorsque vous multipliez deux de ces sinusoïdes complexes ensemble, à des fréquences $\omega_1$ et $\omega_2$, vous obtenez:

$$ e^{i\omega_1 t} e^{i\omega_2 t} \tag 3 $$

ce qui simplifie à

$$ e^{i (\omega_1 + \omega_2) t} \tag 4 $$

qui, toujours par (1), est une sinusoïde complexe unique à la fréquence $\omega_1 + \omega_2$. Il n'y a pas de terme de différence.

Une conséquence de ce calcul est que $\omega$peut être négatif. C'est pourquoi dans GNU Radio si vous avez un flux complexe à une fréquence d'échantillonnage de disons 48 kHz, cela peut représenter 96 kHz de bande passante: de -48 kHz à 48 kHz.

Les termes de somme et de différence lors de l'hétérodynage de fonctions à valeur réelle surviennent parce qu'une fonction réelle ne peut pas représenter sans ambiguïté des fréquences positives et négatives, mais mathématiquement, elles sont toujours là.

Comment? Considérons deux sinusoïdes complexes, à des fréquences$\omega$ et $-\omega$, additionnés:

$$ e^{i\omega t} + e^{-i\omega t} = \cos \omega t + i \sin \omega t + \cos -\omega t + i \sin -\omega t \tag 5 $$

Compte tenu des identités trigonométriques:

$$ \cos x = \cos −x \\ \sin x + \sin -x = 0 \tag 6 $$

Maintenant (5) se simplifie en:

$$ e^{i\omega t} + e^{-i\omega t} = 2\cos(\omega t) \tag 7 $$

Ce qui signifie que lorsque vous multipliez deux sinusoïdes réels pour hétérodyner un signal:

$$ \cos \omega_1 t \times \cos \omega_2 t \tag 8 $$

Ensuite, en (7) et en négligeant le facteur 2 (car cela ne change que l'amplitude du résultat, et ce n'est pas important), de manière équivalente, vous faites:

$$ (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 $$

Remarquez la différence des fréquences à gauche et la somme à droite. Chaque groupe est composé de variations positives et négatives de la même fréquence, ce qui, par (7), se simplifie en une simple sinusoïde à valeur réelle. Donc (9) simplifie encore (en négligeant à nouveau ce facteur de 2) à:

$$ \cos((\omega_1-\omega_2) t) + \cos((\omega_1+\omega_2) t) \tag {10} $$

Et là, vous avez votre équation d'hétérodynage de fonction à valeur réelle commune.

Ainsi, toute fonction à valeur réelle a à la fois des fréquences positives et négatives, mais les fréquences négatives ne sont qu'un "miroir" des fréquences positives. C'est à cause de ces fréquences négatives que la démodulation LSB peut «inverser» le spectre , et ce sont les fréquences négatives qui causent le terme de différence lors de l'hétérodynage de fonctions à valeur réelle.