Explication d’un demodulateur FM en quadrature [Pour les nuls++]


Tout d’abord je tiens à dire merci a Youssef (aka Prog de SDRSharp) pour le temps passé à supporter mes questions à la con :)

Thanks to my Friend Leo for all the Fun doing board and sharing ideas on balloons and RF.

Le code mystérieux est celui que l’on trouve un peu partout concernant les démodulateur FM numérique:
tmp_vector = next_sample * conj(previous_sample);
angle = atan2(tmp_vector.r, tmp_vector.i);

La deuxième ligne est simple c’est un calcul d’angle, mais quel est le but de la première ?

Calcul de la vitesse angulaire instantanée

Pour faire simple, pour démoduler de la FM il faut récupérer l’information de fréquence instantanée (dérivée de la phase), ce qui peut-être vu comme la vitesse angulaire. Tout ce qu’il nous faut donc c’est récupérer l’angle entre deux sample successifs.vitesse_angulaire

Il nous faut donc récupérer les deux angles et les soustraire, pour rappel:

arg(v) = acos(v.x/sqrt(v.x² + v.y²))

Comme on s’en doute il est impensable de faire 2 fois cette opération pour chaque sample (trop de multiplications et de divisions !).

multiplication

C’est la que débarque la magie des nombres complexes et des angles ! Si l’on multiplie s1 et s2 en tant que complexe:

(0.7 + 0.5j) * (0.7 + 0.4j) = (0.29 + 0.63j)
arg(s1 * s2) = arg(s1) + arg(s2) = 1.14 rad

On y est presque, pour faire la soustraction dont nous avons besoin il faudrait avoir une symétrie de s1 par l’axe I. C’est la que le conjugué du sample entre en jeu.

multiplication_conj

 

Après c’est tout simple:
(0.7 + 0.5j) * (0.7 - 0.4j) = (0.69 + 0.07j)
arg(s2 * conj(s1)) = arg(s2) - arg(s1) = 0.1 rad

Sachant que les deux vecteur doivent être proche, la « fonction arg » peut-être remplacée par la « fonction arc tangente » (et son approximation polynomiale atan2).

Exemple

Supposons une fréquence de sample de 10kHz, dT = 100µs:
0.1 rad / 0.0001 = 1000rad/s
1000 / (2*pi) = 159.14Hz

Si il y a la moindre erreur ou des corrections à apporter n’hésitez pas :)

3 réflexions au sujet de « Explication d’un demodulateur FM en quadrature [Pour les nuls++] »

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s