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