Upload
edhem
View
215
Download
0
Embed Size (px)
Citation preview
8/17/2019 Laboratorijska_vjezba_6
1/7
1
Elektrotehnički fakultet
Univerzitet u Sarajevu
Odsjek za automatiku i elektroniku
Studijska 2013./2014. godina
Predmet : Identifikacija sistema
Laboratorijska vježba 6. Parametarska identifikacija linearnih modela dinamičkih procesa u realnom vremenu
(online)
Rekurzivna metoda najmanjih kvadrata
U okviru ove laboratorijske vježbe koristiti će se modifikacija rekurzivne metode
najmanjih kvadrata koja je data u Lekciji 6.2. Modifikacija polazi od pretpostavke da je
diferentna jednačina sistema oblika:
1 1ˆ ˆˆ ˆ1 ... 1 ... ,a bn a n b y k a y k a y k n b u k b u k n
odnosno, kada je prenosna funkcija data sa:
1 2
1 2
1 2
1 2
ˆ ˆ ˆ...
ˆ ˆ ˆ1 ...
b
b
a
a
n
n
n
n
b z b z b z G z
a z a z a z
pri čemu je.
a bn n
Algoritam estimacije parametara modela datih sa
1 2 1 2ˆ ˆ ˆˆ ˆ ˆ ˆ ... ...a b
T
n nk a k a k a k b k b k b k
sastoji se od sljedećih koraka:
1. Odaberu se pogodne početne vrijednosti:
ˆ1 , 0 , 0 0, P I θ 0
gdje je 21
0u .
2.
Novi podaci u k i y k se uzorkuju u trenutku k , 1k .
3. Na osnovu prethodnih vrijednosti estimacije parametara ˆ 1k θ , vektor kolone
faktora korekcije 1k , dovoljnog broja prethodnih vrijednosti ulaza i izlaza te
novih podataka, računaju se nove estimacije parametara ˆ k θ na sljedeći način:
Računa se greška predikcije u trenutku k kao
ˆ1 2 ... u 1 u 2 ... u 1a be k y k y k y k y k n k k k n k θ
Računaju se nove estimacija parametara po formuli ˆ ˆ 1 1 .k k k e k θ θ
8/17/2019 Laboratorijska_vjezba_6
2/7
2
4. Na osnovu prethodne vrijednosti matrice k P , dovoljnog broja ulaza i izlaza te novih
podataka, računa se najprije nova vektor kolona faktora korekcije k a zatim i nove
vrijednosti matrice 1k P na sljedeći način:
Formira se regresor u trenutku 1k :
1 1 ... 1 u u 1 ... u 1T a bk y k y k y k n k k k n ψ
Računa se vektor kolona i po formuli 1k k i P ψ .
Računa se skalar j po formuli 1 .T j k ψ i
Računa se vektor kolona novih korekcionih faktora po formuli 1
.1
k j
i
Računa se nova matrica P po formuli 1 T k k k P P i .
5. Sve dok postoje novi podaci koji se mogu uzorkovati algoritam se vraća na korak 2.
Napomena: Primijetimo da se između dvije iteracije algoritma (jedna iteracija obuhvata
korake 2-4) “prenose“ samo podaci 1k P , k i ˆ k θ koji u sljedećoj iteraciji postaju
k P , 1k i ˆ 1k θ pa ih ne treba memorisati kao nizove. Osim toga, treba prenijeti i
dovoljan broj zakašnjelih vrijednosti ulaza i izlaza
, 1 , ..., 1 , u , u 1 , ... , u 1a b y k y k y k n k k k n koji u idućoj iteraciji
postaju 1 , 2 , ..., , u 1 , u 2 , ... , ua b y k y k y k n k k k n . Za uspješnu
implementaciju algoritma, pokazuje se da je dovoljno pretpostaviti nultim sve prethodne
vrijednosti ulaza i izlaza kojima nemamo pristup.
Zadatak 1.
U MATLAB-u napisati funkciju koja izvršava jednu iteraciju rekurzivne metode najmanjih
kvadrata kako je prethodno opisano.
Funkcija treba da ima sljedeći prototip:
function [ theta_novo , P_novo , gamma_novo , u_nova , y_nova , e ] = ...rekurzivna_ls_metoda_iteracija( theta_staro , P_staro , gamma_staro ,...u_stara , y_stara , u_k , y_k )
%theta_staro-vrijednosti estimiranih parametara iz prethodne iteracije
ˆ 1k θ %P_staro- prethodna vrijednost matrice P P k %gamma_staro- prethodna vrijednost vektor kolone korekcionih parametara
1k
%u_stara-vektor red zakašnjelih vrijednosti ulaza u 1 , u 2 , ... , u bk k k n
%y_stara-vektor red zakašnjelih vrijednosti izlaza 1 , y 2 , ... , y a y k k k n %u_k- vrijednost ulaza uzorkovana u trenutku k
8/17/2019 Laboratorijska_vjezba_6
3/7
3
%y_k- vrijednost izlaza uzorkovana u trenutku k
%theta_novo –nove vrijednosti estimiranih parametara ˆ k θ %P_novo- nova vrijednost matrice P P 1k koja će se koristiti za sljedećuiteraciju
%gamma_novo- nova vrijednost vektor kolone korekcionih parametara k kojaće se koristiti za iduću iteraciju%u_nova- vektor red zakašnjelih vrijednosti ulaza koji će se koristiti za
sljedeću iteraciju u , u 1 , ... , u 1bk k k n %y_nova- vektor red zakašnjelih vrijednosti izlaza koji će se koristiti za
sljedeću iteraciju , y 1 , ... , y 1a y k k k n
Iskoristiti ovu funkciju za određivanje ARX modela rekurzivnom metodom najmanjihkvadrata koja daje okvir algoritma opisanog u uvodu, postavljanjem početnih vrijednosti
i provođenjem dovoljnog broja iteracija. Funkcija je data u nastavku:
function [a, b, a_historija, b_historija, e_historija] =
rekurzivna_ls_metoda(u, y, na, nb)%Pocetne vrijednostitheta_staro = zeros(na+nb,1);gamma_staro = zeros(na+nb,1);y_stara = zeros(1,na);u_stara = zeros(1,nb);P_staro = 100 .* eye(na+nb);%Varijable za prikaz promjene parametara i greske estimacije kroz iteracijea_historija = zeros(na,length(u));b_historija = zeros(nb,length(u));e_historija = zeros(1, length(u));
%Iteracijefor k = 1 : length(u)
u_novo = u(k);y_novo = y(k);[theta_novo, P_novo, gamma_novo, u_nova, y_nova, e] =
rekurzivna_ls_metoda_iteracija(theta_staro, P_staro, gamma_staro, u_stara,y_stara, u_novo, y_novo);
a_historija(:,k) = theta_novo(1:na);b_historija(:,k) = theta_novo(na+1:na+nb);e_historija(k) = e;theta_staro = theta_novo;gamma_staro = gamma_novo;
P_staro = P_novo;
u_stara = u_nova;y_stara = y_nova;end%Vrijednosti parametara modela nakon posljednje iteracijea = [1;theta_novo(1:na)];b = [0;theta_novo(na+1:na+nb)];
end
Ispravnost koda možete povjeriti korištenjem poznatog seta podataka dryer2 pozivajući
sljedeći dio koda:
%Podaci
load dryer2u2 = u2';y2 = y2';
8/17/2019 Laboratorijska_vjezba_6
4/7
4
%Red modelana = 5;nb = 5;%Rekurzivna metoda najmanjih kvadrata[a, b, a_historija, b_historija, e_historija] = rekurzivna_ls_metoda(u2,y2, na, nb);
%Parametri modelaab%Prikaz promjene parametara i greske estimacije kroz iteracijesubplot(3,1,1)plot(a_historija');subplot(3,1,2)plot(b_historija');subplot(3,1,3)plot(e_historija);
Zadatak 2.
Na slici 1. je pokazano kako se rekurzivna metoda najmanjih kvadrata može koristiti za
određivanje parametara ARX modela u realnom vremenu. U okviru ovog zadatka je
potrebno napisati s-funkciju unutar podsistema Estimacija parametara u realnom
vremenu. Blok koji se opisuje ima dva ulaza, u i y koji predstavljaju uzorkovane
vrijednosti ulaza i izlaza, i tri izlaza , ia b e , koji redom predstavljaju koeficijente u
nazivniku i brojniku prenosne funkcije (uključujući vodeću jedinicu, odnosno, nulu) i
trenutnu grešku estimacije. Portovi u , y i e su skalari a portovi ia b vektori dužine
1 i 1a b
n n , respektivno.
Slika 1. Estimacija parametara modela u realnom vremenu rekurzivnom metodom najmanjih kvadrata
(Simulink)
Za pisanje s-funkcije koristiti sljedeći šablon:
function sfun_rekurzivna_ls_metoda(block)
%Ne mijenjati sadrzaj ove funkcije, a ime postaviti kao i ime fajlasetup(block);
8/17/2019 Laboratorijska_vjezba_6
5/7
5
end%% Podesavanje ulaznih i izlaznih portova, parametara s-funckije i sl.function setup(block)% Broj ulaznih i izlaznih portovablock.NumInputPorts = 2;block.NumOutputPorts = 3;
% Broj parametara s-funckijeblock.NumDialogPrms = 2; %Parametri modela su na i nb
% Ako su svi ulazni portovi skalari stedi pisanje dodatne funkcije za% dinamicku konfiguraciju dimenzija ulaznih portovablock.SetPreCompPortInfoToDefaults;
%Konfiguracija ulaznih portova%Ulazni port "u"block.InputPort(1).Dimensions = 1; %Ulazni port je skalarblock.InputPort(1).DatatypeID = 0; %Tip podataka je doubleblock.InputPort(1).Complexity = 'Real'; %Podatak je realan brojblock.InputPort(1).DirectFeedthrough = true; %Postoji direktno dejstvo
%ulaza na izlaz%Ulazni port "y"
block.InputPort(2).Dimensions = 1; %...block.InputPort(2).DatatypeID = 0;
block.InputPort(2).Complexity = 'Real';block.InputPort(2).DirectFeedthrough = true;
%Konfiguracija izlaznih portova
%Dimenzije izlaznih portova zavise od parametara s-funkcijena = block.DialogPrm(1).Data;nb = block.DialogPrm(2).Data;%Izlazni port "a"block.OutputPort(1).Dimensions = na+1; %Izlazni port je vektor duzinena+1block.OutputPort(1).DatatypeID = 0; %...block.OutputPort(1).Complexity = 'Real';%Izlazni port "b"block.OutputPort(2).Dimensions = nb+1;block.OutputPort(2).DatatypeID = 0; % doubleblock.OutputPort(2).Complexity = 'Real';%Izlazni port "e"block.OutputPort(3).Dimensions = 1;block.OutputPort(3).DatatypeID = 0; % doubleblock.OutputPort(3).Complexity = 'Real';
%Vrijeme sempliranja se naslijeduje iz ulaza u blok
block.SampleTimes = [-1 0];
block.SimStateCompliance = 'DefaultSimState';
%Registracije ostalih funkcija koje su opisane kasnije
block.RegBlockMethod('PostPropagationSetup', @DoPostPropSetup);block.RegBlockMethod('Start', @Start);block.RegBlockMethod('Outputs', @Outputs); % Neophodnablock.RegBlockMethod('Terminate', @Terminate); % Neophodna
end
%% Podesavanje diskrenih stanja s-funkcije
function DoPostPropSetup(block)%Diskretna stanja s-funkcije se koriste za prenosenje podataka izmedju
8/17/2019 Laboratorijska_vjezba_6
6/7
6
%dvije iteracije. Ukoliko se ne prenose nikakvih podaci, ova funkcije se%moze izostavitina = block.DialogPrm(1).Data;nb = block.DialogPrm(2).Data;%Broj diskretnih stanja sistemablock.NumDworks = 5;
%Konfiguracija diskretnih stanja jako je slicna konfiguraciji ulazni i%izlaznih portova s-funckijeblock.Dwork(1).Name = 'theta1';block.Dwork(1).Dimensions = na+nb; %%thetablock.Dwork(1).DatatypeID = 0;block.Dwork(1).Complexity = 'Real';block.Dwork(1).UsedAsDiscState = true;
block.Dwork(2).Name = 'gamma1';block.Dwork(2).Dimensions = na+nb; %%gammablock.Dwork(2).DatatypeID = 0;block.Dwork(2).Complexity = 'Real';
block.Dwork(2).UsedAsDiscState = true;
block.Dwork(3).Name = 'y1';block.Dwork(3).Dimensions = na; %%y
block.Dwork(3).DatatypeID = 0;block.Dwork(3).Complexity = 'Real';block.Dwork(3).UsedAsDiscState = true;
block.Dwork(4).Name = 'u1';
block.Dwork(4).Dimensions = nb; %%ublock.Dwork(4).DatatypeID = 0;block.Dwork(4).Complexity = 'Real';block.Dwork(4).UsedAsDiscState = true;
block.Dwork(5).Name = 'P1';block.Dwork(5).Dimensions = (na+nb)*(na+nb); %%Pblock.Dwork(5).DatatypeID = 0;block.Dwork(5).Complexity = 'Real';block.Dwork(5).UsedAsDiscState = true;
%Diskretna stanja mogu biti samo vektori, a ne matrice. Zbog toga, ako je%potrebno sacuvati matricu kao diskretno stanje, ona se treba%transformisati u vektor koristenjem funckije reshape, i obrnuto ako je%hocemo kasnije koristiti kao matricu.
%...
end
%% Inicijalizacija diskretnih stanja sistema na pocetku izvrsavanjafunction Start(block)
%Ova funkcija poziva se na pocetku izvrsavanja simulacije i moze se%koristiti za postavljanje pocetnih vrijednosti diskretnih stanja%s-funkcije. Ako to nije potrebno ili se stanja ne koriste, ova funkcija se%moze izostaviti.
%Vrijednostima diskretnih stanja pristupa se na sljedeci nacin:% block.Dwork(1).Data=[0 0 0 0]
% ***** OVDJE PISATI VAS KOD ZA DEFINISANJE ULAZA*****
8/17/2019 Laboratorijska_vjezba_6
7/7
7
end
function Outputs(block)%% Generisanje izlaza pri svakoj iteraciji% Ova funkcija je obavezna i u njoj se obicno obavlja vecina posla. Na% osnovu trenutnih vrijednosti ulaza (kojima pristupamo preko
% block.InputPort(1).Data i td.) i trenutnih vrijednosti diskrenih stanja% generisu se vrijednosti izlaza (koje se upisuju u% block.OutputPort(1).Data i td.) i osvjezavaju se vrijednosti diskrenih% stanja.
% ***** OVDJE PISATI VAS KOD ZA OBAVLJANJE LS-a I FORMIRANJE IZLAZA
end
%% Oslobadjanje resursa ili druge operacije po zavrsetku simulacijefunction Terminate(block)% Nista.%end Terminate
end