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
00049 void arm_max_q15(
00050 q15_t * pSrc,
00051 uint32_t blockSize,
00052 q15_t * pResult,
00053 uint32_t * pIndex)
00054 {
00055 q15_t maxVal1, maxVal2, maxVal3, maxVal4, out;
00056 uint32_t blkCnt, count, outIndex;
00057
00058
00059 count = 0u;
00060
00061
00062 outIndex = 0u;
00063
00064
00065 out = *pSrc++;
00066
00067
00068 blkCnt = (blockSize - 1u) >> 2u;
00069
00070 while(blkCnt > 0u)
00071 {
00072
00073 maxVal1 = pSrc[0];
00074 maxVal2 = pSrc[1];
00075
00076
00077 if(out < maxVal1)
00078 {
00079
00080 out = maxVal1;
00081 outIndex = count + 1u;
00082 }
00083
00084 maxVal3 = pSrc[2];
00085
00086
00087 if(out < maxVal2)
00088 {
00089
00090 out = maxVal2;
00091 outIndex = count + 2u;
00092 }
00093
00094 maxVal4 = pSrc[3];
00095
00096
00097 if(out < maxVal3)
00098 {
00099
00100 out = maxVal3;
00101 outIndex = count + 3u;
00102 }
00103
00104
00105 if(out < maxVal4)
00106 {
00107
00108 out = maxVal4;
00109 outIndex = count + 4u;
00110 }
00111
00112 count += 4u;
00113 pSrc += 4u;
00114
00115 blkCnt--;
00116 };
00117
00118
00119 blkCnt = (blockSize - 1u) % 4u;
00120
00121 while(blkCnt > 0u)
00122 {
00123
00124 maxVal1 = *pSrc++;
00125
00126
00127 if(out < maxVal1)
00128 {
00129
00130 out = maxVal1;
00131 outIndex = blockSize - blkCnt;
00132 }
00133
00134 blkCnt--;
00135 };
00136
00137
00138 *pResult = out;
00139 *pIndex = outIndex;
00140 }
00141