I sistemi di comunicazione basati sulla modulazione di frequenza (FM) sfruttano una maggiore larghezza di banda in cambio di minore potenza, ovvero presentano buone prestazioni di rumore ad un elevato costo in termini di larghezza di banda. Questo è il motivo per cui vengono utilizzati nelle trasmissioni audio FM e in alcuni sistemi di comunicazione point-to-point specializzati. In questo articolo, vedremo come sia possibile demodulare un segnale FM per mezzo di uno script Python. Lo script può essere utilizzato, con i dovuti adattamenti, come algoritmo di programmazione per un ricevitore SDR.
Introduzione
La radio definita dal software, SDR, è una tipologia di radio nella quale è il software ad occuparsi della modulazione/demodulazione del segnale. Per mezzo di un ricevitore SDR possiamo utilizzare il nostro PC come piattaforma per elaborare i segnali radio. In Figura 1 viene illustrato lo schema a blocchi per implementare una SDR.
L'antenna capta il segnale e lo trasferisce al ricevitore SDR. Il ricevitore SDR può prendere la forma di una semplice chiavetta USB collegata al PC. Il ricevitore è costituito da due blocchi principali: il front-end analogico e il blocco di elaborazione in banda base.
Il front-end analogico si occupa di filtrare, amplificare e convertire il segnale dalla banda passante alla banda base. Il blocco di elaborazione in banda base esegue il campionamento e la digitalizzazione del segnale per poi fornire al PC Host le componenti in fase e in quadratura del segnale.
Infine, l'algoritmo in esecuzione sul PC Host effettua le elaborazioni desiderate, che possono andare dall'analisi spettrale all'ascolto di una trasmissione radio FM. Naturalmente, l'algoritmo in esecuzione sul PC Host viene anche utilizzato per impostare i parametri di ricezione del ricevitore come la frequenza centrale, il tasso di campionamento, ecc.
In questo articolo, vedremo come sia possibile demodulare un segnale FM per mezzo di uno script Python. I dati da elaborare verranno presi da una registrazione radio FM liberamente scaricabile al seguente Link.
Modulazione FM
Prima di descrivere l'algoritmo Python, andiamo a capire come viene modulato un segnale FM e come possa essere demodulato. Introdurremo solo la teoria necessaria per affrontare l'applicazione.
Supponiamo di avere:
- un segnale modulante m(t) contenente il messaggio da trasmettere nella sua variazione di ampiezza;
- e un segnale portante p(t) = Ac cos(2πfct) necessario per trasportare il segnale modulante nel canale trasmissivo.
Allora, il segnale modulato con modulazione di frequenza, s(t), sarà dato da:
Si definisce fase istantanea θc(t) l'intero argomento del coseno. La frequenza istantanea f(t) può essere definita come il tasso di cambiamento della fase istantanea, quindi:
Allora, sostituendo θc(t) con l'argomento del coseno per il segnale modulato FM, la frequenza istantanea sarà data da:
La formula dimostra che la frequenza istantanea del segnale modulato FM varia in funzione dell'ampiezza del segnale modulante m(t).
Il fattore kf viene definito come costante di deviazione in frequenza e serve a definire l'entità della deviazione dalla frequenza portante del segnale modulato FM. La massima deviazione occorre per il massimo valore di |m(t)|. Se chiamiamo Am il massimo valore di |m(t)|, allora possiamo definire il picco della deviazione di frequenza come Δf = kf Am. Il picco della deviazione di frequenza rappresenta fino a che punto la frequenza del segnale modulato può estendersi in entrambe le direzioni rispetto alla frequenza portante. Si noti che tale valore dipende dalla costante di deviazione della frequenza e dall'ampiezza di picco del segnale di ingresso.
ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2030 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici che potrai leggere in formato PDF per un anno. ABBONATI ORA, è semplice e sicuro.