Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "arm_math.h"
00025
00052 void arm_cmplx_mult_cmplx_q15(
00053 q15_t * pSrcA,
00054 q15_t * pSrcB,
00055 q15_t * pDst,
00056 uint32_t numSamples)
00057 {
00058 q15_t a1, b1, c1, d1;
00059 q15_t a2, b2, c2, d2;
00060 q15_t out1, out2, out3, out4;
00061
00062 uint32_t blkCnt;
00063
00064
00065 blkCnt = numSamples >> 2u;
00066
00067
00068
00069 while(blkCnt > 0u)
00070 {
00071
00072
00073 a1 = *pSrcA;
00074 c1 = *pSrcB;
00075 b1 = *(pSrcA + 1);
00076 d1 = *(pSrcB + 1);
00077
00078
00079 out1 =
00080 (q15_t) (q31_t) (((q31_t) a1 * c1) >> 17) - (((q31_t) b1 * d1) >> 17);
00081
00082 out2 =
00083 (q15_t) (q31_t) (((q31_t) a1 * d1) >> 17) + (((q31_t) b1 * c1) >> 17);
00084
00085 a2 = *(pSrcA + 2);
00086 c2 = *(pSrcB + 2);
00087 b2 = *(pSrcA + 3);
00088 d2 = *(pSrcB + 3);
00089
00090
00091 out3 =
00092 (q15_t) (q31_t) (((q31_t) a2 * c2) >> 17) - (((q31_t) b2 * d2) >> 17);
00093
00094 out4 =
00095 (q15_t) (q31_t) (((q31_t) a2 * d2) >> 17) + (((q31_t) b2 * c2) >> 17);
00096
00097 a1 = *(pSrcA + 4);
00098 c1 = *(pSrcB + 4);
00099 b1 = *(pSrcA + 5);
00100 d1 = *(pSrcB + 5);
00101
00102 *pDst = out1;
00103 *(pDst + 1) = out2;
00104 *(pDst + 2) = out3;
00105 *(pDst + 3) = out4;
00106
00107
00108 out1 =
00109 (q15_t) (q31_t) (((q31_t) a1 * c1) >> 17) - (((q31_t) b1 * d1) >> 17);
00110
00111 out2 =
00112 (q15_t) (q31_t) (((q31_t) a1 * d1) >> 17) + (((q31_t) b1 * c1) >> 17);
00113
00114 a2 = *(pSrcA + 6);
00115 c2 = *(pSrcB + 6);
00116 b2 = *(pSrcA + 7);
00117 d2 = *(pSrcB + 7);
00118
00119
00120 out3 =
00121 (q15_t) (q31_t) (((q31_t) a2 * c2) >> 17) - (((q31_t) b2 * d2) >> 17);
00122
00123 out4 =
00124 (q15_t) (q31_t) (((q31_t) a2 * d2) >> 17) + (((q31_t) b2 * c2) >> 17);
00125
00126
00127 *(pDst + 4) = out1;
00128 *(pDst + 5) = out2;
00129 pSrcA += 8u;
00130 *(pDst + 6) = out3;
00131 *(pDst + 7) = out4;
00132 pSrcB += 8u;
00133 pDst += 8u;
00134
00135
00136 blkCnt--;
00137 }
00138
00139
00140
00141 blkCnt = numSamples % 0x4u;
00142
00143 while(blkCnt > 0u)
00144 {
00145
00146
00147 a1 = *pSrcA++;
00148 b1 = *pSrcA++;
00149 c1 = *pSrcB++;
00150 d1 = *pSrcB++;
00151
00152
00153 *pDst++ =
00154 (q15_t) (q31_t) (((q31_t) a1 * c1) >> 17) - (((q31_t) b1 * d1) >> 17);
00155
00156 *pDst++ =
00157 (q15_t) (q31_t) (((q31_t) a1 * d1) >> 17) + (((q31_t) b1 * c1) >> 17);
00158
00159
00160 blkCnt--;
00161 }
00162 }
00163