Changeset 218

Show
Ignore:
Timestamp:
12/18/08 20:36:13 (15 years ago)
Author:
smidl
Message:

navrat simulatoru + zmeny v pmsm

Files:
6 modified

Legend:

Unmodified
Added
Removed
  • CMakeLists.txt

    r213 r218  
    2727        #This is for UNIX makefile which does only one release at a time. 
    2828        SET(CMAKE_BUILD_TYPE Debug) 
    29 #       SET(CMAKE_CXX_FLAGS_DEBUG "-Wall -g -DNDEBUG -O3 -pipe  -Wno-unknown-pragmas") 
    30         SET(CMAKE_CXX_FLAGS_DEBUG "-Wall -g -pipe  -Wno-unknown-pragmas") 
     29        SET(CMAKE_CXX_FLAGS "-Wall -pipe  -Wno-unknown-pragmas") 
     30        SET(CMAKE_CXX_FLAGS_RELEASE " -DNDEBUG -O2") 
     31        SET(CMAKE_CXX_FLAGS_DEBUG "-g") 
    3132        INCLUDE(CMakeLocal.txt OPTIONAL)         
    3233ENDIF(WIN32) 
  • pmsm/pmsm_sim.cpp

    r215 r218  
    1818#include "pmsm.h" 
    1919#include "simulator.h" 
     20#include "sim_profiles.h" 
    2021 
    2122using namespace itpp; 
     
    3536int main() { 
    3637        // Kalman filter 
    37         int Ndat = 30000; 
     38        int Ndat = 9000; 
    3839        double h = 1e-6; 
    3940        int Nsimstep = 125; 
    40         int Npart = 1; 
     41        int Npart = 200; 
    4142 
    4243        // internal model 
    4344        IMpmsm fxu; 
    44         //                  Rs    Ls        dt       Fmag(Ypm) kp   p    J     Bf(Mz) 
    45         fxu.set_parameters ( 0.28, 0.003465, Nsimstep*h, 0.1989,   1.5 ,4.0, 0.04, 0.0 ); 
     45        //                  Rs    Ls        dt       Fmag(Ypm)    kp   p    J     Bf(Mz) 
     46        fxu.set_parameters ( 0.28, 0.003465, Nsimstep*h, 0.1989, 1.5 ,4.0, 0.04, 0.0 ); 
    4647        // observation model 
    4748        OMpmsm hxu; 
    4849 
    4950        vec mu0= "0.0 0.0 0.0 0.0"; 
    50         vec Qdiag ( "0.01 0.01 0.00001 0.00001" ); //zdenek: 0.01 0.01 0.0001 0.0001 
    51         vec Rdiag ( "0.0005 0.0005" ); //var(diff(xth)) = "0.034 0.034" 
     51        vec Qdiag ( "0.001 0.001 1e-6 1e-10" ); //zdenek: 0.01 0.01 0.0001 0.0001 
     52        vec Rdiag ( "1e-10 1e-10" ); //var(diff(xth)) = "0.034 0.034" 
    5253        chmat Q ( Qdiag ); 
    5354        chmat R ( Rdiag ); 
     
    5960        EKF_unQ KFEp ( rx,ry,ru,rQ ); 
    6061        KFEp.set_parameters ( &fxu,&hxu,Q,R ); 
    61         KFEp.set_est ( mu0, chmat ( 1*ones ( 4 ) ) ); 
     62        KFEp.set_est ( mu0, chmat ( zeros ( 4 ) ) ); 
    6263 
    6364        mgamma evolQ ( rQ,rQ ); 
    6465        MPF<EKF_unQ> M ( rx,rQ,evolQ,evolQ,Npart,KFEp ); 
    6566        // initialize 
    66         evolQ.set_parameters ( 100.0 ); //sigma = 1/10 mu 
     67        evolQ.set_parameters ( 10.0 ); //sigma = 1/10 mu 
    6768        evolQ.condition ( "0.01 0.01" ); //Zdenek default 
    6869        epdf& pfinit=evolQ._epdf(); 
    6970        M.set_est ( pfinit ); 
    70         evolQ.set_parameters ( 1000.0 ); 
     71        evolQ.set_parameters ( 10.0 ); 
    7172 
    7273        // 
     
    7879        mat Dt=zeros ( Ndat,4+2 ); //observation 
    7980        mat XtE=zeros ( Ndat, 4 ); 
    80         mat XtM=zeros ( Ndat,6 ); //Q + x 
     81        mat XtM=zeros ( Ndat,2+4 ); //Q + x 
    8182 
    8283        // SET SIMULATOR 
     
    8788        vec dt ( 2 ); 
    8889        vec ut ( 2 ); 
     90        vec vecW="0.1 0.2 0.4 0.9 0.4 0.2 0.0 -0.4 -0.9 -1.6 -0.4 0.0 0.0"; 
    8991 
    9092        for ( int tK=1;tK<Ndat;tK++ ) { 
     
    9294                for ( int ii=0; ii<Nsimstep;ii++ ) { 
    9395                        //simulator 
    94                         Ww+=k_rampa*2.*M_PI*2e-4;    //1000Hz/s 
    95                         if ( Ww>2.*M_PI*150. ) { 
    96                                 Ww=2.*M_PI*150.; 
    97                                 if ( k_rampa_tmp<500000 ) k_rampa_tmp++; 
    98                                 else {k_rampa=-1;k_rampa_tmp=0;} 
    99                         }; 
    100                         if ( Ww<-2.*M_PI*150. ) Ww=-2.*M_PI*150.; /* */ 
    101  
     96                        sim_profile_vec01t(Ww,vecW); 
    10297                        pmsmsim_step ( Ww ); 
    10398                }; 
    10499                // collect data 
    105                 ut ( 0 ) = KalmanObs[0]; 
    106                 ut ( 1 ) = KalmanObs[1]; 
     100                ut ( 0 ) = 0.0;//KalmanObs[0]; 
     101                ut ( 1 ) = 0.0;//KalmanObs[1]; 
    107102                dt ( 0 ) = KalmanObs[2]; 
    108103                dt ( 1 ) = KalmanObs[3]; 
  • pmsm/sim.cpp

    r217 r218  
    2828        double h = 1e-6; 
    2929        int Nsimstep = 125; 
    30         int Npart = 50; 
    3130         
    32         dirfilelog L("exp/pmsm_sim2",Ndat); 
     31        dirfilelog L("exp/sim",Ndat); 
    3332         
    3433        // internal model 
     
    5554        int U_log = L.add(ru,"U"); 
    5655        int U2_log = L.add(ru,"U2"); 
    57         int R_log = L.add(RV("{_ }","4"),"R"); 
     56        int R_log = L.add(RV("{_ }","16"),"R"); 
     57        int Ww_log = L.add(RV("{_ }","1"),"W"); 
     58        int R2_log = L.add(RV("{_ }","16"),"R2"); 
    5859//      int O_log = L.add(RV("{_ }","16"),"O"); 
    5960        L.init(); 
     
    6162        // SET SIMULATOR 
    6263        //pmsmsim_set_parameters ( 0.28,0.003465,0.1989,0.0,4,1.5,0.04, 200., 3e-6, h ); 
    63         pmsmsim_set_parameters ( 0.28,0.003465,0.1989,0.0,4,1.5,0.04, 200., 0.0*3e-6, h ); 
     64        pmsmsim_set_parameters ( 0.28,0.003465,0.1989,0.0,4,1.5,0.04, 200., 6e-6, h ); 
    6465        double Ww=0.0; 
    6566        vec dt ( 2 ); 
     
    7273        vec u=zeros(2); 
    7374        vec u2=zeros(2); 
    74         ldmat R(eye(4),0.001*ones(4)); 
    75         mat Ch=zeros(4,4); 
    76         fsqmat eCh(4); 
     75        ldmat R0(eye(4),1e-6*ones(4)); 
     76        ldmat R(R0); 
     77        ldmat R2(R0); 
     78         
     79        double frg=0.9; 
     80        vec vecW="0. 0. 0.2 0.4 0.4 0.2 0.0 -0.4 -0.6 -0.6 -0.4 0.0 0.0"; 
    7781        for ( int tK=1;tK<Ndat;tK++ ) { 
    7882                //Number of steps of a simulator for one step of Kalman 
     
    8084                        //simulator 
    8185                        //sim_profile_steps1(Ww); 
    82                         sim_profile_2slowrevs(Ww); 
     86                        sim_profile_vec01t(Ww,vecW); 
    8387                        pmsmsim_step ( Ww ); 
    8488                }; 
     
    9296                // Try what our model would predict! 
    9397                xp=fxu.eval(xm,u);  
    94                 xp2=fxu.eval(xm,u2);  
    95                 xp3=fxu.eval(xm,u2);  
     98                xp2=fxu.eval(xm,zeros(2)); //ZERO input!!!!!!!! 
     99//              xp3=fxu.eval(xm,u2);  
    96100 
    97101//              KFE.bayes(concat(dt,u)); 
     
    99103                xt=vec(x,4); //vec from C-array 
    100104                //Covariance   
    101                 R*=0.7; 
    102                 R.opupdt(xt-xp2,1.0); 
    103                 Ch = diag(sqrt(R._D()))*R._L(); 
    104                 //eCh = KFE._e()->_R(); 
    105                 eCh = KFE._R(); 
     105                R*=frg; 
     106                R.add(R0,1-frg); 
     107                R.opupdt(xt-xp,1.0); 
     108                R2*=frg; 
     109                R2.add(R0,1-frg); 
     110                R2.opupdt(xt-xp2,1.0); 
    106111                xm = xt; 
    107112                L.logit(X_log, xt       );  
     
    110115                L.logit(U_log, u        );  
    111116                L.logit(U2_log, u2      );  
    112                 L.logit(R_log, diag(Ch.T()*Ch) ); //3.33=1/(1-0.7) 
    113                 L.logit(V_log, diag(eCh.to_mat()) ); //3.33=1/(1-0.7) 
     117                L.logit(Ww_log, vec_1(Ww));  
     118                L.logit(R_log, vec(R.to_mat()._data(), 16 )); //3.33=1/(1-0.7) 
     119                L.logit(R2_log, vec(R2.to_mat()._data(), 16 ));  
    114120//              L.logit(E_log, KFE._e()->mean() );  
    115121//              L.logit(O_log, vec(iCh._data(),16)); //3.33=1/(1-0.7) 
     
    121127 
    122128        L.finalize();  
    123         L.itsave("xxx.it"); 
     129        L.itsave("sim.it"); 
    124130        return 0; 
    125131} 
  • pmsm/sim_profiles.h

    r217 r218  
    6565 
    6666void sim_profile_2slowrevs(double &Ww,bool load=false) { 
    67         static int k_rampa=10; 
     67        static int k_rampa=1; 
    6868 
    6969        if ((t>0.2)&&(t<0.8)) { 
     
    7676        if (!load) x[8]=0.0; 
    7777} 
     78 
     79void sim_profile_vec01t(double &Ww, vec &vecWw){ 
     80        static int ind=0; 
     81        static double dW; 
     82        double tn=t; 
     83        if (t>0.1*ind) { 
     84                ind++; 
     85                dW = vecWw(ind)-vecWw(ind-1); 
     86        } 
     87        Ww=vecWw(ind-1)+(t-0.1*(ind-1))*dW/0.1; 
     88} 
  • pmsm/simulator_zdenek/simulator.cpp

    r216 r218  
    113113// === init of particular modules of simulator === 
    114114  // PWM init 
    115   smer=1; smer2=1; 
     115  smer=-1; smer2=-1; 
     116  citac=0; 
     117  citac2=abs(0-(int)(DT/h)); //VS: oprava, je to spravne? 
    116118  citac_PR=h_reg_counter_mez; 
    117   citac=citac_PR; 
    118   citac2=abs(citac_PR-(int)(DT/h)); //VS: oprava, je to spravne? 
    119    
     119 
    120120  // first interrupt occur after first period match => add 1 to both counter registers 
    121 //  citac++;smer=1; 
    122 //  citac2--; 
     121  citac++;smer=1; 
     122  citac2--; 
    123123 
    124124  modulace=1;           // THIPWM 
     
    173173 
    174174  for (i=0;i<3;i++) 
    175   { dtr[i]=ubytek(fabs(iabc[i])*0.); //VS 
     175  { dtr[i]=ubytek(fabs(iabc[i])); 
    176176    dd[i]=dtr[i]*.73; 
    177177  } 
  • tests/testUI.cpp

    r159 r218  
    153153        root.Save(); 
    154154        cout << "all the transport means were saved correctly" << endl;                          
    155         getchar(); 
     155        //getchar(); 
    156156 
    157157        //////////////////////////////////// LOADING ////////////////////////////////