[MATLAB] Come disegnare le Figure di Lissajous

lissajous0

Tra le molte funzionalità che MATLAB offre vi è sicuramente una semplice quanto potente gestione della grafica. Per rimanere in ambito elettronico, in questo articolo mostriamo come disegnare le figure di Lissajous, come particolare applicazione delle proprietà grafiche di MATLAB. Chi si occupa di elettronica, soprattutto di misure ed elaborazioni di segnali, ha probabilmente avuto a che fare con queste "misteriose" figure generate su un oscilloscopio, utili a dedurre il rapporto tra le frequenze, o anche la fase relativa, di segnali sinusoidali. Cercheremo, allora, di dare una visione più generale di queste curve, vedremo qualche possibile applicazione ed infine mostreremo come utilizzare MATLAB per visualizzarle.

Con il termine "figura di Lissajous" si indica il grafico di una particolare curva parametrica. Prima di addentrarci nell'aspetto matematico della vicenda, cerchiamo di capire dove si utilizzano questi grafici e perché.

Supponiamo che vogliate analizzare un circuito lineare, che sia una "banale" rete R-C piuttosto che un complicato filtro e che non vogliate o possiate svilupparne il modello matematico e fare tutti i calcoli, ma abbiate a disposizione un generatore di segnali ed un oscilloscopio. Cosa potete fare per analizzare la risposta del circuito ad una data frequenza? Sappiamo che una proprietà dei sistemi lineari è presentare in uscita una sinusoide se in ingresso vi è una sinusoide, di pari frequenza, con ampiezza e fase differenti. Il rapporto fra le ampiezze e la differenza di fase fra ingresso e uscita dipendono dalla frequenza. Le relative funzioni al variare della frequenza costituiscono la "risposta armonica".

Da questa premessa viene spontaneo pensare di sollecitare il circuito con una sinusoide per vedere cosa si ottiene in uscita. Come visualizzare l'uscita? Banalmente si può rispondere: con l'oscilloscopio! Rimane però da spiegare il "come". Potremmo mettere su un canale l'ingresso, su un altro l'uscita, sincronizzarci sul primo canale e poi per il segnale sul secondo canale valutare l'intercetta al tempo zero ed ampiezza e quindi calcolare lo sfasamento con qualche calcolo goniometrico. Esiste un metodo più immediato, che non richiede calcoli? La risposta, che giustifica l'articolo, è SI! Impostando l'oscilloscopio in modalità XY, si mostra il segnale sul secondo canale in funzione del primo, anziché in funzione del tempo.

Il grafico che si visualizza si chiama "figura di Lissajous". Al variare di ampiezza e fase delle due sinusoidi si ottiene una diversa figura, le cui caratteristiche sono univocamente determinate. Avendo a disposizione delle figure "campione" è possibile risalire alla differenza di fase ed all'ampiezza delle due sinusoidi senza fare calcoli, ma solo guardando la forma del grafico. Per capire come sia possibile tutto questo occorre ripassare qualche nozione matematica. In generale una curva nel piano ha una espressione del tipo f(x,y)=0 e non sempre è possibile descriverla in modo esplicito y=y(x), che è la via più immediata per disegnare un grafico. Si pensi al caso di una circonferenza, descritta dall'equazione , avremmo due possibili funzioni:

e dovremmo pensare al modo di disegnare entrambi i rami della curva e sovrapporli. Possiamo allora considerare che una curva in un piano può anche essere descritta da due funzioni parametriche:

dove t è un generico parametro, non necessariamente il tempo. Avendo a disposizione un tool che mostra per ogni valore del parametro t la coppia (x,y) su un grafico si ottiene la curva cercata. Nel caso "hardware" è l'oscilloscopio in modalità XY. Volendo ricorrere ad uno strumento di grafica "software" si può utilizzare il MATLAB.

Tornando alle figure di Lissajous siamo nel caso specifico in cui le funzioni parametriche sono sinusoidi:

Nel caso particolare dell'esempio presentato finora era ωxy. Per fortuna lo strumento è più potente e permette di analizzare anche casi diversi e più generali dell'esempio indicato! Nel caso iniziale di sinusoidi alla stessa frequenza abbiamo una ellisse contenuta in un rettangolo di base 2A ed altezza 2B. Ne consegue che il rapporto fra le ampiezze è uguale al rapporto fra le dimensioni del rettangolo circoscritto. La differenza di fase ne determina il rapporto fra gli assi (aspect ratio).

Ad esempio se la differenza di fase è π/2 e le ampiezze uguali si ottiene una circonferenza.

Se la fase è zero (π) allora si ha una retta inclinata di 45° (-45°)

Nel caso più generale di frequenze diverse si ha che le figure di Lissajous, oltre ad essere più complicate di una semplice ellisse, sono curve chiuse (ovvero periodiche) solo se il rapporto fra le frequenze è razionale (cioè è dato dal rapporto di interi; se poi il rapporto è un intero le frequenze si dicono "armoniche" fra loro).

Una ulteriore considerazione per il caso della circonferenza, con le funzioni parametriche che sono, rispettivamente, coseno e seno: se un punto materiale si muove di moto circolare uniforme, le proiezioni lungo l'asse x e l'asse y si chiamano "moto armonico" (o moto dell'oscillatore armonico) e sono matematicamente descritte proprio dalle funzioni seno e coseno (dell'angolo ωt , con ω costante!). Si noti ancora una volta la potenza della matematica nel descrivere in maniera unificata (anche nei termini: notare come è tutto "armonico") campi apparentemente diversi della fisica, come il moto oscillatorio dei corpi meccanici e gli oscillatori elettronici.

