Subversion Repositories ScreenTimer

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 mjames 1
#include "ref.h"
2
 
3
arm_status ref_mat_cmplx_mult_f32(
4
  const arm_matrix_instance_f32 * pSrcA,
5
  const arm_matrix_instance_f32 * pSrcB,
6
  arm_matrix_instance_f32 * pDst)
7
{
8
        uint32_t r,c,i,outR,outC,innerSize;
9
        float32_t sumR,sumI;
10
        float32_t a0,b0,c0,d0;
11
 
12
        outR = pSrcA->numRows;
13
        outC = pSrcB->numCols;
14
        innerSize = pSrcA->numCols;
15
 
16
        for(r=0;r<outR;r++)
17
        {
18
                for(c=0;c<outC;c++)
19
                {
20
                        sumR = 0;
21
                        sumI = 0;
22
 
23
                        for(i=0;i<innerSize;i++)
24
                        {
25
                                a0 = pSrcA->pData[2*(r*innerSize + i) + 0];
26
                                b0 = pSrcA->pData[2*(r*innerSize + i) + 1];
27
                                c0 = pSrcB->pData[2*(i*outC + c) + 0];
28
                                d0 = pSrcB->pData[2*(i*outC + c) + 1]; 
29
 
30
                                sumR += a0 * c0 - b0 * d0;
31
                                sumI += b0 * c0 + a0 * d0;
32
                        }
33
 
34
                        pDst->pData[2*(r*outC + c) + 0] = sumR;
35
                        pDst->pData[2*(r*outC + c) + 1] = sumI;
36
                }
37
        }
38
 
39
        return ARM_MATH_SUCCESS;
40
}
41
 
42
arm_status ref_mat_cmplx_mult_q31(
43
  const arm_matrix_instance_q31 * pSrcA,
44
  const arm_matrix_instance_q31 * pSrcB,
45
  arm_matrix_instance_q31 * pDst)
46
{
47
        uint32_t r,c,i,outR,outC,innerSize;
48
        q63_t sumR,sumI;
49
        q31_t a0,b0,c0,d0;
50
 
51
        outR = pSrcA->numRows;
52
        outC = pSrcB->numCols;
53
        innerSize = pSrcA->numCols;
54
 
55
        for(r=0;r<outR;r++)
56
        {
57
                for(c=0;c<outC;c++)
58
                {
59
                        sumR = 0;
60
                        sumI = 0;
61
 
62
                        for(i=0;i<innerSize;i++)
63
                        {
64
                                a0 = pSrcA->pData[2*(r*innerSize + i) + 0];
65
                                b0 = pSrcA->pData[2*(r*innerSize + i) + 1];
66
                                c0 = pSrcB->pData[2*(i*outC + c) + 0];
67
                                d0 = pSrcB->pData[2*(i*outC + c) + 1]; 
68
 
69
                                sumR += (q63_t)a0 * c0 - (q63_t)b0 * d0;
70
                                sumI += (q63_t)b0 * c0 + (q63_t)a0 * d0;
71
                        }
72
 
73
                        pDst->pData[2*(r*outC + c) + 0] = ref_sat_q31(sumR >> 31);
74
                        pDst->pData[2*(r*outC + c) + 1] = ref_sat_q31(sumI >> 31);
75
                }
76
        }
77
 
78
        return ARM_MATH_SUCCESS;
79
}
80
 
81
arm_status ref_mat_cmplx_mult_q15(
82
  const arm_matrix_instance_q15 * pSrcA,
83
  const arm_matrix_instance_q15 * pSrcB,
84
  arm_matrix_instance_q15 * pDst)
85
{
86
        uint32_t r,c,i,outR,outC,innerSize;
87
        q63_t sumR,sumI;
88
        q15_t a0,b0,c0,d0;
89
 
90
        outR = pSrcA->numRows;
91
        outC = pSrcB->numCols;
92
        innerSize = pSrcA->numCols;
93
 
94
        for(r=0;r<outR;r++)
95
        {
96
                for(c=0;c<outC;c++)
97
                {
98
                        sumR = 0;
99
                        sumI = 0;
100
 
101
                        for(i=0;i<innerSize;i++)
102
                        {
103
                                a0 = pSrcA->pData[2*(r*innerSize + i) + 0];
104
                                b0 = pSrcA->pData[2*(r*innerSize + i) + 1];
105
                                c0 = pSrcB->pData[2*(i*outC + c) + 0];
106
                                d0 = pSrcB->pData[2*(i*outC + c) + 1]; 
107
 
108
                                sumR += (q31_t)a0 * c0 - (q31_t)b0 * d0;
109
                                sumI += (q31_t)b0 * c0 + (q31_t)a0 * d0;
110
                        }
111
 
112
                        pDst->pData[2*(r*outC + c) + 0] = ref_sat_q15(sumR >> 15);
113
                        pDst->pData[2*(r*outC + c) + 1] = ref_sat_q15(sumI >> 15);
114
                }
115
        }
116
 
117
        return ARM_MATH_SUCCESS;
118
}