Subversion Repositories AFRtranscoder

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 mjames 1
#include "ref.h"
2
 
3
void ref_std_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 = sqrtf((sumsq - sum * sum / (float32_t)blockSize) / ((float32_t)blockSize - 1));
23
}
24
 
25
void ref_std_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
        sumsq /= (q63_t)(blockSize - 1);
47
        sum = sum * sum / (q63_t)(blockSize * (blockSize - 1));
48
        *pResult = (q31_t)(sqrtf((float)( (sumsq - sum) >> 15) / 2147483648.0f ) * 2147483648.0f);
49
}
50
 
51
void ref_std_q15(
52
  q15_t * pSrc,
53
  uint32_t blockSize,
54
  q15_t * pResult)
55
{
56
        uint32_t i;
57
        q31_t sum=0;
58
        q63_t sumsq=0;
59
 
60
        if (blockSize == 1)
61
        {
62
                *pResult = 0;
63
                return;
64
        }
65
 
66
        for(i=0;i<blockSize;i++)
67
        {
68
                        sum += pSrc[i];
69
                        sumsq += (q63_t)pSrc[i] * pSrc[i];
70
        }
71
        sumsq /= (q63_t)(blockSize - 1);
72
        sum = (q31_t)((q63_t)sum * sum / (q63_t)(blockSize * (blockSize - 1)));
73
        *pResult = (q15_t)(sqrtf((float)ref_sat_q15( (sumsq - sum) >> 15) / 32768.0f ) * 32768.0f);
74
}