Changeset 94

Show
Ignore:
Timestamp:
05/07/08 13:59:56 (16 years ago)
Author:
smidl
Message:

prevod sim_var na logger

Location:
pmsm
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • pmsm/pmsm.h

    r91 r94  
    77 
    88//TODO hardcoded RVs!!! 
    9 RV rx ( "1 2 3 4", "{ia, ib, om, th}", ones_i ( 4 ), zeros_i ( 4 )); 
    10 RV ru ( "5 6", "{ua, ub}", ones_i ( 2 ) ,zeros_i ( 2 )); 
    11 RV ry ( "7 8", "{oia, oib}", ones_i ( 2 ) ,zeros_i ( 2 )); 
     9RV rx ( "1 2 3 4", "{ia ib om th }", ones_i ( 4 ), zeros_i ( 4 )); 
     10RV ru ( "5 6", "{ua ub }", ones_i ( 2 ) ,zeros_i ( 2 )); 
     11RV ry ( "7 8", "{oia oib }", ones_i ( 2 ) ,zeros_i ( 2 )); 
    1212 
    1313class uipmsm : public uibase{ 
  • pmsm/sim_var.cpp

    r81 r94  
    1919#include "simulator.h" 
    2020 
    21 #include "iopom.h" 
     21#include <stat/loggers.h> 
    2222 
    2323using namespace itpp; 
     
    8181        int Nsimstep = 125; 
    8282 
    83         mat Xt=zeros ( Ndat ,9 ); //true state from simulator 
    84         mat XtM=zeros ( Ndat ,4 ); //true state from simulator 
    85         mat XtF=zeros ( Ndat ,4 ); //true state from simulator 
    86         mat XtO=zeros ( Ndat ,4 ); //true state from simulator 
    87         mat Dt=zeros ( Ndat,4 ); //observation 
    88         mat Qrec=zeros ( Ndat, 4*4 ); //full covariance matrix 
    89  
     83        dirfilelog L("exp/sim_var",1000); 
     84         
    9085        // SET SIMULATOR 
    9186        pmsmsim_set_parameters ( 0.28,0.003465,0.1989,0.0,4,1.5,0.04, 200., 3e-6, h ); 
     
    9691        vec xdif=zeros ( 4 ); 
    9792        vec xt ( 4 ); 
     93        vec ddif=zeros(2); 
    9894        IMpmsm fxu; 
    9995        //                  Rs    Ls        dt           Fmag(Ypm) kp   p    J     Bf(Mz) 
     
    10197        OMpmsm hxu; 
    10298        mat Qt=zeros ( 4,4 ); 
     99        mat Rt=zeros ( 2,2 ); 
    103100 
    104101        // ESTIMATORS 
     
    116113        Eop.set_parameters ( &fxu,&hxu,Q,R); 
    117114 
     115        EKFfull Edi ( rx,ry,ru ); 
     116        Edi.set_est ( mu0, 1*eye ( 4 ) ); 
     117        Edi.set_parameters ( &fxu,&hxu,Q,R); 
     118 
    118119        epdf& Efix_ep = Efix._epdf(); 
    119120        epdf& Eop_ep = Eop._epdf(); 
     121        epdf& Edi_ep = Edi._epdf(); 
    120122 
     123        //LOG 
     124        RV rQ("10", "{Q }", "16","0"); 
     125        RV rR("11", "{R }", "4","0"); 
     126        int X_log = L.add(rx,"X"); 
     127        int Efix_log = L.add(rx,"XF"); 
     128        int Eop_log = L.add(rx,"XO"); 
     129        int Edi_log = L.add(rx,"XD"); 
     130        int Q_log = L.add(rQ,""); 
     131        int R_log = L.add(rR,""); 
     132        L.init(); 
    121133 
    122134        for ( int tK=1;tK<Ndat;tK++ ) { 
     
    133145 
    134146                xt = fxu.eval ( xtm,ut ); 
    135  
    136147                //Results: 
    137148                // in xt we have simulaton according to the model 
    138149                // in x we have "reality" 
    139  
    140150                xtm ( 0 ) =x[0];xtm ( 1 ) =x[1];xtm ( 2 ) =x[2];xtm ( 3 ) =x[3]; 
    141                 xdif=xtm-xt; 
     151                xdif = xtm-xt; 
    142152                if ( xdif ( 3 ) >pi ) xdif ( 3 )-=2*pi; 
    143153                if ( xdif ( 3 ) <-pi ) xdif ( 3 ) +=2*pi; 
     154                 
     155                ddif = hxu.eval(xtm,ut) - dt; 
    144156 
    145157                //Rt = 0.9*Rt + xdif^2 
    146                 Qt*=0.0; 
     158                Qt*=0.01; 
    147159                Qt += outer_product ( xdif,xdif ); //(x-xt)^2 
    148                 Qrec.set_row ( tK, vec ( Qt._data(),16 ) ); 
     160                Rt*=0.01; 
     161                Rt += outer_product ( ddif,ddif ); //(x-xt)^2 
    149162 
    150163                //ESTIMATE 
    151164                Efix.bayes(concat(dt,ut)); 
    152165                // 
    153                 Eop.set_parameters ( &fxu,&hxu,(Qt+1e-16*eye(4)),(1*eye(2))); 
     166                Eop.set_parameters ( &fxu,&hxu,(Qt+1e-16*eye(4)),(Rt+1e-3*eye(2))); 
    154167                Eop.bayes(concat(dt,ut)); 
     168                // 
     169                Edi.set_parameters ( &fxu,&hxu,(diag(diag(Qt))+1e-16*eye(4)),(diag(diag(Rt))+1e-3*eye(2))); 
     170                Edi.bayes(concat(dt,ut)); 
    155171                 
    156                 Xt.set_row ( tK,vec ( x,9 ) ); //vec from C-array 
    157                 XtM.set_row ( tK,xt ); //vec from C-array 
    158                 XtF.set_row ( tK,Efix_ep.mean() );  
    159                 XtO.set_row ( tK,Eop_ep.mean() );  
    160                 Dt.set_row ( tK, concat ( dt,ut ) ); 
     172                //LOG 
     173                L.logit(X_log, vec(x,4)); //vec from C-array 
     174                L.logit(Efix_log, Efix_ep.mean() );  
     175                L.logit(Eop_log, Eop_ep.mean() );  
     176                L.logit(Edi_log, Edi_ep.mean() );  
     177                L.logit(Q_log, vec(Qt._data(),16) );  
     178                L.logit(R_log, vec(Rt._data(),4) );  
     179                 
     180                L.step(false); 
    161181        } 
    162182 
    163         char tmpstr[200]; 
    164         sprintf ( tmpstr,"%s/%s","variance/","format" ); 
    165         ofstream  form ( tmpstr ); 
    166         form << "# Experimetal header file"<< endl; 
    167         dirfile_write ( form,"variance/",Xt,"X","{isa isb om th }" ); 
    168         dirfile_write ( form,"variance/",XtM,"Xsim","{isa isb om th }" ); 
    169         dirfile_write ( form,"variance/",XtO,"XO","{isa isb om th }" ); 
    170         dirfile_write ( form,"variance/",XtF,"XF","{isa isb om th }" ); 
    171         dirfile_write ( form,"variance/",Dt,"D","{isa isb usa usb }" ); 
    172         dirfile_write ( form,"variance",Qrec,"Q","{ }" ); 
     183        L.step(true); 
    173184 
    174185        return 0;