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