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