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.
cmsis_dsp/FilteringFunctions/arm_fir_interpolate_init_f32.c@5:ed60e5c5c2a8, 2021-06-21 (annotated)
- Committer:
 - michelericcio
 - Date:
 - Mon Jun 21 10:16:02 2021 +0000
 - Revision:
 - 5:ed60e5c5c2a8
 - Parent:
 - 3:7a284390b0ce
 
mbed-dsp working on ST Nucleo F767ZI and mbed-OS 6
Who changed what in which revision?
| User | Revision | Line number | New contents of line | 
|---|---|---|---|
| emilmont | 1:fdd22bb7aa52 | 1 | /*----------------------------------------------------------------------------- | 
| mbed_official | 3:7a284390b0ce | 2 | * Copyright (C) 2010-2013 ARM Limited. All rights reserved. | 
| emilmont | 1:fdd22bb7aa52 | 3 | * | 
| mbed_official | 3:7a284390b0ce | 4 | * $Date: 17. January 2013 | 
| mbed_official | 3:7a284390b0ce | 5 | * $Revision: V1.4.1 | 
| emilmont | 1:fdd22bb7aa52 | 6 | * | 
| emilmont | 2:da51fb522205 | 7 | * Project: CMSIS DSP Library | 
| emilmont | 1:fdd22bb7aa52 | 8 | * Title: arm_fir_interpolate_init_f32.c | 
| emilmont | 1:fdd22bb7aa52 | 9 | * | 
| emilmont | 1:fdd22bb7aa52 | 10 | * Description: Floating-point FIR interpolator initialization function | 
| emilmont | 1:fdd22bb7aa52 | 11 | * | 
| emilmont | 1:fdd22bb7aa52 | 12 | * Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 | 
| emilmont | 1:fdd22bb7aa52 | 13 | * | 
| mbed_official | 3:7a284390b0ce | 14 | * Redistribution and use in source and binary forms, with or without | 
| mbed_official | 3:7a284390b0ce | 15 | * modification, are permitted provided that the following conditions | 
| mbed_official | 3:7a284390b0ce | 16 | * are met: | 
| mbed_official | 3:7a284390b0ce | 17 | * - Redistributions of source code must retain the above copyright | 
| mbed_official | 3:7a284390b0ce | 18 | * notice, this list of conditions and the following disclaimer. | 
| mbed_official | 3:7a284390b0ce | 19 | * - Redistributions in binary form must reproduce the above copyright | 
| mbed_official | 3:7a284390b0ce | 20 | * notice, this list of conditions and the following disclaimer in | 
| mbed_official | 3:7a284390b0ce | 21 | * the documentation and/or other materials provided with the | 
| mbed_official | 3:7a284390b0ce | 22 | * distribution. | 
| mbed_official | 3:7a284390b0ce | 23 | * - Neither the name of ARM LIMITED nor the names of its contributors | 
| mbed_official | 3:7a284390b0ce | 24 | * may be used to endorse or promote products derived from this | 
| mbed_official | 3:7a284390b0ce | 25 | * software without specific prior written permission. | 
| mbed_official | 3:7a284390b0ce | 26 | * | 
| mbed_official | 3:7a284390b0ce | 27 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | 
| mbed_official | 3:7a284390b0ce | 28 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | 
| mbed_official | 3:7a284390b0ce | 29 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS | 
| mbed_official | 3:7a284390b0ce | 30 | * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE | 
| mbed_official | 3:7a284390b0ce | 31 | * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, | 
| mbed_official | 3:7a284390b0ce | 32 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, | 
| mbed_official | 3:7a284390b0ce | 33 | * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | 
| mbed_official | 3:7a284390b0ce | 34 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | 
| mbed_official | 3:7a284390b0ce | 35 | * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | 
| mbed_official | 3:7a284390b0ce | 36 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN | 
| mbed_official | 3:7a284390b0ce | 37 | * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | 
| mbed_official | 3:7a284390b0ce | 38 | * POSSIBILITY OF SUCH DAMAGE. | 
| emilmont | 1:fdd22bb7aa52 | 39 | * ---------------------------------------------------------------------------*/ | 
| emilmont | 1:fdd22bb7aa52 | 40 | |
| emilmont | 1:fdd22bb7aa52 | 41 | #include "arm_math.h" | 
| emilmont | 1:fdd22bb7aa52 | 42 | |
| emilmont | 1:fdd22bb7aa52 | 43 | /** | 
| emilmont | 1:fdd22bb7aa52 | 44 | * @ingroup groupFilters | 
| emilmont | 1:fdd22bb7aa52 | 45 | */ | 
| emilmont | 1:fdd22bb7aa52 | 46 | |
| emilmont | 1:fdd22bb7aa52 | 47 | /** | 
| emilmont | 1:fdd22bb7aa52 | 48 | * @addtogroup FIR_Interpolate | 
| emilmont | 1:fdd22bb7aa52 | 49 | * @{ | 
| emilmont | 1:fdd22bb7aa52 | 50 | */ | 
| emilmont | 1:fdd22bb7aa52 | 51 | |
| emilmont | 1:fdd22bb7aa52 | 52 | /** | 
| emilmont | 1:fdd22bb7aa52 | 53 | * @brief Initialization function for the floating-point FIR interpolator. | 
| emilmont | 1:fdd22bb7aa52 | 54 | * @param[in,out] *S points to an instance of the floating-point FIR interpolator structure. | 
| emilmont | 1:fdd22bb7aa52 | 55 | * @param[in] L upsample factor. | 
| emilmont | 1:fdd22bb7aa52 | 56 | * @param[in] numTaps number of filter coefficients in the filter. | 
| emilmont | 1:fdd22bb7aa52 | 57 | * @param[in] *pCoeffs points to the filter coefficient buffer. | 
| emilmont | 1:fdd22bb7aa52 | 58 | * @param[in] *pState points to the state buffer. | 
| emilmont | 1:fdd22bb7aa52 | 59 | * @param[in] blockSize number of input samples to process per call. | 
| emilmont | 1:fdd22bb7aa52 | 60 | * @return The function returns ARM_MATH_SUCCESS if initialization was successful or ARM_MATH_LENGTH_ERROR if | 
| emilmont | 1:fdd22bb7aa52 | 61 | * the filter length <code>numTaps</code> is not a multiple of the interpolation factor <code>L</code>. | 
| emilmont | 1:fdd22bb7aa52 | 62 | * | 
| emilmont | 1:fdd22bb7aa52 | 63 | * <b>Description:</b> | 
| emilmont | 1:fdd22bb7aa52 | 64 | * \par | 
| emilmont | 1:fdd22bb7aa52 | 65 | * <code>pCoeffs</code> points to the array of filter coefficients stored in time reversed order: | 
| emilmont | 1:fdd22bb7aa52 | 66 | * <pre> | 
| emilmont | 1:fdd22bb7aa52 | 67 | * {b[numTaps-1], b[numTaps-2], b[numTaps-2], ..., b[1], b[0]} | 
| emilmont | 1:fdd22bb7aa52 | 68 | * </pre> | 
| emilmont | 1:fdd22bb7aa52 | 69 | * The length of the filter <code>numTaps</code> must be a multiple of the interpolation factor <code>L</code>. | 
| emilmont | 1:fdd22bb7aa52 | 70 | * \par | 
| emilmont | 1:fdd22bb7aa52 | 71 | * <code>pState</code> points to the array of state variables. | 
| emilmont | 1:fdd22bb7aa52 | 72 | * <code>pState</code> is of length <code>(numTaps/L)+blockSize-1</code> words | 
| emilmont | 1:fdd22bb7aa52 | 73 | * where <code>blockSize</code> is the number of input samples processed by each call to <code>arm_fir_interpolate_f32()</code>. | 
| emilmont | 1:fdd22bb7aa52 | 74 | */ | 
| emilmont | 1:fdd22bb7aa52 | 75 | |
| emilmont | 1:fdd22bb7aa52 | 76 | arm_status arm_fir_interpolate_init_f32( | 
| emilmont | 1:fdd22bb7aa52 | 77 | arm_fir_interpolate_instance_f32 * S, | 
| emilmont | 1:fdd22bb7aa52 | 78 | uint8_t L, | 
| emilmont | 1:fdd22bb7aa52 | 79 | uint16_t numTaps, | 
| emilmont | 1:fdd22bb7aa52 | 80 | float32_t * pCoeffs, | 
| emilmont | 1:fdd22bb7aa52 | 81 | float32_t * pState, | 
| emilmont | 1:fdd22bb7aa52 | 82 | uint32_t blockSize) | 
| emilmont | 1:fdd22bb7aa52 | 83 | { | 
| emilmont | 1:fdd22bb7aa52 | 84 | arm_status status; | 
| emilmont | 1:fdd22bb7aa52 | 85 | |
| emilmont | 1:fdd22bb7aa52 | 86 | /* The filter length must be a multiple of the interpolation factor */ | 
| emilmont | 1:fdd22bb7aa52 | 87 | if((numTaps % L) != 0u) | 
| emilmont | 1:fdd22bb7aa52 | 88 | { | 
| emilmont | 1:fdd22bb7aa52 | 89 | /* Set status as ARM_MATH_LENGTH_ERROR */ | 
| emilmont | 1:fdd22bb7aa52 | 90 | status = ARM_MATH_LENGTH_ERROR; | 
| emilmont | 1:fdd22bb7aa52 | 91 | } | 
| emilmont | 1:fdd22bb7aa52 | 92 | else | 
| emilmont | 1:fdd22bb7aa52 | 93 | { | 
| emilmont | 1:fdd22bb7aa52 | 94 | |
| emilmont | 1:fdd22bb7aa52 | 95 | /* Assign coefficient pointer */ | 
| emilmont | 1:fdd22bb7aa52 | 96 | S->pCoeffs = pCoeffs; | 
| emilmont | 1:fdd22bb7aa52 | 97 | |
| emilmont | 1:fdd22bb7aa52 | 98 | /* Assign Interpolation factor */ | 
| emilmont | 1:fdd22bb7aa52 | 99 | S->L = L; | 
| emilmont | 1:fdd22bb7aa52 | 100 | |
| emilmont | 1:fdd22bb7aa52 | 101 | /* Assign polyPhaseLength */ | 
| emilmont | 1:fdd22bb7aa52 | 102 | S->phaseLength = numTaps / L; | 
| emilmont | 1:fdd22bb7aa52 | 103 | |
| emilmont | 1:fdd22bb7aa52 | 104 | /* Clear state buffer and size of state array is always phaseLength + blockSize - 1 */ | 
| emilmont | 1:fdd22bb7aa52 | 105 | memset(pState, 0, | 
| emilmont | 1:fdd22bb7aa52 | 106 | (blockSize + | 
| emilmont | 1:fdd22bb7aa52 | 107 | ((uint32_t) S->phaseLength - 1u)) * sizeof(float32_t)); | 
| emilmont | 1:fdd22bb7aa52 | 108 | |
| emilmont | 1:fdd22bb7aa52 | 109 | /* Assign state pointer */ | 
| emilmont | 1:fdd22bb7aa52 | 110 | S->pState = pState; | 
| emilmont | 1:fdd22bb7aa52 | 111 | |
| emilmont | 1:fdd22bb7aa52 | 112 | status = ARM_MATH_SUCCESS; | 
| emilmont | 1:fdd22bb7aa52 | 113 | } | 
| emilmont | 1:fdd22bb7aa52 | 114 | |
| emilmont | 1:fdd22bb7aa52 | 115 | return (status); | 
| emilmont | 1:fdd22bb7aa52 | 116 | |
| emilmont | 1:fdd22bb7aa52 | 117 | } | 
| emilmont | 1:fdd22bb7aa52 | 118 | |
| emilmont | 1:fdd22bb7aa52 | 119 | /** | 
| emilmont | 1:fdd22bb7aa52 | 120 | * @} end of FIR_Interpolate group | 
| emilmont | 1:fdd22bb7aa52 | 121 | */ |