1 introduzione ai comandi di matlab - intranet...

35
2 1 Introduzione ai comandi di Matlab MATLAB è un linguaggio ad alte prestazioni adatto per effettuare operazioni matematiche. Esso integra calcolo, visualizzazione, e una programmazione semplice dove problemi e soluzioni sono espresse attraverso una notazione matematica. Tipo di dato fondamentale di MATLAB è la matrice numerica i cui elementi possono essere anche complessi. Casi particolari sono la matrice 1x1 (scalare) e matrici con 1 sola riga o 1 sola colonna (vettori). Cosa importante è il fatto che non è necessario dichiarare gli array e le loro dimensioni prima di adoperarli. Esempio di inserimento di una matrice al prompt dei comandi: >>A = [11 3 2 13; 5 1 11 8; 9 6 9 12; 2 15 14 1] Convenzioni per l’inserimento di una matrice: - Separare gli elementi di una riga con uno spazio ‘ ‘ o una virgola . - Usare il ; per indicare la fine di ogni riga - Racchiudere l’intera lista di elementi tra parentesi quadre [ ]. Premendo invio MATLAB visualizza la matrice appena introdotta 1 : A = 11 3 2 13 5 1 11 8 9 6 9 12 2 15 14 1 Una volta inserita la matrice essa rimane automaticamente memorizzata nell’ambiente di lavoro e può essere semplicemente richiamata come A per essere riutilizzata in operazioni successive (osservazione: non è necessario dichiarare prima la variabile e le sue dimensioni). 1 Il comando Somma >> sum(A) seguito da invio effettua la soma lungo le colonne di A. Sullo schermo viene visualizzato ans = 27 25 36 34 Quando la variabile a cui assegnare il risultato di un’operazione non viene specificata MATLAB usa ans (abbreviazione di “answer”). Se la matrice è costituita da un vettore il comando sum esegue la somma degli elementi della riga. 2 Indici 1 Per evitare la visualizzazione terminare con ; come segue: A = [11 3 2 13; 5 1 11 8; 9 6 9 12; 2 15 14 1];

Upload: trinhphuc

Post on 16-Feb-2019

