Est-il possible de réaliser un modulateur et un démodulateur FSK dans un PSoC ? Voilà un TP qui permettrait d’illustrer les modulations numériques ! Et bien regardons ensemble comment s’y prendre.
Pour ce TP, je me suis rajouté une contrainte. Je ne voulais pas faire une carte qui démodule directement le signal qu’elle génère. L’idée était d’enregistrer un signal FSK sous forme de fichier audio puis de le démoduler.
Caractéristique de la modulation FSK :
Débit = 300 bauds ; fréquence « 0 » = 1300 Hz ; fréquence « 1 » = 2100 Hz.
Modulateur FSK
Facile de faire un modulateur FSK avec PSoC Creator !
L’UART sert à générer le signal binaire. Il transmet en boucle une chaine de caractères.
Le WaveDAC8 est un composant extraordinaire. Il permet de générer pratiquement n’importe quel signal. Voici comment il est configuré.
C’est tout simple, si le signal sur l’entrée ws est à 0, on transmet le signal Waveform 1 : ici un sinus à 1302 Hz d’amplitude c-à-c = 2V centré sur 1,024 V et si le signal ws est à 1, on transmet le signal Waveform 2 : ici un sinus à 2101 Hz de même amplitude.
Le PGA derrière est programmé avec un gain de 2 pour exploiter toute la dynamique 0/5V.
Il ne reste plus qu’à numériser le signal avec une carte son. Je connecte la sortie du PSoC sur l’entrée line puis REC pendant une quinzaine de secondes ! J’utilise Audacity, voilà le résultat !
On remarque bien les 0 (durées ou la fréquence est basse) et les 1 (durées où la fréquence est haute). Le spectre montre bien 2 pics à 1300 Hz et 2100 Hz.
Vous pouvez écouter, ce n’est guère mélodieux !
Voilà, mon signal est généré et sauvegardé sous forme de fichier wav sur mon PC. Il ne reste plus qu’à le démoduler !
Démodulateur
Principe
Pour réaliser le démodulateur, je me suis inspiré de deux notes d’applications publiées par Cypress (Infineon maintenant).
Simplified FSK detection – PSoC1
Low-Frequency FSK Modulation and Demodulation – PSoC5
Le principe est le suivant : on multiplie le signal FSK par le signal FSK retardé :
Si notre signal est sin(ω.t) et notre retard d, on obtient en sortie du multiplieur :
sin(ω.t).sin(ω(t+d)) = 1/2. [cos(2.ω.t+ω.d)-cos(ω.d) ]
Si on ne s’intéresse qu’au terme basse fréquence, il reste -1/2.cos(ω.d)
L’idée est de choisir le retard d optimum tel que l‘écart entre cos(ω0.d) et cos(ω1.d) soit le plus grand possible (idéalement, il faudrait un cos à -1 pour ω=ω0 et un cos à +1 pour ω=ω1).
Traçons avec un tableur cos(ω0.d)-cos(ω1.d) en fonction de d (avec ω0= 2π.1300 et ω1=2π.2100) :
La fonction est maximale pour un retard d = 0,727 ms = 727 µs. Voyons maintenant comment mettre tout ça en œuvre.
Mise en œuvre
Le schéma du démodulateur sous PSoC Creator est le suivant :
L’étage d’entrée est constitué d’un comparateur qui va transformer notre signal FSK sinusoïdal en signal carré. Pour cela le signal entrant est décalé par un circuit C-R (composants extérieurs) à Vdda/2 puis comparé à cette valeur avec le comparateur Comp_1. Remarquez l’utilisation du suiveur sur la tension de référence Vdda/2 (Vdda/2 = la moitié de la tension d’alimentation analogique, ici Vdda = 5V).
On échantillonne ensuite le signal. Comment choisir la fréquence d’échantillonnage ? L’idéal est d’avoir une fréquence à la fois multiple de 1300 Hz et de 2100 Hz. Calculons le PPCM de 1300 et 2100, on obtient 27300. En effet 27300 = 21*1300 = 13*2100. Vous voyez que ca sert à quelque chose le PPCM (le plus petit commun multiple) vu au collège ! On utilise donc une fréquence d’échantillonnage de 27300 Hz.
Le fameux retard de 727 µs est réalisé par un registre à décalage. L’horloge de 27300 Hz a une période de 36,63 µs. Pour obtenir 727 µs, on utilise un registre à décalage de longueur 20. 20 périodes de 27300 Hz font un retard de 732,6 µs pas bien loin de nos 727 µs.
On réalise la multiplication des deux signaux avec le ou exclusif, c’est assez classique. Enfin, on utilise un « glitch filter » ou « déglitcheur » de taille N=5. J’avoue que le 5 a été choisi un peu au pif, on doit pouvoir optimiser. Ce composant permet d’éliminer par « filtrage » tout bit parasite. Son principe est expliqué ici : lien vers la doc.
Cette structure génère un «1» uniquement lorsque les N échantillons actuels et précédents sont «1», et un «0» uniquement lorsque les N échantillons actuels et précédents sont «0». Sinon, la sortie est inchangée par rapport à sa valeur actuelle.
L’UART, enfin permet de décoder le signal et on affiche les caractères reçus sur l’afficheur LCD.
Résultats
Et ça marche ? Relions la sortie de la carte son (jack) à l’entrée de la maquette.
Regardons ici les résultats obtenus sur mon vieux scope analogique.
En haut, le signal modulé FSK à l’entrée, en bas le signal numérique démodulé. La démodulation FSK est fonctionnelle !
Quelques signaux intermédiaires relevés à l’analyseur logique :
De haut en bas : Le signal FSK en sortie du comparateur (fsk_comp), le signal de sortie du Ou exclusif (xor) et le signal en sortie du « déglitcheur » (data_out). La sortie du ou exclusif est plein d’impulsions parasites (normal, ce sont les termes en 2.ω !). Admirez l’intérêt du « déglitcheur ».
Et voila ce que l’on obtient sur l’afficheur LCD de la maquette :
Je vous laisse découvrir le message décodé !
Et voilà ! Un modulateur – démodulateur (un modem) FSK dans un PSoC ? C’est possible ! Il n’y a que deux composants extérieurs : une résistance et un condensateur.
Et qui on est, hein ?