The CMSIS DSP 5 library

Dependents:   Nucleo-Heart-Rate ejercicioVrms2 PROYECTOFINAL ejercicioVrms ... more

Committer:
xorjoep
Date:
Thu Jun 21 11:56:27 2018 +0000
Revision:
3:4098b9d3d571
Parent:
1:24714b45cd1b
headers is a folder not a library

Who changed what in which revision?

UserRevisionLine numberNew contents of line
xorjoep 1:24714b45cd1b 1 /* ----------------------------------------------------------------------
xorjoep 1:24714b45cd1b 2 * Project: CMSIS DSP Library
xorjoep 1:24714b45cd1b 3 * Title: arm_max_q15.c
xorjoep 1:24714b45cd1b 4 * Description: Maximum value of a Q15 vector
xorjoep 1:24714b45cd1b 5 *
xorjoep 1:24714b45cd1b 6 * $Date: 27. January 2017
xorjoep 1:24714b45cd1b 7 * $Revision: V.1.5.1
xorjoep 1:24714b45cd1b 8 *
xorjoep 1:24714b45cd1b 9 * Target Processor: Cortex-M cores
xorjoep 1:24714b45cd1b 10 * -------------------------------------------------------------------- */
xorjoep 1:24714b45cd1b 11 /*
xorjoep 1:24714b45cd1b 12 * Copyright (C) 2010-2017 ARM Limited or its affiliates. All rights reserved.
xorjoep 1:24714b45cd1b 13 *
xorjoep 1:24714b45cd1b 14 * SPDX-License-Identifier: Apache-2.0
xorjoep 1:24714b45cd1b 15 *
xorjoep 1:24714b45cd1b 16 * Licensed under the Apache License, Version 2.0 (the License); you may
xorjoep 1:24714b45cd1b 17 * not use this file except in compliance with the License.
xorjoep 1:24714b45cd1b 18 * You may obtain a copy of the License at
xorjoep 1:24714b45cd1b 19 *
xorjoep 1:24714b45cd1b 20 * www.apache.org/licenses/LICENSE-2.0
xorjoep 1:24714b45cd1b 21 *
xorjoep 1:24714b45cd1b 22 * Unless required by applicable law or agreed to in writing, software
xorjoep 1:24714b45cd1b 23 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
xorjoep 1:24714b45cd1b 24 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
xorjoep 1:24714b45cd1b 25 * See the License for the specific language governing permissions and
xorjoep 1:24714b45cd1b 26 * limitations under the License.
xorjoep 1:24714b45cd1b 27 */
xorjoep 1:24714b45cd1b 28
xorjoep 1:24714b45cd1b 29 #include "arm_math.h"
xorjoep 1:24714b45cd1b 30
xorjoep 1:24714b45cd1b 31 /**
xorjoep 1:24714b45cd1b 32 * @ingroup groupStats
xorjoep 1:24714b45cd1b 33 */
xorjoep 1:24714b45cd1b 34
xorjoep 1:24714b45cd1b 35 /**
xorjoep 1:24714b45cd1b 36 * @addtogroup Max
xorjoep 1:24714b45cd1b 37 * @{
xorjoep 1:24714b45cd1b 38 */
xorjoep 1:24714b45cd1b 39
xorjoep 1:24714b45cd1b 40
xorjoep 1:24714b45cd1b 41 /**
xorjoep 1:24714b45cd1b 42 * @brief Maximum value of a Q15 vector.
xorjoep 1:24714b45cd1b 43 * @param[in] *pSrc points to the input vector
xorjoep 1:24714b45cd1b 44 * @param[in] blockSize length of the input vector
xorjoep 1:24714b45cd1b 45 * @param[out] *pResult maximum value returned here
xorjoep 1:24714b45cd1b 46 * @param[out] *pIndex index of maximum value returned here
xorjoep 1:24714b45cd1b 47 * @return none.
xorjoep 1:24714b45cd1b 48 */
xorjoep 1:24714b45cd1b 49
xorjoep 1:24714b45cd1b 50 void arm_max_q15(
xorjoep 1:24714b45cd1b 51 q15_t * pSrc,
xorjoep 1:24714b45cd1b 52 uint32_t blockSize,
xorjoep 1:24714b45cd1b 53 q15_t * pResult,
xorjoep 1:24714b45cd1b 54 uint32_t * pIndex)
xorjoep 1:24714b45cd1b 55 {
xorjoep 1:24714b45cd1b 56 #if defined (ARM_MATH_DSP)
xorjoep 1:24714b45cd1b 57 /* Run the below code for Cortex-M4 and Cortex-M3 */
xorjoep 1:24714b45cd1b 58
xorjoep 1:24714b45cd1b 59 q15_t maxVal1, maxVal2, out; /* Temporary variables to store the output value. */
xorjoep 1:24714b45cd1b 60 uint32_t blkCnt, outIndex, count; /* loop counter */
xorjoep 1:24714b45cd1b 61
xorjoep 1:24714b45cd1b 62 /* Initialise the count value. */
xorjoep 1:24714b45cd1b 63 count = 0U;
xorjoep 1:24714b45cd1b 64 /* Initialise the index value to zero. */
xorjoep 1:24714b45cd1b 65 outIndex = 0U;
xorjoep 1:24714b45cd1b 66 /* Load first input value that act as reference value for comparision */
xorjoep 1:24714b45cd1b 67 out = *pSrc++;
xorjoep 1:24714b45cd1b 68
xorjoep 1:24714b45cd1b 69 /* Loop unrolling */
xorjoep 1:24714b45cd1b 70 blkCnt = (blockSize - 1U) >> 2U;
xorjoep 1:24714b45cd1b 71
xorjoep 1:24714b45cd1b 72 while (blkCnt > 0U)
xorjoep 1:24714b45cd1b 73 {
xorjoep 1:24714b45cd1b 74 /* Initialize maxVal to the next consecutive values one by one */
xorjoep 1:24714b45cd1b 75 maxVal1 = *pSrc++;
xorjoep 1:24714b45cd1b 76 maxVal2 = *pSrc++;
xorjoep 1:24714b45cd1b 77
xorjoep 1:24714b45cd1b 78 /* compare for the maximum value */
xorjoep 1:24714b45cd1b 79 if (out < maxVal1)
xorjoep 1:24714b45cd1b 80 {
xorjoep 1:24714b45cd1b 81 /* Update the maximum value and its index */
xorjoep 1:24714b45cd1b 82 out = maxVal1;
xorjoep 1:24714b45cd1b 83 outIndex = count + 1U;
xorjoep 1:24714b45cd1b 84 }
xorjoep 1:24714b45cd1b 85
xorjoep 1:24714b45cd1b 86 /* compare for the maximum value */
xorjoep 1:24714b45cd1b 87 if (out < maxVal2)
xorjoep 1:24714b45cd1b 88 {
xorjoep 1:24714b45cd1b 89 /* Update the maximum value and its index */
xorjoep 1:24714b45cd1b 90 out = maxVal2;
xorjoep 1:24714b45cd1b 91 outIndex = count + 2U;
xorjoep 1:24714b45cd1b 92 }
xorjoep 1:24714b45cd1b 93
xorjoep 1:24714b45cd1b 94 /* Initialize maxVal to the next consecutive values one by one */
xorjoep 1:24714b45cd1b 95 maxVal1 = *pSrc++;
xorjoep 1:24714b45cd1b 96 maxVal2 = *pSrc++;
xorjoep 1:24714b45cd1b 97
xorjoep 1:24714b45cd1b 98 /* compare for the maximum value */
xorjoep 1:24714b45cd1b 99 if (out < maxVal1)
xorjoep 1:24714b45cd1b 100 {
xorjoep 1:24714b45cd1b 101 /* Update the maximum value and its index */
xorjoep 1:24714b45cd1b 102 out = maxVal1;
xorjoep 1:24714b45cd1b 103 outIndex = count + 3U;
xorjoep 1:24714b45cd1b 104 }
xorjoep 1:24714b45cd1b 105
xorjoep 1:24714b45cd1b 106 /* compare for the maximum value */
xorjoep 1:24714b45cd1b 107 if (out < maxVal2)
xorjoep 1:24714b45cd1b 108 {
xorjoep 1:24714b45cd1b 109 /* Update the maximum value and its index */
xorjoep 1:24714b45cd1b 110 out = maxVal2;
xorjoep 1:24714b45cd1b 111 outIndex = count + 4U;
xorjoep 1:24714b45cd1b 112 }
xorjoep 1:24714b45cd1b 113
xorjoep 1:24714b45cd1b 114 count += 4U;
xorjoep 1:24714b45cd1b 115
xorjoep 1:24714b45cd1b 116 /* Decrement the loop counter */
xorjoep 1:24714b45cd1b 117 blkCnt--;
xorjoep 1:24714b45cd1b 118 }
xorjoep 1:24714b45cd1b 119
xorjoep 1:24714b45cd1b 120 /* if (blockSize - 1U) is not multiple of 4 */
xorjoep 1:24714b45cd1b 121 blkCnt = (blockSize - 1U) % 4U;
xorjoep 1:24714b45cd1b 122
xorjoep 1:24714b45cd1b 123 #else
xorjoep 1:24714b45cd1b 124 /* Run the below code for Cortex-M0 */
xorjoep 1:24714b45cd1b 125
xorjoep 1:24714b45cd1b 126 q15_t maxVal1, out; /* Temporary variables to store the output value. */
xorjoep 1:24714b45cd1b 127 uint32_t blkCnt, outIndex; /* loop counter */
xorjoep 1:24714b45cd1b 128
xorjoep 1:24714b45cd1b 129 /* Initialise the index value to zero. */
xorjoep 1:24714b45cd1b 130 outIndex = 0U;
xorjoep 1:24714b45cd1b 131 /* Load first input value that act as reference value for comparision */
xorjoep 1:24714b45cd1b 132 out = *pSrc++;
xorjoep 1:24714b45cd1b 133
xorjoep 1:24714b45cd1b 134 blkCnt = (blockSize - 1U);
xorjoep 1:24714b45cd1b 135
xorjoep 1:24714b45cd1b 136 #endif /* #if defined (ARM_MATH_DSP) */
xorjoep 1:24714b45cd1b 137
xorjoep 1:24714b45cd1b 138 while (blkCnt > 0U)
xorjoep 1:24714b45cd1b 139 {
xorjoep 1:24714b45cd1b 140 /* Initialize maxVal to the next consecutive values one by one */
xorjoep 1:24714b45cd1b 141 maxVal1 = *pSrc++;
xorjoep 1:24714b45cd1b 142
xorjoep 1:24714b45cd1b 143 /* compare for the maximum value */
xorjoep 1:24714b45cd1b 144 if (out < maxVal1)
xorjoep 1:24714b45cd1b 145 {
xorjoep 1:24714b45cd1b 146 /* Update the maximum value and it's index */
xorjoep 1:24714b45cd1b 147 out = maxVal1;
xorjoep 1:24714b45cd1b 148 outIndex = blockSize - blkCnt;
xorjoep 1:24714b45cd1b 149 }
xorjoep 1:24714b45cd1b 150
xorjoep 1:24714b45cd1b 151 /* Decrement the loop counter */
xorjoep 1:24714b45cd1b 152 blkCnt--;
xorjoep 1:24714b45cd1b 153 }
xorjoep 1:24714b45cd1b 154
xorjoep 1:24714b45cd1b 155 /* Store the maximum value and it's index into destination pointers */
xorjoep 1:24714b45cd1b 156 *pResult = out;
xorjoep 1:24714b45cd1b 157 *pIndex = outIndex;
xorjoep 1:24714b45cd1b 158 }
xorjoep 1:24714b45cd1b 159
xorjoep 1:24714b45cd1b 160 /**
xorjoep 1:24714b45cd1b 161 * @} end of Max group
xorjoep 1:24714b45cd1b 162 */