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