Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
Questo è un modello ARX (2 2) che non ha performance buone, sia perché c’è una quantità di dati non
indifferente e sia perché il meccanismo di generazione dei dati non è proprio un ARX perché noi per filtrare la
W non abbiamo utilizzato 1/A, il meccanismo di generazione die dati è un output – error. Ho stimato un
meccanismo di generazione dati output – error con un ARX. Il numero dei parametri dell’ARX è corretto,
mentre è sbagliato il modello del rumore perché noi utilizzeremo un ARX ma in realtà abbiamo un output –
error.
Facciamo il bode(Go, Marxw):
L’analisi in frequenza evidenzia errori sia alle basse frequenze che alle alte frequenze.
Dobbiamo ridurre l’errore di stima in frequenza. Proviamo a fare il prefiltraggio, sappiamo che l’algoritmo dei
minimi quadrati ha commesso non uniformemente distribuito in frequenza, ha pesato troppo le alte frequenze
53
e poco le basse frequenze. Quindi vogliamo aggiungere un filtro, prefiltrare i dati in maniera che ci sia una
compensazione del peso e basse e alte frequenze sino compensate più o meno nello stesso modo.
Il w = 1/A, quindi devo filtrare con 1/A. estraggo il polinomio A e filtro l’ingresso e l’uscita con il filtro 1/A.
creo i dati FU e FYw, li metto in un iddata.
Con il filtro abbiamo alterato sia gli input che gli output data.
Ora andiamo a stimare un modello ARX diverso da quello di prima perché i dati sono diversi. 54
Viene fuori un risultato generalmente migliore dovuto solo alla ridistribuzione degli errori in frequenza,
facciamo lo step (la risposta al gradino) per vedere se abbiamo migliorato la stima del guadagno statico. 55
Il blu è il meccanismo di generazione dei dati, il rosso è il primo modello, abbastanza scadente, il giallo è il
modello pre – filtrato. Noi non abbiamo aggiunto informazione, l’algoritmo di ottimizzazione non ha saputo
più cose, con il prefiltraggio abbiamo solo alterato i dati. Da un’alterazione dei dati viene fuori informazione
che prima era mascherata perché il metodo dei minimi quadrati visto nel dominio della frequenza distribuisce
molto male l’errore in frequenza; quindi, commette degli errori molto grandi alle basse frequenze ed errori più
piccoli alle alte frequenze. Noi prefiltrando puliamo leggermente e quindi l’algoritmo vede meglio,
identificando un modello migliore. Questo modello non è migliore solo nel dominio della frequenza ma anche
nel dominio del tempo.
Quello che viene fuori è che con il prefiltraggio abbiamo migliorato la differenza tra i due diagrammi di Bode
che nella teoria era quella funzione che si chiamava deltag (abbiamo detto che la deltag viene moltiplicata con
una funzione di peso e noi stiamo cercando di compensare questa funzione di peso). La deltag è la funzione
errore che sarebbe la differenza tra la curva gialla e quella blu, nel diagramma di Bode.
Adesso abbiamo stimato un nuovo polinomio A(z), abbiamo approssimato un nuovo modello ARX, questo
produce una nuova W(z) che altera in frequenza la funzione deltag. Quindi io potrei prendere il nuovo modello
stimato e fare un secondo giro di prefiltraggio. 56
FFMarxw=arx(FDw, [2 2 1]); è il modello prefiltrato 2 volte, ogni volta che prefiltriamo aggiungiamo una F.
quindi estraiamo dal modello filtrato il polinomio A, filtriamo con il nuovo polinomio 1/A e creiamo il nuovo
dataset (FDw = iddata(FYw,FU);). Il prefiltraggio filtra sia l’ingresso che l’uscita, è un’alterazione di entrambi
i segnali. Facciamo un nuovo modello e lo conforntiamo.
La stima con due cicli di prefiltraggio ci porta ad un fit che va dal 66% al 69%. Può essere più eloquente
l’analisi del diagramma di Bode.
Ora abbiamo anche una linea viola. La differenza tra la curva viola e quella blu (meccanismo di generazione
dei dati) è veramente piccolina. Il modello che abbiamo ottenuto è molto migliore ma in realtà non abbiamo
fatto altri esperimenti di raccolta dati, i dati che aveva il primo ARX sono i dati che ha avuto il secondo ciclo
di prefiltraggio, abbiamo semplicemente rielaborato le informazioni. Una rielaborazione dell’informazione
critica, cioè guardando al fatto che:
- Abbiamo un meccanismo di generazione dei dati che è un output – error, quindi non è la stessa struttura
della famiglia di modelli che abbiamo scelto che è ARX, quindi c’è una discrepanza del modello
57
dell’incertezza. Se il meccanismo di generazione dei dati appartiene alla famiglia di modelli scelta,
cioè se io ho un meccanismo di generazione che è un ARX e lo stimo con un ARX, scegliendo
opportunatamente gli ordini, allora all’aumentare del numero di dati, l’errore di stima parametrica
tende asintoticamente a decrescere. Questa è una situazione ideale, tutti i sistemi reali sono sistemi che
non hanno una famiglia di appartenenza, la famiglia è una descrizione matematica approssimativa di
un comportamento fisico reale. Quando il meccanismo non appartiene alla famiglia di modelli, in
particolare quando il modello dell’incertezza W non è 1/A, non è C/A, sono due parametrizzazioni
completamente svincolate, in quel caso succede che all’aumentare del numero di dati N, la stima della
G non tende ai valori del meccanismo di generazione dei dati ma si allontana. Avere tanti dati non
porta ad un miglioramento ma paradossalmente a un peggioramento. L’obiettivo dell’esercitazione è
quello di farci capire che nelle situazioni pratiche reali non ha senso raccogliere tantissimi dati perché
la quantità di dati non è indicativa di un miglioramento nella stima dei parametri, anche nel caso in cui
questi parametri noi li conoscessimo. Io posso migliorare la qualità del modello non prendendo più
dati a analizzando criticamente quello che sto facendo.
Una delle cose più importanti è l’analisi nel dominio della frequenza, è la consapevolezza che in
frequenza se non interveniamo noi si commettono errori più grandi alle basse frequenze e quindi è
necessario compensare. Uno dei modi di compensare è alterare il contenuto armonico utilizzando il
prefiltraggio, in modo tale che ci sia un maggiore bilanciamento alte – basse frequenze. Questa cosa
non migliora il modello solo alle basse frequenze ma fa un miglioramento generale.
Perché il prefiltraggio non è già implementato nel Matlab?
Se fosse una cosa così buona noi avremmo che nell’ARX ci sarebbero uno/due/tre cicli di prefiltraggio così
alla fine abbiamo un modello migliore. In realtà non è così perché dipende dalla differenza tra la famiglia di
modello che abbiamo scelto e il meccanismo di generazione dei dati, anche dalla quantità di rumore presente.
Successivamente viene fatto un ulteriore ciclo di prefiltraggio. 58
Ora il fit è di 69.46%. dal punto di vista del fit non c’è un grande miglioramento.
Dal punto di vista della differenza tra le funzioni, l’ultimo modello che è quello in verde, che è proprio attaccato
al meccanismo di generazione dei dati.
La seconda parte dell’esercizio va ad alterare il meccanismo di generazione dei dati. Lo va ad alterare
prendendo come segnale V, cioè quello che si aggiunge alla Y pulita, cioè quella che esce da G. Quindi abbiamo
un modello di Box – Jenkins, abbiamo la G, fino ad ora abbiamo usato un modello output – error; quindi, il
rumore bianco entra direttamente sull’uscita. Adesso creiamo una funzione di trasferimento W, che sono due
filtri passa – basso, in un primo caso la frequenza di taglio del filtro passa – basso è piuttosto ampia, è un
rumore colorato a banda larga, nel secondo caso, man mano che il coefficiente si avvicina a 1, il rumore è a
59
banda più stretta. Noi abbiamo due modelli di Box – Jenkins, uno in cui la W è un filtro a banda larga, un
secondo in cui la W è un filtro a banda stretta.
Il resto dello script è autoesplicativo, creiamo dei nuovi dati, creiamo Dc1 e Dc2 che sono dei dataset di rumore
con modelli di Box – Jenkins, quindi con una W che è un filtro passa – basso, nel primo caso a banda larga,
nel secondo a banda stretta. Creiamo due modelli e prefiltriamo. 60
Qualora il meccanismo di generazione dei dati sia un modello di Box – Jenkins con una W che è un filtro a
banda larga, senza prefiltraggio abbiamo la curva in rosso, un errore di stima alle alte frequenze abbastanza
elevato, con un ciclo di prefiltraggio ci iniziamo ad avvicinare.
Mentre se la W è a banda stretta, un ciclo di prefiltraggio non porta ai miglioramenti così significativi che
avevamo prima.
Se facciamo più cicli di prefiltraggio ci accorgeremo che man mano si stringe la banda di filtraggio della W,
man mano che il modello del rumore cambia il prefiltraggio non migliora i risultati, ma è del tutto irrilevante.
Man mano che la funzione W, cioè la parte incerta del sistema, colora di più l’errore che si aggiunge al legame
tra l’ingresso e l’uscita, tanto meno efficace è il prefiltraggio. Il prefiltraggio risulta essere efficace in
61
28/10/2024
Esercitazione_2_ARX_OK
Andiamo a riprendere questa esercitazione in cui stimiamo come l’errore teta_zero – teta_hat va a cambiare
l’identificazione del sistema. Quello che vado a fare principalmente è andare a definire il sistema che voglio
identificare con una famiglia di modelli che contiene il sistema. Questo è un caso ideale, noi conosciamo il
sistema, sappiamo anche a che famiglia di modelli appartiene e conosciamo anche l’ordine del sistema.
In questo caso generiamo un modello ARX, avremo le matrici A e B che sono i nosti numeratore e
denominatore.
Abbiamo creato il sistema con la funzione zpk e discretizzato con la funzione c2d.
La figura 1 ci mostra l’andamento del sistema, è un sistema con fase non minima.
Come lo capiamo questo? 65
Lo capiamo dalla sottoelongazione iniziale, mentre gli zeri son o tutti nel semipiano negativo quindi questo
non influisce per la stabilità del sistema.
Nella figura vedo due funzioni rappresentate: la prima è la Gz che abbiamo calcolato.
Siccome quando utilizziamo il comando tfdata che separa numeratore e denominatore del mio sistema, ho
trovato numeratore e denominatore che avevano dei numeri molto prolissi dopo la virgola. Ho arrotondato al
numero più vicino, in modo tale da vedere se la mia risposta all’impulso cambiava o meno. La linea in rosso
rappresenta la funzione che ottengo dopo aver arrotondato il numeratore e il denominatore, ma dato che non
cambia granché preferisco continuare l’identificazione di questo sistema con le matrici arrotondate, così dò
meno dati al sist