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
00025
00026
00027
00028
00029
00030 #include "arm_math.h"
00031
00053 void arm_cmplx_mag_squared_q15(
00054 q15_t * pSrc,
00055 q15_t * pDst,
00056 uint32_t numSamples)
00057 {
00058 q15_t real, imag;
00059 q31_t acc0, acc1;
00060
00061 #ifndef ARM_MATH_CM0
00062
00063
00064 uint32_t blkCnt;
00065
00066
00067 blkCnt = numSamples >> 2u;
00068
00069
00070
00071 while(blkCnt > 0u)
00072 {
00073
00074 real = *pSrc++;
00075 imag = *pSrc++;
00076 acc0 = __SMUAD(real, real);
00077 acc1 = __SMUAD(imag, imag);
00078
00079 *pDst++ = (q15_t) (((q63_t) acc0 + acc1) >> 17);
00080
00081 real = *pSrc++;
00082 imag = *pSrc++;
00083 acc0 = __SMUAD(real, real);
00084 acc1 = __SMUAD(imag, imag);
00085
00086 *pDst++ = (q15_t) (((q63_t) acc0 + acc1) >> 17);
00087
00088 real = *pSrc++;
00089 imag = *pSrc++;
00090 acc0 = __SMUAD(real, real);
00091 acc1 = __SMUAD(imag, imag);
00092
00093 *pDst++ = (q15_t) (((q63_t) acc0 + acc1) >> 17);
00094
00095 real = *pSrc++;
00096 imag = *pSrc++;
00097 acc0 = __SMUAD(real, real);
00098 acc1 = __SMUAD(imag, imag);
00099
00100 *pDst++ = (q15_t) (((q63_t) acc0 + acc1) >> 17);
00101
00102
00103 blkCnt--;
00104 }
00105
00106
00107
00108 blkCnt = numSamples % 0x4u;
00109
00110 while(blkCnt > 0u)
00111 {
00112
00113 real = *pSrc++;
00114 imag = *pSrc++;
00115 acc0 = __SMUAD(real, real);
00116 acc1 = __SMUAD(imag, imag);
00117
00118 *pDst++ = (q15_t) (((q63_t) acc0 + acc1) >> 17);
00119
00120
00121 blkCnt--;
00122 }
00123
00124 #else
00125
00126
00127
00128 while(numSamples > 0u)
00129 {
00130
00131 real = *pSrc++;
00132 imag = *pSrc++;
00133 acc0 = (real * real);
00134 acc1 = (imag * imag);
00135
00136 *pDst++ = (q15_t) (((q63_t) acc0 + acc1) >> 17);
00137
00138
00139 numSamples--;
00140 }
00141
00142 #endif
00143
00144 }
00145