COMPENDIO GNU OCTAVE 3.8.1 Prefazione

COMPENDIO GNU OCTAVE 3.8.1
Prefazione
Il presente documento è stato creato per l'uso di Octave per il corso di “Elaborazione
Elettronica dei Segnali (6CFU)” tenuto dal Prof. Ramponi durante l'anno accademico
2013/14.
Nonostante buona parte delle istruzioni esposte siano valide per diverse versioni di
Octave e per buona parte dei sistemi operativi Linux (specie per Ubuntu e suoi
derivati), esse sono state verificate solo per Octave 3.8.1 nel sistema operativo
Xubuntu 12.04.
Il testo è rivolto a chi non è molto pratico di Linux, per cui gran parte dei comandi
indicati posso essere già noti ad un utente abituale di questi sistemi operativi.
L'autore di questo documento non garantisce sulla esatta correttezza del documento
Si auspica che eventuali errori possano essere rivelati e corretti e il testo venga
migliorato ed aggiornato per le versioni future di Octave.
Assieme al compendio, è reso disponibile un'insieme di file .m funzionanti su Octave
3.6.4 che ricalcano per buona parte gli esercizi svolti a lezione (anche in tal caso, non
si dà nessuna garanzia sui file nonostante il sottoscritto ricordi che funzionavano
adeguatamente sulla vecchia versione).
Nel caso incontriate dei problemi su Octave o vogliate fare segnalazioni, lascio
disponibile il mio indirizzo mail.
Alessandro Villani (email:[email protected])
1.Installazione
Esistono essenzialmente due metodi per installare octave: uno da repository, l'altro
compilando da sorgente. Generalmente, installare da repository è più semplice
rispetto alla compilazione .D'altro canto, nelle repository non è sempre disponibile
l'ultima versione di Octave, presente nel sito https://www.gnu.org/software/octave/.
Quanto
segue
si
trova
nella
pagina
web
http://wiki.octave.org/Octave_for_Debian_systems.
- Installazione da repository (per utenti Debian/Ubuntu)
Nel caso in cui Octave non sia già presente nel Software Center occorre digitare
prima:
sudo apt-add-repository ppa:octave/stable
sudo apt-add-repository ppa:octave/unstable
sudo apt-get update
# opzionale
Una volta che il software è presente nel Software Center, allora si può istallare il
programma con l'interfaccia grafica oppure da terminale con il comando:
sudo apt-get install octave
- Installazione da sorgente
Il compito arduo è trovare tutti i pacchetti necessari per Octave (le dipendenze).
Un modo semplice ma non sempre efficace è digitare da terminale:
sudo apt-get build-dep octave
Se tutto è andato bene, digitando:
sudo ./configure && make && make install
non appare nessun messaggio di errore e l'installazione è completata.
2. Pacchetti Octave
Pacchetti Octave da scaricare
Ai fini del corso, è necessario utilizzare almeno i pacchetti general, control, signal
reperibili dal sito http://www.octave.sourceforge.net/
2.1 Installazione pacchetto
Per l'installazione di qualsiasi pacchetto è indispensabile avviare Octave con i
permessi di root, tramite il comando:
sudo octave
in quanto si effettuano modifiche al di fuori della propria cartella utente
(home/nome_utente).
Esistono due modi per installare un pacchetto: il primo accede direttamente al
repository di octave.sourceforge, il secondo installa un pacchetto già scaricato
(particolarmente utile per installare versioni precedenti di un certo pacchetto).
Modo 1: installazione tramite repository
Come indicato nella pagina web http://www.octave.sourceforge.net/index.html,
digitando:
pkg install -forge NOME_DEL_PACCHETTO
verrà installato il pacchetto più aggiornato nel repository e, dunque. in
NOME_DEL_PACCHETTO non si deve specificarne la versione
Nella fattispecie, per istallare i pacchetti suindicati, si digiti:
pkg install -forge general
pkg install -forge control
pkg install -forge signal
Si raccomanda di rispettare esattamente quest'ordine, dato che i pacchetti sono tra di
loro indipendenti.
Modo 2: installazione manuale
Per istallare un pacchetto già scaricato, occorre che Octave punti alla cartella che
contiene il pacchetto.
Per verificare tale cartella digitare:
pwd
In alternativa, si può vedere il contenuto della cartella puntata, con:
ls
Se la cartella che appare non corrisponde a quella contenente il pacchetto, occorre
spostare il pacchetto nella cartella indicata nel terminale, oppure spostare la cartella
puntata con il comando:
cd PERCORSO_DELLA_CARTELLA
Una volta che viene raggiunta la cartella desiderata, digitare:
pkg install NOME_DEL_PACCHETTO
ove per NOME_DEL_PACCHETTO si intende il nome esteso del file, compreso
versione ed estensione.
Ad es. se si scarica il pacchetto control-2.4.5.tar.gz, si dovrà digitare:
pkg install control-2.4.5.tar.gz
2.2 Caricamento Pacchetto
Dopo l'installazione, per usare un pacchetto occorre anche caricarlo, digitando:
pkg load NOME_DEL_PACCHETTO
ove nel NOME_DEL_PACCHETTO non si deve specificare la versione.
NOTA:
Nei
dettagli
del
singolo
pacchetto
che
si
trova
nel
sito
http://www.octave.sourceforge.net/ è presente anche la voce 'autoload': se a fianco è
scritto 'yes' significa che il pacchetto si caricherà automaticamente ogni volta che
viene avviato octave; viceversa, se è scritto 'no' occorrerà ricaricarlo ogni qual volta
che lo si usa con le istruzioni date qui sopra; per evitare di caricare manualmente
pacchetti usati abitualmente ved. sotto 'AZIONI INIZIALI'.
3. Azioni iniziali
I comandi che vengono eseguiti automaticamente all'avvio di Octave si trovano di
default nel file avente questo percorso: /usr/share/octave/site/m/startup/octaverc
Questo può essere utile per non ripetere le gli stessi comandi ogniqualvolta che si
apre Octave.
A seguito si indicano alcuni esempi.
CARICARE AUTOMATICAMENTE
FREQUENTEMENTE:
I
PACCHETTI
CHE
SI
USANO
pkg load NOME_DEL_PACCHETTO
IMPOSTARE LA CARTELLA INIZIALE CUI PUNTA OCTAVE
cd PERCORSO_CARTELLA
IMPOSTARE L'EDITOR CHE UTILIZZA OCTAVE (se non si vuole usare l'editor
di default, ovvero emacs)
EDITOR(“NOME_DELL'EDITOR %s”)
Quindi, per impostare gedit come editor si scrive:
EDITOR(“gedit”)
NOTA(1):
Per istallare gedit basta digitare sul terminale:
sudo apt-get install gedit.
NOTA(2):
Si ricordi che se nel percorso ci sono nomi contenenti degli spazi occorre
comprendere il percorso con le virgolette “ ”.
NOTA(3):
I file al di fuori della cartella utente (/home/nome_utente) non si possono modificare
partendo dall'interfaccia grafica (cliccandoci sopra), ma occorre partire da terminale.
In tal caso, sul terminale occorre scrivere:
sudo NOME_DELL'EDITOR /usr/share/octave/site/m/startup/octaverc
e modificare tale file usando l'editor scelto.
4. Utilizzare Octave da interfaccia grafica
Dalla versione 3.8, Octave dispone di un'interfaccia grafica (GUI) che può essere
avviata con il comando:
octave --force-gui
Gli sviluppatori di Octave intendono di far avviare di default l'interfaccia grafica
dalla versione 4.0.
Tale interfaccia ricalca in parte quella del Matlab, anche per la scelta dei tasti (ad
esempio, F5 per salvare ed avviare il programma scritto sull'editor).
Nds: quando seguii il corso di Elaborazione elettronica dei segnali, utilizzavo la versione di Octave
3.6.4 che non disponeva di interfaccia grafica integrata per cui si era obbligati all'uso di Octave su
terminale. Tuttavia, nonostante la nuova versione la dispone, non utilizzo la GUI, per cui ho di essa
nient'altro che una conoscenza molto superficiale. Mi auguro che questo capitolo possa essere
integrato da altri volontari, qualora fosse opportuno.
5. Utilizzare Octave da terminale
Queste istruzioni base sono dedicate a chi preferisce non utilizzare la GUI.
Avviare Octave
Entrato nel terminale, digitare:
octave
Solo quando si installano pacchetti, per evitare problemi, è preferibile digitare
sudo octave
Aprire l'editor da Octave
Basta digitare
edit NOME_DEL_FILE.m
se il file è già esistente nella cartella cui punta Octave, allora aprirà quella; altrimenti,
verrà creato un nuovo file.
NOTA(1):
Attenzione a scrivere sempre l'estensione .m al nuovo file, altrimenti sia l'editor sia
Octave non riconoscono tipo di file.
NOTA(2):
È consigliabile non usare un nome del file che contenga spazi ed altri caratteri
speciali (come le parentesi, i trattini, le lettere accentate...) poiché Octave può non
riuscire a gestirle; è preferibile nominare il file usando solo caratteri alfanumerici (ad
esempio "nomedelfile.m" "NomeDelFile.m")
Eseguire i file Octave
Bisogna attenersi scrupolosamente a quanto segue.
1. Occorre innanzi tutto salvare il file .m (script Matlab/Octave) da far partire;
2. Assicurarsi che Octave punti alla cartella dove è presente il file;
3. digitare il nome del file senza l'estensione .m.
Consigli per l'utilizzo
Per qualsiasi dubbio sul comando che si vuole utilizzare, è estremamente utile il
comando:
help NOME_DEL_COMANDO
Varie istruzioni sono presenti anche nel sito http://www.octave.sourceforge.net/
oppure, nel caso il comando sia presente anche in Matlab, nel sito
http://www.mathworks.it/it/help/.
Usare scorciatoie da tastiera: sono molto utili per velocizzare i compiti su octave; tra
le più utili.
- Alt+Tab, per passare da una finestra all'altra;
- Tab all'interno del Terminale, per attivare l'autocompletamento: questa
scorciatoia è veramente utile quando si hanno nomi molto lunghi (ad es., per eseguire
lo script "RispFreqFiltroIIRRazionale.m" basta scrivere le prime lettere, diciamo
"RispFreq" e premere il tasto tab: se nella stessa cartella non ci sono altri file che
iniziano allo stesso modo apparirà automaticamente il nome dello script voluto)
- Tasti direzionali su/giù, per scorrere la cronologia dei comandi
- Ctrl + c, per terminare l'esecuzione del comando corrente
- Spazio, dalla finestra di plot ritorna nella finestra del terminale
- h, quando si è sulla finestra di plot, fa apparire sul terminale i comandi per le
azioni possibili sulla finestra di plot
NOTA:
Per chi usa gedit come editor, si consiglia di incominciare lo script con il carattere %:
questo artificio permette (non so perché) di riconoscere i comandi base di
Matlab/Octave, colorandoli opportunamente.
6.
Avvertenze e precisazioni
comandi (aggiornato a Gennaio 2014)
su
alcuni
Questo è probabilmente il capitolo più importante del testo, poiché vengono
evidenziate le differenze tra Octave e Matlab riscontrate durante il corso.
%%
Attualmente, la suddivisione in celle non è riconosciuta in Octave. Pertanto, se si ha
uno script suddiviso in celle e si vuole eseguire solo una cella, occorre commentare
tutto il resto (o quantomeno commentare tutte le celle precedenti e usare il comando
'return' alla fine della cella da eseguire) oppure scomporre il singolo file in più file,
ciascuno dei quali contiene una sola cella.
sound, soundsc e similari
Qualora tali comandi (una volta caricato il pacchetto 'sound' nel sito
http://octave.sourceforge.net/) non funzionino, ossia non riusciate a ascoltare alcun
suono, è possibile che risolviate il problema installando il pacchetto sox (digitando,
da terminale, 'sudo apt-get install sox' oppure tramite Software Center).
fvtool,fdatool [ved nota sotto]
Attualmente, questi comandi devono essere ancora implementati su Octave.
Pertanto, per visualizzare i grafici occorre usare i comandi di disegno
(plot,semilogx,semilogy,...), mentre per le altre funzionalità si è costretti a ricorrere
ad altri programmi (oppure, ovviamente, a Matlab stesso)
buttord,cheb1ord,cheb2ord,ellipord
Attualmente, questi comandi non prevedono il calcolo del'ordine e pulsazione di
taglio nel dominio analogico, ovvero l'aggiunta della 's' come ultimo parametro. Per
aggirare l'ostacolo, si immagina di campionare il segnale a pulsazione almeno doppia
di quelle previste (rispettando il teorema di Nyquist); pertanto
1) si scalano le frequenze/pulsazioni in gioco di fc/2, ove fc è la frequenza di
campionamento;
2) si utilizza il comando che calcola l'ordine e la pulsazione di taglio;
3) si rimoltiplicano le frequenze/pulsazioni per fc/2.
lp2lp,lp2hp,lp2bp,lp2sp [ved nota sotto]
Attualmente questi comandi non sono stati ancora implementati su Octave.
In alternativa, si può usare in comando sftrans (che NON FUNZIONA IN MATLAB),
che converte un passa-basso prototipo con pulsazione di taglio 1 in un filtro passabasso, passa-alto, passa-banda o elimina-banda a seconda dei parametri di ingresso.
La struttura del comando è la seguente:
[Sz1, Sp1, Sg1] = sftrans(Sz, Sp, Sg, W, stop)
ove i primi tre ingressi sono la rappresentazione zeri-poli-guadagno del sistema, il
quarto è pulsazione di taglio (o pulsazioni di taglio: in tal caso caso entra un vettore
di due elementi), il quinto è 1 se la banda passante è estesa fino all'infinito (passaalto, elimina-banda), 0 altrimenti (passa-basso, passa-banda).
Attenzione: se si vuole trasformare un passa-basso in un filtro passa-banda o eliminabanda è consigliabile che gli ingressi Sz e Sp siano vettori riga, in modo che i vettori
di uscita siano anch'essi vettori riga; diversamente, se Sz ed Sp sono vettori colonna,
le uscite corrispondenti agli zeri ed ai poli del sistema trasformato Sz1 , Sp1 saranno
matrici (2 x {ordine_del_sistema}) ed in tal caso occorre vettorizzarle con i comandi:
Sz1=Sz1(:); Sp1=Sp1(:);
bilinear
Questa funzione esiste, ma interpreta il terzo parametro diversamente rispetto a
Matlab.
Siano NUM,DEN il numeratore ed il denominatore di una funzione di trasferimento
nel dominio di Laplace e T il periodo di campionamento (virtuale) usato per la
trasformazione diretta.
Allora in Octave occorre scrivere:
[num,den]=bilinear(NUM,DEN,T)
ad es. per T=2
[num,den]=bilinear(NUM,DEN,2)
In Matlab invece:
[num,den]=bilinear(NUM,DEN,1/T)
ad es. per T=2
[num,den]=bilinear(NUM,DEN,.5)
latc2tf, tf2lact [ved nota sotto]
Attualmente questi comandi non sono ancora stati implementati in Octave.
NOTA:
La pagina web http://www.wiki.octave.org/Signal_package#Missing_Functions
raccoglie tutte le funzioni mancanti al pacchetto Signal; qualora i comandi qui
indicati come assenti non risultino nell'elenco nel sito, molto probabilmente il/i
comando/i è/sono stato/i finalmente implementati.
SITI CITATI NEL TESTO
https://www.gnu.org/software/octave/
http://www.octave.sourceforge.net/
http://wiki.octave.org/Octave_for_Debian_systems
http://www.wiki.octave.org/Signal_package#Missing_Functions