Subversion Repositories dashGPS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 mjames 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
}