pmsm_unkQ.cpp itpp/itbase.h estim/libKF.h estim/libPF.h stat/libFN.h pmsm.h int int main () main /* \file \briefModelsforsynchronouselectricdriveusingIT++andBDM \authorVaclavSmidl. ----------------------------------- BDM++-C++libraryforBayesianDecisionMakingunderUncertainty UsingIT++fornumericaloperations ----------------------------------- */ #include<itpp/itbase.h> #include<estim/libKF.h> #include<estim/libPF.h> #include<stat/libFN.h> #include"pmsm.h" usingnamespaceitpp; /* //PMSMwithQonIaandIbgivenexternally classEKF_unQ:publicEKF<chmat>,publicBMcond{ public: EKF_unQ(rx,ry,ru,rQ):EKF<chmat>(rx,ry,ru),BMcond(rQ){}; voidcondition(constvec&Q0){}; };*/ intmain(){ //Kalmanfilter intNdat=1000; //cout<<KF; //internalmodel IMpmsmfxu; //RsLsdtFmag(Ypm)kppJBf(Mz) fxu.set_parameters(0.28,0.003465,20*1e-6,0.1989,1.5,4.0,0.04,0.0); //observationmodel OMpmsmhxu; vecmu0="1001001001"; vecQdiag("0.10.10.010.01"); vecRdiag("0.020.02"); vecvQ="0.01:0.01:100"; chmatQ(Qdiag); chmatR(Rdiag); EKFChKFE(rx,ry,ru); KFE.set_est(mu0,chmat(1000*ones(4))); KFE.set_parameters(&fxu,&hxu,Q,R); matll(100,Ndat); EKFCh*kfArray[100]; for(inti=0;i<100;i++){ vecQid(Qdiag); Qid(0)=vQ(i);Qid(1)=vQ(i); kfArray[i]=newEKFCh(rx,ry,ru); kfArray[i]->set_est(mu0,chmat(1000*ones(4))); kfArray[i]->set_parameters(&fxu,&hxu,chmat(Qid),R); } epdf&KFEep=KFE._epdf(); //simulatorvalues vecdt(2); vecwt(2); vecut(2); vecxt=mu0; vecet(4); matXt=zeros(4,Ndat); matXtE=zeros(4,Ndat); Xt.set_col(0,KFEep.mean()); for(intt=1;t<Ndat;t++){ //simulator UniRNG.sample_vector(2,wt); if(rem(t,500)<200)ut=rem(t,500)*ones(2); else ut=zeros(2); NorRNG.sample_vector(4,et); NorRNG.sample_vector(2,wt); xt=fxu.eval(xt,ut)+Q.sqrt_mult(et); dt=hxu.eval(xt,ut)+R.sqrt_mult(wt); //estimator KFE.bayes(concat(dt,ut)); for(inti=0;i<100;i++){kfArray[i]->bayes(concat(dt,ut));ll(i,t)=ll(i,t-1)+kfArray[i]->_ll(); } Xt.set_col(t,xt); XtE.set_col(t,KFEep.mean()); } it_filefou("pmsm.it"); fou<<Name("xth")<<Xt; fou<<Name("xthE")<<XtE; fou<<Name("ll")<<ll; //Exitprogram: return0; }