Laboratorijska_vjezba_6

download Laboratorijska_vjezba_6

of 7

Transcript of Laboratorijska_vjezba_6

  • 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

    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