Vediamo ora come mettere in pratica quello cha abbiamo descritto fin qui e creiamo le nostre funzioni parametriche in MATLAB per poi disegnare i grafici. Considerando che le figure dipendono dal rapporto fra frequenze e dalla differenza di fase possiamo scrivere le equazioni parametriche delle curve come:

con n non necessariamente intero.

Riporto il codice che poi provvedo a commentare:

clear all % Cancellazione di tutte le variabili in memoria (workspace)
close all % Chiusura di tutte finestre grafiche eventualmente attive
clc       % pulizia dello schermo

le prime righe dovrebbero essere note e le inserisco solo come "buona abitudine" per iniziare uno script MATLAB. Ricordo che con il carattere "%" si definiscono i commenti, ovvero tutto ciò che segue sulla riga viene ignorato. Veniamo al codice vero e proprio:

t=[0:0.1:2*pi];
a=1;
b=2;
c=pi/4;
n=1;

con questi comandi si assegnano i valori alle variabili, usando gli stessi simboli definiti nell'articolo; con i seguenti assegniamo i valori alle funzioni da visualizzare:

x=a*sin(t);
y=b*sin(n*t+c);

notare i ";" al termine di ogni riga che consente di non visualizzare a schermo i risultati delle operazioni.

Ed ora, finalmente, passiamo alla grafica. Se diamo il comando

plot(x,y,)

otteniamo il grafico di y in funzione di x come, appunto, un oscilloscopio in modalià XY. I comandi che seguono permettono di personalizzare la visualizzazione:

grid on % Attiva la griglia
hold on % congela il grafico per sovrapporre due grafici nella stessa finestra

 
xlabel('x=a*sin(t)')      % mette la didascalia all'asse x
ylabel('y=b*sin(n*t+c)')  % mette la didascalia all'asse y
title('a=1; b=2; c=\pi/2; n=1; ') % per scrivere il titolo

Nella figura seguente è riportato il grafico ottenuto con i parametri del codice presentato. Le figure mostrate in precedenza riportano nelle didascalie i valori dei parametri usati, relativi ai casi descritti nel testo.

Per conoscere le varie opzioni del comando plot è sufficiente digitare help plot. Sarà possibile, ad esempio, vedere come variare il colore o lo stile della linea.

Come esempio finale presento lo script utilizzato per generare la figura principale visibile in testa all'articolo. Si tratta di un ciclo for, come in un qualsiasi linguaggio di programmazione, chiuso alla fine da un end:

for n=1:5;

x=a*sin(t);
y=b*sin(n*t+c);
 
s={'r','b','g','c','m'};
 
plot(x,y,char((s(n))))

grid on
hold on
end

l'assegnazione dopo il for definisce i valori che la variabile "n" assume ad ogni iterazione: con due soli valori si indica solo il primo e l'ultimo valore dell'intervallo e l'incremento, per default, è unitario. Con il comando:

n=1:2:10

si ottengono invece sempre cinque iterazioni ma con passo di incremento 2 (il valore centrale).

L'assegnazione prima del plot serve ad elencare le stringhe da passare come terzo parametro alla funzione plot, utilizzato per variare il colore delle curve. Il comando "char" serve a convertire in tipo carattere i dati contenuti in s(i) (notare che non è un vettore ma un altro tipo di dato, infatti è definito mediante graffe).

Infine è possibile salvare le figure, usando il menu file/save as, scegliendo fra vari formati grafici. Ad esempio le immagini dell'articolo sono state salvate in .jpg. Il formato predefinito è proprietario di MATLAB ( .fig )  e consente di gestire la figura come un "normale plot". Dopo averla caricata, quindi, se ne possono modificare gli attributi (assi, etichette, colori, ecc.) o sovrapporre ulteriori grafici, usando hold on.

Conclusioni

Abbiamo visto cosa sono le funzioni di Lissajous, come generarle su un oscilloscopio e, soprattutto, come realizzarle in MATLAB. Sfruttando i rapporti di frequenze irrazionali, poi, è possibile creare interessanti oggetti grafici, a prescindere dal significato fisico da cui le figure discendono.

 

Quello che hai appena letto è un Articolo Premium reso disponibile affinché potessi valutare la qualità dei nostri contenuti!

 

Gli Articoli Tecnici Premium sono infatti riservati agli abbonati e vengono raccolti mensilmente nella nostra rivista digitale EOS-Book in PDF, ePub e mobi.
volantino eos-book1
Vorresti accedere a tutti gli altri Articoli Premium e fare il download degli EOS-Book? Allora valuta la possibilità di sottoscrivere un abbonamento a partire da € 2,95!
Scopri di più

6 Comments

  1. Piero Boccadoro Piero Boccadoro 25 ottobre 2013
  2. Emanuele Emanuele 26 ottobre 2013
  3. Tiziano.Pigliacelli Tiziano.Pigliacelli 27 ottobre 2013
  4. cristiano.gabrieli 28 ottobre 2013
  5. GianlucaAngelone Gianluca Angelone 28 ottobre 2013
  6. cristiano.gabrieli 28 ottobre 2013

Leave a Reply

Raspberry Pi 3 GRATIS! (Win10 compatibile)

Fai un abbonamento Platinum (EOS-Book + Firmware), ricevi in OMAGGIO la RASPBERRY 3, inviaci il tuo progetto e OTTIENI IL RIMBORSO