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_var_f32(
4
  float32_t * pSrc,
5
  uint32_t blockSize,
6
  float32_t * pResult)
7
{
8
        uint32_t i;
9
        float32_t sum=0, sumsq=0;
10
 
11
        if (blockSize == 1)
12
        {
13
                *pResult = 0;
14
                return;
15
        }
16
 
17
        for(i=0;i<blockSize;i++)
18
        {
19
                        sum += pSrc[i];
20
                        sumsq += pSrc[i] * pSrc[i];
21
        }
22
        *pResult = (sumsq - sum * sum / (float32_t)blockSize) / ((float32_t)blockSize - 1);
23
}
24
 
25
void ref_var_q31(
26
  q31_t * pSrc,
27
  uint32_t blockSize,
28
  q31_t * pResult)
29
{
30
        uint32_t i;
31
        q63_t sum=0, sumsq=0;
32
        q31_t in;
33
 
34
        if (blockSize == 1)
35
        {
36
                *pResult = 0;
37
                return;
38
        }
39
 
40
        for(i=0;i<blockSize;i++)
41
        {
42
                        in = pSrc[i] >> 8;
43
                        sum += in;
44
                        sumsq += (q63_t)in * in;
45
        }
46
        *pResult = (sumsq - sum * sum / (q31_t)blockSize) / ((q31_t)blockSize - 1) >> 15;
47
}
48
 
49
void ref_var_q15(
50
  q15_t * pSrc,
51
  uint32_t blockSize,
52
  q15_t * pResult)
53
{
54
        uint32_t i;
55
        q31_t sum=0;
56
        q63_t sumsq=0;
57
 
58
        if (blockSize == 1)
59
        {
60
                *pResult = 0;
61
                return;
62
        }
63
 
64
        for(i=0;i<blockSize;i++)
65
        {
66
                        sum += pSrc[i];
67
                        sumsq += (q63_t)pSrc[i] * pSrc[i];
68
        }
69
        *pResult = (q31_t)((sumsq - (q63_t)sum * sum / (q63_t)blockSize) / ((q63_t)blockSize - 1)) >> 15;
70
}