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
00048 void arm_max_q7(
00049 q7_t * pSrc,
00050 uint32_t blockSize,
00051 q7_t * pResult,
00052 uint32_t * pIndex)
00053 {
00054 q7_t res, maxVal, x0, x1, maxVal2, maxVal1;
00055 uint32_t blkCnt, index1, index2, index3, indx, indxMod;
00056
00057
00058 indx = 0u;
00059
00060
00061 res = *pSrc++;
00062
00063
00064 blkCnt = (blockSize - 1u) >> 2u;
00065
00066 while(blkCnt > 0u)
00067 {
00068 indxMod = blockSize - (blkCnt * 4u);
00069
00070
00071 x0 = *pSrc++;
00072 x1 = *pSrc++;
00073
00074 if(x0 < x1)
00075 {
00076
00077 maxVal1 = x1;
00078 index1 = indxMod + 1u;
00079 }
00080 else
00081 {
00082
00083 maxVal1 = x0;
00084 index1 = indxMod;
00085 }
00086
00087
00088 x0 = *pSrc++;
00089 x1 = *pSrc++;
00090
00091 if(x0 < x1)
00092 {
00093
00094 maxVal2 = x1;
00095 index2 = indxMod + 3u;
00096 }
00097 else
00098 {
00099
00100 maxVal2 = x0;
00101 index2 = indxMod + 2u;
00102 }
00103
00104 if(maxVal1 < maxVal2)
00105 {
00106
00107 maxVal = maxVal2;
00108 index3 = index2;
00109 }
00110 else
00111 {
00112
00113 maxVal = maxVal1;
00114 index3 = index1;
00115 }
00116
00117 if(res < maxVal)
00118 {
00119
00120 res = maxVal;
00121 indx = index3;
00122 }
00123
00124
00125 blkCnt--;
00126
00127 }
00128
00129 blkCnt = (blockSize - 1u) % 0x04u;
00130
00131 while(blkCnt > 0u)
00132 {
00133
00134 maxVal = *pSrc++;
00135
00136
00137 if(res < maxVal)
00138 {
00139
00140 res = maxVal;
00141 indx = blockSize - blkCnt;
00142 }
00143
00144
00145 blkCnt--;
00146 }
00147
00148
00149 *pResult = res;
00150 *pIndex = indx;
00151 }
00152