

//.cc#include#include#include#include#include#include#include#include#include#include#include#includenamespacelongbeach{namespacesignals{usingstd::cout;/************************************************************************************************///SigKalmanFilterSpec/************************************************************************************************/SigKalmanFilterSpec::SigKalmanFilterSpec:R,Q,step,use_dynamic_deltas{if{MemberList::className;MemberList::add;MemberList::add;MemberList::add;MemberList::add;MemberList::add;MemberList::add;MemberList::add;MemberList::add;MemberList::m_bInitialized=true;}}ISignalPtrSigKalmanFilterSpec::buildconst{IPriceProviderPtrpriceProv=builder->getPxPBuilder->buildPxProvider;//IBookPtrbook=builder->getBookBuilder->buildBook;std::auto_ptrsb,m_description,*this,priceProv,builder->getVerboseLevel));//sb->registerWithSourceMonitors,m_sources);returnISignalPtr;}voidSigKalmanFilterSpec::checkValidconst{SignalSpec::checkValid;input->checkValid;//util::checkSourcesValid;}boolSigKalmanFilterSpec::compareconst{returnMemberList::compare;//weshouldbeabletousethistoo}voidSigKalmanFilterSpec::printconst{MemberList::print);}voidSigKalmanFilterSpec::getDataRequirementsconst{SignalSpecT2::getDataRequirements;input->getDataRequirements;}boolSigKalmanFilterSpec::registerScripting{LONGBEACH_REGISTER_SCRIPTING_ONCE;//eachSpecclassmustbeaddedtoregisterScriptinginSignals_Scripting.ccluabind::module[luabind::class_.def).def_readwrite.def_readwrite.def_readwrite.def_readwrite.def_readwrite.def_readwrite];luaL_dostring;returntrue;}/************************************************************************************************///SigKalmanFilter/************************************************************************************************/SigKalmanFilter::SigKalmanFilter:SignalSmonImpl,desc,cc->getClockMonitor,vbose),m_spec,m_spInputPxP{usingnamespaceboost::assign;initSignalStates);//H=[100]ifweconsiderpxastheonlyrealobservationor[111]?doubleH_[]={1,0,0,0,1,0,0,0,0,};math::WorkspacePtrws=math::Workspace::create;m_kf.init.R)//chooseanumberrandomly,matrix_t::diagonal.Q),matrix_t,m_kf.numKalmanStates,H_));if.P0.size==m_kf.numKalmanStates*m_kf.numKalmanStates)m_kf.setP0,m_kf.numKalmanStates,spec.P0.data));ifLONGBEACH_THROW_ERROR_SS;m_spInputPxP->addPriceListener);//if{//cout<<"Constructed"<0){timeval_tlast_time=m_observations[0].getTime;dt=timeval_diff.total_microseconds/1000000.0;}constdoubleA_[]={1,dt,0.5*dt*dt,0,1,dt,0,0,1,};matrix_tA=matrix_t,m_kf.numKalmanStates,A_);if==0){observation_tinit;init[0]=pp.getRefPrice;m_observations.push_front;m_observations.push_front;m_kf.update;//updatetwicetoprimethevelocityestimationm_stepCount=0;return;}if.step){m_stepCount++;return;}m_stepCount=1;//updateobservation_tobs;doublelast_v=m_kf.getLastEstimate;obs[0]=pp.getRefPrice;obs=/;obs=/dt;m_observations.push_front;state_tx_hat=m_kf.update;//std::cout<isPriceOK);if){//havetoresetvars,causeiftherewasnoupdatethenmaybevarsweren"tclearedyet//thiswillforceallthevarsprintedouttobe0.0//reset;}}}//namespacesignals}//namespacelongbeach
文章为作者独立观点,不代表观点