pmsm_mix.cpp itpp/itbase.h stat/libFN.h stat/emix.h estim/ekf_templ.h estim/libPF.h pmsm.h simulator.h sim_profiles.h stat/loggers.h int int main () main Models for synchronous electric drive using IT++ and BDM. Vaclav Smidl. ----------------------------------- BDM++ - C++ library for Bayesian Decision Making under UncertaintyUsing IT++ for numerical operations ----------------------------------- #include<itpp/itbase.h> #include<stat/libFN.h> #include<stat/emix.h> #include<estim/ekf_templ.h> #include<estim/libPF.h> #include"pmsm.h" #include"simulator.h" #include"sim_profiles.h" #include<stat/loggers.h> usingnamespaceitpp; intmain(){ //Kalmanfilter intNdat=90000; doubleh=1e-6; intNsimstep=125; intNpar=10; dirfilelogL("exp/pmsm_mix",1000); //memlogL(Ndat); //SETSIMULATOR pmsmsim_set_parameters(0.28,0.003465,0.1989,0.0,4,1.5,0.04,200.,3e-6,h); doubleWw=0.0; vecdt(2); vecut(2); vecxtm=zeros(4); vecxdif=zeros(4); vecxt(4); vecddif=zeros(2); IMpmsmfxu; //RsLsdtFmag(Ypm)kppJBf(Mz) fxu.set_parameters(0.28,0.003465,Nsimstep*h,0.1989,1.5,4.0,0.04,0.0); OMpmsmhxu; matQt=zeros(4,4); matRt=zeros(2,2); //ESTIMATORS vecmu0="0.00.00.00.0"; vecQdiag("62664540.03");//zdenek:0.010.010.00010.0001 vecRdiag("100100");//var(diff(xth))="0.0340.034" matQ=diag(Qdiag); matR=diag(Rdiag); EKFfullEfix(rx,ry,ru); Efix.set_est(mu0,1*eye(4)); Efix.set_parameters(&fxu,&hxu,Q,R); RVrQR("{QR}","42"); EKFful_unQREKU(rx,ry,ru,rQR); EKU.set_est(mu0,1*ones(4)); EKU.set_parameters(&fxu,&hxu,diag(Qdiag),diag(Rdiag)); //QUmodel egammaGcom(rQR);Gcom.set_parameters(ones(6),vec("111e41e1011")); /*cout<<Gcom.mean()<<endl; cout<<Gcom.sample()<<endl;*/ euniUcom(rQR);Ucom.set_parameters(zeros(6),vec("60604530.03100100")); /*cout<<Ucom.mean()<<endl; cout<<Ucom.sample()<<endl;*/ Array<epdf*>Coms(2); Coms(0)=&Gcom; Coms(1)=&Ucom; emixEevol(rQR);Eevol.set_parameters("0.10.9",Coms); //cout<<Eevol.sample()<<endl; mepdfevolQR(Eevol); MPF<EKFful_unQR>M(rx,rQR,evolQR,evolQR,Npar,EKU); M.set_est(evolQR._epdf()); epdf&Efix_ep=Efix._epdf(); epdf&M_ep=M._epdf(); //LOG RVrUD("{u_isau_isbi_isai_isb}"); intX_log=L.add(rx,"X"); intEfix_log=L.add(rx,"XF"); RVtmp=concat(rQR,rx); intM_log=L.add(tmp,"M"); L.init(); doubledum=0.0; vecdumvec=vec_1(1.0); vecz=evolQR.samplecond(dumvec,dum); cout<<z<<endl; for(inttK=1;tK<Ndat;tK++){ //NumberofstepsofasimulatorforonestepofKalman for(intii=0;ii<Nsimstep;ii++){ sim_profile_steps1(Ww,true); pmsmsim_step(Ww); }; //simulationviadeterministicmodel ut(0)=KalmanObs[0]; ut(1)=KalmanObs[1]; dt(0)=KalmanObs[2]; dt(1)=KalmanObs[3]; //ESTIMATE Efix.bayes(concat(dt,ut)); // M.bayes(concat(dt,ut)); //LOG L.logit(X_log,vec(x,4));//vecfromC-array L.logit(Efix_log,Efix_ep.mean()); L.logit(M_log,M_ep.mean()); L.step(); } L.finalize(); //L.itsave("sim_var.it"); return0; }