Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of dsp by
arm_mean_q15.c
00001 /* ---------------------------------------------------------------------- 00002 * Copyright (C) 2010 ARM Limited. All rights reserved. 00003 * 00004 * $Date: 29. November 2010 00005 * $Revision: V1.0.3 00006 * 00007 * Project: CMSIS DSP Library 00008 * Title: arm_mean_q15.c 00009 * 00010 * Description: Mean value of two Q15 arrays. 00011 * 00012 * Target Processor: Cortex-M4/Cortex-M3 00013 * 00014 * Version 1.0.3 2010/11/29 00015 * Re-organized the CMSIS folders and updated documentation. 00016 * 00017 * Version 1.0.2 2010/11/11 00018 * Documentation updated. 00019 * 00020 * Version 1.0.1 2010/10/05 00021 * Production release and review comments incorporated. 00022 * 00023 * Version 1.0.0 2010/09/20 00024 * Production release and review comments incorporated. 00025 * -------------------------------------------------------------------- */ 00026 00027 #include "arm_math.h" 00028 00029 /** 00030 * @ingroup groupStats 00031 */ 00032 00033 /** 00034 * @addtogroup mean 00035 * @{ 00036 */ 00037 00038 /** 00039 * @brief Mean value of a Q15 vector. 00040 * @param[in] *pSrc points to the input vector 00041 * @param[in] blockSize length of the input vector 00042 * @param[out] *pResult mean value returned here 00043 * @return none. 00044 * 00045 * @details 00046 * <b>Scaling and Overflow Behavior:</b> 00047 * \par 00048 * The function is implemented using a 32-bit internal accumulator. 00049 * The input is represented in 1.15 format and is accumulated in a 32-bit 00050 * accumulator in 17.15 format. 00051 * There is no risk of internal overflow with this approach, and the 00052 * full precision of intermediate result is preserved. 00053 * Finally, the accumulator is saturated and truncated to yield a result of 1.15 format. 00054 * 00055 */ 00056 00057 00058 void arm_mean_q15( 00059 q15_t * pSrc, 00060 uint32_t blockSize, 00061 q15_t * pResult) 00062 { 00063 q31_t sum = 0; /* Temporary result storage */ 00064 uint32_t blkCnt; /* loop counter */ 00065 00066 /*loop Unrolling */ 00067 blkCnt = blockSize >> 2u; 00068 00069 /* First part of the processing with loop unrolling. Compute 4 outputs at a time. 00070 ** a second loop below computes the remaining 1 to 3 samples. */ 00071 while(blkCnt > 0u) 00072 { 00073 /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) */ 00074 sum += *pSrc++; 00075 sum += *pSrc++; 00076 sum += *pSrc++; 00077 sum += *pSrc++; 00078 00079 /* Decrement the loop counter */ 00080 blkCnt--; 00081 } 00082 00083 /* If the blockSize is not a multiple of 4, compute any remaining output samples here. 00084 ** No loop unrolling is used. */ 00085 blkCnt = blockSize % 0x4u; 00086 00087 while(blkCnt > 0u) 00088 { 00089 /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) */ 00090 sum += *pSrc++; 00091 00092 /* Decrement the loop counter */ 00093 blkCnt--; 00094 } 00095 00096 /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) / blockSize */ 00097 /* Store the result to the destination */ 00098 *pResult = (q15_t) (sum / blockSize); 00099 } 00100 00101 /** 00102 * @} end of mean group 00103 */
Generated on Tue Jul 12 2022 19:55:43 by
1.7.2
