Subversion Repositories FuelGauge

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. #include "ref.h"
  2.  
  3. void ref_scale_f32(
  4.   float32_t * pSrc,
  5.   float32_t scale,
  6.   float32_t * pDst,
  7.   uint32_t blockSize)
  8. {
  9.         uint32_t i;
  10.        
  11.         for(i=0;i<blockSize;i++)
  12.         {
  13.                 pDst[i] = pSrc[i] * scale;
  14.         }
  15. }
  16.  
  17. void ref_scale_q31(
  18.   q31_t * pSrc,
  19.   q31_t scaleFract,
  20.   int8_t shift,
  21.   q31_t * pDst,
  22.   uint32_t blockSize)
  23. {
  24.         uint32_t i;
  25.   int8_t kShift = shift + 1;                     /* Shift to apply after scaling */
  26.   int8_t sign = (kShift & 0x80);
  27.         q63_t temp;
  28.        
  29.         for(i=0;i<blockSize;i++)
  30.         {
  31.                 temp = ((q63_t) pSrc[i] * scaleFract) >> 32;
  32.                 if (sign)
  33.                         pDst[i] = temp >> -kShift;
  34.                 else
  35.                         pDst[i] = ref_sat_q31( (q63_t)temp << kShift );
  36.         }
  37. }
  38.  
  39. void ref_scale_q15(
  40.   q15_t * pSrc,
  41.   q15_t scaleFract,
  42.   int8_t shift,
  43.   q15_t * pDst,
  44.   uint32_t blockSize)
  45. {
  46.         uint32_t i;
  47.   int8_t kShift = 15 - shift;                      /* Shift to apply after scaling */
  48.        
  49.         for(i=0;i<blockSize;i++)
  50.         {
  51.                 pDst[i] = ref_sat_q15(((q31_t) pSrc[i] * scaleFract) >> kShift);
  52.         }
  53. }
  54.  
  55. void ref_scale_q7(
  56.   q7_t * pSrc,
  57.   q7_t scaleFract,
  58.   int8_t shift,
  59.   q7_t * pDst,
  60.   uint32_t blockSize)
  61. {
  62.         uint32_t i;
  63.   int8_t kShift = 7 - shift;                      /* Shift to apply after scaling */
  64.        
  65.         for(i=0;i<blockSize;i++)
  66.         {
  67.                 pDst[i] = ref_sat_q7(((q15_t) pSrc[i] * scaleFract) >> kShift);
  68.         }
  69. }
  70.