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 | } |