Alex Pirciu
/
BFMC
a
Diff: include/Controllers/converters.inl
- Revision:
- 1:ceee5a608e7c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/include/Controllers/converters.inl Thu Mar 28 07:44:42 2019 +0000 @@ -0,0 +1,77 @@ + + +/** + * @brief Construct a new CConverterPolynom<NOrd>::CConverterPolynom object + * + * @param f_coeff The list of the coeffience. + */ +template<uint8_t NOrd> +CConverterPolynom<NOrd>::CConverterPolynom(std::array<float,NOrd+1> f_coeff) +:m_coeff(f_coeff) +{ +} + + +/** + * @brief Convert the input value. + * + */ +template<uint8_t NOrd> +float CConverterPolynom<NOrd>::operator()(float f_v){ + float l_res = m_coeff[NOrd]; + for (uint8_t i = 0;i<NOrd;++i){ + l_res += std::pow(f_v, NOrd-i)*m_coeff[i]; + } + return l_res; +} + + +/** + * @brief Construct a new CConverterSpline<NrBreak, NOrd>::CConverterSpline object + * + * @tparam NrBreak + * @tparam NOrd + * @param f_breaks The list of the break points. + * @param f_splines The list of the polynomial function. + */ +template <uint8_t NrBreak, uint8_t NOrd> +CConverterSpline<NrBreak, NOrd>::CConverterSpline(CConverterSpline<NrBreak, NOrd>::CBreakContainerType f_breaks,CConverterSpline<NrBreak, NOrd>::CSplineContainerType f_splines) +:m_breaks(f_breaks) +,m_splines(f_splines) +{ +} + +/** + * @brief Convert the input value. + * + */ +template <uint8_t NrBreak, uint8_t NOrd> +float CConverterSpline<NrBreak, NOrd>::operator()(float f_value){ + typename CConverterSpline<NrBreak, NOrd>::CBreakContainerType::iterator it_breaks0=NULL,it_breaks1=NULL; + typename CConverterSpline<NrBreak, NOrd>::CSplineContainerType::iterator it_spline = m_splines.begin(); + for (it_breaks1 = m_breaks.begin();it_breaks1 != m_breaks.end();){ + if((it_breaks0==NULL || (it_breaks0!=NULL && (*it_breaks0)<f_value)) && f_value<=(*it_breaks1)){ + break; + } + it_breaks0 = it_breaks1; + ++it_breaks1; + ++it_spline; + } + return this->splineValue(*it_spline, f_value); +} + +/** + * @brief Convert the given value, by using the given polynom. + * + * @param f_coeff The coeffiences of the polynom + * @param f_value The input value. + */ +template <uint8_t NrBreak, uint8_t NOrd> +float CConverterSpline<NrBreak, NOrd>::splineValue( CCoeffContainerType f_coeff,float f_value){ + float l_res = f_coeff[NOrd]; + for (uint8_t i = 0;i<NOrd;++i) + { + l_res+=std::pow(f_value,NOrd-i)*f_coeff[i]; + } + return l_res; +}