Show
Ignore:
Timestamp:
11/28/09 14:38:48 (15 years ago)
Author:
smidl
Message:

Working unitsteps and controlloop + corresponding fixes

Location:
applications/pmsm/TR2245
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • applications/pmsm/TR2245/CMakeLists.txt

    r294 r744  
    22EXEC (unitsteps pmsmsim) 
    33EXEC (wishart pmsmsim) 
    4 EXEC (pmsm_wishart pmsmsim) 
     4#EXEC (pmsm_wishart pmsmsim) 
  • applications/pmsm/TR2245/unitsteps.cfg

    r294 r744  
    11ndat = 9000; 
    2 Npart = 1000; 
     2Npart = 100; 
    33 
    44//simulator  
    55profile = [1,2,4,9,4,2,0,-4,-9,-16,-4,0,0]; 
    66 
    7 logger = {type="dirfilelog"; dirname="exp/unitstep"; maxlen=100;}; 
     7logger = {class="dirfilelog"; dirname="kst/unitstep"; maxlen=100;}; 
    88 
    9 Qrw = {type="migamma_ref"; 
    10         ref = [1e-6, 1e-6, 1e-3, 1e-4]; 
     9Qrw = {class="migamma_ref"; 
     10        ref = [1e-4, 1e-4, 1e-3, 1e-4]; 
    1111        l = 0.999; 
    12         k = 0.1; 
     12        k = 0.06; 
    1313}; 
    1414// For EKF 
    1515dQ=[1e-5, 1e-5, 1e-4, 1e-5]; 
    16 dR=[1e-8, 1e-8]; 
     16dR=[1e-10, 1e-10]; 
    1717 
  • applications/pmsm/TR2245/unitsteps.cpp

    r706 r744  
    1515#include <estim/particles.h> 
    1616#include <estim/ekf_template.h> 
    17 #include <stat/functions.h> 
     17#include <base/loggers.h> 
    1818 
    1919 
     
    2121#include "simulator.h" 
    2222#include "../sim_profiles.h" 
    23 #include "user_info.h" 
    24 #include "stat/loggers.h" 
    2523 
    2624using namespace bdm; 
     
    4139        F.lookupValue ( "ndat", Ndat ); 
    4240        F.lookupValue ( "Npart",Npart ); 
    43         pdf* evolQ = UI::build<pdf>( F, "Qrw" ); 
     41        shared_ptr<pdf> evolQ = UI::build<pdf>( F, "Qrw" ); 
    4442        vec Qdiag; 
    4543        vec Rdiag; 
     
    4947        // internal model 
    5048 
    51 IMpmsm fxu; 
     49        shared_ptr<IMpmsm> fxu= new IMpmsm; 
    5250//                  Rs    Ls        dt       Fmag(Ypm)    kp   p    J     Bf(Mz) 
    53 fxu.set_parameters ( 0.28, 0.003465, Nsimstep*h, 0.1989, 1.5 ,4.0, 0.04, 0.0 ); 
     51        fxu->set_parameters ( 0.28, 0.003465, Nsimstep*h, 0.1989, 1.5 ,4.0, 0.04, 0.0 ); 
    5452        // observation model 
    55         OMpmsm hxu; 
     53        shared_ptr<OMpmsm> hxu=new OMpmsm; 
    5654 
    5755        vec mu0= "0.0 0.0 0.0 0.0"; 
     
    5957        chmat R ( Rdiag ); 
    6058        EKFCh KFE ; 
    61         KFE.set_parameters ( &fxu,&hxu,Q,R ); 
    62         KFE.set_est ( mu0, chmat ( zeros ( 4 ) ) ); 
     59        KFE.set_parameters ( fxu,hxu,Q,R ); 
     60        KFE.set_statistics ( mu0, chmat ( zeros ( 4 ) ) ); 
    6361        KFE.set_rv ( rx ); 
     62        KFE.validate(); 
    6463 
    6564        RV rQ ( "{Q }","4" ); 
     65        RV rU ("{u }","2"); 
     66        RV rY ("{y }","2"); 
    6667        EKFCh_dQ KFEp ; 
    67         KFEp.set_parameters ( &fxu,&hxu,Q,R ); 
    68         KFEp.set_est ( mu0, chmat ( zeros ( 4 ) ) ); 
     68        KFEp.set_parameters ( fxu,hxu,Q,R ); 
     69        KFEp.set_statistics ( mu0, chmat ( zeros ( 4 ) ) ); 
     70        KFEp.set_rv(rx); 
     71        KFEp.set_yrv(rY);  
     72        KFEp.set_rvc(concat(rU, rQ));  
     73        KFEp.validate(); 
    6974 
    70         MPF<EKFCh_dQ> M; 
    71         M.set_parameters ( evolQ,evolQ,Npart ); 
    72         // initialize 
    73         evolQ->condition ( 10*Qdiag ); //Zdenek default 
    74         M.set_statistics ( evolQ->_e() , &KFEp ); 
    75         // 
     75        MPF M; 
     76        evolQ->set_rv(rQ); 
     77        M.set_pf ( evolQ,Npart ); 
     78        M._pf().set_statistics(ones(Npart), euni(zeros(4),2*Qdiag)); 
     79        M.set_BM(KFEp); 
     80        M.set_yrv ( rY   ); 
     81        M.set_rvc ( rU   ); 
     82        M.validate(); 
    7683 
    77         M.set_rv ( concat ( rQ,rx ) ); 
    78  
    79         dirfilelog *L = UI::build<dirfilelog>( F, "logger" );// ( "exp/mpf_test",100 ); 
    80         int l_X = L->add ( rx, "xt" ); 
    81         int l_D = L->add ( concat ( ry,ru ), "" ); 
    82         int l_Q= L->add ( rQ, "" ); 
     84        shared_ptr<dirfilelog> L = UI::build<dirfilelog>( F, "logger" );// ( "exp/mpf_test",100 ); 
     85        int l_X = L->add_vector ( rx, "xt" ); 
     86        int l_D = L->add_vector ( concat ( ry,ru ), "" ); 
     87        int l_Q= L->add_vector ( rQ, "" ); 
    8388 
    8489        KFE.set_options ( "logbounds" ); 
    85         KFE.log_add ( *L,"KF" ); 
     90        KFE.log_register ( *L,"KF" ); 
    8691        M.set_options ( "logbounds" ); 
    87         M.log_add ( *L,"M" ); 
     92        M.log_register ( *L,"M" ); 
    8893        L->init(); 
    8994 
     
    107112                ut ( 0 ) = KalmanObs[4]; 
    108113                ut ( 1 ) = KalmanObs[5]; 
    109                 xt = fxu.eval ( xtm,ut ) + diag ( sqrt ( Qdiag ) ) *randn ( 4 ); 
    110                 dt = hxu.eval ( xt,ut ); 
     114                xt = fxu->eval ( xtm,ut ) + diag ( sqrt ( Qdiag ) ) *randn ( 4 ); 
     115                dt = hxu->eval ( xt,ut ) + diag(sqrt(Rdiag))*randn(2); 
    111116                xtm = xt; 
    112117 
     
    122127 
    123128                //estimator 
    124                 KFE.bayes ( concat ( dt,ut ) ); 
    125                 M.bayes ( concat ( dt,ut ) ); 
     129                KFE.bayes (  dt,ut ); 
     130                M.bayes ( dt,ut ); 
    126131 
    127                 L->logit ( l_X,xt ); 
    128                 L->logit ( l_D,concat ( dt,ut ) ); 
    129                 L->logit ( l_Q,Qdiag ); 
     132                L->log_vector ( l_X,xt ); 
     133                L->log_vector ( l_D,concat ( dt,ut ) ); 
     134                L->log_vector ( l_Q,Qdiag ); 
    130135 
    131                 KFE.logit ( *L ); 
    132                 M.logit ( *L ); 
     136                KFE.log_write ( ); 
     137                M.log_write ( ); 
    133138                L->step(); 
    134139        } 
     
    136141        //Exit program: 
    137142 
    138         delete L; 
    139143        return 0; 
    140144}