221 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1 Introduzione ai comandi di Matlab - Intranet DEIBhome.deib.polimi.it/reggiani/FdSS/laboratorio/Lab.pdf · x=randn(t) (funzioni generanti variabili casuali con densità di probabilità

2

1 Introduzione ai comandi di Matlab MATLAB è un linguaggio ad alte prestazioni adatto per effettuare operazioni matematiche. Esso integra calcolo, visualizzazione, e una programmazione semplice dove problemi e soluzioni sono espresse attraverso una notazione matematica. Tipo di dato fondamentale di MATLAB è la matrice numerica i cui elementi possono essere anche complessi. Casi particolari sono la matrice 1x1 (scalare) e matrici con 1 sola riga o 1 sola colonna (vettori). Cosa importante è il fatto che non è necessario dichiarare gli array e le loro dimensioni prima di adoperarli. Esempio di inserimento di una matrice al prompt dei comandi: >>A = [11 3 2 13; 5 1 11 8; 9 6 9 12; 2 15 14 1]

Convenzioni per l’ inserimento di una matrice: - Separare gli elementi di una riga con uno spazio ‘ ‘ o una virgola . - Usare il ; per indicare la fine di ogni riga - Racchiudere l’ intera lista di elementi tra parentesi quadre [ ].

Premendo invio MATLAB visualizza la matrice appena introdotta1: A = 11 3 2 13 5 1 11 8 9 6 9 12 2 15 14 1 Una volta inserita la matrice essa rimane automaticamente memorizzata nell’ambiente di lavoro e può essere semplicemente richiamata come A per essere riutilizzata in operazioni successive (osservazione: non è necessario dichiarare prima la variabile e le sue dimensioni). 1 Il comando Somma >> sum(A) seguito da invio effettua la soma lungo le colonne di A. Sullo schermo viene visualizzato ans = 27 25 36 34 Quando la variabile a cui assegnare il risultato di un’operazione non viene specificata MATLAB usa ans (abbreviazione di “answer” ). Se la matrice è costituita da un vettore il comando sum esegue la somma degli elementi della riga. 2 Indici

1 Per evitare la visualizzazione terminare con ; come segue: A = [11 3 2 13; 5 1 11 8; 9 6 9 12; 2 15 14 1];

Page 2: 1 Introduzione ai comandi di Matlab - Intranet DEIBhome.deib.polimi.it/reggiani/FdSS/laboratorio/Lab.pdf · x=randn(t) (funzioni generanti variabili casuali con densità di probabilità

3

Per una matrice A, l’elemento di posizione (i,j) viene individuato attraverso la scrittura A(i,j ). Ad esempio, A(4,2) è il numero ottenuto dall’ incrocio tra la quarta riga e la seconda colonna, cioè 15. Nel caso in cui uno degli indici è superiore alla dimensione della matrice viene segnalato un errore. Ad esempio l’assegnamento >>t = A(4,5) produce il seguente messaggio d’errore Index exceeds matr ix dimensions. Se si memorizza un valore al di fuori della matrice la dimensione di quest’ultima viene aumentata per far posto al nuovo elemento: >>X = A; >>X(4,5) = 17 X = 11 3 2 13 0 5 1 11 8 0 9 6 9 12 0 2 15 14 1 17 3 L’operatore : (colon) L’operatore : (colon), è uno degli operatori MATLAB più importanti. Esso può essere impiegato con differenti funzioni. L’espressione >>1:10 produce un vettore riga contenente gli interi da 1 a 10 1 2 3 4 5 6 7 8 9 10 Per ottenere una spaziatura non unitaria, si deve specificare una spaziatura. Ad esempio >>100:-7:50 produce 100 93 86 79 72 65 58 51 e >>0:pi/4:pi produce 0 0.7854 1.5708 2.3562 3.1416 Espressioni d’ indicizzazione coinvolgenti l’operatore : referenziano porzioni di matrici. Ad esempio >>A(1:k,j ) seleziona i primi k elementi della j-esima colonna. Così >>sum(A(1:4,4)) calcola la somma degli elementi della quarta colonna. L’operatore : da solo si riferisce a tutti gli elementi di una riga o di una colonna. La parola chiave end referenzia l’ultima riga o colonna. Così

Page 3: 1 Introduzione ai comandi di Matlab - Intranet DEIBhome.deib.polimi.it/reggiani/FdSS/laboratorio/Lab.pdf · x=randn(t) (funzioni generanti variabili casuali con densità di probabilità

4

>>sum(A(:,end)) ans = 34 calcola la somma degli elementi dell’ultima colonna di A 4 La definizione di variabile Una variabile viene definita assegnando: un valore numerico (complesso o reale) a=3+j*7 (oppure 3+i*7) 3+i7 ; un vettore numerico : a=zeros(1,5) 0 0 0 0 0 ; a=ones(1,5) 1 1 1 1 1 ; una matrica numerica : a=zeros(2,5) 0 0 0 0 0 0 0 0 0 0 ; una funzione di una variabile precedentemente definita numericamente: se b=2 allora a=b a diviene =2 . 5 Il comando : if

L’espressione if a<b c=d end definisce che c è uguale a d se a<b

Page 4: 1 Introduzione ai comandi di Matlab - Intranet DEIBhome.deib.polimi.it/reggiani/FdSS/laboratorio/Lab.pdf · x=randn(t) (funzioni generanti variabili casuali con densità di probabilità

5

6 Il comando size(a) Consegna le dimensioni della matrice A A = 11 3 2 13 5 1 11 8 9 6 9 12 size(A):

3 4 7 Il comando length(x) x è un vettore: x=[1 2 3 4 5 6 7 8 9 ] length(x): 9 8 Il comando : find L’espressione I=find(x>=1) Definisce il vettore I costituito dagli indici del vettore x in corrispondenza dei quali x assume valori maggiori o uguali ad 1 x=[0 –1 2 4 –7] I=[3 4] 9 Il comando : for L’espressione: par i=zeros(1,6) for k=0:2:10 par i(k/2+1)=k end definisce che par i(1)=0 par i(2)=2 par i(3)=4

Page 5: 1 Introduzione ai comandi di Matlab - Intranet DEIBhome.deib.polimi.it/reggiani/FdSS/laboratorio/Lab.pdf · x=randn(t) (funzioni generanti variabili casuali con densità di probabilità

6

par i(4)=6 par i(5)=8 par i(6)=10 L’ indice k varia tra 0 e 10 con passo 2 ed il vettore par i assume il valore k quando l’ indice vettoriale è k/2+1 Altri comandi Matlab Se x è un vettore di numeri complessi, i seguenti comandi sono autoesplicativi a=

min(x) max(x) real(x),imag(x) abs(x),angle(x) sqrt(x)

Page 6: 1 Introduzione ai comandi di Matlab - Intranet DEIBhome.deib.polimi.it/reggiani/FdSS/laboratorio/Lab.pdf · x=randn(t) (funzioni generanti variabili casuali con densità di probabilità

7

2 Introduzione all’uso di funzioni matematiche con Matlab a Generalità a.1 Gli operatori matematici + somma punto a punto di numeri e matrici a+b - sottrazione punto a punto di numeri e matrici a-b * prodotto di matrici (secondo le regole proprie) a*b / divisione di matrici(secondo le regole proprie) a/b ^ elevamento a potenza di matrici a 3 .* prodotto punto a punto di matrici a.*b ./ divisione punto a punto di matrici a./b .^ elevamento a potenza punto a punto di matrici a.^3 dove a e b possono essere numeri, vettori o matrici. Nelle istruzioni Matlab gli operatori vanno sempre esplicitati (in particolare * !) a.2 Le funzioni matematiche di Matlab Le più utili: x=sin(t) x=cos(t), e altre funzioni trigonometriche x=exp(t) x=log10(t) ; x=rand(t) x=randn(t) (funzioni generanti variabili casuali con densità di probabilità rispettivamente

uniformemente distribuita e normale (vedi par 3)) dove t può essere un vettore, una matrice o un numero a.3 La definizione di una funzione

Per definire la funzione x=x(t) in Matlab occorre definire inizialmente il vettore variabile indipendente t.

Esso è caratterizzato, generalmente, da 3 parametri: valore iniziale ti passo t0 numero di elementi N

E’ banale determinare il valore finale tf=ti+N*t0. Si noti come il vettore t sia una espressione discreta di valori della variabile continua t.

Page 7: 1 Introduzione ai comandi di Matlab - Intranet DEIBhome.deib.polimi.it/reggiani/FdSS/laboratorio/Lab.pdf · x=randn(t) (funzioni generanti variabili casuali con densità di probabilità

8

Si deve considerare anche il vettore indici di t I t = [1:1:N]. Per ogni valore it di I t si ha un corrispondente valore di t: t(it)=ti+(it-1)* t0. Il vettore x che esprime la funzione x=x(t) è un vettore della stessa dimensione N, in cui l’elemento it_esimo esprime il valore della funzione x(t) corrispondente al valore dell’ it_esimo del vettore t. Si noti come il vettore x sia una espressione discreta di valori della variabile continua x(t). Quindi una funzione è espressa mediante una coppia di vettori, x e t, associati secondo il vettore I t nel modo detto sopra. Es.: t=[-3 –2 –1 0 1 2] t0=1 N=6 I t=[1 2 3 4 5 6]; se x=x(t)=t^2, x=[9 4 1 0 1 4 ], in cui il generico it_esimo elemento è pari al quadrato dell’ it_esimo elemento di t: it=2 t(it)=-2 x(it)=(-2)^2=4. In definitiva una funzione x(t) in Matlab è:

espressa numericamente espressa in maniera discreta nella variabile indipendente espressa da una coppia di vettori, x e t, associati secondo il vettore indice I t.

a.4 Le operazioni sulle funzioni con Matlab Quando siano date due (o più) funzioni x1(t), x2(t) , si abbia anche che:y(t)=f(x1(t),x2(t)) e si siano dati i due vettori x1 e x2, il vettore y si ricava come y=f(x1,x2), svolgendo le operazioni a pari indice e con operatori punto a punto: y(it)=f(x1(it),x2(it)) ; ne deriva che, perché l’operazione sui vettori corrisponda all’operazione richiesta sulle funzioni x1(t) e x2(t), a pari indice it corrispondano pari valori nei vettori t1 e t2 associati a x1 e x2 rispettivamente. Poiché i vettori x1 e x2 debbono avere la stessa lunghezza (requisito per poter svolgere le operazioni in Matlab), ne deriva che t1 e t2 debbono essere identici. Quando vengono definite le funzioni o prima delle operazioni su di esse, occorre verificare questo vincolo o ricondursi ad esso.

Esempio:

x1(t)=t x2(t)=t^2;

Page 8: 1 Introduzione ai comandi di Matlab - Intranet DEIBhome.deib.polimi.it/reggiani/FdSS/laboratorio/Lab.pdf · x=randn(t) (funzioni generanti variabili casuali con densità di probabilità

9

siano dati i due vettori t1 e t2 rispettivamente: t1=[0 2 4 6 8] t2=[2 4 6 8 ] Allora x1=[0 2 4 6 8] x2=[4 16 36 64] Se y=x1(t)*x2(t) y=x1.*x2 non viene eseguita perché i due vettori non hanno pari lunghezza. Occorre ridurli a lunghezza 4 entrambi e verificare che i corrispondenti vettori t1 e t2 siano identici:

t1’=[2 4 6 8]==t2 x1’=[2 4 6 8] x2=[4 16 36 64] y=x1’ .*x2=[2*4 4*16 6*36 8*64], ed il vettore tempo ty associato alla funzione y sarà : ty=[2 4 6 8]

Page 9: 1 Introduzione ai comandi di Matlab - Intranet DEIBhome.deib.polimi.it/reggiani/FdSS/laboratorio/Lab.pdf · x=randn(t) (funzioni generanti variabili casuali con densità di probabilità

10

b Alcune funzioni matematiche particolari

b.1 Generalità

I tipi di oggetti che si incontrano nello studio dei segnali e dei sistemi sono adatti ad una rappresentazione in forma matriciale. Il Signal Processing Toolbox di MATLAB fornisce un’ampia gamma di funzioni per generare segnali, la maggior parte dei quali richiede che la variabile indipendente temporale continua t (per segnali analogici), o discreta n (nel caso di sequenze), sia rappresentata attraverso un vettore. In MATLAB, un segnale tempo-discreto è rappresentato esattamente poichè i valori assunti dal segnale sono rappresentati come elementi del vettore. Per quanto riguarda i segnali tempo continui, MATLAB fornisce solo un’approssimazione di un segnale tempo continuo. L’approssimazione consiste di un vettore i cui elementi sono dei campioni del segnale tempo continuo. Quando si usa questo approccio approssimato è importante scegliere l’ intervallo di campionamento I sufficientemente piccolo in modo da assicurare che i campioni rappresentino nel modo più fedele possibile il segnale. Segnale sinusoidale Per generare un vettore t di valori temporali con intervallo di campionamento I di 1 ms ( 310− sec) per un intervallo di tempo da 0 s a 1 s, si può usare il comando >>t=0:.001:1; In questo modo si genera un vettore riga di 1001 elementi che rappresenta la variabile indipendente temporale da 0 s a 1 s con un passo di 1 ms. Dato t è possibile creare un segnale campionato y che consiste in una sinusoide con frequenza di 50 Hz : >>y = sin(2*pi*50*t); La nuova variabile y, derivata dal vettore t, è anch’essa di 1001 elementi. Per visualizzarla si usa la funzione MATLAB plot plot(t(1:50),y(1:50)) b Funzioni definite dall’utente (function) Un’ importante caratteristica di MATLAB è quella che permette di creare M-file o sottoprogrammi. Esistono due tipi di M-file:

1. scripts: lunghe sequenze di comandi che vengono memorizzati in un file 2. funzioni: permettono di estendere le potenzialità di MATLAB attraverso l’aggiunta di nuove

funzioni. Ogni variabile che viene usata in una funzione non rimane in memoria. Per questo motivo variabili d’ ingresso e variabili d’uscita devono essere indicate esplicitamente. Una funzione è caratterizzata come segue:

a. Inizia attraverso la definizione del nome della funzione, i suoi argomenti d’ ingresso e i suoi argomenti d’uscita;

b. Contiene una sequenza di istruzioni il cui scopo è quello di produrre le variabile d’uscita;

Page 10: 1 Introduzione ai comandi di Matlab - Intranet DEIBhome.deib.polimi.it/reggiani/FdSS/laboratorio/Lab.pdf · x=randn(t) (funzioni generanti variabili casuali con densità di probabilità

11

c. Gli ingressi possono essere scalari, vettori o matrici. d. Si conclude con il comando return Esempio: file rect.m function [g,tg]=rect(x,t) % g e tg sono le var iabili in uscita % x e t sono le var iabili in ingresso g=zeros(size(x)); set1=find(abs(x)<=0.5); g(set1)=ones(size(set1)); tg=t; return La nuova funzione rect.m può essere usata come ogni altra funzione MATLAB. In particolare può essere usata per generare un impulso rettangolare come segue: t=-1:1/500:1; plot(t,rect(t));

Per scrivere gli M-file conviene usare l’editor fornito con MATLAB. Questo è richiamabile sia dal prompt dei comandi digitando edit sia da da MATLAB entrando in file-> new.

Page 11: 1 Introduzione ai comandi di Matlab - Intranet DEIBhome.deib.polimi.it/reggiani/FdSS/laboratorio/Lab.pdf · x=randn(t) (funzioni generanti variabili casuali con densità di probabilità

12

Alcune function specifiche utilizzate nel seguito Definiamo il vettore t supporto delle funzioni che seguono. t0=0.001 scansione del vettore tempo t ti=-1 N=2000 tf=ti+N*t0 t=-ti:t0:tf oppure t=(-N/2:1:N/2-1)* t0 Definiamo inizialmente la funzione passo(t) : Dato di ingresso t vettore tempo Dato di uscita p passo di scansione del vettore t File passo.m function p=passo(t) p=t(2)-t(1) return a Impulso di Dirac Dati di ingresso: istante di esistenza dell’ impulso: timp(nota:timp deve essere compreso in t) Il vettore t Nota: l’area dell’ impulso di Dirac è par i a 1* to File : fd.m function fdirac=fd(t,timp) fdirac=zeros(size(t)); I=find(abs(t-timp)<1e-10); fdirac(I )=1; return

Page 12: 1 Introduzione ai comandi di Matlab - Intranet DEIBhome.deib.polimi.it/reggiani/FdSS/laboratorio/Lab.pdf · x=randn(t) (funzioni generanti variabili casuali con densità di probabilità

13

b Impulso rettangolare di ampiezza unitaria Dati di ingresso: media: istante centrale del rettangolo durata= durata temporale dell’ impulso rettangolare t: vettore tempo File :trarect.m function x=trarect(t,media,durata) x=zeros(size(t)); I=find(abs(t-media)<durata/2); x(I )=1; return

-2 -1.5 -1 -0.5 0 0.5 1 1.5 2-1

-0.5

0

0.5

1

1.5

2

Esempio in figura: media=0.5 durata =1

Page 13: 1 Introduzione ai comandi di Matlab - Intranet DEIBhome.deib.polimi.it/reggiani/FdSS/laboratorio/Lab.pdf · x=randn(t) (funzioni generanti variabili casuali con densità di probabilità

14

c Impulso triangolare di ampiezza unitaria, centrato per t=0 Dati di ingresso: durata durata dell’ impulso triangolare t vettore tempo Nota: per ottenere la funzione centrata in un altro istante diverso da 0, utilizzare la function r it, definita solo nel dominio delle frequenze, con l’opportuna sequenza di trasformata e antitrasformata di Fourier File tr i.m function tr iang=tr i(t,durata) tr iang=zeros(size(t)); tr iang=1-abs(t)/(durata/2); I=find(tr iang<0); tr iang(I )=0; return

-2 -1.5 -1 -0.5 0 0.5 1 1.5 2-1

-0.5

0

0.5

1

1.5

2

Esempio in figura: durata = 1

Page 14: 1 Introduzione ai comandi di Matlab - Intranet DEIBhome.deib.polimi.it/reggiani/FdSS/laboratorio/Lab.pdf · x=randn(t) (funzioni generanti variabili casuali con densità di probabilità

15

d Impulso trapezoidale di ampiezza unitaria, centrato attorno all’ istante 0 Dati di ingresso: t vettore tempo durM base maggiore del trapezio durm base minore del trapezio Nota: per ottenere la funzione centrata in un altro istante diverso da 0, utilizzare la function r it, definita solo nel dominio delle frequenze, con l’opportuna sequenza di trasformata e antitrasformata di Fourier File trape.m function trapezio=trape(t,durM,durm) tr iang=tr i(t,durM); I I=find(abs(t)<=durm/2) a=tr iang(min(I I )) tr iang(I I )=a; trapezio=tr iang/a; return

-2 -1.5 -1 -0.5 0 0.5 1 1.5 2-1

-0.5

0

0.5

1

1.5

2

Esempio in figura: durM=1 durm=0.5 Nota. Quando le funzioni, da generare o visualizzare, sono trasformate di Fourier di segnali

definiti nel tempo o funzioni di trasferimento di filtri, la variabile indipendente e’ la frequenza f .

Le considerazioni effettuate per le funzioni del tempo valgono anche per le funzioni di f.

Page 15: 1 Introduzione ai comandi di Matlab - Intranet DEIBhome.deib.polimi.it/reggiani/FdSS/laboratorio/Lab.pdf · x=randn(t) (funzioni generanti variabili casuali con densità di probabilità

16

In particolare il vettore f deve essere definito simmetricamente rispetto alla frequenza 0. (Vedere il capitolo sulla trasformazione di Fourier) In particolare : le function rect, tr i, trapezio, se il vettore di ingresso è costituito da f, rappresentano trasformate di impulsi particolari o funzioni di trasferimento di filtri noti che verranno usati nel seguito. Aggiungiamo solo alcune function specifiche nel dominio delle frequenze: e la funzione di trasferimento del sistema che introduce ritardo Dati di ingresso: tau ritardo f vettore frequenza File r it.m function F_r it=r it(tau,f) F_r it=zeros(size(f)); F_r it=exp(-j *2*pi* f* tau); return

Page 16: 1 Introduzione ai comandi di Matlab - Intranet DEIBhome.deib.polimi.it/reggiani/FdSS/laboratorio/Lab.pdf · x=randn(t) (funzioni generanti variabili casuali con densità di probabilità

17

f la funzione di trasferimento di un filtro passa basso reale la funzione rappresenta la funzione di trasferimento di un filtro passa basso reale Dati di ingresso: tc: costante di tempo del filtro f: vettore delle frequenze su cui impostare la funzione di trasferimento Dati di uscita FRC: funzione di trasferimento complessa del filtro f: vettore delle frequenze su cui è definito FCR File FRC.m function [FRC,f]=FRC(tc,f) FRC=zeros(size(f)); FRC=1./(1+j*2*pi* f* tc); return

-2 -1.5 -1 -0.5 0 0.5 1 1.5 2-1

-0.5

0

0.5

1

1.5

2

Esempio in figura: tc=0.2. In figura, e’ riportato, in funzione di f, il modulo della funzione di trasferimento (abs(FRC))

Page 17: 1 Introduzione ai comandi di Matlab - Intranet DEIBhome.deib.polimi.it/reggiani/FdSS/laboratorio/Lab.pdf · x=randn(t) (funzioni generanti variabili casuali con densità di probabilità

18

g la funzione di trasferimento del filtro di Nyquist, a coseno rialzato Dati di ingresso: tc: periodo di campionamento (tc=1/R, con R ritmo di

trasmissione degli impulsi) alfa: coefficiente del filtro f: vettore delle frequenze Dati di uscita FCR: funzione di trasferimento complessa del filtro f: vettore delle frequenze su cui è definito FCR File FCR.m function [FCR,f]=FCR(tc,alfa,f) if alfa==0 alfa=0.001; end if alfa>=1 alfa=0.999; end w=1/(2* tc) FCR=zeros(size(f)); I=find(abs(f)<=(w*(1-alfa))); FCR(I )=1; I I=find(abs(f)>=(w*(1-alfa))); FCR(I I )=0.5*(1+cos(2*pi* (abs(f(I I ))-w*(1-alfa))/(4*alfa*w))); I I I=find(abs(f)>=(w*(1+alfa))); FCR(I I I )=0; return

Esempio: alfa = 1-8 -6 -4 -2 0 2 4 6 8

-1

-0.5

0

0.5

1

1.5

2

Page 18: 1 Introduzione ai comandi di Matlab - Intranet DEIBhome.deib.polimi.it/reggiani/FdSS/laboratorio/Lab.pdf · x=randn(t) (funzioni generanti variabili casuali con densità di probabilità

19

-8 -6 -4 -2 0 2 4 6 8-1

-0.5

0

0.5

1

1.5

2

Esempio alfa=0.5

Esempio alfa=0

-8 -6 -4 -2 0 2 4 6 8-1

-0.5

0

0.5

1

1.5

2

Page 19: 1 Introduzione ai comandi di Matlab - Intranet DEIBhome.deib.polimi.it/reggiani/FdSS/laboratorio/Lab.pdf · x=randn(t) (funzioni generanti variabili casuali con densità di probabilità

20

Funzioni del tempo (segnali) utilizzati nel programma di simulazione del sistema di comunicazione La funzione: rand x=rand(size(t)), restituisce un vettore x, delle dimensioni di t, i cui elementi hanno valore casuale che varia con continuità tra 0 e 1 compresi; la densità di probabilità è uniforme tra 0 ed 1. La funzione: randn x=randn(size(t)) restituisce un vettore x, delle dimensioni del vettore t, i cui elementi hanno un valore casuale che varia con continuità tra –inf e +inf; la densità di probabilità è normale con valor medio 0 e varianza 1.

Page 20: 1 Introduzione ai comandi di Matlab - Intranet DEIBhome.deib.polimi.it/reggiani/FdSS/laboratorio/Lab.pdf · x=randn(t) (funzioni generanti variabili casuali con densità di probabilità

21

La funzione: somma di n sinusoidi Dati n e il vettore tempo t, vengono definiti i vettori: fre=1:1:n n valori di frequenza interi compresi tra 1 ed n, amp=ones(1,n) n valori unitari di ampiezza delle sinusoidi l’ ii_esima sinusoide ( ii varia tra 1 ed n) avrà espressione: amp(1,ii)*cos(2*pi* fre(1,ii)* t) viene definita la matrice di n righe, e numero di colonne pari alla lunghezza di t xx=zeros(n,length(t)) e con il comando for si esegue l’assegnazione: for ii=1,n xx(ii,1 :1 :length(t))=amp(1,ii)*cos(2*pi* fre(1,ii)* t(1,1 :1 :length(t))) end Il comando sum somma i valori delle colonne di xx e si ottiene il segnale x, vettore di lunghezza pari a t x=zeros(size(t)) x=sum(xx) la function è la seguente: Dati di ingresso t vettore tempo n numero di sinusoidi File sinus.m % generazione di sinusoidi function sin_sig=sinus(t,n) fre=1:n; amp=ones(1,n); xx=zeros(n,length(t)); for ii=1:1:n xx(ii,1:length(t))=amp(1,ii)*cos(2*pi* fre(1,ii).* t); end x=zeros(size(t)); x=sum(xx); if n==1 x=xx; end sin_sig=x; return

Page 21: 1 Introduzione ai comandi di Matlab - Intranet DEIBhome.deib.polimi.it/reggiani/FdSS/laboratorio/Lab.pdf · x=randn(t) (funzioni generanti variabili casuali con densità di probabilità

22

Funzione impulsiva(di Dirac) periodica Dati di ingresso: istanti di esistenza dell’ impulso:ti1=ti

tc (periodo della funzione periodica)= inverso della frequenza di campionamento Fc=1/tc (nota: ti1 deve essere compreso in t (viene fatto coincidere con ti) e tc deve essere multiplo di t0)

Il vettore t Nota: l’area dell’ impulso di Dirac è par i a 1* to File : fdper.m function fdirper=fdper(t,tc) t0=t(2)-t(1); fdirper=zeros(size(t)); Ic=tc/t0; %nota: per iodicità dell’ indice fdirper(1:Ic:length(t))=1; %nota: la per iodicità è valutata sugli indici di t e non sui valor i return

esempio : tc=0.2

-2 -1 . 5 -1 -0 . 5 0 0 . 5 1 1 . 5 2-1

-0 . 5

0

0 . 5

1

1 . 5

2

Page 22: 1 Introduzione ai comandi di Matlab - Intranet DEIBhome.deib.polimi.it/reggiani/FdSS/laboratorio/Lab.pdf · x=randn(t) (funzioni generanti variabili casuali con densità di probabilità

23

Segnale antipodale Dati di ingresso: tcr (periodicità degli impulsi) = inverso del ritmo di Trasmissione Il vettore t File: antipod.m function x=antipod(t,tcr ) % tcr è il per iodo di trasmissione per il filtro di Nyquist % ed è par i al per iodo di campionamento del segnale analogico, diviso per il numero % di bit di codifica binar ia dei campioni x=fdper(t,tcr ); I=find(x>0); yant=rand(size(I ))-0.5; IP=find(yant>=0); IM=find(yant<0); yant(IP)=1; yant(IM)=-1; x(I )=yant; return

esempio tcr=0.05

Page 23: 1 Introduzione ai comandi di Matlab - Intranet DEIBhome.deib.polimi.it/reggiani/FdSS/laboratorio/Lab.pdf · x=randn(t) (funzioni generanti variabili casuali con densità di probabilità

24

c Le operazioni di integrazione, convoluzione, trasformazione di Fourier Per i nostri scopi è utile poter effettuare mediante Matlab alcune operazioni matematiche complesse. 1 L’ integrazione Data una funzione x(t), l’ integrale tra 2 valori ta e tb si puo’ calcolare numericamente. Definiti i due vettori t ed x , t=(-N/2:1:N/2-1)* t0 se l’ integrazione viene effettuata tra ti e tf:

Int=sum(x)*t0 Se gli estremi di integrazione ta e tb sono interni al campo di definizione di t, occorre determinare gli indici Ia e Ib nel seguente modo : Ia=find(t==ta) Ib=find(t==tb) L’ integrale si calcola come Int(a,b)=sum(x(1,Ia :1 :Ib)* t0 , ovvero l’ integrale si approssima con la sommatoria degli elementi del vettore x, con indici corrispondenti ad istanti compresi nell’ intervallo di integrazione, moltiplicata per il passo di scansione temporale t0.

Page 24: 1 Introduzione ai comandi di Matlab - Intranet DEIBhome.deib.polimi.it/reggiani/FdSS/laboratorio/Lab.pdf · x=randn(t) (funzioni generanti variabili casuali con densità di probabilità

25

File integra.m function z=integra(x,t,ta,tb) p=passo(t) ; Ia=find(t==ta) ; Ib=find(t==tb) ; z= sum(x(1,Ia :1 :Ib)*p return

Page 25: 1 Introduzione ai comandi di Matlab - Intranet DEIBhome.deib.polimi.it/reggiani/FdSS/laboratorio/Lab.pdf · x=randn(t) (funzioni generanti variabili casuali con densità di probabilità

26

2 La convoluzione Per effettuare l’operazione di convoluzione Matlab dispone della function apposita: y=conv(x,h), dove x e h sono vettori di due funzioni x(t) e h(t), associati ai vettori temporali tx e th , che non devono essere necessariamente identici, ma devono però soddisfare le seguenti condizioni:

1. i passi della scansione temporale t0x e t0h di tx e th debbono essere identici : t0x=t0h=t0, e risulteranno uguali anche a t0y, passo della scansione di y. In particolare, se gli intervalli di tempo coperti da tx e ty sono in parte sovrapposti, nel tratto di sovrapposizione i valori degli elementi di tx e ty devono essere identici.

Il vettore y rilasciato risulta essere di lunghezza diversa sia da x che da h, e par i alla somma delle due r ispettive lunghezze, sottraendo poi 1. Il vettore tempo ty (della stessa lunghezza di y) associato alla funzione y risulta così definito: ty=tx(1)+th(1)+(0:length(y)-1)* t0; il valore iniziale del vettore ty è pari quindi alla somma (algebrica) dei valori iniziali dei vettori tx e th. File convolve.m function [y,ty]=convolve(x,h,tx,th) t0=tx(2)-tx(1); y=conv(x,h)* t0; ty=tx(1)+th(1)+(0:length(y)-1)* t0; return Per la visione “animata” della operazione di convoluzione si può utilizzare il programma es_convoluzione.m, allegato.

Page 26: 1 Introduzione ai comandi di Matlab - Intranet DEIBhome.deib.polimi.it/reggiani/FdSS/laboratorio/Lab.pdf · x=randn(t) (funzioni generanti variabili casuali con densità di probabilità

27

3 La trasformazione di Fourier Le operazioni note come trasformazione e antitrasformazione di Fourier consentono, nel nostro caso, di eseguire in forma semplice le operazioni di filtraggio, permettendo di ottenere la descrizione dei segnali sia nel dominio delle frequenze che del tempo. (nel paragrafo 4 si vedranno altri usi sia della convoluzione sia della trasformata di Fourier) Se la funzione x(t) è definita nel tempo tramite i vettori x e t , la trasformazione di Fourier definisce un’altra funzione X(f) nel dominio delle frequenze, tramite i vettori X ed f, mediante le seguenti operazioni: File for fft.m function [X,f]=for fft(x,t) t0=t(1,2)-t(1,1); N=length(x); xshift=[x(find(t==0):N) x(1:find(t==0)-1)]; Xshift=fft(xshift)* t0; X=fftshift(Xshift); v=1/N/t0; f=(-N/2+(0:N-1))*v; return N.B.: In caso di mal funzionamento dovuto a un bug di Matlab, sostituire a (find(t==0)) (find(abs(t-0)<1e-10)) In particolare : La lunghezza dei vettori X ed f è identica a quella di x e t Il passo di f , v, è dato da v=1/N/t0 Il vettore f è simmetrico rispetto al valore di frequenza 0 (salvo al più un elemento) Si noti che, perché sia possibile eseguire la function deve essere presente, nel vettore t, l’elemento t==0 altrimenti il vettore xshift resta vuoto. E’ necessario definire t in modo che che comprenda lo zero e sia costituito da un numero pari di elementi.. Analogamente, per l’antitrasformazione di Fourier, dati X ed f, si ottengono x e t mediante l’operazione: File backifft.m function [x,t]=backifft(X,f) v=f(1,2)-f(1,1); N=length(X); T=1/N/v; Xshift=[X(find(f==0):N) X(1:find(f==0)-1)]; xshift=ifft(Xshift)/T; x=ifftshift(xshift);

Page 27: 1 Introduzione ai comandi di Matlab - Intranet DEIBhome.deib.polimi.it/reggiani/FdSS/laboratorio/Lab.pdf · x=randn(t) (funzioni generanti variabili casuali con densità di probabilità

28

t=(-N/2+(0:N-1))*T; return N.B.: In caso di mal funzionamento dovuto a un bug di Matlab, sostituire a (find(f==0)) (find(abs(f-0)<1e-10)) Le condizioni poste precedentemente per t sono valide per f. Nel programmare l’esecuzione di trasformazioni sui segnali, che richiedono numerosi passaggi dal dominio del tempo al dominio della frequenza o viceversa (tramite la trasformazione e antitrasformazione di Fourier), è bene impostare inizialmente un corretto vettore t e il corrispondente vettore f , ottenendolo da una operazione di trasformazione che presupponga t; l’uso di questi vettori garantisce l’utilizzabilità delle funzioni di trasformazione di Fourier senza incorrere nell’errore sopraddetto. Nota. La trasformata di Fourier (ottenuta passando dal dominio tempo al dominio delle frequenze) può rappresentare:

1. La funzione di trasferimento di un filtro 2. Lo “spettro” di un segnale “s”

Nel caso 1 l’antitrasformata di Fourier “h” rappresenta la risposta nel tempo dello stesso filtro ad un ingresso costituito da un impulso delta di Dirac all’ istante t=0 Nel caso 2 l’antitrasformata di Fourier rappresenta il segnale “s” nel tempo Il segnale nel tempo costituito dall’uscita del filtro ad un ingresso costituito dal segnale “s” , ha come trasformata di Fourier il prodotto delle due trasformate. La stessa uscita, ma nel dominio del tempo, si ottiene convolvendo ( nel dominio del tempo) il segnale “s” con il segnale “h” . Alcuni esempi di uso di trasformazioni diFourier 1 Funzioni tri, trarect, trape, FRC, rit, calcolate nel dominio delle frequenze, e loro risposte impulsive:

Page 28: 1 Introduzione ai comandi di Matlab - Intranet DEIBhome.deib.polimi.it/reggiani/FdSS/laboratorio/Lab.pdf · x=randn(t) (funzioni generanti variabili casuali con densità di probabilità

29

-3 -2 -1 0 1 2 3

0

0.2

0.4

0.6

0.8

1

FUNZIONI DI TRASFERIMENTO

f

Antitrasformate delle stesse funzioni = risposte nel tempo ad ingressi costituiti da impulsi di Dirac

Page 29: 1 Introduzione ai comandi di Matlab - Intranet DEIBhome.deib.polimi.it/reggiani/FdSS/laboratorio/Lab.pdf · x=randn(t) (funzioni generanti variabili casuali con densità di probabilità

30

-5 -4 -3 -2 -1 0 1 2 3 4 5

0

0.5

1

1.5

2

2.5

3

3.5

4

4.5

5RISPOSTE AD IMPULSI DI DIRAC

T

Risposta di TRI linea verde Risposta di TRAPE linea blu Risposta di TRARECT linea rossa Risposta di RC linea blu doppio esponenziale Risposta di RIT linea verde ad impulso Si distinguono bene le risposte di FRC: esponenziale RIT: impulso di Dirac ritardato Il calcolo è stato eseguito con il programma: %avafft.m f=-22:0.001:22; tau=2 durata=1 tc=0.2 F_tri=tri(f,durata); F_trape=trape(f,1,0.5); F_rect=trarect(f,0,durata); [FRC,f]=FRC(tc,f); F_rit=rit(tau,f); %plot(f,F_tri,f,F_trape,f,F_rect,f,FRC,f,abs(F_rit)) %axis([-3 3 -0.1 1.1]) %plot(f,abs(F_rit))

Page 30: 1 Introduzione ai comandi di Matlab - Intranet DEIBhome.deib.polimi.it/reggiani/FdSS/laboratorio/Lab.pdf · x=randn(t) (funzioni generanti variabili casuali con densità di probabilità

31

%axis([-3 3 -0.1 1.1]) [f_tri,t]=backifft(F_tri,f); [f_trape,t]=backifft(F_trape,f); [f_rect,t]=backifft(F_rect,f); [f_RC,t]=backifft(FRC,f); [f_rit,t]=backifft(F_rit,f); plot(t,f_tri,'g',t,f_trape,'b',t,f_rect,'r',t,f_RC,t,f_rit) axis([-5 5 -0.2 5])

2 Risposte dei filtri TRARECT, TRAPE, FRC e RIT ad un impulso rettangolare

-5 -4 -3 -2 -1 0 1 2 3 4 5-0.2

0

0.2

0.4

0.6

0.8

1

1.2

1.4

1.6

1.8

T

RISPOSTE DEI FILTRI ALL'IMPULSO RETTANGOLARE

Segnale di ingresso rettangolo rosso centrato a zero e di durata 1 Risposte: filtro trapezio linea blu oscillante filtro rettangolare linea rossa oscillante filtro RC doppio esponenziale con linea blu filtro ritardo linea verde Il calcolo è stato effettuato con il programma: %avarect t=-5:0.001:5-0.001;

Page 31: 1 Introduzione ai comandi di Matlab - Intranet DEIBhome.deib.polimi.it/reggiani/FdSS/laboratorio/Lab.pdf · x=randn(t) (funzioni generanti variabili casuali con densità di probabilità

32

tau=2 durata=1 tc=0.2 %segnale rettangolare nel tempo e trasformata f1_rect=trarect(t,0,durata); [F1_rect,f]=forfft(f1_rect,t); %funzioni di trasferimento dei filtri RECT,TRAPE,FRC,RIT F_trape=trape(f,1,0.5); F_rect=trarect(f,0,durata); [FRC,f]=FRC(tc,f); F_rit=rit(tau,f); %risposte dei filtri al segnale rect F_trape1=F_trape.*F1_rect; F_rect1=F_rect.*F1_rect; FRC1=FRC.*F1_rect; F_rit1=F_rit.*F1_rect; %plot(f,F_tri,f,F_trape,f,F_rect,f,FRC,f,abs(F_rit)) %axis([-3 3 -0.1 1.1]) %plot(f,abs(F_rit)) %axis([-3 3 -0.1 1.1]) [f_trape,t]=backifft(F_trape1,f); [f_rect,t]=backifft(F_rect1,f); [f_RC,t]=backifft(FRC1,f); [f_rit,t]=backifft(F_rit1,f); plot(t,f_trape,'b',t,f_rect,'r',t,f_RC,t,f_rit,t,f1_rect,'r') axis([-5 5 -0.2 2])

Page 32: 1 Introduzione ai comandi di Matlab - Intranet DEIBhome.deib.polimi.it/reggiani/FdSS/laboratorio/Lab.pdf · x=randn(t) (funzioni generanti variabili casuali con densità di probabilità

33

3 Filtraggio RC di somma di sinusoidi La somma di 15 sinusoidi viene filtrata con FRC; gli spettri a righe del segnale originario e di quello filtrato sono in figura Spettro prima del filtraggio linea blu Spettro del segnale filtrato linea rossa

-25 -20 -15 -10 -5 0 5 10 15 20 25

0

0.5

1

1.5

2

2.5

3

F

SINUSOIDI PRIMA E DOPO IL FILTRAGGIO RC

Il calcolo è stato effettuato col programma: File avasinus.m %avasinus t=-2:0.001:2-0.001; tc=0.2 n=15 %segnale impulsivo periodico e trasformata x=sinus(t,n); [X,f]=forfft(x,t); % filtrato co FRC Y=X.*FRC(tc,f); [y,ty]=backifft(Y,f); plot(f,abs(X),f,abs(Y),'r') axis([-25 25 -0.2 3])

Page 33: 1 Introduzione ai comandi di Matlab - Intranet DEIBhome.deib.polimi.it/reggiani/FdSS/laboratorio/Lab.pdf · x=randn(t) (funzioni generanti variabili casuali con densità di probabilità

34

4 Convoluzione di un segnale impulsivo (di Dirac) periodico con il segnale antitrasformata del

filtro a coseno rialzato Il programma di esecuzione del calcolo è il seguente : %avadirac t=-2:0.001:2-0.001; tc=0.2 %segnale impulsivo periodico e trasformata f_dirper=fdper(t,tc); [F_dirper,f]=forfft(f_dirper,t); % filtro coseno rialzato e risposta impulsiva (antitrasformata di FCR) ttcc=0.2 alfa=0.99 [FCR,f]=FCR(ttcc,alfa,f); [f_cr,t]=backifft(FCR,f); %convoluzione fi f_dirper e f_cr [y,ty]=convolve(f_dirper,f_cr,t); plot(t,f_dirper,'b',ty,y*100,'r') axis([-5 5 -0.2 2])

Page 34: 1 Introduzione ai comandi di Matlab - Intranet DEIBhome.deib.polimi.it/reggiani/FdSS/laboratorio/Lab.pdf · x=randn(t) (funzioni generanti variabili casuali con densità di probabilità

35

-5 -4 -3 -2 -1 0 1 2 3 4 5-0.2

0

0.2

0.4

0.6

0.8

1

1.2

1.4

1.6

1.8

PERIODICITA' IDENTICA

T

In questo caso i due parametri tc (per la funzione FDIPER) e ttcc (per la funzione FCR) sono identici, tc=ttcc=0.2 Segnale impulsivo periodico in ingresso linea blu Risposta del filtro coseno rialzato linea rossa

Page 35: 1 Introduzione ai comandi di Matlab - Intranet DEIBhome.deib.polimi.it/reggiani/FdSS/laboratorio/Lab.pdf · x=randn(t) (funzioni generanti variabili casuali con densità di probabilità

36

In questo secondo caso i due parametri tc (FDIPER) e ttcc (FCR) sono differenti: tc=0.2 ttcc=0.1 Segnale impulsivo periodico in ingresso linea blu Risposta del filtro coseno rialzato linea rossa

0 0.5 1 1.5 2 2.5 3

0

0.2

0.4

0.6

0.8

1

PERIODOCITA' DIFERENTE: DETTAGLIO

T