a

Dependencies:   mbed mbed-rtos

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers converters.inl Source File

converters.inl

00001 
00002 
00003 /**
00004  * @brief Construct a new CConverterPolynom<NOrd>::CConverterPolynom object
00005  * 
00006  * @param f_coeff The list of the coeffience.
00007  */
00008 template<uint8_t NOrd>
00009 CConverterPolynom<NOrd>::CConverterPolynom(std::array<float,NOrd+1> f_coeff)
00010 :m_coeff(f_coeff)
00011 {
00012 }
00013 
00014 
00015 /**
00016  * @brief Convert the input value. 
00017  * 
00018  */
00019 template<uint8_t NOrd>
00020 float CConverterPolynom<NOrd>::operator()(float f_v){
00021     float l_res = m_coeff[NOrd];
00022     for (uint8_t i = 0;i<NOrd;++i){
00023         l_res += std::pow(f_v, NOrd-i)*m_coeff[i];
00024     }
00025     return l_res;
00026 }
00027 
00028 
00029 /**
00030  * @brief Construct a new CConverterSpline<NrBreak, NOrd>::CConverterSpline object
00031  * 
00032  * @tparam NrBreak 
00033  * @tparam NOrd 
00034  * @param f_breaks The list of the break points.
00035  * @param f_splines The list of the polynomial function.
00036  */
00037 template <uint8_t NrBreak, uint8_t NOrd>
00038 CConverterSpline<NrBreak, NOrd>::CConverterSpline(CConverterSpline<NrBreak, NOrd>::CBreakContainerType f_breaks,CConverterSpline<NrBreak, NOrd>::CSplineContainerType f_splines)
00039 :m_breaks(f_breaks)
00040 ,m_splines(f_splines)
00041 {
00042 }
00043 
00044 /**
00045  * @brief Convert the input value.
00046  * 
00047  */
00048 template <uint8_t NrBreak, uint8_t NOrd>
00049 float CConverterSpline<NrBreak, NOrd>::operator()(float f_value){
00050     typename CConverterSpline<NrBreak, NOrd>::CBreakContainerType::iterator it_breaks0=NULL,it_breaks1=NULL;
00051     typename CConverterSpline<NrBreak, NOrd>::CSplineContainerType::iterator it_spline = m_splines.begin();
00052     for (it_breaks1 = m_breaks.begin();it_breaks1 != m_breaks.end();){
00053         if((it_breaks0==NULL || (it_breaks0!=NULL && (*it_breaks0)<f_value)) && f_value<=(*it_breaks1)){
00054             break;
00055         }
00056         it_breaks0 = it_breaks1;
00057         ++it_breaks1;
00058         ++it_spline;
00059     }
00060     return this->splineValue(*it_spline, f_value);
00061 }
00062 
00063 /**
00064  * @brief Convert the given value, by using the given polynom.
00065  * 
00066  * @param f_coeff The coeffiences of the polynom
00067  * @param f_value The input value.
00068  */
00069 template <uint8_t NrBreak, uint8_t NOrd>
00070 float CConverterSpline<NrBreak, NOrd>::splineValue( CCoeffContainerType f_coeff,float f_value){
00071     float l_res = f_coeff[NOrd];
00072     for (uint8_t i = 0;i<NOrd;++i)
00073     {
00074         l_res+=std::pow(f_value,NOrd-i)*f_coeff[i];
00075     }
00076     return l_res;
00077 }