discriminateur_fm
Discrimination polaire pour la démodulation FM.
Espace de nom : tsd::telecom
Prototype
sptr<FiltreGen<cfloat, float>> discriminateur_fm()
Retourne
Filtre cfloat (signal bande de base, complexe) vers float (fréquence instantanée, sous forme de pulsation normalisée (entre \(-\pi\) et \(\pi\))).
Description
Implémente un discriminateur polaire (calcul de la fréquence instantanée pour un signal en bande de base), qui peut servir de brique pour la démodulation FM :
L'implémentation est basée sur https://www.embedded.com/dsp-tricks-frequency-demodulation-algorithms/, qui permet un calcul efficace, sans arctangente :
Les dérivées étant approximées à l'ordre 1 :
- Avertissement
- Du fait de l'aproximation utilisée pour le calcul de la dérivée, ce bloc génére un retard de 1 échantillon.
Exemple
// Signal test
soit x = siggauss(1000) / 10;
// Modulation FM
soit y = polar(cumsum(x));
// Démod
soit discri = discriminateur_fm();
soit z = discri->step(y);
Figures f;
f.subplot().plot(x, "" , "Signal test" );
f.subplot().plot(y, "" , "Signal modulé FM" );
f.subplot().plot(z, "" , "Sortie discriminateur" );
