Subversion Repositories testOled

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 mjames 1
#include "ref.h"
2
 
3
void ref_cmplx_dot_prod_f32(
4
  float32_t * pSrcA,
5
  float32_t * pSrcB,
6
  uint32_t numSamples,
7
  float32_t * realResult,
8
  float32_t * imagResult)
9
{
10
        float32_t sumr, sumi;
11
        uint32_t i;
12
 
13
        sumr = 0;
14
        sumi = 0;
15
 
16
        for(i=0;i<numSamples*2;i+=2)
17
        {
18
                sumr += pSrcA[i] * pSrcB[i]   - pSrcA[i+1] * pSrcB[i+1];
19
                sumi += pSrcA[i] * pSrcB[i+1] + pSrcA[i+1] * pSrcB[i];
20
        }
21
 
22
        *realResult = sumr;
23
        *imagResult = sumi;
24
}
25
 
26
void ref_cmplx_dot_prod_q31(
27
  q31_t * pSrcA,
28
  q31_t * pSrcB,
29
  uint32_t numSamples,
30
  q63_t * realResult,
31
  q63_t * imagResult)
32
{
33
        q63_t sumr, sumi;
34
        uint32_t i;
35
 
36
        sumr = 0;
37
        sumi = 0;
38
 
39
        for(i=0;i<numSamples*2;i+=2)
40
        {
41
                //shifting down 14 here to provide guard bits
42
                sumr += (((q63_t)pSrcA[i] * pSrcB[i]  ) >> 14) - (((q63_t)pSrcA[i+1] * pSrcB[i+1]) >> 14);
43
                sumi += (((q63_t)pSrcA[i] * pSrcB[i+1]) >> 14) + (((q63_t)pSrcA[i+1] * pSrcB[i]  ) >> 14);
44
        }
45
 
46
        *realResult = sumr;
47
        *imagResult = sumi;
48
}
49
 
50
void ref_cmplx_dot_prod_q15(
51
  q15_t * pSrcA,
52
  q15_t * pSrcB,
53
  uint32_t numSamples,
54
  q31_t * realResult,
55
  q31_t * imagResult)
56
{
57
        q63_t sumr, sumi;
58
        uint32_t i;
59
 
60
        sumr = 0;
61
        sumi = 0;
62
 
63
        for(i=0;i<numSamples*2;i+=2)
64
        {
65
                sumr += (q31_t)pSrcA[i] * pSrcB[i]   - (q31_t)pSrcA[i+1] * pSrcB[i+1];
66
                sumi += (q31_t)pSrcA[i] * pSrcB[i+1] + (q31_t)pSrcA[i+1] * pSrcB[i];
67
        }
68
 
69
        //shifting down 6 at the end here because there are already 32 guard bits available, this method is more accurate
70
        *realResult = (q31_t)(sumr >> 6);
71
        *imagResult = (q31_t)(sumi >> 6);
72
}