1 Introduzione ai comandi di Matlab



Documenti analoghi
Introduzione al MATLAB c Parte 2

Funzioni in C. Violetta Lonati

Lezione 8. La macchina universale

4 3 4 = 4 x x x 10 0 aaa

IL FILTRAGGIO DEL SEGNALE

Corso di Laurea a Distanza in Ingegneria Elettrica Corso di Comunicazioni Elettriche Processi casuali A.A Alberto Perotti, Roberto Garello

Il Campionameto dei segnali e la loro rappresentazione. 1 e prende il nome frequenza di

MATLAB. Caratteristiche. Dati. Esempio di programma MATLAB. a = [1 2 3; 4 5 6; 7 8 9]; b = [1 2 3] ; c = a*b; c

Elementi di teoria dei segnali /b

Corso di Fondamenti di Segnali e Trasmissione - Appello del 07 Settembre 2005

Forma d onda rettangolare non alternativa.

COMUNICAZIONI ELETTRICHE + TRASMISSIONE NUMERICA COMPITO 13/7/2005

Introduzione al Campionamento e

Matematica in laboratorio

PULSANTI E PAGINE Sommario PULSANTI E PAGINE...1

Dimensione di uno Spazio vettoriale

Introduzione al Foglio Elettronico

4. Operazioni elementari per righe e colonne

Studio dei segnali nel dominio della frequenza. G. Traversi

Introduzione all analisi dei segnali digitali.

La grafica. La built-in funzione grafica plot. x spezzata poligonale. discretizzato

Università degli Studi di Ferrara - A.A. 2014/15 Dott. Valerio Muzzioli ORDINAMENTO DEI DATI

FORMULE: Operatori matematici

(71,1), (35,1), (17,1), (8,1), (4,0), (2,0), (1,0), (0,1) 0, = 1, 431 0, = 0, 862 0, = 1, 792 0, = 1, 448 0, = 0, 896

FONDAMENTI DI SEGNALI E TRASMISSIONE 6 Laboratorio

Excel. A cura di Luigi Labonia. luigi.lab@libero.it

Automatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione

Programmazione dinamica

La trasformata Zeta. Marco Marcon

CAMPIONAMENTO E RICOSTRUZIONE DI SEGNALI

Interpolazione ed approssimazione di funzioni

Università di Napoli Parthenope Facoltà di Ingegneria

if t>=0 x=1; else x=0; end fornisce, nella variabile x, il valore della funzione gradino a tempi continui, calcolata in t.

2.1 Definizione di applicazione lineare. Siano V e W due spazi vettoriali su R. Un applicazione

Test Excel conoscenze di Base

Excel avanzato. I nomi. Gli indirizzi e le formule possono essere sostituiti da nomi. Si creano tramite Inserisci Nome Definisci

Hub-PA Versione Manuale utente

Appunti sull uso di matlab - I

PROBABILITÀ - SCHEDA N. 2 LE VARIABILI ALEATORIE

Transitori del primo ordine

Interesse, sconto, ratei e risconti

Capitolo Quarto...2 Le direttive di assemblaggio di ASM Premessa Program Location Counter e direttiva ORG

Il concetto di valore medio in generale

Analisi dei segnali nel dominio della frequenza

APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI

Inizializzazione, Assegnamento e Distruzione di Classi

RETI DI TELECOMUNICAZIONE

LA GESTIONE DELLE VISITE CLIENTI VIA WEB

Procedura tecnico-statistica per il calcolo dell Indice di Disagio Socioeconomico (IDS)

Analisi sensitività. Strumenti per il supporto alle decisioni nel processo di Valutazione d azienda

Corso di Informatica

Nell esempio verrà mostrato come creare un semplice documento in Excel per calcolare in modo automatico la rata di un mutuo a tasso fisso conoscendo

Procedura Index On Line

Come modificare la propria Home Page e gli elementi correlati

