Alex Pirciu
/
BFMC
a
include/SystemModels/systemmodels.inl
- Committer:
- alexpirciu
- Date:
- 2019-03-28
- Revision:
- 1:ceee5a608e7c
File content as of revision 1:ceee5a608e7c:
/******************************************************************************/ /** \brief CDiscreteTransferFucntion class constructor * * Constructor method */ template <class T,uint32_t NNum,uint32_t NDen> systemmodels::lti::siso::CDiscreteTransferFucntion<T,NNum,NDen>::CDiscreteTransferFucntion() :m_num(CNumType::zeros()) ,m_den(CDenModType::zeros()) ,m_denCoef(1) ,m_memInput() ,m_memOutput() { } template <class T,uint32_t NNum,uint32_t NDen> systemmodels::lti::siso::CDiscreteTransferFucntion<T,NNum,NDen>::CDiscreteTransferFucntion(const CNumType& f_num,const CDenType& f_den) :m_num(CNumType::zeros()) ,m_den(CDenModType::zeros()) ,m_denCoef(1) ,m_memInput() ,m_memOutput() { this->setNum(f_num); this->setDen(f_den); } /** \brief Clear memory * * * */ template <class T,uint32_t NNum,uint32_t NDen> void systemmodels::lti::siso::CDiscreteTransferFucntion<T,NNum,NDen>::clearMemmory() { m_memInput=CInputMem::zeros(); m_memOutput=COutputMem::zeros(); } /** \brief Clear memory * * @param f_input reference to input * @return l_output */ template <class T,uint32_t NNum,uint32_t NDen> T systemmodels::lti::siso::CDiscreteTransferFucntion<T,NNum,NDen>::operator()(const T& f_input) { shiftMemory<NNum>(m_memInput); m_memInput[0][0]=f_input; T l_output=((m_memInput*m_num-m_memOutput*m_den)[0][0])/m_denCoef; shiftMemory<NDen-1>(m_memOutput); m_memOutput[0][0]=l_output; return l_output; } /** \brief Set num * * @param f_num reference to nominator * */ template <class T,uint32_t NNum,uint32_t NDen> void systemmodels::lti::siso::CDiscreteTransferFucntion<T,NNum,NDen>::setNum(const CNumType& f_num) { for(uint32_t i=0;i<NNum;++i) { m_num[i][0]=f_num[i][0]; } } /** \brief Set den * * @param f_den reference to denominator * */ template <class T,uint32_t NNum,uint32_t NDen> void systemmodels::lti::siso::CDiscreteTransferFucntion<T,NNum,NDen>::setDen(const CDenType& f_den) { for(uint32_t i=1;i<NDen;++i) { m_den[i-1][0]=f_den[i][0]; } m_denCoef = f_den[0][0]; } /** \brief Get output * * * @return Output memory */ template <class T,uint32_t NNum,uint32_t NDen> T systemmodels::lti::siso::CDiscreteTransferFucntion<T,NNum,NDen>::getOutput() { return m_memOutput[0][0]; } /** \brief Shift memory * * @param f_mem reference to memory matrix * @return none */ template <class T,uint32_t NNum,uint32_t NDen> template<uint32_t N> void systemmodels::lti::siso::CDiscreteTransferFucntion<T,NNum,NDen>::shiftMemory(linalg::CMatrix<T,1,N>& f_mem) { for(uint32_t i=N-1;i>0;--i) { f_mem[0][i]=f_mem[0][i-1]; } } /******************************************************************************/ /** \brief CDiscreteTimeSystemModel class constructor * * Constructor method * * @param f_dt Time step */ template <class T,uint32_t NA, uint32_t NB,uint32_t NC> systemmodels::nlti::mimo::CDiscreteTimeSystemModel<T,NA,NB,NC>::CDiscreteTimeSystemModel(const double f_dt) : m_states() , m_dt(f_dt) { } /** \brief CDiscreteTimeSystemModel class constructor * * Constructor method * * @param f_states States * @param f_dt Time step */ template <class T,uint32_t NA, uint32_t NB,uint32_t NC> systemmodels::nlti::mimo::CDiscreteTimeSystemModel<T,NA,NB,NC>::CDiscreteTimeSystemModel( const CStatesType& f_states ,const double f_dt) : m_states(f_states) , m_dt(f_dt) { } /** \brief Getter numitor * * @return const reference to numitor */ template <class T,uint32_t NNum,uint32_t NDen> const typename systemmodels::lti::siso::CDiscreteTransferFucntion<T,NNum,NDen>::CNumType& systemmodels::lti::siso::CDiscreteTransferFucntion<T,NNum,NDen>::getNum(){ return m_num; } /** \brief Getter denomitor * Return the denomitor without the first coefficeint. * * @return const reference to denomitor */ template <class T,uint32_t NNum,uint32_t NDen> const typename systemmodels::lti::siso::CDiscreteTransferFucntion<T,NNum,NDen>::CDenModType& systemmodels::lti::siso::CDiscreteTransferFucntion<T,NNum,NDen>::getDen(){ return m_den; } /** \brief Getter denomitor first coefficeint * * @return value of the denomitor first coefficeint */ template <class T,uint32_t NNum,uint32_t NDen> float systemmodels::lti::siso::CDiscreteTransferFucntion<T,NNum,NDen>::getDenCurrent(){ return m_denCoef; }