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 #include "arm_math.h"
00028
00050 void arm_cmplx_mag_squared_q15(
00051 q15_t * pSrc,
00052 q15_t * pDst,
00053 uint32_t numSamples)
00054 {
00055 q15_t real, imag;
00056 q31_t acc0, acc1;
00057 uint32_t blkCnt;
00058
00059
00060 blkCnt = numSamples >> 2u;
00061
00062
00063
00064 while(blkCnt > 0u)
00065 {
00066
00067 real = *pSrc++;
00068 imag = *pSrc++;
00069 acc0 = __SMUAD(real, real);
00070 acc1 = __SMUAD(imag, imag);
00071
00072 *pDst++ = (q15_t) (((q63_t) acc0 + acc1) >> 17);
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
00096 blkCnt--;
00097 }
00098
00099
00100
00101 blkCnt = numSamples % 0x4u;
00102
00103 while(blkCnt > 0u)
00104 {
00105
00106 real = *pSrc++;
00107 imag = *pSrc++;
00108 acc0 = __SMUAD(real, real);
00109 acc1 = __SMUAD(imag, imag);
00110
00111 *pDst++ = (q15_t) (((q63_t) acc0 + acc1) >> 17);
00112
00113
00114 blkCnt--;
00115 }
00116 }
00117