E possibile modificare la lingua dei testi dell interfaccia utente, se in inglese o in italiano, dal menu [Tools

Esercizio data base "Biblioteca"

1. PRIME PROPRIETÀ 2

WORD per WINDOWS95. Un word processor e` come una macchina da scrivere ma. con molte più funzioni. Il testo viene battuto sulla tastiera

Gestione Risorse Umane Web

Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12};

GUIDA RAPIDA PER LA COMPILAZIONE DELLA SCHEDA CCNL GUIDA RAPIDA PER LA COMPILAZIONE DELLA SCHEDA CCNL

Metodi Stocastici per la Finanza

Parte II Indice. Operazioni aritmetiche tra valori rappresentati in binario puro. Rappresentazione di numeri con segno

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

4.1 FAX Sollecito consegne via (Nuova funzione)

Rendering air show e verifica della sincronizzazione

MATEMATICA DEL DISCRETO elementi di teoria dei grafi. anno acc. 2009/2010

Testi di Esercizi e Quesiti 1

Informatica 3. LEZIONE 21: Ricerca su liste e tecniche di hashing. Modulo 1: Algoritmi sequenziali e basati su liste Modulo 2: Hashing

Sistemi di Numerazione Binaria NB.1

Introduzione allo Scilab Parte 1: numeri, variabili ed operatori elementari

Laboratorio di Fondamenti di Telecomunicazioni2. Sommario

Concetto di Funzione e Procedura METODI in Java

Veneto Lavoro via Ca' Marcello 67/b, Venezia-Mestre tel.: 041/

Fatturazione elettronica con WebCare

Elettronica II Proprietà e applicazioni della trasformata di Fourier; impedenza complessa; risposta in frequenza p. 2

EXCEL PER WINDOWS95. sfruttare le potenzialità di calcolo dei personal computer. Essi si basano su un area di lavoro, detta foglio di lavoro,

Gestione delle informazioni necessarie all attività di validazione degli studi di settore. Trasmissione degli esempi da valutare.

EasyPrint v4.15. Gadget e calendari. Manuale Utente

Come visto precedentemente l equazione integro differenziale rappresentativa dell equilibrio elettrico di un circuito RLC è la seguente: 1 = (1)

Corso di Laurea in Ingegneria Biomedica Corso di Trasmissione Numerica (6 crediti) Prova scritta

Plate Locator Riconoscimento Automatico di Targhe

Le immagini digitali. Le immagini digitali. Caterina Balletti. Caterina Balletti. Immagini grafiche. Trattamento di immagini digitali.

Interesse, sconto, ratei e risconti

ACCESSO AL SISTEMA HELIOS...

per immagini guida avanzata Uso delle tabelle e dei grafici Pivot Geometra Luigi Amato Guida Avanzata per immagini excel

11. Analisi statistica degli eventi idrologici estremi

Mon Ami 3000 Varianti articolo Gestione di varianti articoli

Introduzione all Information Retrieval

Introduzione allo Scilab Parte 3: funzioni; vettori.

ARCHITETTURA DI RETE FOLEGNANI ANDREA

Organizzazione degli archivi

FIRESHOP.NET. Gestione Lotti & Matricole.

Operazioni sulla Retta Algebrica e riflessione sulla loro definizione nell insieme dei Naturali

L analisi dei dati. Capitolo Il foglio elettronico

Elementi di informatica

I TUTORI. I tutori vanno creati la prima volta seguendo esclusivamente le procedure sotto descritte.

0.6 Filtro di smoothing Gaussiano

5.3 TABELLE RECORD Inserire, eliminare record in una tabella Aggiungere record Eliminare record

MANUALE D'USO DEL PROGRAMMA IMMOBIPHONE

Transcript:

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]; 2

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 matrix 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ì 3

>>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 4

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: pari=zeros(1,6) for k=0:2:10 pari(k/2+1)=k end definisce che pari(1)=0 pari(2)=2 pari(3)=4 5

pari(4)=6 pari(5)=8 pari(6)=10 L indice k varia tra 0 e 10 con passo 2 ed il vettore pari 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) 6

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. 7

Si deve considerare anche il vettore indici di t It = [1:1:N]. Per ogni valore it di It 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 It nel modo detto sopra. Es.: t=[-3 2 1 0 1 2] t0=1 N=6 It=[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 It. 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; 8

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] 9

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 3 Per generare un vettore t di valori temporali con intervallo di campionamento I di 1 ms ( 10 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; 10

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 variabili in uscita % x e t sono le variabili 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. 11

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 è pari 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 12

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 -2-1.5-1 -0.5 0 0.5 1 1.5 2 Esempio in figura: media=0.5 durata =1 13

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 rit, definita solo nel dominio delle frequenze, con l opportuna sequenza di trasformata e antitrasformata di Fourier File tri.m function triang=tri(t,durata) triang=zeros(size(t)); triang=1-abs(t)/(durata/2); I=find(triang<0); triang(i)=0; return 2 1.5 1 0.5 0-0.5-1 -2-1.5-1 -0.5 0 0.5 1 1.5 2 Esempio in figura: durata = 1 14

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 rit, 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) triang=tri(t,durm); II=find(abs(t)<=durm/2) a=triang(min(ii)) triang(ii)=a; trapezio=triang/a; return 2 1.5 1 0.5 0-0.5-1 -2-1.5-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. 15

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, tri, 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 rit.m function F_rit=rit(tau,f) F_rit=zeros(size(f)); F_rit=exp(-j*2*pi*f*tau); return 16

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 -2-1.5-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)) 17

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 File FCR.m FCR: funzione di trasferimento complessa del filtro f: vettore delle frequenze su cui è definito FCR 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; II=find(abs(f)>=(w*(1-alfa))); FCR(II)=0.5*(1+cos(2*pi*(abs(f(II))-w*(1-alfa))/(4*alfa*w))); III=find(abs(f)>=(w*(1+alfa))); FCR(III)=0; return 2 1.5 1 0.5 0-0.5 Esempio: alfa = 1-1 -8-6 -4-2 0 2 4 6 8 18

2 1.5 1 0.5 0-0.5-1 -8-6 -4-2 0 2 4 6 8 Esempio alfa=0.5 2 1.5 1 0.5 0-0.5 Esempio alfa=0-1 -8-6 -4-2 0 2 4 6 8 19

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. 20

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 21

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 è pari a 1*to File : fdper.m function fdirper=fdper(t,tc) t0=t(2)-t(1); fdirper=zeros(size(t)); Ic=tc/t0; %nota: periodicità dell indice fdirper(1:ic:length(t))=1; %nota: la periodicità è valutata sugli indici di t e non sui valori return 2 1. 5 1 0. 5 0-0. 5 esempio : tc=0.2-1 -2-1. 5-1 -0. 5 0 0. 5 1 1. 5 2 22

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 periodo di trasmissione per il filtro di Nyquist % ed è pari al periodo di campionamento del segnale analogico, diviso per il numero % di bit di codifica binaria 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 23

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. 24

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 25

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 pari alla somma delle due rispettive 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. 26

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 forfft.m function [X,f]=forfft(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); 27

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: 28

FUNZIONI DI TRASFERIMENTO 1 0.8 0.6 0.4 0.2 0-3 -2-1 0 1 2 3 f Antitrasformate delle stesse funzioni = risposte nel tempo ad ingressi costituiti da impulsi di Dirac 29

5 RISPOSTE AD IMPULSI DI DIRAC 4.5 4 3.5 3 2.5 2 1.5 1 0.5 0-5 -4-3 -2-1 0 1 2 3 4 5 T Risposta di TRI Risposta di TRAPE Risposta di TRARECT Risposta di RC Risposta di RIT Si distinguono bene le risposte di linea verde linea blu linea rossa linea blu doppio esponenziale linea verde ad impulso 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)) 30

%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 RISPOSTE DEI FILTRI ALL'IMPULSO RETTANGOLARE 1.8 1.6 1.4 1.2 1 0.8 0.6 0.4 0.2 0-0.2-5 -4-3 -2-1 0 1 2 3 4 5 T 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; 31

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]) 32

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 Spettro del segnale filtrato linea blu linea rossa 3 SINUSOIDI PRIMA E DOPO IL FILTRAGGIO RC 2.5 2 1.5 1 0.5 0-25 -20-15 -10-5 0 5 10 15 20 25 F 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]) 33

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]) 34

PERIODICITA' IDENTICA 1.8 1.6 1.4 1.2 1 0.8 0.6 0.4 0.2 0-0.2-5 -4-3 -2-1 0 1 2 3 4 5 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 35

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 Risposta del filtro coseno rialzato linea blu linea rossa PERIODOCITA' DIFERENTE: DETTAGLIO 1 0.8 0.6 0.4 0.2 0 0 0.5 1 1.5 2 2.5 3 T 36