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 mbed-dev by
cmsis/TARGET_CORTEX_M/arm_math.h@182:976b131d2800, 2018-02-25 (annotated)
- Committer:
- kenjiArai
- Date:
- Sun Feb 25 02:00:51 2018 +0000
- Revision:
- 182:976b131d2800
- Parent:
- 180:96ed750bd169
Only for TYBLE16
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| Anna Bridge |
180:96ed750bd169 | 1 | /* ---------------------------------------------------------------------- |
| Anna Bridge |
180:96ed750bd169 | 2 | * Project: CMSIS DSP Library |
| Anna Bridge |
180:96ed750bd169 | 3 | * Title: arm_math.h |
| Anna Bridge |
180:96ed750bd169 | 4 | * Description: Public header file for CMSIS DSP Library |
| Anna Bridge |
180:96ed750bd169 | 5 | * |
| Anna Bridge |
180:96ed750bd169 | 6 | * $Date: 27. January 2017 |
| Anna Bridge |
180:96ed750bd169 | 7 | * $Revision: V.1.5.1 |
| Anna Bridge |
180:96ed750bd169 | 8 | * |
| Anna Bridge |
180:96ed750bd169 | 9 | * Target Processor: Cortex-M cores |
| Anna Bridge |
180:96ed750bd169 | 10 | * -------------------------------------------------------------------- */ |
| Anna Bridge |
180:96ed750bd169 | 11 | /* |
| Anna Bridge |
180:96ed750bd169 | 12 | * Copyright (C) 2010-2017 ARM Limited or its affiliates. All rights reserved. |
| Anna Bridge |
180:96ed750bd169 | 13 | * |
| Anna Bridge |
180:96ed750bd169 | 14 | * SPDX-License-Identifier: Apache-2.0 |
| Anna Bridge |
180:96ed750bd169 | 15 | * |
| Anna Bridge |
180:96ed750bd169 | 16 | * Licensed under the Apache License, Version 2.0 (the License); you may |
| Anna Bridge |
180:96ed750bd169 | 17 | * not use this file except in compliance with the License. |
| Anna Bridge |
180:96ed750bd169 | 18 | * You may obtain a copy of the License at |
| Anna Bridge |
180:96ed750bd169 | 19 | * |
| Anna Bridge |
180:96ed750bd169 | 20 | * www.apache.org/licenses/LICENSE-2.0 |
| Anna Bridge |
180:96ed750bd169 | 21 | * |
| Anna Bridge |
180:96ed750bd169 | 22 | * Unless required by applicable law or agreed to in writing, software |
| Anna Bridge |
180:96ed750bd169 | 23 | * distributed under the License is distributed on an AS IS BASIS, WITHOUT |
| Anna Bridge |
180:96ed750bd169 | 24 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| Anna Bridge |
180:96ed750bd169 | 25 | * See the License for the specific language governing permissions and |
| Anna Bridge |
180:96ed750bd169 | 26 | * limitations under the License. |
| Anna Bridge |
180:96ed750bd169 | 27 | */ |
| Anna Bridge |
180:96ed750bd169 | 28 | |
| Anna Bridge |
180:96ed750bd169 | 29 | /** |
| Anna Bridge |
180:96ed750bd169 | 30 | \mainpage CMSIS DSP Software Library |
| Anna Bridge |
180:96ed750bd169 | 31 | * |
| Anna Bridge |
180:96ed750bd169 | 32 | * Introduction |
| Anna Bridge |
180:96ed750bd169 | 33 | * ------------ |
| Anna Bridge |
180:96ed750bd169 | 34 | * |
| Anna Bridge |
180:96ed750bd169 | 35 | * This user manual describes the CMSIS DSP software library, |
| Anna Bridge |
180:96ed750bd169 | 36 | * a suite of common signal processing functions for use on Cortex-M processor based devices. |
| Anna Bridge |
180:96ed750bd169 | 37 | * |
| Anna Bridge |
180:96ed750bd169 | 38 | * The library is divided into a number of functions each covering a specific category: |
| Anna Bridge |
180:96ed750bd169 | 39 | * - Basic math functions |
| Anna Bridge |
180:96ed750bd169 | 40 | * - Fast math functions |
| Anna Bridge |
180:96ed750bd169 | 41 | * - Complex math functions |
| Anna Bridge |
180:96ed750bd169 | 42 | * - Filters |
| Anna Bridge |
180:96ed750bd169 | 43 | * - Matrix functions |
| Anna Bridge |
180:96ed750bd169 | 44 | * - Transforms |
| Anna Bridge |
180:96ed750bd169 | 45 | * - Motor control functions |
| Anna Bridge |
180:96ed750bd169 | 46 | * - Statistical functions |
| Anna Bridge |
180:96ed750bd169 | 47 | * - Support functions |
| Anna Bridge |
180:96ed750bd169 | 48 | * - Interpolation functions |
| Anna Bridge |
180:96ed750bd169 | 49 | * |
| Anna Bridge |
180:96ed750bd169 | 50 | * The library has separate functions for operating on 8-bit integers, 16-bit integers, |
| Anna Bridge |
180:96ed750bd169 | 51 | * 32-bit integer and 32-bit floating-point values. |
| Anna Bridge |
180:96ed750bd169 | 52 | * |
| Anna Bridge |
180:96ed750bd169 | 53 | * Using the Library |
| Anna Bridge |
180:96ed750bd169 | 54 | * ------------ |
| Anna Bridge |
180:96ed750bd169 | 55 | * |
| Anna Bridge |
180:96ed750bd169 | 56 | * The library installer contains prebuilt versions of the libraries in the <code>Lib</code> folder. |
| Anna Bridge |
180:96ed750bd169 | 57 | * - arm_cortexM7lfdp_math.lib (Cortex-M7, Little endian, Double Precision Floating Point Unit) |
| Anna Bridge |
180:96ed750bd169 | 58 | * - arm_cortexM7bfdp_math.lib (Cortex-M7, Big endian, Double Precision Floating Point Unit) |
| Anna Bridge |
180:96ed750bd169 | 59 | * - arm_cortexM7lfsp_math.lib (Cortex-M7, Little endian, Single Precision Floating Point Unit) |
| Anna Bridge |
180:96ed750bd169 | 60 | * - arm_cortexM7bfsp_math.lib (Cortex-M7, Big endian and Single Precision Floating Point Unit on) |
| Anna Bridge |
180:96ed750bd169 | 61 | * - arm_cortexM7l_math.lib (Cortex-M7, Little endian) |
| Anna Bridge |
180:96ed750bd169 | 62 | * - arm_cortexM7b_math.lib (Cortex-M7, Big endian) |
| Anna Bridge |
180:96ed750bd169 | 63 | * - arm_cortexM4lf_math.lib (Cortex-M4, Little endian, Floating Point Unit) |
| Anna Bridge |
180:96ed750bd169 | 64 | * - arm_cortexM4bf_math.lib (Cortex-M4, Big endian, Floating Point Unit) |
| Anna Bridge |
180:96ed750bd169 | 65 | * - arm_cortexM4l_math.lib (Cortex-M4, Little endian) |
| Anna Bridge |
180:96ed750bd169 | 66 | * - arm_cortexM4b_math.lib (Cortex-M4, Big endian) |
| Anna Bridge |
180:96ed750bd169 | 67 | * - arm_cortexM3l_math.lib (Cortex-M3, Little endian) |
| Anna Bridge |
180:96ed750bd169 | 68 | * - arm_cortexM3b_math.lib (Cortex-M3, Big endian) |
| Anna Bridge |
180:96ed750bd169 | 69 | * - arm_cortexM0l_math.lib (Cortex-M0 / Cortex-M0+, Little endian) |
| Anna Bridge |
180:96ed750bd169 | 70 | * - arm_cortexM0b_math.lib (Cortex-M0 / Cortex-M0+, Big endian) |
| Anna Bridge |
180:96ed750bd169 | 71 | * - arm_ARMv8MBLl_math.lib (ARMv8M Baseline, Little endian) |
| Anna Bridge |
180:96ed750bd169 | 72 | * - arm_ARMv8MMLl_math.lib (ARMv8M Mainline, Little endian) |
| Anna Bridge |
180:96ed750bd169 | 73 | * - arm_ARMv8MMLlfsp_math.lib (ARMv8M Mainline, Little endian, Single Precision Floating Point Unit) |
| Anna Bridge |
180:96ed750bd169 | 74 | * - arm_ARMv8MMLld_math.lib (ARMv8M Mainline, Little endian, DSP instructions) |
| Anna Bridge |
180:96ed750bd169 | 75 | * - arm_ARMv8MMLldfsp_math.lib (ARMv8M Mainline, Little endian, DSP instructions, Single Precision Floating Point Unit) |
| Anna Bridge |
180:96ed750bd169 | 76 | * |
| Anna Bridge |
180:96ed750bd169 | 77 | * The library functions are declared in the public file <code>arm_math.h</code> which is placed in the <code>Include</code> folder. |
| Anna Bridge |
180:96ed750bd169 | 78 | * Simply include this file and link the appropriate library in the application and begin calling the library functions. The Library supports single |
| Anna Bridge |
180:96ed750bd169 | 79 | * public header file <code> arm_math.h</code> for Cortex-M cores with little endian and big endian. Same header file will be used for floating point unit(FPU) variants. |
| Anna Bridge |
180:96ed750bd169 | 80 | * Define the appropriate pre processor MACRO ARM_MATH_CM7 or ARM_MATH_CM4 or ARM_MATH_CM3 or |
| Anna Bridge |
180:96ed750bd169 | 81 | * ARM_MATH_CM0 or ARM_MATH_CM0PLUS depending on the target processor in the application. |
| Anna Bridge |
180:96ed750bd169 | 82 | * For ARMv8M cores define pre processor MACRO ARM_MATH_ARMV8MBL or ARM_MATH_ARMV8MML. |
| Anna Bridge |
180:96ed750bd169 | 83 | * Set Pre processor MACRO __DSP_PRESENT if ARMv8M Mainline core supports DSP instructions. |
| Anna Bridge |
180:96ed750bd169 | 84 | * |
| Anna Bridge |
180:96ed750bd169 | 85 | * |
| Anna Bridge |
180:96ed750bd169 | 86 | * Examples |
| Anna Bridge |
180:96ed750bd169 | 87 | * -------- |
| Anna Bridge |
180:96ed750bd169 | 88 | * |
| Anna Bridge |
180:96ed750bd169 | 89 | * The library ships with a number of examples which demonstrate how to use the library functions. |
| Anna Bridge |
180:96ed750bd169 | 90 | * |
| Anna Bridge |
180:96ed750bd169 | 91 | * Toolchain Support |
| Anna Bridge |
180:96ed750bd169 | 92 | * ------------ |
| Anna Bridge |
180:96ed750bd169 | 93 | * |
| Anna Bridge |
180:96ed750bd169 | 94 | * The library has been developed and tested with MDK-ARM version 5.14.0.0 |
| Anna Bridge |
180:96ed750bd169 | 95 | * The library is being tested in GCC and IAR toolchains and updates on this activity will be made available shortly. |
| Anna Bridge |
180:96ed750bd169 | 96 | * |
| Anna Bridge |
180:96ed750bd169 | 97 | * Building the Library |
| Anna Bridge |
180:96ed750bd169 | 98 | * ------------ |
| Anna Bridge |
180:96ed750bd169 | 99 | * |
| Anna Bridge |
180:96ed750bd169 | 100 | * The library installer contains a project file to re build libraries on MDK-ARM Tool chain in the <code>CMSIS\\DSP_Lib\\Source\\ARM</code> folder. |
| Anna Bridge |
180:96ed750bd169 | 101 | * - arm_cortexM_math.uvprojx |
| Anna Bridge |
180:96ed750bd169 | 102 | * |
| Anna Bridge |
180:96ed750bd169 | 103 | * |
| Anna Bridge |
180:96ed750bd169 | 104 | * The libraries can be built by opening the arm_cortexM_math.uvprojx project in MDK-ARM, selecting a specific target, and defining the optional pre processor MACROs detailed above. |
| Anna Bridge |
180:96ed750bd169 | 105 | * |
| Anna Bridge |
180:96ed750bd169 | 106 | * Pre-processor Macros |
| Anna Bridge |
180:96ed750bd169 | 107 | * ------------ |
| Anna Bridge |
180:96ed750bd169 | 108 | * |
| Anna Bridge |
180:96ed750bd169 | 109 | * Each library project have differant pre-processor macros. |
| Anna Bridge |
180:96ed750bd169 | 110 | * |
| Anna Bridge |
180:96ed750bd169 | 111 | * - UNALIGNED_SUPPORT_DISABLE: |
| Anna Bridge |
180:96ed750bd169 | 112 | * |
| Anna Bridge |
180:96ed750bd169 | 113 | * Define macro UNALIGNED_SUPPORT_DISABLE, If the silicon does not support unaligned memory access |
| Anna Bridge |
180:96ed750bd169 | 114 | * |
| Anna Bridge |
180:96ed750bd169 | 115 | * - ARM_MATH_BIG_ENDIAN: |
| Anna Bridge |
180:96ed750bd169 | 116 | * |
| Anna Bridge |
180:96ed750bd169 | 117 | * Define macro ARM_MATH_BIG_ENDIAN to build the library for big endian targets. By default library builds for little endian targets. |
| Anna Bridge |
180:96ed750bd169 | 118 | * |
| Anna Bridge |
180:96ed750bd169 | 119 | * - ARM_MATH_MATRIX_CHECK: |
| Anna Bridge |
180:96ed750bd169 | 120 | * |
| Anna Bridge |
180:96ed750bd169 | 121 | * Define macro ARM_MATH_MATRIX_CHECK for checking on the input and output sizes of matrices |
| Anna Bridge |
180:96ed750bd169 | 122 | * |
| Anna Bridge |
180:96ed750bd169 | 123 | * - ARM_MATH_ROUNDING: |
| Anna Bridge |
180:96ed750bd169 | 124 | * |
| Anna Bridge |
180:96ed750bd169 | 125 | * Define macro ARM_MATH_ROUNDING for rounding on support functions |
| Anna Bridge |
180:96ed750bd169 | 126 | * |
| Anna Bridge |
180:96ed750bd169 | 127 | * - ARM_MATH_CMx: |
| Anna Bridge |
180:96ed750bd169 | 128 | * |
| Anna Bridge |
180:96ed750bd169 | 129 | * Define macro ARM_MATH_CM4 for building the library on Cortex-M4 target, ARM_MATH_CM3 for building library on Cortex-M3 target |
| Anna Bridge |
180:96ed750bd169 | 130 | * and ARM_MATH_CM0 for building library on Cortex-M0 target, ARM_MATH_CM0PLUS for building library on Cortex-M0+ target, and |
| Anna Bridge |
180:96ed750bd169 | 131 | * ARM_MATH_CM7 for building the library on cortex-M7. |
| Anna Bridge |
180:96ed750bd169 | 132 | * |
| Anna Bridge |
180:96ed750bd169 | 133 | * - ARM_MATH_ARMV8MxL: |
| Anna Bridge |
180:96ed750bd169 | 134 | * |
| Anna Bridge |
180:96ed750bd169 | 135 | * Define macro ARM_MATH_ARMV8MBL for building the library on ARMv8M Baseline target, ARM_MATH_ARMV8MBL for building library |
| Anna Bridge |
180:96ed750bd169 | 136 | * on ARMv8M Mainline target. |
| Anna Bridge |
180:96ed750bd169 | 137 | * |
| Anna Bridge |
180:96ed750bd169 | 138 | * - __FPU_PRESENT: |
| Anna Bridge |
180:96ed750bd169 | 139 | * |
| Anna Bridge |
180:96ed750bd169 | 140 | * Initialize macro __FPU_PRESENT = 1 when building on FPU supported Targets. Enable this macro for floating point libraries. |
| Anna Bridge |
180:96ed750bd169 | 141 | * |
| Anna Bridge |
180:96ed750bd169 | 142 | * - __DSP_PRESENT: |
| Anna Bridge |
180:96ed750bd169 | 143 | * |
| Anna Bridge |
180:96ed750bd169 | 144 | * Initialize macro __DSP_PRESENT = 1 when ARMv8M Mainline core supports DSP instructions. |
| Anna Bridge |
180:96ed750bd169 | 145 | * |
| Anna Bridge |
180:96ed750bd169 | 146 | * <hr> |
| Anna Bridge |
180:96ed750bd169 | 147 | * CMSIS-DSP in ARM::CMSIS Pack |
| Anna Bridge |
180:96ed750bd169 | 148 | * ----------------------------- |
| Anna Bridge |
180:96ed750bd169 | 149 | * |
| Anna Bridge |
180:96ed750bd169 | 150 | * The following files relevant to CMSIS-DSP are present in the <b>ARM::CMSIS</b> Pack directories: |
| Anna Bridge |
180:96ed750bd169 | 151 | * |File/Folder |Content | |
| Anna Bridge |
180:96ed750bd169 | 152 | * |------------------------------|------------------------------------------------------------------------| |
| Anna Bridge |
180:96ed750bd169 | 153 | * |\b CMSIS\\Documentation\\DSP | This documentation | |
| Anna Bridge |
180:96ed750bd169 | 154 | * |\b CMSIS\\DSP_Lib | Software license agreement (license.txt) | |
| Anna Bridge |
180:96ed750bd169 | 155 | * |\b CMSIS\\DSP_Lib\\Examples | Example projects demonstrating the usage of the library functions | |
| Anna Bridge |
180:96ed750bd169 | 156 | * |\b CMSIS\\DSP_Lib\\Source | Source files for rebuilding the library | |
| Anna Bridge |
180:96ed750bd169 | 157 | * |
| Anna Bridge |
180:96ed750bd169 | 158 | * <hr> |
| Anna Bridge |
180:96ed750bd169 | 159 | * Revision History of CMSIS-DSP |
| Anna Bridge |
180:96ed750bd169 | 160 | * ------------ |
| Anna Bridge |
180:96ed750bd169 | 161 | * Please refer to \ref ChangeLog_pg. |
| Anna Bridge |
180:96ed750bd169 | 162 | * |
| Anna Bridge |
180:96ed750bd169 | 163 | * Copyright Notice |
| Anna Bridge |
180:96ed750bd169 | 164 | * ------------ |
| Anna Bridge |
180:96ed750bd169 | 165 | * |
| Anna Bridge |
180:96ed750bd169 | 166 | * Copyright (C) 2010-2015 ARM Limited. All rights reserved. |
| Anna Bridge |
180:96ed750bd169 | 167 | */ |
| Anna Bridge |
180:96ed750bd169 | 168 | |
| Anna Bridge |
180:96ed750bd169 | 169 | |
| Anna Bridge |
180:96ed750bd169 | 170 | /** |
| Anna Bridge |
180:96ed750bd169 | 171 | * @defgroup groupMath Basic Math Functions |
| Anna Bridge |
180:96ed750bd169 | 172 | */ |
| Anna Bridge |
180:96ed750bd169 | 173 | |
| Anna Bridge |
180:96ed750bd169 | 174 | /** |
| Anna Bridge |
180:96ed750bd169 | 175 | * @defgroup groupFastMath Fast Math Functions |
| Anna Bridge |
180:96ed750bd169 | 176 | * This set of functions provides a fast approximation to sine, cosine, and square root. |
| Anna Bridge |
180:96ed750bd169 | 177 | * As compared to most of the other functions in the CMSIS math library, the fast math functions |
| Anna Bridge |
180:96ed750bd169 | 178 | * operate on individual values and not arrays. |
| Anna Bridge |
180:96ed750bd169 | 179 | * There are separate functions for Q15, Q31, and floating-point data. |
| Anna Bridge |
180:96ed750bd169 | 180 | * |
| Anna Bridge |
180:96ed750bd169 | 181 | */ |
| Anna Bridge |
180:96ed750bd169 | 182 | |
| Anna Bridge |
180:96ed750bd169 | 183 | /** |
| Anna Bridge |
180:96ed750bd169 | 184 | * @defgroup groupCmplxMath Complex Math Functions |
| Anna Bridge |
180:96ed750bd169 | 185 | * This set of functions operates on complex data vectors. |
| Anna Bridge |
180:96ed750bd169 | 186 | * The data in the complex arrays is stored in an interleaved fashion |
| Anna Bridge |
180:96ed750bd169 | 187 | * (real, imag, real, imag, ...). |
| Anna Bridge |
180:96ed750bd169 | 188 | * In the API functions, the number of samples in a complex array refers |
| Anna Bridge |
180:96ed750bd169 | 189 | * to the number of complex values; the array contains twice this number of |
| Anna Bridge |
180:96ed750bd169 | 190 | * real values. |
| Anna Bridge |
180:96ed750bd169 | 191 | */ |
| Anna Bridge |
180:96ed750bd169 | 192 | |
| Anna Bridge |
180:96ed750bd169 | 193 | /** |
| Anna Bridge |
180:96ed750bd169 | 194 | * @defgroup groupFilters Filtering Functions |
| Anna Bridge |
180:96ed750bd169 | 195 | */ |
| Anna Bridge |
180:96ed750bd169 | 196 | |
| Anna Bridge |
180:96ed750bd169 | 197 | /** |
| Anna Bridge |
180:96ed750bd169 | 198 | * @defgroup groupMatrix Matrix Functions |
| Anna Bridge |
180:96ed750bd169 | 199 | * |
| Anna Bridge |
180:96ed750bd169 | 200 | * This set of functions provides basic matrix math operations. |
| Anna Bridge |
180:96ed750bd169 | 201 | * The functions operate on matrix data structures. For example, |
| Anna Bridge |
180:96ed750bd169 | 202 | * the type |
| Anna Bridge |
180:96ed750bd169 | 203 | * definition for the floating-point matrix structure is shown |
| Anna Bridge |
180:96ed750bd169 | 204 | * below: |
| Anna Bridge |
180:96ed750bd169 | 205 | * <pre> |
| Anna Bridge |
180:96ed750bd169 | 206 | * typedef struct |
| Anna Bridge |
180:96ed750bd169 | 207 | * { |
| Anna Bridge |
180:96ed750bd169 | 208 | * uint16_t numRows; // number of rows of the matrix. |
| Anna Bridge |
180:96ed750bd169 | 209 | * uint16_t numCols; // number of columns of the matrix. |
| Anna Bridge |
180:96ed750bd169 | 210 | * float32_t *pData; // points to the data of the matrix. |
| Anna Bridge |
180:96ed750bd169 | 211 | * } arm_matrix_instance_f32; |
| Anna Bridge |
180:96ed750bd169 | 212 | * </pre> |
| Anna Bridge |
180:96ed750bd169 | 213 | * There are similar definitions for Q15 and Q31 data types. |
| Anna Bridge |
180:96ed750bd169 | 214 | * |
| Anna Bridge |
180:96ed750bd169 | 215 | * The structure specifies the size of the matrix and then points to |
| Anna Bridge |
180:96ed750bd169 | 216 | * an array of data. The array is of size <code>numRows X numCols</code> |
| Anna Bridge |
180:96ed750bd169 | 217 | * and the values are arranged in row order. That is, the |
| Anna Bridge |
180:96ed750bd169 | 218 | * matrix element (i, j) is stored at: |
| Anna Bridge |
180:96ed750bd169 | 219 | * <pre> |
| Anna Bridge |
180:96ed750bd169 | 220 | * pData[i*numCols + j] |
| Anna Bridge |
180:96ed750bd169 | 221 | * </pre> |
| Anna Bridge |
180:96ed750bd169 | 222 | * |
| Anna Bridge |
180:96ed750bd169 | 223 | * \par Init Functions |
| Anna Bridge |
180:96ed750bd169 | 224 | * There is an associated initialization function for each type of matrix |
| Anna Bridge |
180:96ed750bd169 | 225 | * data structure. |
| Anna Bridge |
180:96ed750bd169 | 226 | * The initialization function sets the values of the internal structure fields. |
| Anna Bridge |
180:96ed750bd169 | 227 | * Refer to the function <code>arm_mat_init_f32()</code>, <code>arm_mat_init_q31()</code> |
| Anna Bridge |
180:96ed750bd169 | 228 | * and <code>arm_mat_init_q15()</code> for floating-point, Q31 and Q15 types, respectively. |
| Anna Bridge |
180:96ed750bd169 | 229 | * |
| Anna Bridge |
180:96ed750bd169 | 230 | * \par |
| Anna Bridge |
180:96ed750bd169 | 231 | * Use of the initialization function is optional. However, if initialization function is used |
| Anna Bridge |
180:96ed750bd169 | 232 | * then the instance structure cannot be placed into a const data section. |
| Anna Bridge |
180:96ed750bd169 | 233 | * To place the instance structure in a const data |
| Anna Bridge |
180:96ed750bd169 | 234 | * section, manually initialize the data structure. For example: |
| Anna Bridge |
180:96ed750bd169 | 235 | * <pre> |
| Anna Bridge |
180:96ed750bd169 | 236 | * <code>arm_matrix_instance_f32 S = {nRows, nColumns, pData};</code> |
| Anna Bridge |
180:96ed750bd169 | 237 | * <code>arm_matrix_instance_q31 S = {nRows, nColumns, pData};</code> |
| Anna Bridge |
180:96ed750bd169 | 238 | * <code>arm_matrix_instance_q15 S = {nRows, nColumns, pData};</code> |
| Anna Bridge |
180:96ed750bd169 | 239 | * </pre> |
| Anna Bridge |
180:96ed750bd169 | 240 | * where <code>nRows</code> specifies the number of rows, <code>nColumns</code> |
| Anna Bridge |
180:96ed750bd169 | 241 | * specifies the number of columns, and <code>pData</code> points to the |
| Anna Bridge |
180:96ed750bd169 | 242 | * data array. |
| Anna Bridge |
180:96ed750bd169 | 243 | * |
| Anna Bridge |
180:96ed750bd169 | 244 | * \par Size Checking |
| Anna Bridge |
180:96ed750bd169 | 245 | * By default all of the matrix functions perform size checking on the input and |
| Anna Bridge |
180:96ed750bd169 | 246 | * output matrices. For example, the matrix addition function verifies that the |
| Anna Bridge |
180:96ed750bd169 | 247 | * two input matrices and the output matrix all have the same number of rows and |
| Anna Bridge |
180:96ed750bd169 | 248 | * columns. If the size check fails the functions return: |
| Anna Bridge |
180:96ed750bd169 | 249 | * <pre> |
| Anna Bridge |
180:96ed750bd169 | 250 | * ARM_MATH_SIZE_MISMATCH |
| Anna Bridge |
180:96ed750bd169 | 251 | * </pre> |
| Anna Bridge |
180:96ed750bd169 | 252 | * Otherwise the functions return |
| Anna Bridge |
180:96ed750bd169 | 253 | * <pre> |
| Anna Bridge |
180:96ed750bd169 | 254 | * ARM_MATH_SUCCESS |
| Anna Bridge |
180:96ed750bd169 | 255 | * </pre> |
| Anna Bridge |
180:96ed750bd169 | 256 | * There is some overhead associated with this matrix size checking. |
| Anna Bridge |
180:96ed750bd169 | 257 | * The matrix size checking is enabled via the \#define |
| Anna Bridge |
180:96ed750bd169 | 258 | * <pre> |
| Anna Bridge |
180:96ed750bd169 | 259 | * ARM_MATH_MATRIX_CHECK |
| Anna Bridge |
180:96ed750bd169 | 260 | * </pre> |
| Anna Bridge |
180:96ed750bd169 | 261 | * within the library project settings. By default this macro is defined |
| Anna Bridge |
180:96ed750bd169 | 262 | * and size checking is enabled. By changing the project settings and |
| Anna Bridge |
180:96ed750bd169 | 263 | * undefining this macro size checking is eliminated and the functions |
| Anna Bridge |
180:96ed750bd169 | 264 | * run a bit faster. With size checking disabled the functions always |
| Anna Bridge |
180:96ed750bd169 | 265 | * return <code>ARM_MATH_SUCCESS</code>. |
| Anna Bridge |
180:96ed750bd169 | 266 | */ |
| Anna Bridge |
180:96ed750bd169 | 267 | |
| Anna Bridge |
180:96ed750bd169 | 268 | /** |
| Anna Bridge |
180:96ed750bd169 | 269 | * @defgroup groupTransforms Transform Functions |
| Anna Bridge |
180:96ed750bd169 | 270 | */ |
| Anna Bridge |
180:96ed750bd169 | 271 | |
| Anna Bridge |
180:96ed750bd169 | 272 | /** |
| Anna Bridge |
180:96ed750bd169 | 273 | * @defgroup groupController Controller Functions |
| Anna Bridge |
180:96ed750bd169 | 274 | */ |
| Anna Bridge |
180:96ed750bd169 | 275 | |
| Anna Bridge |
180:96ed750bd169 | 276 | /** |
| Anna Bridge |
180:96ed750bd169 | 277 | * @defgroup groupStats Statistics Functions |
| Anna Bridge |
180:96ed750bd169 | 278 | */ |
| Anna Bridge |
180:96ed750bd169 | 279 | /** |
| Anna Bridge |
180:96ed750bd169 | 280 | * @defgroup groupSupport Support Functions |
| Anna Bridge |
180:96ed750bd169 | 281 | */ |
| Anna Bridge |
180:96ed750bd169 | 282 | |
| Anna Bridge |
180:96ed750bd169 | 283 | /** |
| Anna Bridge |
180:96ed750bd169 | 284 | * @defgroup groupInterpolation Interpolation Functions |
| Anna Bridge |
180:96ed750bd169 | 285 | * These functions perform 1- and 2-dimensional interpolation of data. |
| Anna Bridge |
180:96ed750bd169 | 286 | * Linear interpolation is used for 1-dimensional data and |
| Anna Bridge |
180:96ed750bd169 | 287 | * bilinear interpolation is used for 2-dimensional data. |
| Anna Bridge |
180:96ed750bd169 | 288 | */ |
| Anna Bridge |
180:96ed750bd169 | 289 | |
| Anna Bridge |
180:96ed750bd169 | 290 | /** |
| Anna Bridge |
180:96ed750bd169 | 291 | * @defgroup groupExamples Examples |
| Anna Bridge |
180:96ed750bd169 | 292 | */ |
| Anna Bridge |
180:96ed750bd169 | 293 | #ifndef _ARM_MATH_H |
| Anna Bridge |
180:96ed750bd169 | 294 | #define _ARM_MATH_H |
| Anna Bridge |
180:96ed750bd169 | 295 | |
| Anna Bridge |
180:96ed750bd169 | 296 | /* Compiler specific diagnostic adjustment */ |
| Anna Bridge |
180:96ed750bd169 | 297 | #if defined ( __CC_ARM ) |
| Anna Bridge |
180:96ed750bd169 | 298 | |
| Anna Bridge |
180:96ed750bd169 | 299 | #elif defined ( __ARMCC_VERSION ) && ( __ARMCC_VERSION >= 6010050 ) |
| Anna Bridge |
180:96ed750bd169 | 300 | |
| Anna Bridge |
180:96ed750bd169 | 301 | #elif defined ( __GNUC__ ) |
| Anna Bridge |
180:96ed750bd169 | 302 | #pragma GCC diagnostic push |
| Anna Bridge |
180:96ed750bd169 | 303 | #pragma GCC diagnostic ignored "-Wsign-conversion" |
| Anna Bridge |
180:96ed750bd169 | 304 | #pragma GCC diagnostic ignored "-Wconversion" |
| Anna Bridge |
180:96ed750bd169 | 305 | #pragma GCC diagnostic ignored "-Wunused-parameter" |
| Anna Bridge |
180:96ed750bd169 | 306 | |
| Anna Bridge |
180:96ed750bd169 | 307 | #elif defined ( __ICCARM__ ) |
| Anna Bridge |
180:96ed750bd169 | 308 | |
| Anna Bridge |
180:96ed750bd169 | 309 | #elif defined ( __TI_ARM__ ) |
| Anna Bridge |
180:96ed750bd169 | 310 | |
| Anna Bridge |
180:96ed750bd169 | 311 | #elif defined ( __CSMC__ ) |
| Anna Bridge |
180:96ed750bd169 | 312 | |
| Anna Bridge |
180:96ed750bd169 | 313 | #elif defined ( __TASKING__ ) |
| Anna Bridge |
180:96ed750bd169 | 314 | |
| Anna Bridge |
180:96ed750bd169 | 315 | #else |
| Anna Bridge |
180:96ed750bd169 | 316 | #error Unknown compiler |
| Anna Bridge |
180:96ed750bd169 | 317 | #endif |
| Anna Bridge |
180:96ed750bd169 | 318 | |
| Anna Bridge |
180:96ed750bd169 | 319 | |
| Anna Bridge |
180:96ed750bd169 | 320 | #define __CMSIS_GENERIC /* disable NVIC and Systick functions */ |
| Anna Bridge |
180:96ed750bd169 | 321 | |
| Anna Bridge |
180:96ed750bd169 | 322 | #if defined(ARM_MATH_CM7) |
| Anna Bridge |
180:96ed750bd169 | 323 | #include "core_cm7.h" |
| Anna Bridge |
180:96ed750bd169 | 324 | #define ARM_MATH_DSP |
| Anna Bridge |
180:96ed750bd169 | 325 | #elif defined (ARM_MATH_CM4) |
| Anna Bridge |
180:96ed750bd169 | 326 | #include "core_cm4.h" |
| Anna Bridge |
180:96ed750bd169 | 327 | #define ARM_MATH_DSP |
| Anna Bridge |
180:96ed750bd169 | 328 | #elif defined (ARM_MATH_CM3) |
| Anna Bridge |
180:96ed750bd169 | 329 | #include "core_cm3.h" |
| Anna Bridge |
180:96ed750bd169 | 330 | #elif defined (ARM_MATH_CM0) |
| Anna Bridge |
180:96ed750bd169 | 331 | #include "core_cm0.h" |
| Anna Bridge |
180:96ed750bd169 | 332 | #define ARM_MATH_CM0_FAMILY |
| Anna Bridge |
180:96ed750bd169 | 333 | #elif defined (ARM_MATH_CM0PLUS) |
| Anna Bridge |
180:96ed750bd169 | 334 | #include "core_cm0plus.h" |
| Anna Bridge |
180:96ed750bd169 | 335 | #define ARM_MATH_CM0_FAMILY |
| Anna Bridge |
180:96ed750bd169 | 336 | #elif defined (ARM_MATH_ARMV8MBL) |
| Anna Bridge |
180:96ed750bd169 | 337 | #include "core_armv8mbl.h" |
| Anna Bridge |
180:96ed750bd169 | 338 | #define ARM_MATH_CM0_FAMILY |
| Anna Bridge |
180:96ed750bd169 | 339 | #elif defined (ARM_MATH_ARMV8MML) |
| Anna Bridge |
180:96ed750bd169 | 340 | #include "core_armv8mml.h" |
| Anna Bridge |
180:96ed750bd169 | 341 | #if (defined (__DSP_PRESENT) && (__DSP_PRESENT == 1)) |
| Anna Bridge |
180:96ed750bd169 | 342 | #define ARM_MATH_DSP |
| Anna Bridge |
180:96ed750bd169 | 343 | #endif |
| Anna Bridge |
180:96ed750bd169 | 344 | #else |
| Anna Bridge |
180:96ed750bd169 | 345 | #error "Define according the used Cortex core ARM_MATH_CM7, ARM_MATH_CM4, ARM_MATH_CM3, ARM_MATH_CM0PLUS, ARM_MATH_CM0, ARM_MATH_ARMV8MBL, ARM_MATH_ARMV8MML" |
| Anna Bridge |
180:96ed750bd169 | 346 | #endif |
| Anna Bridge |
180:96ed750bd169 | 347 | |
| Anna Bridge |
180:96ed750bd169 | 348 | #undef __CMSIS_GENERIC /* enable NVIC and Systick functions */ |
| Anna Bridge |
180:96ed750bd169 | 349 | #include "string.h" |
| Anna Bridge |
180:96ed750bd169 | 350 | #include "math.h" |
| Anna Bridge |
180:96ed750bd169 | 351 | #ifdef __cplusplus |
| Anna Bridge |
180:96ed750bd169 | 352 | extern "C" |
| Anna Bridge |
180:96ed750bd169 | 353 | { |
| Anna Bridge |
180:96ed750bd169 | 354 | #endif |
| Anna Bridge |
180:96ed750bd169 | 355 | |
| Anna Bridge |
180:96ed750bd169 | 356 | |
| Anna Bridge |
180:96ed750bd169 | 357 | /** |
| Anna Bridge |
180:96ed750bd169 | 358 | * @brief Macros required for reciprocal calculation in Normalized LMS |
| Anna Bridge |
180:96ed750bd169 | 359 | */ |
| Anna Bridge |
180:96ed750bd169 | 360 | |
| Anna Bridge |
180:96ed750bd169 | 361 | #define DELTA_Q31 (0x100) |
| Anna Bridge |
180:96ed750bd169 | 362 | #define DELTA_Q15 0x5 |
| Anna Bridge |
180:96ed750bd169 | 363 | #define INDEX_MASK 0x0000003F |
| Anna Bridge |
180:96ed750bd169 | 364 | #ifndef PI |
| Anna Bridge |
180:96ed750bd169 | 365 | #define PI 3.14159265358979f |
| Anna Bridge |
180:96ed750bd169 | 366 | #endif |
| Anna Bridge |
180:96ed750bd169 | 367 | |
| Anna Bridge |
180:96ed750bd169 | 368 | /** |
| Anna Bridge |
180:96ed750bd169 | 369 | * @brief Macros required for SINE and COSINE Fast math approximations |
| Anna Bridge |
180:96ed750bd169 | 370 | */ |
| Anna Bridge |
180:96ed750bd169 | 371 | |
| Anna Bridge |
180:96ed750bd169 | 372 | #define FAST_MATH_TABLE_SIZE 512 |
| Anna Bridge |
180:96ed750bd169 | 373 | #define FAST_MATH_Q31_SHIFT (32 - 10) |
| Anna Bridge |
180:96ed750bd169 | 374 | #define FAST_MATH_Q15_SHIFT (16 - 10) |
| Anna Bridge |
180:96ed750bd169 | 375 | #define CONTROLLER_Q31_SHIFT (32 - 9) |
| Anna Bridge |
180:96ed750bd169 | 376 | #define TABLE_SPACING_Q31 0x400000 |
| Anna Bridge |
180:96ed750bd169 | 377 | #define TABLE_SPACING_Q15 0x80 |
| Anna Bridge |
180:96ed750bd169 | 378 | |
| Anna Bridge |
180:96ed750bd169 | 379 | /** |
| Anna Bridge |
180:96ed750bd169 | 380 | * @brief Macros required for SINE and COSINE Controller functions |
| Anna Bridge |
180:96ed750bd169 | 381 | */ |
| Anna Bridge |
180:96ed750bd169 | 382 | /* 1.31(q31) Fixed value of 2/360 */ |
| Anna Bridge |
180:96ed750bd169 | 383 | /* -1 to +1 is divided into 360 values so total spacing is (2/360) */ |
| Anna Bridge |
180:96ed750bd169 | 384 | #define INPUT_SPACING 0xB60B61 |
| Anna Bridge |
180:96ed750bd169 | 385 | |
| Anna Bridge |
180:96ed750bd169 | 386 | /** |
| Anna Bridge |
180:96ed750bd169 | 387 | * @brief Macro for Unaligned Support |
| Anna Bridge |
180:96ed750bd169 | 388 | */ |
| Anna Bridge |
180:96ed750bd169 | 389 | #ifndef UNALIGNED_SUPPORT_DISABLE |
| Anna Bridge |
180:96ed750bd169 | 390 | #define ALIGN4 |
| Anna Bridge |
180:96ed750bd169 | 391 | #else |
| Anna Bridge |
180:96ed750bd169 | 392 | #if defined (__GNUC__) |
| Anna Bridge |
180:96ed750bd169 | 393 | #define ALIGN4 __attribute__((aligned(4))) |
| Anna Bridge |
180:96ed750bd169 | 394 | #else |
| Anna Bridge |
180:96ed750bd169 | 395 | #define ALIGN4 __align(4) |
| Anna Bridge |
180:96ed750bd169 | 396 | #endif |
| Anna Bridge |
180:96ed750bd169 | 397 | #endif /* #ifndef UNALIGNED_SUPPORT_DISABLE */ |
| Anna Bridge |
180:96ed750bd169 | 398 | |
| Anna Bridge |
180:96ed750bd169 | 399 | /** |
| Anna Bridge |
180:96ed750bd169 | 400 | * @brief Error status returned by some functions in the library. |
| Anna Bridge |
180:96ed750bd169 | 401 | */ |
| Anna Bridge |
180:96ed750bd169 | 402 | |
| Anna Bridge |
180:96ed750bd169 | 403 | typedef enum |
| Anna Bridge |
180:96ed750bd169 | 404 | { |
| Anna Bridge |
180:96ed750bd169 | 405 | ARM_MATH_SUCCESS = 0, /**< No error */ |
| Anna Bridge |
180:96ed750bd169 | 406 | ARM_MATH_ARGUMENT_ERROR = -1, /**< One or more arguments are incorrect */ |
| Anna Bridge |
180:96ed750bd169 | 407 | ARM_MATH_LENGTH_ERROR = -2, /**< Length of data buffer is incorrect */ |
| Anna Bridge |
180:96ed750bd169 | 408 | ARM_MATH_SIZE_MISMATCH = -3, /**< Size of matrices is not compatible with the operation. */ |
| Anna Bridge |
180:96ed750bd169 | 409 | ARM_MATH_NANINF = -4, /**< Not-a-number (NaN) or infinity is generated */ |
| Anna Bridge |
180:96ed750bd169 | 410 | ARM_MATH_SINGULAR = -5, /**< Generated by matrix inversion if the input matrix is singular and cannot be inverted. */ |
| Anna Bridge |
180:96ed750bd169 | 411 | ARM_MATH_TEST_FAILURE = -6 /**< Test Failed */ |
| Anna Bridge |
180:96ed750bd169 | 412 | } arm_status; |
| Anna Bridge |
180:96ed750bd169 | 413 | |
| Anna Bridge |
180:96ed750bd169 | 414 | /** |
| Anna Bridge |
180:96ed750bd169 | 415 | * @brief 8-bit fractional data type in 1.7 format. |
| Anna Bridge |
180:96ed750bd169 | 416 | */ |
| Anna Bridge |
180:96ed750bd169 | 417 | typedef int8_t q7_t; |
| Anna Bridge |
180:96ed750bd169 | 418 | |
| Anna Bridge |
180:96ed750bd169 | 419 | /** |
| Anna Bridge |
180:96ed750bd169 | 420 | * @brief 16-bit fractional data type in 1.15 format. |
| Anna Bridge |
180:96ed750bd169 | 421 | */ |
| Anna Bridge |
180:96ed750bd169 | 422 | typedef int16_t q15_t; |
| Anna Bridge |
180:96ed750bd169 | 423 | |
| Anna Bridge |
180:96ed750bd169 | 424 | /** |
| Anna Bridge |
180:96ed750bd169 | 425 | * @brief 32-bit fractional data type in 1.31 format. |
| Anna Bridge |
180:96ed750bd169 | 426 | */ |
| Anna Bridge |
180:96ed750bd169 | 427 | typedef int32_t q31_t; |
| Anna Bridge |
180:96ed750bd169 | 428 | |
| Anna Bridge |
180:96ed750bd169 | 429 | /** |
| Anna Bridge |
180:96ed750bd169 | 430 | * @brief 64-bit fractional data type in 1.63 format. |
| Anna Bridge |
180:96ed750bd169 | 431 | */ |
| Anna Bridge |
180:96ed750bd169 | 432 | typedef int64_t q63_t; |
| Anna Bridge |
180:96ed750bd169 | 433 | |
| Anna Bridge |
180:96ed750bd169 | 434 | /** |
| Anna Bridge |
180:96ed750bd169 | 435 | * @brief 32-bit floating-point type definition. |
| Anna Bridge |
180:96ed750bd169 | 436 | */ |
| Anna Bridge |
180:96ed750bd169 | 437 | typedef float float32_t; |
| Anna Bridge |
180:96ed750bd169 | 438 | |
| Anna Bridge |
180:96ed750bd169 | 439 | /** |
| Anna Bridge |
180:96ed750bd169 | 440 | * @brief 64-bit floating-point type definition. |
| Anna Bridge |
180:96ed750bd169 | 441 | */ |
| Anna Bridge |
180:96ed750bd169 | 442 | typedef double float64_t; |
| Anna Bridge |
180:96ed750bd169 | 443 | |
| Anna Bridge |
180:96ed750bd169 | 444 | /** |
| Anna Bridge |
180:96ed750bd169 | 445 | * @brief definition to read/write two 16 bit values. |
| Anna Bridge |
180:96ed750bd169 | 446 | */ |
| Anna Bridge |
180:96ed750bd169 | 447 | #if defined ( __CC_ARM ) |
| Anna Bridge |
180:96ed750bd169 | 448 | #define __SIMD32_TYPE int32_t __packed |
| Anna Bridge |
180:96ed750bd169 | 449 | #define CMSIS_UNUSED __attribute__((unused)) |
| Anna Bridge |
180:96ed750bd169 | 450 | #define CMSIS_INLINE __attribute__((always_inline)) |
| Anna Bridge |
180:96ed750bd169 | 451 | |
| Anna Bridge |
180:96ed750bd169 | 452 | #elif defined ( __ARMCC_VERSION ) && ( __ARMCC_VERSION >= 6010050 ) |
| Anna Bridge |
180:96ed750bd169 | 453 | #define __SIMD32_TYPE int32_t |
| Anna Bridge |
180:96ed750bd169 | 454 | #define CMSIS_UNUSED __attribute__((unused)) |
| Anna Bridge |
180:96ed750bd169 | 455 | #define CMSIS_INLINE __attribute__((always_inline)) |
| Anna Bridge |
180:96ed750bd169 | 456 | |
| Anna Bridge |
180:96ed750bd169 | 457 | #elif defined ( __GNUC__ ) |
| Anna Bridge |
180:96ed750bd169 | 458 | #define __SIMD32_TYPE int32_t |
| Anna Bridge |
180:96ed750bd169 | 459 | #define CMSIS_UNUSED __attribute__((unused)) |
| Anna Bridge |
180:96ed750bd169 | 460 | #define CMSIS_INLINE __attribute__((always_inline)) |
| Anna Bridge |
180:96ed750bd169 | 461 | |
| Anna Bridge |
180:96ed750bd169 | 462 | #elif defined ( __ICCARM__ ) |
| Anna Bridge |
180:96ed750bd169 | 463 | #define __SIMD32_TYPE int32_t __packed |
| Anna Bridge |
180:96ed750bd169 | 464 | #define CMSIS_UNUSED |
| Anna Bridge |
180:96ed750bd169 | 465 | #define CMSIS_INLINE |
| Anna Bridge |
180:96ed750bd169 | 466 | |
| Anna Bridge |
180:96ed750bd169 | 467 | #elif defined ( __TI_ARM__ ) |
| Anna Bridge |
180:96ed750bd169 | 468 | #define __SIMD32_TYPE int32_t |
| Anna Bridge |
180:96ed750bd169 | 469 | #define CMSIS_UNUSED __attribute__((unused)) |
| Anna Bridge |
180:96ed750bd169 | 470 | #define CMSIS_INLINE |
| Anna Bridge |
180:96ed750bd169 | 471 | |
| Anna Bridge |
180:96ed750bd169 | 472 | #elif defined ( __CSMC__ ) |
| Anna Bridge |
180:96ed750bd169 | 473 | #define __SIMD32_TYPE int32_t |
| Anna Bridge |
180:96ed750bd169 | 474 | #define CMSIS_UNUSED |
| Anna Bridge |
180:96ed750bd169 | 475 | #define CMSIS_INLINE |
| Anna Bridge |
180:96ed750bd169 | 476 | |
| Anna Bridge |
180:96ed750bd169 | 477 | #elif defined ( __TASKING__ ) |
| Anna Bridge |
180:96ed750bd169 | 478 | #define __SIMD32_TYPE __unaligned int32_t |
| Anna Bridge |
180:96ed750bd169 | 479 | #define CMSIS_UNUSED |
| Anna Bridge |
180:96ed750bd169 | 480 | #define CMSIS_INLINE |
| Anna Bridge |
180:96ed750bd169 | 481 | |
| Anna Bridge |
180:96ed750bd169 | 482 | #else |
| Anna Bridge |
180:96ed750bd169 | 483 | #error Unknown compiler |
| Anna Bridge |
180:96ed750bd169 | 484 | #endif |
| Anna Bridge |
180:96ed750bd169 | 485 | |
| Anna Bridge |
180:96ed750bd169 | 486 | #define __SIMD32(addr) (*(__SIMD32_TYPE **) & (addr)) |
| Anna Bridge |
180:96ed750bd169 | 487 | #define __SIMD32_CONST(addr) ((__SIMD32_TYPE *)(addr)) |
| Anna Bridge |
180:96ed750bd169 | 488 | #define _SIMD32_OFFSET(addr) (*(__SIMD32_TYPE *) (addr)) |
| Anna Bridge |
180:96ed750bd169 | 489 | #define __SIMD64(addr) (*(int64_t **) & (addr)) |
| Anna Bridge |
180:96ed750bd169 | 490 | |
| Anna Bridge |
180:96ed750bd169 | 491 | /* #if defined (ARM_MATH_CM3) || defined (ARM_MATH_CM0_FAMILY) */ |
| Anna Bridge |
180:96ed750bd169 | 492 | #if !defined (ARM_MATH_DSP) |
| Anna Bridge |
180:96ed750bd169 | 493 | /** |
| Anna Bridge |
180:96ed750bd169 | 494 | * @brief definition to pack two 16 bit values. |
| Anna Bridge |
180:96ed750bd169 | 495 | */ |
| Anna Bridge |
180:96ed750bd169 | 496 | #define __PKHBT(ARG1, ARG2, ARG3) ( (((int32_t)(ARG1) << 0) & (int32_t)0x0000FFFF) | \ |
| Anna Bridge |
180:96ed750bd169 | 497 | (((int32_t)(ARG2) << ARG3) & (int32_t)0xFFFF0000) ) |
| Anna Bridge |
180:96ed750bd169 | 498 | #define __PKHTB(ARG1, ARG2, ARG3) ( (((int32_t)(ARG1) << 0) & (int32_t)0xFFFF0000) | \ |
| Anna Bridge |
180:96ed750bd169 | 499 | (((int32_t)(ARG2) >> ARG3) & (int32_t)0x0000FFFF) ) |
| Anna Bridge |
180:96ed750bd169 | 500 | |
| Anna Bridge |
180:96ed750bd169 | 501 | /* #endif // defined (ARM_MATH_CM3) || defined (ARM_MATH_CM0_FAMILY) */ |
| Anna Bridge |
180:96ed750bd169 | 502 | #endif /* !defined (ARM_MATH_DSP) */ |
| Anna Bridge |
180:96ed750bd169 | 503 | |
| Anna Bridge |
180:96ed750bd169 | 504 | /** |
| Anna Bridge |
180:96ed750bd169 | 505 | * @brief definition to pack four 8 bit values. |
| Anna Bridge |
180:96ed750bd169 | 506 | */ |
| Anna Bridge |
180:96ed750bd169 | 507 | #ifndef ARM_MATH_BIG_ENDIAN |
| Anna Bridge |
180:96ed750bd169 | 508 | |
| Anna Bridge |
180:96ed750bd169 | 509 | #define __PACKq7(v0,v1,v2,v3) ( (((int32_t)(v0) << 0) & (int32_t)0x000000FF) | \ |
| Anna Bridge |
180:96ed750bd169 | 510 | (((int32_t)(v1) << 8) & (int32_t)0x0000FF00) | \ |
| Anna Bridge |
180:96ed750bd169 | 511 | (((int32_t)(v2) << 16) & (int32_t)0x00FF0000) | \ |
| Anna Bridge |
180:96ed750bd169 | 512 | (((int32_t)(v3) << 24) & (int32_t)0xFF000000) ) |
| Anna Bridge |
180:96ed750bd169 | 513 | #else |
| Anna Bridge |
180:96ed750bd169 | 514 | |
| Anna Bridge |
180:96ed750bd169 | 515 | #define __PACKq7(v0,v1,v2,v3) ( (((int32_t)(v3) << 0) & (int32_t)0x000000FF) | \ |
| Anna Bridge |
180:96ed750bd169 | 516 | (((int32_t)(v2) << 8) & (int32_t)0x0000FF00) | \ |
| Anna Bridge |
180:96ed750bd169 | 517 | (((int32_t)(v1) << 16) & (int32_t)0x00FF0000) | \ |
| Anna Bridge |
180:96ed750bd169 | 518 | (((int32_t)(v0) << 24) & (int32_t)0xFF000000) ) |
| Anna Bridge |
180:96ed750bd169 | 519 | |
| Anna Bridge |
180:96ed750bd169 | 520 | #endif |
| Anna Bridge |
180:96ed750bd169 | 521 | |
| Anna Bridge |
180:96ed750bd169 | 522 | |
| Anna Bridge |
180:96ed750bd169 | 523 | /** |
| Anna Bridge |
180:96ed750bd169 | 524 | * @brief Clips Q63 to Q31 values. |
| Anna Bridge |
180:96ed750bd169 | 525 | */ |
| Anna Bridge |
180:96ed750bd169 | 526 | CMSIS_INLINE __STATIC_INLINE q31_t clip_q63_to_q31( |
| Anna Bridge |
180:96ed750bd169 | 527 | q63_t x) |
| Anna Bridge |
180:96ed750bd169 | 528 | { |
| Anna Bridge |
180:96ed750bd169 | 529 | return ((q31_t) (x >> 32) != ((q31_t) x >> 31)) ? |
| Anna Bridge |
180:96ed750bd169 | 530 | ((0x7FFFFFFF ^ ((q31_t) (x >> 63)))) : (q31_t) x; |
| Anna Bridge |
180:96ed750bd169 | 531 | } |
| Anna Bridge |
180:96ed750bd169 | 532 | |
| Anna Bridge |
180:96ed750bd169 | 533 | /** |
| Anna Bridge |
180:96ed750bd169 | 534 | * @brief Clips Q63 to Q15 values. |
| Anna Bridge |
180:96ed750bd169 | 535 | */ |
| Anna Bridge |
180:96ed750bd169 | 536 | CMSIS_INLINE __STATIC_INLINE q15_t clip_q63_to_q15( |
| Anna Bridge |
180:96ed750bd169 | 537 | q63_t x) |
| Anna Bridge |
180:96ed750bd169 | 538 | { |
| Anna Bridge |
180:96ed750bd169 | 539 | return ((q31_t) (x >> 32) != ((q31_t) x >> 31)) ? |
| Anna Bridge |
180:96ed750bd169 | 540 | ((0x7FFF ^ ((q15_t) (x >> 63)))) : (q15_t) (x >> 15); |
| Anna Bridge |
180:96ed750bd169 | 541 | } |
| Anna Bridge |
180:96ed750bd169 | 542 | |
| Anna Bridge |
180:96ed750bd169 | 543 | /** |
| Anna Bridge |
180:96ed750bd169 | 544 | * @brief Clips Q31 to Q7 values. |
| Anna Bridge |
180:96ed750bd169 | 545 | */ |
| Anna Bridge |
180:96ed750bd169 | 546 | CMSIS_INLINE __STATIC_INLINE q7_t clip_q31_to_q7( |
| Anna Bridge |
180:96ed750bd169 | 547 | q31_t x) |
| Anna Bridge |
180:96ed750bd169 | 548 | { |
| Anna Bridge |
180:96ed750bd169 | 549 | return ((q31_t) (x >> 24) != ((q31_t) x >> 23)) ? |
| Anna Bridge |
180:96ed750bd169 | 550 | ((0x7F ^ ((q7_t) (x >> 31)))) : (q7_t) x; |
| Anna Bridge |
180:96ed750bd169 | 551 | } |
| Anna Bridge |
180:96ed750bd169 | 552 | |
| Anna Bridge |
180:96ed750bd169 | 553 | /** |
| Anna Bridge |
180:96ed750bd169 | 554 | * @brief Clips Q31 to Q15 values. |
| Anna Bridge |
180:96ed750bd169 | 555 | */ |
| Anna Bridge |
180:96ed750bd169 | 556 | CMSIS_INLINE __STATIC_INLINE q15_t clip_q31_to_q15( |
| Anna Bridge |
180:96ed750bd169 | 557 | q31_t x) |
| Anna Bridge |
180:96ed750bd169 | 558 | { |
| Anna Bridge |
180:96ed750bd169 | 559 | return ((q31_t) (x >> 16) != ((q31_t) x >> 15)) ? |
| Anna Bridge |
180:96ed750bd169 | 560 | ((0x7FFF ^ ((q15_t) (x >> 31)))) : (q15_t) x; |
| Anna Bridge |
180:96ed750bd169 | 561 | } |
| Anna Bridge |
180:96ed750bd169 | 562 | |
| Anna Bridge |
180:96ed750bd169 | 563 | /** |
| Anna Bridge |
180:96ed750bd169 | 564 | * @brief Multiplies 32 X 64 and returns 32 bit result in 2.30 format. |
| Anna Bridge |
180:96ed750bd169 | 565 | */ |
| Anna Bridge |
180:96ed750bd169 | 566 | |
| Anna Bridge |
180:96ed750bd169 | 567 | CMSIS_INLINE __STATIC_INLINE q63_t mult32x64( |
| Anna Bridge |
180:96ed750bd169 | 568 | q63_t x, |
| Anna Bridge |
180:96ed750bd169 | 569 | q31_t y) |
| Anna Bridge |
180:96ed750bd169 | 570 | { |
| Anna Bridge |
180:96ed750bd169 | 571 | return ((((q63_t) (x & 0x00000000FFFFFFFF) * y) >> 32) + |
| Anna Bridge |
180:96ed750bd169 | 572 | (((q63_t) (x >> 32) * y))); |
| Anna Bridge |
180:96ed750bd169 | 573 | } |
| Anna Bridge |
180:96ed750bd169 | 574 | |
| Anna Bridge |
180:96ed750bd169 | 575 | /** |
| Anna Bridge |
180:96ed750bd169 | 576 | * @brief Function to Calculates 1/in (reciprocal) value of Q31 Data type. |
| Anna Bridge |
180:96ed750bd169 | 577 | */ |
| Anna Bridge |
180:96ed750bd169 | 578 | |
| Anna Bridge |
180:96ed750bd169 | 579 | CMSIS_INLINE __STATIC_INLINE uint32_t arm_recip_q31( |
| Anna Bridge |
180:96ed750bd169 | 580 | q31_t in, |
| Anna Bridge |
180:96ed750bd169 | 581 | q31_t * dst, |
| Anna Bridge |
180:96ed750bd169 | 582 | q31_t * pRecipTable) |
| Anna Bridge |
180:96ed750bd169 | 583 | { |
| Anna Bridge |
180:96ed750bd169 | 584 | q31_t out; |
| Anna Bridge |
180:96ed750bd169 | 585 | uint32_t tempVal; |
| Anna Bridge |
180:96ed750bd169 | 586 | uint32_t index, i; |
| Anna Bridge |
180:96ed750bd169 | 587 | uint32_t signBits; |
| Anna Bridge |
180:96ed750bd169 | 588 | |
| Anna Bridge |
180:96ed750bd169 | 589 | if (in > 0) |
| Anna Bridge |
180:96ed750bd169 | 590 | { |
| Anna Bridge |
180:96ed750bd169 | 591 | signBits = ((uint32_t) (__CLZ( in) - 1)); |
| Anna Bridge |
180:96ed750bd169 | 592 | } |
| Anna Bridge |
180:96ed750bd169 | 593 | else |
| Anna Bridge |
180:96ed750bd169 | 594 | { |
| Anna Bridge |
180:96ed750bd169 | 595 | signBits = ((uint32_t) (__CLZ(-in) - 1)); |
| Anna Bridge |
180:96ed750bd169 | 596 | } |
| Anna Bridge |
180:96ed750bd169 | 597 | |
| Anna Bridge |
180:96ed750bd169 | 598 | /* Convert input sample to 1.31 format */ |
| Anna Bridge |
180:96ed750bd169 | 599 | in = (in << signBits); |
| Anna Bridge |
180:96ed750bd169 | 600 | |
| Anna Bridge |
180:96ed750bd169 | 601 | /* calculation of index for initial approximated Val */ |
| Anna Bridge |
180:96ed750bd169 | 602 | index = (uint32_t)(in >> 24); |
| Anna Bridge |
180:96ed750bd169 | 603 | index = (index & INDEX_MASK); |
| Anna Bridge |
180:96ed750bd169 | 604 | |
| Anna Bridge |
180:96ed750bd169 | 605 | /* 1.31 with exp 1 */ |
| Anna Bridge |
180:96ed750bd169 | 606 | out = pRecipTable[index]; |
| Anna Bridge |
180:96ed750bd169 | 607 | |
| Anna Bridge |
180:96ed750bd169 | 608 | /* calculation of reciprocal value */ |
| Anna Bridge |
180:96ed750bd169 | 609 | /* running approximation for two iterations */ |
| Anna Bridge |
180:96ed750bd169 | 610 | for (i = 0u; i < 2u; i++) |
| Anna Bridge |
180:96ed750bd169 | 611 | { |
| Anna Bridge |
180:96ed750bd169 | 612 | tempVal = (uint32_t) (((q63_t) in * out) >> 31); |
| Anna Bridge |
180:96ed750bd169 | 613 | tempVal = 0x7FFFFFFFu - tempVal; |
| Anna Bridge |
180:96ed750bd169 | 614 | /* 1.31 with exp 1 */ |
| Anna Bridge |
180:96ed750bd169 | 615 | /* out = (q31_t) (((q63_t) out * tempVal) >> 30); */ |
| Anna Bridge |
180:96ed750bd169 | 616 | out = clip_q63_to_q31(((q63_t) out * tempVal) >> 30); |
| Anna Bridge |
180:96ed750bd169 | 617 | } |
| Anna Bridge |
180:96ed750bd169 | 618 | |
| Anna Bridge |
180:96ed750bd169 | 619 | /* write output */ |
| Anna Bridge |
180:96ed750bd169 | 620 | *dst = out; |
| Anna Bridge |
180:96ed750bd169 | 621 | |
| Anna Bridge |
180:96ed750bd169 | 622 | /* return num of signbits of out = 1/in value */ |
| Anna Bridge |
180:96ed750bd169 | 623 | return (signBits + 1u); |
| Anna Bridge |
180:96ed750bd169 | 624 | } |
| Anna Bridge |
180:96ed750bd169 | 625 | |
| Anna Bridge |
180:96ed750bd169 | 626 | |
| Anna Bridge |
180:96ed750bd169 | 627 | /** |
| Anna Bridge |
180:96ed750bd169 | 628 | * @brief Function to Calculates 1/in (reciprocal) value of Q15 Data type. |
| Anna Bridge |
180:96ed750bd169 | 629 | */ |
| Anna Bridge |
180:96ed750bd169 | 630 | CMSIS_INLINE __STATIC_INLINE uint32_t arm_recip_q15( |
| Anna Bridge |
180:96ed750bd169 | 631 | q15_t in, |
| Anna Bridge |
180:96ed750bd169 | 632 | q15_t * dst, |
| Anna Bridge |
180:96ed750bd169 | 633 | q15_t * pRecipTable) |
| Anna Bridge |
180:96ed750bd169 | 634 | { |
| Anna Bridge |
180:96ed750bd169 | 635 | q15_t out = 0; |
| Anna Bridge |
180:96ed750bd169 | 636 | uint32_t tempVal = 0; |
| Anna Bridge |
180:96ed750bd169 | 637 | uint32_t index = 0, i = 0; |
| Anna Bridge |
180:96ed750bd169 | 638 | uint32_t signBits = 0; |
| Anna Bridge |
180:96ed750bd169 | 639 | |
| Anna Bridge |
180:96ed750bd169 | 640 | if (in > 0) |
| Anna Bridge |
180:96ed750bd169 | 641 | { |
| Anna Bridge |
180:96ed750bd169 | 642 | signBits = ((uint32_t)(__CLZ( in) - 17)); |
| Anna Bridge |
180:96ed750bd169 | 643 | } |
| Anna Bridge |
180:96ed750bd169 | 644 | else |
| Anna Bridge |
180:96ed750bd169 | 645 | { |
| Anna Bridge |
180:96ed750bd169 | 646 | signBits = ((uint32_t)(__CLZ(-in) - 17)); |
| Anna Bridge |
180:96ed750bd169 | 647 | } |
| Anna Bridge |
180:96ed750bd169 | 648 | |
| Anna Bridge |
180:96ed750bd169 | 649 | /* Convert input sample to 1.15 format */ |
| Anna Bridge |
180:96ed750bd169 | 650 | in = (in << signBits); |
| Anna Bridge |
180:96ed750bd169 | 651 | |
| Anna Bridge |
180:96ed750bd169 | 652 | /* calculation of index for initial approximated Val */ |
| Anna Bridge |
180:96ed750bd169 | 653 | index = (uint32_t)(in >> 8); |
| Anna Bridge |
180:96ed750bd169 | 654 | index = (index & INDEX_MASK); |
| Anna Bridge |
180:96ed750bd169 | 655 | |
| Anna Bridge |
180:96ed750bd169 | 656 | /* 1.15 with exp 1 */ |
| Anna Bridge |
180:96ed750bd169 | 657 | out = pRecipTable[index]; |
| Anna Bridge |
180:96ed750bd169 | 658 | |
| Anna Bridge |
180:96ed750bd169 | 659 | /* calculation of reciprocal value */ |
| Anna Bridge |
180:96ed750bd169 | 660 | /* running approximation for two iterations */ |
| Anna Bridge |
180:96ed750bd169 | 661 | for (i = 0u; i < 2u; i++) |
| Anna Bridge |
180:96ed750bd169 | 662 | { |
| Anna Bridge |
180:96ed750bd169 | 663 | tempVal = (uint32_t) (((q31_t) in * out) >> 15); |
| Anna Bridge |
180:96ed750bd169 | 664 | tempVal = 0x7FFFu - tempVal; |
| Anna Bridge |
180:96ed750bd169 | 665 | /* 1.15 with exp 1 */ |
| Anna Bridge |
180:96ed750bd169 | 666 | out = (q15_t) (((q31_t) out * tempVal) >> 14); |
| Anna Bridge |
180:96ed750bd169 | 667 | /* out = clip_q31_to_q15(((q31_t) out * tempVal) >> 14); */ |
| Anna Bridge |
180:96ed750bd169 | 668 | } |
| Anna Bridge |
180:96ed750bd169 | 669 | |
| Anna Bridge |
180:96ed750bd169 | 670 | /* write output */ |
| Anna Bridge |
180:96ed750bd169 | 671 | *dst = out; |
| Anna Bridge |
180:96ed750bd169 | 672 | |
| Anna Bridge |
180:96ed750bd169 | 673 | /* return num of signbits of out = 1/in value */ |
| Anna Bridge |
180:96ed750bd169 | 674 | return (signBits + 1); |
| Anna Bridge |
180:96ed750bd169 | 675 | } |
| Anna Bridge |
180:96ed750bd169 | 676 | |
| Anna Bridge |
180:96ed750bd169 | 677 | /* |
| Anna Bridge |
180:96ed750bd169 | 678 | * @brief C custom defined intrinsic function for M3 and M0 processors |
| Anna Bridge |
180:96ed750bd169 | 679 | */ |
| Anna Bridge |
180:96ed750bd169 | 680 | /* #if defined (ARM_MATH_CM3) || defined (ARM_MATH_CM0_FAMILY) */ |
| Anna Bridge |
180:96ed750bd169 | 681 | #if !defined (ARM_MATH_DSP) |
| Anna Bridge |
180:96ed750bd169 | 682 | |
| Anna Bridge |
180:96ed750bd169 | 683 | /* |
| Anna Bridge |
180:96ed750bd169 | 684 | * @brief C custom defined QADD8 for M3 and M0 processors |
| Anna Bridge |
180:96ed750bd169 | 685 | */ |
| Anna Bridge |
180:96ed750bd169 | 686 | CMSIS_INLINE __STATIC_INLINE uint32_t __QADD8( |
| Anna Bridge |
180:96ed750bd169 | 687 | uint32_t x, |
| Anna Bridge |
180:96ed750bd169 | 688 | uint32_t y) |
| Anna Bridge |
180:96ed750bd169 | 689 | { |
| Anna Bridge |
180:96ed750bd169 | 690 | q31_t r, s, t, u; |
| Anna Bridge |
180:96ed750bd169 | 691 | |
| Anna Bridge |
180:96ed750bd169 | 692 | r = __SSAT(((((q31_t)x << 24) >> 24) + (((q31_t)y << 24) >> 24)), 8) & (int32_t)0x000000FF; |
| Anna Bridge |
180:96ed750bd169 | 693 | s = __SSAT(((((q31_t)x << 16) >> 24) + (((q31_t)y << 16) >> 24)), 8) & (int32_t)0x000000FF; |
| Anna Bridge |
180:96ed750bd169 | 694 | t = __SSAT(((((q31_t)x << 8) >> 24) + (((q31_t)y << 8) >> 24)), 8) & (int32_t)0x000000FF; |
| Anna Bridge |
180:96ed750bd169 | 695 | u = __SSAT(((((q31_t)x ) >> 24) + (((q31_t)y ) >> 24)), 8) & (int32_t)0x000000FF; |
| Anna Bridge |
180:96ed750bd169 | 696 | |
| Anna Bridge |
180:96ed750bd169 | 697 | return ((uint32_t)((u << 24) | (t << 16) | (s << 8) | (r ))); |
| Anna Bridge |
180:96ed750bd169 | 698 | } |
| Anna Bridge |
180:96ed750bd169 | 699 | |
| Anna Bridge |
180:96ed750bd169 | 700 | |
| Anna Bridge |
180:96ed750bd169 | 701 | /* |
| Anna Bridge |
180:96ed750bd169 | 702 | * @brief C custom defined QSUB8 for M3 and M0 processors |
| Anna Bridge |
180:96ed750bd169 | 703 | */ |
| Anna Bridge |
180:96ed750bd169 | 704 | CMSIS_INLINE __STATIC_INLINE uint32_t __QSUB8( |
| Anna Bridge |
180:96ed750bd169 | 705 | uint32_t x, |
| Anna Bridge |
180:96ed750bd169 | 706 | uint32_t y) |
| Anna Bridge |
180:96ed750bd169 | 707 | { |
| Anna Bridge |
180:96ed750bd169 | 708 | q31_t r, s, t, u; |
| Anna Bridge |
180:96ed750bd169 | 709 | |
| Anna Bridge |
180:96ed750bd169 | 710 | r = __SSAT(((((q31_t)x << 24) >> 24) - (((q31_t)y << 24) >> 24)), 8) & (int32_t)0x000000FF; |
| Anna Bridge |
180:96ed750bd169 | 711 | s = __SSAT(((((q31_t)x << 16) >> 24) - (((q31_t)y << 16) >> 24)), 8) & (int32_t)0x000000FF; |
| Anna Bridge |
180:96ed750bd169 | 712 | t = __SSAT(((((q31_t)x << 8) >> 24) - (((q31_t)y << 8) >> 24)), 8) & (int32_t)0x000000FF; |
| Anna Bridge |
180:96ed750bd169 | 713 | u = __SSAT(((((q31_t)x ) >> 24) - (((q31_t)y ) >> 24)), 8) & (int32_t)0x000000FF; |
| Anna Bridge |
180:96ed750bd169 | 714 | |
| Anna Bridge |
180:96ed750bd169 | 715 | return ((uint32_t)((u << 24) | (t << 16) | (s << 8) | (r ))); |
| Anna Bridge |
180:96ed750bd169 | 716 | } |
| Anna Bridge |
180:96ed750bd169 | 717 | |
| Anna Bridge |
180:96ed750bd169 | 718 | |
| Anna Bridge |
180:96ed750bd169 | 719 | /* |
| Anna Bridge |
180:96ed750bd169 | 720 | * @brief C custom defined QADD16 for M3 and M0 processors |
| Anna Bridge |
180:96ed750bd169 | 721 | */ |
| Anna Bridge |
180:96ed750bd169 | 722 | CMSIS_INLINE __STATIC_INLINE uint32_t __QADD16( |
| Anna Bridge |
180:96ed750bd169 | 723 | uint32_t x, |
| Anna Bridge |
180:96ed750bd169 | 724 | uint32_t y) |
| Anna Bridge |
180:96ed750bd169 | 725 | { |
| Anna Bridge |
180:96ed750bd169 | 726 | /* q31_t r, s; without initialisation 'arm_offset_q15 test' fails but 'intrinsic' tests pass! for armCC */ |
| Anna Bridge |
180:96ed750bd169 | 727 | q31_t r = 0, s = 0; |
| Anna Bridge |
180:96ed750bd169 | 728 | |
| Anna Bridge |
180:96ed750bd169 | 729 | r = __SSAT(((((q31_t)x << 16) >> 16) + (((q31_t)y << 16) >> 16)), 16) & (int32_t)0x0000FFFF; |
| Anna Bridge |
180:96ed750bd169 | 730 | s = __SSAT(((((q31_t)x ) >> 16) + (((q31_t)y ) >> 16)), 16) & (int32_t)0x0000FFFF; |
| Anna Bridge |
180:96ed750bd169 | 731 | |
| Anna Bridge |
180:96ed750bd169 | 732 | return ((uint32_t)((s << 16) | (r ))); |
| Anna Bridge |
180:96ed750bd169 | 733 | } |
| Anna Bridge |
180:96ed750bd169 | 734 | |
| Anna Bridge |
180:96ed750bd169 | 735 | |
| Anna Bridge |
180:96ed750bd169 | 736 | /* |
| Anna Bridge |
180:96ed750bd169 | 737 | * @brief C custom defined SHADD16 for M3 and M0 processors |
| Anna Bridge |
180:96ed750bd169 | 738 | */ |
| Anna Bridge |
180:96ed750bd169 | 739 | CMSIS_INLINE __STATIC_INLINE uint32_t __SHADD16( |
| Anna Bridge |
180:96ed750bd169 | 740 | uint32_t x, |
| Anna Bridge |
180:96ed750bd169 | 741 | uint32_t y) |
| Anna Bridge |
180:96ed750bd169 | 742 | { |
| Anna Bridge |
180:96ed750bd169 | 743 | q31_t r, s; |
| Anna Bridge |
180:96ed750bd169 | 744 | |
| Anna Bridge |
180:96ed750bd169 | 745 | r = (((((q31_t)x << 16) >> 16) + (((q31_t)y << 16) >> 16)) >> 1) & (int32_t)0x0000FFFF; |
| Anna Bridge |
180:96ed750bd169 | 746 | s = (((((q31_t)x ) >> 16) + (((q31_t)y ) >> 16)) >> 1) & (int32_t)0x0000FFFF; |
| Anna Bridge |
180:96ed750bd169 | 747 | |
| Anna Bridge |
180:96ed750bd169 | 748 | return ((uint32_t)((s << 16) | (r ))); |
| Anna Bridge |
180:96ed750bd169 | 749 | } |
| Anna Bridge |
180:96ed750bd169 | 750 | |
| Anna Bridge |
180:96ed750bd169 | 751 | |
| Anna Bridge |
180:96ed750bd169 | 752 | /* |
| Anna Bridge |
180:96ed750bd169 | 753 | * @brief C custom defined QSUB16 for M3 and M0 processors |
| Anna Bridge |
180:96ed750bd169 | 754 | */ |
| Anna Bridge |
180:96ed750bd169 | 755 | CMSIS_INLINE __STATIC_INLINE uint32_t __QSUB16( |
| Anna Bridge |
180:96ed750bd169 | 756 | uint32_t x, |
| Anna Bridge |
180:96ed750bd169 | 757 | uint32_t y) |
| Anna Bridge |
180:96ed750bd169 | 758 | { |
| Anna Bridge |
180:96ed750bd169 | 759 | q31_t r, s; |
| Anna Bridge |
180:96ed750bd169 | 760 | |
| Anna Bridge |
180:96ed750bd169 | 761 | r = __SSAT(((((q31_t)x << 16) >> 16) - (((q31_t)y << 16) >> 16)), 16) & (int32_t)0x0000FFFF; |
| Anna Bridge |
180:96ed750bd169 | 762 | s = __SSAT(((((q31_t)x ) >> 16) - (((q31_t)y ) >> 16)), 16) & (int32_t)0x0000FFFF; |
| Anna Bridge |
180:96ed750bd169 | 763 | |
| Anna Bridge |
180:96ed750bd169 | 764 | return ((uint32_t)((s << 16) | (r ))); |
| Anna Bridge |
180:96ed750bd169 | 765 | } |
| Anna Bridge |
180:96ed750bd169 | 766 | |
| Anna Bridge |
180:96ed750bd169 | 767 | |
| Anna Bridge |
180:96ed750bd169 | 768 | /* |
| Anna Bridge |
180:96ed750bd169 | 769 | * @brief C custom defined SHSUB16 for M3 and M0 processors |
| Anna Bridge |
180:96ed750bd169 | 770 | */ |
| Anna Bridge |
180:96ed750bd169 | 771 | CMSIS_INLINE __STATIC_INLINE uint32_t __SHSUB16( |
| Anna Bridge |
180:96ed750bd169 | 772 | uint32_t x, |
| Anna Bridge |
180:96ed750bd169 | 773 | uint32_t y) |
| Anna Bridge |
180:96ed750bd169 | 774 | { |
| Anna Bridge |
180:96ed750bd169 | 775 | q31_t r, s; |
| Anna Bridge |
180:96ed750bd169 | 776 | |
| Anna Bridge |
180:96ed750bd169 | 777 | r = (((((q31_t)x << 16) >> 16) - (((q31_t)y << 16) >> 16)) >> 1) & (int32_t)0x0000FFFF; |
| Anna Bridge |
180:96ed750bd169 | 778 | s = (((((q31_t)x ) >> 16) - (((q31_t)y ) >> 16)) >> 1) & (int32_t)0x0000FFFF; |
| Anna Bridge |
180:96ed750bd169 | 779 | |
| Anna Bridge |
180:96ed750bd169 | 780 | return ((uint32_t)((s << 16) | (r ))); |
| Anna Bridge |
180:96ed750bd169 | 781 | } |
| Anna Bridge |
180:96ed750bd169 | 782 | |
| Anna Bridge |
180:96ed750bd169 | 783 | |
| Anna Bridge |
180:96ed750bd169 | 784 | /* |
| Anna Bridge |
180:96ed750bd169 | 785 | * @brief C custom defined QASX for M3 and M0 processors |
| Anna Bridge |
180:96ed750bd169 | 786 | */ |
| Anna Bridge |
180:96ed750bd169 | 787 | CMSIS_INLINE __STATIC_INLINE uint32_t __QASX( |
| Anna Bridge |
180:96ed750bd169 | 788 | uint32_t x, |
| Anna Bridge |
180:96ed750bd169 | 789 | uint32_t y) |
| Anna Bridge |
180:96ed750bd169 | 790 | { |
| Anna Bridge |
180:96ed750bd169 | 791 | q31_t r, s; |
| Anna Bridge |
180:96ed750bd169 | 792 | |
| Anna Bridge |
180:96ed750bd169 | 793 | r = __SSAT(((((q31_t)x << 16) >> 16) - (((q31_t)y ) >> 16)), 16) & (int32_t)0x0000FFFF; |
| Anna Bridge |
180:96ed750bd169 | 794 | s = __SSAT(((((q31_t)x ) >> 16) + (((q31_t)y << 16) >> 16)), 16) & (int32_t)0x0000FFFF; |
| Anna Bridge |
180:96ed750bd169 | 795 | |
| Anna Bridge |
180:96ed750bd169 | 796 | return ((uint32_t)((s << 16) | (r ))); |
| Anna Bridge |
180:96ed750bd169 | 797 | } |
| Anna Bridge |
180:96ed750bd169 | 798 | |
| Anna Bridge |
180:96ed750bd169 | 799 | |
| Anna Bridge |
180:96ed750bd169 | 800 | /* |
| Anna Bridge |
180:96ed750bd169 | 801 | * @brief C custom defined SHASX for M3 and M0 processors |
| Anna Bridge |
180:96ed750bd169 | 802 | */ |
| Anna Bridge |
180:96ed750bd169 | 803 | CMSIS_INLINE __STATIC_INLINE uint32_t __SHASX( |
| Anna Bridge |
180:96ed750bd169 | 804 | uint32_t x, |
| Anna Bridge |
180:96ed750bd169 | 805 | uint32_t y) |
| Anna Bridge |
180:96ed750bd169 | 806 | { |
| Anna Bridge |
180:96ed750bd169 | 807 | q31_t r, s; |
| Anna Bridge |
180:96ed750bd169 | 808 | |
| Anna Bridge |
180:96ed750bd169 | 809 | r = (((((q31_t)x << 16) >> 16) - (((q31_t)y ) >> 16)) >> 1) & (int32_t)0x0000FFFF; |
| Anna Bridge |
180:96ed750bd169 | 810 | s = (((((q31_t)x ) >> 16) + (((q31_t)y << 16) >> 16)) >> 1) & (int32_t)0x0000FFFF; |
| Anna Bridge |
180:96ed750bd169 | 811 | |
| Anna Bridge |
180:96ed750bd169 | 812 | return ((uint32_t)((s << 16) | (r ))); |
| Anna Bridge |
180:96ed750bd169 | 813 | } |
| Anna Bridge |
180:96ed750bd169 | 814 | |
| Anna Bridge |
180:96ed750bd169 | 815 | |
| Anna Bridge |
180:96ed750bd169 | 816 | /* |
| Anna Bridge |
180:96ed750bd169 | 817 | * @brief C custom defined QSAX for M3 and M0 processors |
| Anna Bridge |
180:96ed750bd169 | 818 | */ |
| Anna Bridge |
180:96ed750bd169 | 819 | CMSIS_INLINE __STATIC_INLINE uint32_t __QSAX( |
| Anna Bridge |
180:96ed750bd169 | 820 | uint32_t x, |
| Anna Bridge |
180:96ed750bd169 | 821 | uint32_t y) |
| Anna Bridge |
180:96ed750bd169 | 822 | { |
| Anna Bridge |
180:96ed750bd169 | 823 | q31_t r, s; |
| Anna Bridge |
180:96ed750bd169 | 824 | |
| Anna Bridge |
180:96ed750bd169 | 825 | r = __SSAT(((((q31_t)x << 16) >> 16) + (((q31_t)y ) >> 16)), 16) & (int32_t)0x0000FFFF; |
| Anna Bridge |
180:96ed750bd169 | 826 | s = __SSAT(((((q31_t)x ) >> 16) - (((q31_t)y << 16) >> 16)), 16) & (int32_t)0x0000FFFF; |
| Anna Bridge |
180:96ed750bd169 | 827 | |
| Anna Bridge |
180:96ed750bd169 | 828 | return ((uint32_t)((s << 16) | (r ))); |
| Anna Bridge |
180:96ed750bd169 | 829 | } |
| Anna Bridge |
180:96ed750bd169 | 830 | |
| Anna Bridge |
180:96ed750bd169 | 831 | |
| Anna Bridge |
180:96ed750bd169 | 832 | /* |
| Anna Bridge |
180:96ed750bd169 | 833 | * @brief C custom defined SHSAX for M3 and M0 processors |
| Anna Bridge |
180:96ed750bd169 | 834 | */ |
| Anna Bridge |
180:96ed750bd169 | 835 | CMSIS_INLINE __STATIC_INLINE uint32_t __SHSAX( |
| Anna Bridge |
180:96ed750bd169 | 836 | uint32_t x, |
| Anna Bridge |
180:96ed750bd169 | 837 | uint32_t y) |
| Anna Bridge |
180:96ed750bd169 | 838 | { |
| Anna Bridge |
180:96ed750bd169 | 839 | q31_t r, s; |
| Anna Bridge |
180:96ed750bd169 | 840 | |
| Anna Bridge |
180:96ed750bd169 | 841 | r = (((((q31_t)x << 16) >> 16) + (((q31_t)y ) >> 16)) >> 1) & (int32_t)0x0000FFFF; |
| Anna Bridge |
180:96ed750bd169 | 842 | s = (((((q31_t)x ) >> 16) - (((q31_t)y << 16) >> 16)) >> 1) & (int32_t)0x0000FFFF; |
| Anna Bridge |
180:96ed750bd169 | 843 | |
| Anna Bridge |
180:96ed750bd169 | 844 | return ((uint32_t)((s << 16) | (r ))); |
| Anna Bridge |
180:96ed750bd169 | 845 | } |
| Anna Bridge |
180:96ed750bd169 | 846 | |
| Anna Bridge |
180:96ed750bd169 | 847 | |
| Anna Bridge |
180:96ed750bd169 | 848 | /* |
| Anna Bridge |
180:96ed750bd169 | 849 | * @brief C custom defined SMUSDX for M3 and M0 processors |
| Anna Bridge |
180:96ed750bd169 | 850 | */ |
| Anna Bridge |
180:96ed750bd169 | 851 | CMSIS_INLINE __STATIC_INLINE uint32_t __SMUSDX( |
| Anna Bridge |
180:96ed750bd169 | 852 | uint32_t x, |
| Anna Bridge |
180:96ed750bd169 | 853 | uint32_t y) |
| Anna Bridge |
180:96ed750bd169 | 854 | { |
| Anna Bridge |
180:96ed750bd169 | 855 | return ((uint32_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y ) >> 16)) - |
| Anna Bridge |
180:96ed750bd169 | 856 | ((((q31_t)x ) >> 16) * (((q31_t)y << 16) >> 16)) )); |
| Anna Bridge |
180:96ed750bd169 | 857 | } |
| Anna Bridge |
180:96ed750bd169 | 858 | |
| Anna Bridge |
180:96ed750bd169 | 859 | /* |
| Anna Bridge |
180:96ed750bd169 | 860 | * @brief C custom defined SMUADX for M3 and M0 processors |
| Anna Bridge |
180:96ed750bd169 | 861 | */ |
| Anna Bridge |
180:96ed750bd169 | 862 | CMSIS_INLINE __STATIC_INLINE uint32_t __SMUADX( |
| Anna Bridge |
180:96ed750bd169 | 863 | uint32_t x, |
| Anna Bridge |
180:96ed750bd169 | 864 | uint32_t y) |
| Anna Bridge |
180:96ed750bd169 | 865 | { |
| Anna Bridge |
180:96ed750bd169 | 866 | return ((uint32_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y ) >> 16)) + |
| Anna Bridge |
180:96ed750bd169 | 867 | ((((q31_t)x ) >> 16) * (((q31_t)y << 16) >> 16)) )); |
| Anna Bridge |
180:96ed750bd169 | 868 | } |
| Anna Bridge |
180:96ed750bd169 | 869 | |
| Anna Bridge |
180:96ed750bd169 | 870 | |
| Anna Bridge |
180:96ed750bd169 | 871 | /* |
| Anna Bridge |
180:96ed750bd169 | 872 | * @brief C custom defined QADD for M3 and M0 processors |
| Anna Bridge |
180:96ed750bd169 | 873 | */ |
| Anna Bridge |
180:96ed750bd169 | 874 | CMSIS_INLINE __STATIC_INLINE int32_t __QADD( |
| Anna Bridge |
180:96ed750bd169 | 875 | int32_t x, |
| Anna Bridge |
180:96ed750bd169 | 876 | int32_t y) |
| Anna Bridge |
180:96ed750bd169 | 877 | { |
| Anna Bridge |
180:96ed750bd169 | 878 | return ((int32_t)(clip_q63_to_q31((q63_t)x + (q31_t)y))); |
| Anna Bridge |
180:96ed750bd169 | 879 | } |
| Anna Bridge |
180:96ed750bd169 | 880 | |
| Anna Bridge |
180:96ed750bd169 | 881 | |
| Anna Bridge |
180:96ed750bd169 | 882 | /* |
| Anna Bridge |
180:96ed750bd169 | 883 | * @brief C custom defined QSUB for M3 and M0 processors |
| Anna Bridge |
180:96ed750bd169 | 884 | */ |
| Anna Bridge |
180:96ed750bd169 | 885 | CMSIS_INLINE __STATIC_INLINE int32_t __QSUB( |
| Anna Bridge |
180:96ed750bd169 | 886 | int32_t x, |
| Anna Bridge |
180:96ed750bd169 | 887 | int32_t y) |
| Anna Bridge |
180:96ed750bd169 | 888 | { |
| Anna Bridge |
180:96ed750bd169 | 889 | return ((int32_t)(clip_q63_to_q31((q63_t)x - (q31_t)y))); |
| Anna Bridge |
180:96ed750bd169 | 890 | } |
| Anna Bridge |
180:96ed750bd169 | 891 | |
| Anna Bridge |
180:96ed750bd169 | 892 | |
| Anna Bridge |
180:96ed750bd169 | 893 | /* |
| Anna Bridge |
180:96ed750bd169 | 894 | * @brief C custom defined SMLAD for M3 and M0 processors |
| Anna Bridge |
180:96ed750bd169 | 895 | */ |
| Anna Bridge |
180:96ed750bd169 | 896 | CMSIS_INLINE __STATIC_INLINE uint32_t __SMLAD( |
| Anna Bridge |
180:96ed750bd169 | 897 | uint32_t x, |
| Anna Bridge |
180:96ed750bd169 | 898 | uint32_t y, |
| Anna Bridge |
180:96ed750bd169 | 899 | uint32_t sum) |
| Anna Bridge |
180:96ed750bd169 | 900 | { |
| Anna Bridge |
180:96ed750bd169 | 901 | return ((uint32_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y << 16) >> 16)) + |
| Anna Bridge |
180:96ed750bd169 | 902 | ((((q31_t)x ) >> 16) * (((q31_t)y ) >> 16)) + |
| Anna Bridge |
180:96ed750bd169 | 903 | ( ((q31_t)sum ) ) )); |
| Anna Bridge |
180:96ed750bd169 | 904 | } |
| Anna Bridge |
180:96ed750bd169 | 905 | |
| Anna Bridge |
180:96ed750bd169 | 906 | |
| Anna Bridge |
180:96ed750bd169 | 907 | /* |
| Anna Bridge |
180:96ed750bd169 | 908 | * @brief C custom defined SMLADX for M3 and M0 processors |
| Anna Bridge |
180:96ed750bd169 | 909 | */ |
| Anna Bridge |
180:96ed750bd169 | 910 | CMSIS_INLINE __STATIC_INLINE uint32_t __SMLADX( |
| Anna Bridge |
180:96ed750bd169 | 911 | uint32_t x, |
| Anna Bridge |
180:96ed750bd169 | 912 | uint32_t y, |
| Anna Bridge |
180:96ed750bd169 | 913 | uint32_t sum) |
| Anna Bridge |
180:96ed750bd169 | 914 | { |
| Anna Bridge |
180:96ed750bd169 | 915 | return ((uint32_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y ) >> 16)) + |
| Anna Bridge |
180:96ed750bd169 | 916 | ((((q31_t)x ) >> 16) * (((q31_t)y << 16) >> 16)) + |
| Anna Bridge |
180:96ed750bd169 | 917 | ( ((q31_t)sum ) ) )); |
| Anna Bridge |
180:96ed750bd169 | 918 | } |
| Anna Bridge |
180:96ed750bd169 | 919 | |
| Anna Bridge |
180:96ed750bd169 | 920 | |
| Anna Bridge |
180:96ed750bd169 | 921 | /* |
| Anna Bridge |
180:96ed750bd169 | 922 | * @brief C custom defined SMLSDX for M3 and M0 processors |
| Anna Bridge |
180:96ed750bd169 | 923 | */ |
| Anna Bridge |
180:96ed750bd169 | 924 | CMSIS_INLINE __STATIC_INLINE uint32_t __SMLSDX( |
| Anna Bridge |
180:96ed750bd169 | 925 | uint32_t x, |
| Anna Bridge |
180:96ed750bd169 | 926 | uint32_t y, |
| Anna Bridge |
180:96ed750bd169 | 927 | uint32_t sum) |
| Anna Bridge |
180:96ed750bd169 | 928 | { |
| Anna Bridge |
180:96ed750bd169 | 929 | return ((uint32_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y ) >> 16)) - |
| Anna Bridge |
180:96ed750bd169 | 930 | ((((q31_t)x ) >> 16) * (((q31_t)y << 16) >> 16)) + |
| Anna Bridge |
180:96ed750bd169 | 931 | ( ((q31_t)sum ) ) )); |
| Anna Bridge |
180:96ed750bd169 | 932 | } |
| Anna Bridge |
180:96ed750bd169 | 933 | |
| Anna Bridge |
180:96ed750bd169 | 934 | |
| Anna Bridge |
180:96ed750bd169 | 935 | /* |
| Anna Bridge |
180:96ed750bd169 | 936 | * @brief C custom defined SMLALD for M3 and M0 processors |
| Anna Bridge |
180:96ed750bd169 | 937 | */ |
| Anna Bridge |
180:96ed750bd169 | 938 | CMSIS_INLINE __STATIC_INLINE uint64_t __SMLALD( |
| Anna Bridge |
180:96ed750bd169 | 939 | uint32_t x, |
| Anna Bridge |
180:96ed750bd169 | 940 | uint32_t y, |
| Anna Bridge |
180:96ed750bd169 | 941 | uint64_t sum) |
| Anna Bridge |
180:96ed750bd169 | 942 | { |
| Anna Bridge |
180:96ed750bd169 | 943 | /* return (sum + ((q15_t) (x >> 16) * (q15_t) (y >> 16)) + ((q15_t) x * (q15_t) y)); */ |
| Anna Bridge |
180:96ed750bd169 | 944 | return ((uint64_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y << 16) >> 16)) + |
| Anna Bridge |
180:96ed750bd169 | 945 | ((((q31_t)x ) >> 16) * (((q31_t)y ) >> 16)) + |
| Anna Bridge |
180:96ed750bd169 | 946 | ( ((q63_t)sum ) ) )); |
| Anna Bridge |
180:96ed750bd169 | 947 | } |
| Anna Bridge |
180:96ed750bd169 | 948 | |
| Anna Bridge |
180:96ed750bd169 | 949 | |
| Anna Bridge |
180:96ed750bd169 | 950 | /* |
| Anna Bridge |
180:96ed750bd169 | 951 | * @brief C custom defined SMLALDX for M3 and M0 processors |
| Anna Bridge |
180:96ed750bd169 | 952 | */ |
| Anna Bridge |
180:96ed750bd169 | 953 | CMSIS_INLINE __STATIC_INLINE uint64_t __SMLALDX( |
| Anna Bridge |
180:96ed750bd169 | 954 | uint32_t x, |
| Anna Bridge |
180:96ed750bd169 | 955 | uint32_t y, |
| Anna Bridge |
180:96ed750bd169 | 956 | uint64_t sum) |
| Anna Bridge |
180:96ed750bd169 | 957 | { |
| Anna Bridge |
180:96ed750bd169 | 958 | /* return (sum + ((q15_t) (x >> 16) * (q15_t) y)) + ((q15_t) x * (q15_t) (y >> 16)); */ |
| Anna Bridge |
180:96ed750bd169 | 959 | return ((uint64_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y ) >> 16)) + |
| Anna Bridge |
180:96ed750bd169 | 960 | ((((q31_t)x ) >> 16) * (((q31_t)y << 16) >> 16)) + |
| Anna Bridge |
180:96ed750bd169 | 961 | ( ((q63_t)sum ) ) )); |
| Anna Bridge |
180:96ed750bd169 | 962 | } |
| Anna Bridge |
180:96ed750bd169 | 963 | |
| Anna Bridge |
180:96ed750bd169 | 964 | |
| Anna Bridge |
180:96ed750bd169 | 965 | /* |
| Anna Bridge |
180:96ed750bd169 | 966 | * @brief C custom defined SMUAD for M3 and M0 processors |
| Anna Bridge |
180:96ed750bd169 | 967 | */ |
| Anna Bridge |
180:96ed750bd169 | 968 | CMSIS_INLINE __STATIC_INLINE uint32_t __SMUAD( |
| Anna Bridge |
180:96ed750bd169 | 969 | uint32_t x, |
| Anna Bridge |
180:96ed750bd169 | 970 | uint32_t y) |
| Anna Bridge |
180:96ed750bd169 | 971 | { |
| Anna Bridge |
180:96ed750bd169 | 972 | return ((uint32_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y << 16) >> 16)) + |
| Anna Bridge |
180:96ed750bd169 | 973 | ((((q31_t)x ) >> 16) * (((q31_t)y ) >> 16)) )); |
| Anna Bridge |
180:96ed750bd169 | 974 | } |
| Anna Bridge |
180:96ed750bd169 | 975 | |
| Anna Bridge |
180:96ed750bd169 | 976 | |
| Anna Bridge |
180:96ed750bd169 | 977 | /* |
| Anna Bridge |
180:96ed750bd169 | 978 | * @brief C custom defined SMUSD for M3 and M0 processors |
| Anna Bridge |
180:96ed750bd169 | 979 | */ |
| Anna Bridge |
180:96ed750bd169 | 980 | CMSIS_INLINE __STATIC_INLINE uint32_t __SMUSD( |
| Anna Bridge |
180:96ed750bd169 | 981 | uint32_t x, |
| Anna Bridge |
180:96ed750bd169 | 982 | uint32_t y) |
| Anna Bridge |
180:96ed750bd169 | 983 | { |
| Anna Bridge |
180:96ed750bd169 | 984 | return ((uint32_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y << 16) >> 16)) - |
| Anna Bridge |
180:96ed750bd169 | 985 | ((((q31_t)x ) >> 16) * (((q31_t)y ) >> 16)) )); |
| Anna Bridge |
180:96ed750bd169 | 986 | } |
| Anna Bridge |
180:96ed750bd169 | 987 | |
| Anna Bridge |
180:96ed750bd169 | 988 | |
| Anna Bridge |
180:96ed750bd169 | 989 | /* |
| Anna Bridge |
180:96ed750bd169 | 990 | * @brief C custom defined SXTB16 for M3 and M0 processors |
| Anna Bridge |
180:96ed750bd169 | 991 | */ |
| Anna Bridge |
180:96ed750bd169 | 992 | CMSIS_INLINE __STATIC_INLINE uint32_t __SXTB16( |
| Anna Bridge |
180:96ed750bd169 | 993 | uint32_t x) |
| Anna Bridge |
180:96ed750bd169 | 994 | { |
| Anna Bridge |
180:96ed750bd169 | 995 | return ((uint32_t)(((((q31_t)x << 24) >> 24) & (q31_t)0x0000FFFF) | |
| Anna Bridge |
180:96ed750bd169 | 996 | ((((q31_t)x << 8) >> 8) & (q31_t)0xFFFF0000) )); |
| Anna Bridge |
180:96ed750bd169 | 997 | } |
| Anna Bridge |
180:96ed750bd169 | 998 | |
| Anna Bridge |
180:96ed750bd169 | 999 | /* |
| Anna Bridge |
180:96ed750bd169 | 1000 | * @brief C custom defined SMMLA for M3 and M0 processors |
| Anna Bridge |
180:96ed750bd169 | 1001 | */ |
| Anna Bridge |
180:96ed750bd169 | 1002 | CMSIS_INLINE __STATIC_INLINE int32_t __SMMLA( |
| Anna Bridge |
180:96ed750bd169 | 1003 | int32_t x, |
| Anna Bridge |
180:96ed750bd169 | 1004 | int32_t y, |
| Anna Bridge |
180:96ed750bd169 | 1005 | int32_t sum) |
| Anna Bridge |
180:96ed750bd169 | 1006 | { |
| Anna Bridge |
180:96ed750bd169 | 1007 | return (sum + (int32_t) (((int64_t) x * y) >> 32)); |
| Anna Bridge |
180:96ed750bd169 | 1008 | } |
| Anna Bridge |
180:96ed750bd169 | 1009 | |
| Anna Bridge |
180:96ed750bd169 | 1010 | #if 0 |
| Anna Bridge |
180:96ed750bd169 | 1011 | /* |
| Anna Bridge |
180:96ed750bd169 | 1012 | * @brief C custom defined PKHBT for unavailable DSP extension |
| Anna Bridge |
180:96ed750bd169 | 1013 | */ |
| Anna Bridge |
180:96ed750bd169 | 1014 | CMSIS_INLINE __STATIC_INLINE uint32_t __PKHBT( |
| Anna Bridge |
180:96ed750bd169 | 1015 | uint32_t x, |
| Anna Bridge |
180:96ed750bd169 | 1016 | uint32_t y, |
| Anna Bridge |
180:96ed750bd169 | 1017 | uint32_t leftshift) |
| Anna Bridge |
180:96ed750bd169 | 1018 | { |
| Anna Bridge |
180:96ed750bd169 | 1019 | return ( ((x ) & 0x0000FFFFUL) | |
| Anna Bridge |
180:96ed750bd169 | 1020 | ((y << leftshift) & 0xFFFF0000UL) ); |
| Anna Bridge |
180:96ed750bd169 | 1021 | } |
| Anna Bridge |
180:96ed750bd169 | 1022 | |
| Anna Bridge |
180:96ed750bd169 | 1023 | /* |
| Anna Bridge |
180:96ed750bd169 | 1024 | * @brief C custom defined PKHTB for unavailable DSP extension |
| Anna Bridge |
180:96ed750bd169 | 1025 | */ |
| Anna Bridge |
180:96ed750bd169 | 1026 | CMSIS_INLINE __STATIC_INLINE uint32_t __PKHTB( |
| Anna Bridge |
180:96ed750bd169 | 1027 | uint32_t x, |
| Anna Bridge |
180:96ed750bd169 | 1028 | uint32_t y, |
| Anna Bridge |
180:96ed750bd169 | 1029 | uint32_t rightshift) |
| Anna Bridge |
180:96ed750bd169 | 1030 | { |
| Anna Bridge |
180:96ed750bd169 | 1031 | return ( ((x ) & 0xFFFF0000UL) | |
| Anna Bridge |
180:96ed750bd169 | 1032 | ((y >> rightshift) & 0x0000FFFFUL) ); |
| Anna Bridge |
180:96ed750bd169 | 1033 | } |
| Anna Bridge |
180:96ed750bd169 | 1034 | #endif |
| Anna Bridge |
180:96ed750bd169 | 1035 | |
| Anna Bridge |
180:96ed750bd169 | 1036 | /* #endif // defined (ARM_MATH_CM3) || defined (ARM_MATH_CM0_FAMILY) */ |
| Anna Bridge |
180:96ed750bd169 | 1037 | #endif /* !defined (ARM_MATH_DSP) */ |
| Anna Bridge |
180:96ed750bd169 | 1038 | |
| Anna Bridge |
180:96ed750bd169 | 1039 | |
| Anna Bridge |
180:96ed750bd169 | 1040 | /** |
| Anna Bridge |
180:96ed750bd169 | 1041 | * @brief Instance structure for the Q7 FIR filter. |
| Anna Bridge |
180:96ed750bd169 | 1042 | */ |
| Anna Bridge |
180:96ed750bd169 | 1043 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 1044 | { |
| Anna Bridge |
180:96ed750bd169 | 1045 | uint16_t numTaps; /**< number of filter coefficients in the filter. */ |
| Anna Bridge |
180:96ed750bd169 | 1046 | q7_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ |
| Anna Bridge |
180:96ed750bd169 | 1047 | q7_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ |
| Anna Bridge |
180:96ed750bd169 | 1048 | } arm_fir_instance_q7; |
| Anna Bridge |
180:96ed750bd169 | 1049 | |
| Anna Bridge |
180:96ed750bd169 | 1050 | /** |
| Anna Bridge |
180:96ed750bd169 | 1051 | * @brief Instance structure for the Q15 FIR filter. |
| Anna Bridge |
180:96ed750bd169 | 1052 | */ |
| Anna Bridge |
180:96ed750bd169 | 1053 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 1054 | { |
| Anna Bridge |
180:96ed750bd169 | 1055 | uint16_t numTaps; /**< number of filter coefficients in the filter. */ |
| Anna Bridge |
180:96ed750bd169 | 1056 | q15_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ |
| Anna Bridge |
180:96ed750bd169 | 1057 | q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ |
| Anna Bridge |
180:96ed750bd169 | 1058 | } arm_fir_instance_q15; |
| Anna Bridge |
180:96ed750bd169 | 1059 | |
| Anna Bridge |
180:96ed750bd169 | 1060 | /** |
| Anna Bridge |
180:96ed750bd169 | 1061 | * @brief Instance structure for the Q31 FIR filter. |
| Anna Bridge |
180:96ed750bd169 | 1062 | */ |
| Anna Bridge |
180:96ed750bd169 | 1063 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 1064 | { |
| Anna Bridge |
180:96ed750bd169 | 1065 | uint16_t numTaps; /**< number of filter coefficients in the filter. */ |
| Anna Bridge |
180:96ed750bd169 | 1066 | q31_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ |
| Anna Bridge |
180:96ed750bd169 | 1067 | q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ |
| Anna Bridge |
180:96ed750bd169 | 1068 | } arm_fir_instance_q31; |
| Anna Bridge |
180:96ed750bd169 | 1069 | |
| Anna Bridge |
180:96ed750bd169 | 1070 | /** |
| Anna Bridge |
180:96ed750bd169 | 1071 | * @brief Instance structure for the floating-point FIR filter. |
| Anna Bridge |
180:96ed750bd169 | 1072 | */ |
| Anna Bridge |
180:96ed750bd169 | 1073 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 1074 | { |
| Anna Bridge |
180:96ed750bd169 | 1075 | uint16_t numTaps; /**< number of filter coefficients in the filter. */ |
| Anna Bridge |
180:96ed750bd169 | 1076 | float32_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ |
| Anna Bridge |
180:96ed750bd169 | 1077 | float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ |
| Anna Bridge |
180:96ed750bd169 | 1078 | } arm_fir_instance_f32; |
| Anna Bridge |
180:96ed750bd169 | 1079 | |
| Anna Bridge |
180:96ed750bd169 | 1080 | |
| Anna Bridge |
180:96ed750bd169 | 1081 | /** |
| Anna Bridge |
180:96ed750bd169 | 1082 | * @brief Processing function for the Q7 FIR filter. |
| Anna Bridge |
180:96ed750bd169 | 1083 | * @param[in] S points to an instance of the Q7 FIR filter structure. |
| Anna Bridge |
180:96ed750bd169 | 1084 | * @param[in] pSrc points to the block of input data. |
| Anna Bridge |
180:96ed750bd169 | 1085 | * @param[out] pDst points to the block of output data. |
| Anna Bridge |
180:96ed750bd169 | 1086 | * @param[in] blockSize number of samples to process. |
| Anna Bridge |
180:96ed750bd169 | 1087 | */ |
| Anna Bridge |
180:96ed750bd169 | 1088 | void arm_fir_q7( |
| Anna Bridge |
180:96ed750bd169 | 1089 | const arm_fir_instance_q7 * S, |
| Anna Bridge |
180:96ed750bd169 | 1090 | q7_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 1091 | q7_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 1092 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 1093 | |
| Anna Bridge |
180:96ed750bd169 | 1094 | |
| Anna Bridge |
180:96ed750bd169 | 1095 | /** |
| Anna Bridge |
180:96ed750bd169 | 1096 | * @brief Initialization function for the Q7 FIR filter. |
| Anna Bridge |
180:96ed750bd169 | 1097 | * @param[in,out] S points to an instance of the Q7 FIR structure. |
| Anna Bridge |
180:96ed750bd169 | 1098 | * @param[in] numTaps Number of filter coefficients in the filter. |
| Anna Bridge |
180:96ed750bd169 | 1099 | * @param[in] pCoeffs points to the filter coefficients. |
| Anna Bridge |
180:96ed750bd169 | 1100 | * @param[in] pState points to the state buffer. |
| Anna Bridge |
180:96ed750bd169 | 1101 | * @param[in] blockSize number of samples that are processed. |
| Anna Bridge |
180:96ed750bd169 | 1102 | */ |
| Anna Bridge |
180:96ed750bd169 | 1103 | void arm_fir_init_q7( |
| Anna Bridge |
180:96ed750bd169 | 1104 | arm_fir_instance_q7 * S, |
| Anna Bridge |
180:96ed750bd169 | 1105 | uint16_t numTaps, |
| Anna Bridge |
180:96ed750bd169 | 1106 | q7_t * pCoeffs, |
| Anna Bridge |
180:96ed750bd169 | 1107 | q7_t * pState, |
| Anna Bridge |
180:96ed750bd169 | 1108 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 1109 | |
| Anna Bridge |
180:96ed750bd169 | 1110 | |
| Anna Bridge |
180:96ed750bd169 | 1111 | /** |
| Anna Bridge |
180:96ed750bd169 | 1112 | * @brief Processing function for the Q15 FIR filter. |
| Anna Bridge |
180:96ed750bd169 | 1113 | * @param[in] S points to an instance of the Q15 FIR structure. |
| Anna Bridge |
180:96ed750bd169 | 1114 | * @param[in] pSrc points to the block of input data. |
| Anna Bridge |
180:96ed750bd169 | 1115 | * @param[out] pDst points to the block of output data. |
| Anna Bridge |
180:96ed750bd169 | 1116 | * @param[in] blockSize number of samples to process. |
| Anna Bridge |
180:96ed750bd169 | 1117 | */ |
| Anna Bridge |
180:96ed750bd169 | 1118 | void arm_fir_q15( |
| Anna Bridge |
180:96ed750bd169 | 1119 | const arm_fir_instance_q15 * S, |
| Anna Bridge |
180:96ed750bd169 | 1120 | q15_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 1121 | q15_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 1122 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 1123 | |
| Anna Bridge |
180:96ed750bd169 | 1124 | |
| Anna Bridge |
180:96ed750bd169 | 1125 | /** |
| Anna Bridge |
180:96ed750bd169 | 1126 | * @brief Processing function for the fast Q15 FIR filter for Cortex-M3 and Cortex-M4. |
| Anna Bridge |
180:96ed750bd169 | 1127 | * @param[in] S points to an instance of the Q15 FIR filter structure. |
| Anna Bridge |
180:96ed750bd169 | 1128 | * @param[in] pSrc points to the block of input data. |
| Anna Bridge |
180:96ed750bd169 | 1129 | * @param[out] pDst points to the block of output data. |
| Anna Bridge |
180:96ed750bd169 | 1130 | * @param[in] blockSize number of samples to process. |
| Anna Bridge |
180:96ed750bd169 | 1131 | */ |
| Anna Bridge |
180:96ed750bd169 | 1132 | void arm_fir_fast_q15( |
| Anna Bridge |
180:96ed750bd169 | 1133 | const arm_fir_instance_q15 * S, |
| Anna Bridge |
180:96ed750bd169 | 1134 | q15_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 1135 | q15_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 1136 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 1137 | |
| Anna Bridge |
180:96ed750bd169 | 1138 | |
| Anna Bridge |
180:96ed750bd169 | 1139 | /** |
| Anna Bridge |
180:96ed750bd169 | 1140 | * @brief Initialization function for the Q15 FIR filter. |
| Anna Bridge |
180:96ed750bd169 | 1141 | * @param[in,out] S points to an instance of the Q15 FIR filter structure. |
| Anna Bridge |
180:96ed750bd169 | 1142 | * @param[in] numTaps Number of filter coefficients in the filter. Must be even and greater than or equal to 4. |
| Anna Bridge |
180:96ed750bd169 | 1143 | * @param[in] pCoeffs points to the filter coefficients. |
| Anna Bridge |
180:96ed750bd169 | 1144 | * @param[in] pState points to the state buffer. |
| Anna Bridge |
180:96ed750bd169 | 1145 | * @param[in] blockSize number of samples that are processed at a time. |
| Anna Bridge |
180:96ed750bd169 | 1146 | * @return The function returns ARM_MATH_SUCCESS if initialization was successful or ARM_MATH_ARGUMENT_ERROR if |
| Anna Bridge |
180:96ed750bd169 | 1147 | * <code>numTaps</code> is not a supported value. |
| Anna Bridge |
180:96ed750bd169 | 1148 | */ |
| Anna Bridge |
180:96ed750bd169 | 1149 | arm_status arm_fir_init_q15( |
| Anna Bridge |
180:96ed750bd169 | 1150 | arm_fir_instance_q15 * S, |
| Anna Bridge |
180:96ed750bd169 | 1151 | uint16_t numTaps, |
| Anna Bridge |
180:96ed750bd169 | 1152 | q15_t * pCoeffs, |
| Anna Bridge |
180:96ed750bd169 | 1153 | q15_t * pState, |
| Anna Bridge |
180:96ed750bd169 | 1154 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 1155 | |
| Anna Bridge |
180:96ed750bd169 | 1156 | |
| Anna Bridge |
180:96ed750bd169 | 1157 | /** |
| Anna Bridge |
180:96ed750bd169 | 1158 | * @brief Processing function for the Q31 FIR filter. |
| Anna Bridge |
180:96ed750bd169 | 1159 | * @param[in] S points to an instance of the Q31 FIR filter structure. |
| Anna Bridge |
180:96ed750bd169 | 1160 | * @param[in] pSrc points to the block of input data. |
| Anna Bridge |
180:96ed750bd169 | 1161 | * @param[out] pDst points to the block of output data. |
| Anna Bridge |
180:96ed750bd169 | 1162 | * @param[in] blockSize number of samples to process. |
| Anna Bridge |
180:96ed750bd169 | 1163 | */ |
| Anna Bridge |
180:96ed750bd169 | 1164 | void arm_fir_q31( |
| Anna Bridge |
180:96ed750bd169 | 1165 | const arm_fir_instance_q31 * S, |
| Anna Bridge |
180:96ed750bd169 | 1166 | q31_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 1167 | q31_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 1168 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 1169 | |
| Anna Bridge |
180:96ed750bd169 | 1170 | |
| Anna Bridge |
180:96ed750bd169 | 1171 | /** |
| Anna Bridge |
180:96ed750bd169 | 1172 | * @brief Processing function for the fast Q31 FIR filter for Cortex-M3 and Cortex-M4. |
| Anna Bridge |
180:96ed750bd169 | 1173 | * @param[in] S points to an instance of the Q31 FIR structure. |
| Anna Bridge |
180:96ed750bd169 | 1174 | * @param[in] pSrc points to the block of input data. |
| Anna Bridge |
180:96ed750bd169 | 1175 | * @param[out] pDst points to the block of output data. |
| Anna Bridge |
180:96ed750bd169 | 1176 | * @param[in] blockSize number of samples to process. |
| Anna Bridge |
180:96ed750bd169 | 1177 | */ |
| Anna Bridge |
180:96ed750bd169 | 1178 | void arm_fir_fast_q31( |
| Anna Bridge |
180:96ed750bd169 | 1179 | const arm_fir_instance_q31 * S, |
| Anna Bridge |
180:96ed750bd169 | 1180 | q31_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 1181 | q31_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 1182 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 1183 | |
| Anna Bridge |
180:96ed750bd169 | 1184 | |
| Anna Bridge |
180:96ed750bd169 | 1185 | /** |
| Anna Bridge |
180:96ed750bd169 | 1186 | * @brief Initialization function for the Q31 FIR filter. |
| Anna Bridge |
180:96ed750bd169 | 1187 | * @param[in,out] S points to an instance of the Q31 FIR structure. |
| Anna Bridge |
180:96ed750bd169 | 1188 | * @param[in] numTaps Number of filter coefficients in the filter. |
| Anna Bridge |
180:96ed750bd169 | 1189 | * @param[in] pCoeffs points to the filter coefficients. |
| Anna Bridge |
180:96ed750bd169 | 1190 | * @param[in] pState points to the state buffer. |
| Anna Bridge |
180:96ed750bd169 | 1191 | * @param[in] blockSize number of samples that are processed at a time. |
| Anna Bridge |
180:96ed750bd169 | 1192 | */ |
| Anna Bridge |
180:96ed750bd169 | 1193 | void arm_fir_init_q31( |
| Anna Bridge |
180:96ed750bd169 | 1194 | arm_fir_instance_q31 * S, |
| Anna Bridge |
180:96ed750bd169 | 1195 | uint16_t numTaps, |
| Anna Bridge |
180:96ed750bd169 | 1196 | q31_t * pCoeffs, |
| Anna Bridge |
180:96ed750bd169 | 1197 | q31_t * pState, |
| Anna Bridge |
180:96ed750bd169 | 1198 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 1199 | |
| Anna Bridge |
180:96ed750bd169 | 1200 | |
| Anna Bridge |
180:96ed750bd169 | 1201 | /** |
| Anna Bridge |
180:96ed750bd169 | 1202 | * @brief Processing function for the floating-point FIR filter. |
| Anna Bridge |
180:96ed750bd169 | 1203 | * @param[in] S points to an instance of the floating-point FIR structure. |
| Anna Bridge |
180:96ed750bd169 | 1204 | * @param[in] pSrc points to the block of input data. |
| Anna Bridge |
180:96ed750bd169 | 1205 | * @param[out] pDst points to the block of output data. |
| Anna Bridge |
180:96ed750bd169 | 1206 | * @param[in] blockSize number of samples to process. |
| Anna Bridge |
180:96ed750bd169 | 1207 | */ |
| Anna Bridge |
180:96ed750bd169 | 1208 | void arm_fir_f32( |
| Anna Bridge |
180:96ed750bd169 | 1209 | const arm_fir_instance_f32 * S, |
| Anna Bridge |
180:96ed750bd169 | 1210 | float32_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 1211 | float32_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 1212 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 1213 | |
| Anna Bridge |
180:96ed750bd169 | 1214 | |
| Anna Bridge |
180:96ed750bd169 | 1215 | /** |
| Anna Bridge |
180:96ed750bd169 | 1216 | * @brief Initialization function for the floating-point FIR filter. |
| Anna Bridge |
180:96ed750bd169 | 1217 | * @param[in,out] S points to an instance of the floating-point FIR filter structure. |
| Anna Bridge |
180:96ed750bd169 | 1218 | * @param[in] numTaps Number of filter coefficients in the filter. |
| Anna Bridge |
180:96ed750bd169 | 1219 | * @param[in] pCoeffs points to the filter coefficients. |
| Anna Bridge |
180:96ed750bd169 | 1220 | * @param[in] pState points to the state buffer. |
| Anna Bridge |
180:96ed750bd169 | 1221 | * @param[in] blockSize number of samples that are processed at a time. |
| Anna Bridge |
180:96ed750bd169 | 1222 | */ |
| Anna Bridge |
180:96ed750bd169 | 1223 | void arm_fir_init_f32( |
| Anna Bridge |
180:96ed750bd169 | 1224 | arm_fir_instance_f32 * S, |
| Anna Bridge |
180:96ed750bd169 | 1225 | uint16_t numTaps, |
| Anna Bridge |
180:96ed750bd169 | 1226 | float32_t * pCoeffs, |
| Anna Bridge |
180:96ed750bd169 | 1227 | float32_t * pState, |
| Anna Bridge |
180:96ed750bd169 | 1228 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 1229 | |
| Anna Bridge |
180:96ed750bd169 | 1230 | |
| Anna Bridge |
180:96ed750bd169 | 1231 | /** |
| Anna Bridge |
180:96ed750bd169 | 1232 | * @brief Instance structure for the Q15 Biquad cascade filter. |
| Anna Bridge |
180:96ed750bd169 | 1233 | */ |
| Anna Bridge |
180:96ed750bd169 | 1234 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 1235 | { |
| Anna Bridge |
180:96ed750bd169 | 1236 | int8_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ |
| Anna Bridge |
180:96ed750bd169 | 1237 | q15_t *pState; /**< Points to the array of state coefficients. The array is of length 4*numStages. */ |
| Anna Bridge |
180:96ed750bd169 | 1238 | q15_t *pCoeffs; /**< Points to the array of coefficients. The array is of length 5*numStages. */ |
| Anna Bridge |
180:96ed750bd169 | 1239 | int8_t postShift; /**< Additional shift, in bits, applied to each output sample. */ |
| Anna Bridge |
180:96ed750bd169 | 1240 | } arm_biquad_casd_df1_inst_q15; |
| Anna Bridge |
180:96ed750bd169 | 1241 | |
| Anna Bridge |
180:96ed750bd169 | 1242 | /** |
| Anna Bridge |
180:96ed750bd169 | 1243 | * @brief Instance structure for the Q31 Biquad cascade filter. |
| Anna Bridge |
180:96ed750bd169 | 1244 | */ |
| Anna Bridge |
180:96ed750bd169 | 1245 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 1246 | { |
| Anna Bridge |
180:96ed750bd169 | 1247 | uint32_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ |
| Anna Bridge |
180:96ed750bd169 | 1248 | q31_t *pState; /**< Points to the array of state coefficients. The array is of length 4*numStages. */ |
| Anna Bridge |
180:96ed750bd169 | 1249 | q31_t *pCoeffs; /**< Points to the array of coefficients. The array is of length 5*numStages. */ |
| Anna Bridge |
180:96ed750bd169 | 1250 | uint8_t postShift; /**< Additional shift, in bits, applied to each output sample. */ |
| Anna Bridge |
180:96ed750bd169 | 1251 | } arm_biquad_casd_df1_inst_q31; |
| Anna Bridge |
180:96ed750bd169 | 1252 | |
| Anna Bridge |
180:96ed750bd169 | 1253 | /** |
| Anna Bridge |
180:96ed750bd169 | 1254 | * @brief Instance structure for the floating-point Biquad cascade filter. |
| Anna Bridge |
180:96ed750bd169 | 1255 | */ |
| Anna Bridge |
180:96ed750bd169 | 1256 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 1257 | { |
| Anna Bridge |
180:96ed750bd169 | 1258 | uint32_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ |
| Anna Bridge |
180:96ed750bd169 | 1259 | float32_t *pState; /**< Points to the array of state coefficients. The array is of length 4*numStages. */ |
| Anna Bridge |
180:96ed750bd169 | 1260 | float32_t *pCoeffs; /**< Points to the array of coefficients. The array is of length 5*numStages. */ |
| Anna Bridge |
180:96ed750bd169 | 1261 | } arm_biquad_casd_df1_inst_f32; |
| Anna Bridge |
180:96ed750bd169 | 1262 | |
| Anna Bridge |
180:96ed750bd169 | 1263 | |
| Anna Bridge |
180:96ed750bd169 | 1264 | /** |
| Anna Bridge |
180:96ed750bd169 | 1265 | * @brief Processing function for the Q15 Biquad cascade filter. |
| Anna Bridge |
180:96ed750bd169 | 1266 | * @param[in] S points to an instance of the Q15 Biquad cascade structure. |
| Anna Bridge |
180:96ed750bd169 | 1267 | * @param[in] pSrc points to the block of input data. |
| Anna Bridge |
180:96ed750bd169 | 1268 | * @param[out] pDst points to the block of output data. |
| Anna Bridge |
180:96ed750bd169 | 1269 | * @param[in] blockSize number of samples to process. |
| Anna Bridge |
180:96ed750bd169 | 1270 | */ |
| Anna Bridge |
180:96ed750bd169 | 1271 | void arm_biquad_cascade_df1_q15( |
| Anna Bridge |
180:96ed750bd169 | 1272 | const arm_biquad_casd_df1_inst_q15 * S, |
| Anna Bridge |
180:96ed750bd169 | 1273 | q15_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 1274 | q15_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 1275 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 1276 | |
| Anna Bridge |
180:96ed750bd169 | 1277 | |
| Anna Bridge |
180:96ed750bd169 | 1278 | /** |
| Anna Bridge |
180:96ed750bd169 | 1279 | * @brief Initialization function for the Q15 Biquad cascade filter. |
| Anna Bridge |
180:96ed750bd169 | 1280 | * @param[in,out] S points to an instance of the Q15 Biquad cascade structure. |
| Anna Bridge |
180:96ed750bd169 | 1281 | * @param[in] numStages number of 2nd order stages in the filter. |
| Anna Bridge |
180:96ed750bd169 | 1282 | * @param[in] pCoeffs points to the filter coefficients. |
| Anna Bridge |
180:96ed750bd169 | 1283 | * @param[in] pState points to the state buffer. |
| Anna Bridge |
180:96ed750bd169 | 1284 | * @param[in] postShift Shift to be applied to the output. Varies according to the coefficients format |
| Anna Bridge |
180:96ed750bd169 | 1285 | */ |
| Anna Bridge |
180:96ed750bd169 | 1286 | void arm_biquad_cascade_df1_init_q15( |
| Anna Bridge |
180:96ed750bd169 | 1287 | arm_biquad_casd_df1_inst_q15 * S, |
| Anna Bridge |
180:96ed750bd169 | 1288 | uint8_t numStages, |
| Anna Bridge |
180:96ed750bd169 | 1289 | q15_t * pCoeffs, |
| Anna Bridge |
180:96ed750bd169 | 1290 | q15_t * pState, |
| Anna Bridge |
180:96ed750bd169 | 1291 | int8_t postShift); |
| Anna Bridge |
180:96ed750bd169 | 1292 | |
| Anna Bridge |
180:96ed750bd169 | 1293 | |
| Anna Bridge |
180:96ed750bd169 | 1294 | /** |
| Anna Bridge |
180:96ed750bd169 | 1295 | * @brief Fast but less precise processing function for the Q15 Biquad cascade filter for Cortex-M3 and Cortex-M4. |
| Anna Bridge |
180:96ed750bd169 | 1296 | * @param[in] S points to an instance of the Q15 Biquad cascade structure. |
| Anna Bridge |
180:96ed750bd169 | 1297 | * @param[in] pSrc points to the block of input data. |
| Anna Bridge |
180:96ed750bd169 | 1298 | * @param[out] pDst points to the block of output data. |
| Anna Bridge |
180:96ed750bd169 | 1299 | * @param[in] blockSize number of samples to process. |
| Anna Bridge |
180:96ed750bd169 | 1300 | */ |
| Anna Bridge |
180:96ed750bd169 | 1301 | void arm_biquad_cascade_df1_fast_q15( |
| Anna Bridge |
180:96ed750bd169 | 1302 | const arm_biquad_casd_df1_inst_q15 * S, |
| Anna Bridge |
180:96ed750bd169 | 1303 | q15_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 1304 | q15_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 1305 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 1306 | |
| Anna Bridge |
180:96ed750bd169 | 1307 | |
| Anna Bridge |
180:96ed750bd169 | 1308 | /** |
| Anna Bridge |
180:96ed750bd169 | 1309 | * @brief Processing function for the Q31 Biquad cascade filter |
| Anna Bridge |
180:96ed750bd169 | 1310 | * @param[in] S points to an instance of the Q31 Biquad cascade structure. |
| Anna Bridge |
180:96ed750bd169 | 1311 | * @param[in] pSrc points to the block of input data. |
| Anna Bridge |
180:96ed750bd169 | 1312 | * @param[out] pDst points to the block of output data. |
| Anna Bridge |
180:96ed750bd169 | 1313 | * @param[in] blockSize number of samples to process. |
| Anna Bridge |
180:96ed750bd169 | 1314 | */ |
| Anna Bridge |
180:96ed750bd169 | 1315 | void arm_biquad_cascade_df1_q31( |
| Anna Bridge |
180:96ed750bd169 | 1316 | const arm_biquad_casd_df1_inst_q31 * S, |
| Anna Bridge |
180:96ed750bd169 | 1317 | q31_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 1318 | q31_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 1319 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 1320 | |
| Anna Bridge |
180:96ed750bd169 | 1321 | |
| Anna Bridge |
180:96ed750bd169 | 1322 | /** |
| Anna Bridge |
180:96ed750bd169 | 1323 | * @brief Fast but less precise processing function for the Q31 Biquad cascade filter for Cortex-M3 and Cortex-M4. |
| Anna Bridge |
180:96ed750bd169 | 1324 | * @param[in] S points to an instance of the Q31 Biquad cascade structure. |
| Anna Bridge |
180:96ed750bd169 | 1325 | * @param[in] pSrc points to the block of input data. |
| Anna Bridge |
180:96ed750bd169 | 1326 | * @param[out] pDst points to the block of output data. |
| Anna Bridge |
180:96ed750bd169 | 1327 | * @param[in] blockSize number of samples to process. |
| Anna Bridge |
180:96ed750bd169 | 1328 | */ |
| Anna Bridge |
180:96ed750bd169 | 1329 | void arm_biquad_cascade_df1_fast_q31( |
| Anna Bridge |
180:96ed750bd169 | 1330 | const arm_biquad_casd_df1_inst_q31 * S, |
| Anna Bridge |
180:96ed750bd169 | 1331 | q31_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 1332 | q31_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 1333 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 1334 | |
| Anna Bridge |
180:96ed750bd169 | 1335 | |
| Anna Bridge |
180:96ed750bd169 | 1336 | /** |
| Anna Bridge |
180:96ed750bd169 | 1337 | * @brief Initialization function for the Q31 Biquad cascade filter. |
| Anna Bridge |
180:96ed750bd169 | 1338 | * @param[in,out] S points to an instance of the Q31 Biquad cascade structure. |
| Anna Bridge |
180:96ed750bd169 | 1339 | * @param[in] numStages number of 2nd order stages in the filter. |
| Anna Bridge |
180:96ed750bd169 | 1340 | * @param[in] pCoeffs points to the filter coefficients. |
| Anna Bridge |
180:96ed750bd169 | 1341 | * @param[in] pState points to the state buffer. |
| Anna Bridge |
180:96ed750bd169 | 1342 | * @param[in] postShift Shift to be applied to the output. Varies according to the coefficients format |
| Anna Bridge |
180:96ed750bd169 | 1343 | */ |
| Anna Bridge |
180:96ed750bd169 | 1344 | void arm_biquad_cascade_df1_init_q31( |
| Anna Bridge |
180:96ed750bd169 | 1345 | arm_biquad_casd_df1_inst_q31 * S, |
| Anna Bridge |
180:96ed750bd169 | 1346 | uint8_t numStages, |
| Anna Bridge |
180:96ed750bd169 | 1347 | q31_t * pCoeffs, |
| Anna Bridge |
180:96ed750bd169 | 1348 | q31_t * pState, |
| Anna Bridge |
180:96ed750bd169 | 1349 | int8_t postShift); |
| Anna Bridge |
180:96ed750bd169 | 1350 | |
| Anna Bridge |
180:96ed750bd169 | 1351 | |
| Anna Bridge |
180:96ed750bd169 | 1352 | /** |
| Anna Bridge |
180:96ed750bd169 | 1353 | * @brief Processing function for the floating-point Biquad cascade filter. |
| Anna Bridge |
180:96ed750bd169 | 1354 | * @param[in] S points to an instance of the floating-point Biquad cascade structure. |
| Anna Bridge |
180:96ed750bd169 | 1355 | * @param[in] pSrc points to the block of input data. |
| Anna Bridge |
180:96ed750bd169 | 1356 | * @param[out] pDst points to the block of output data. |
| Anna Bridge |
180:96ed750bd169 | 1357 | * @param[in] blockSize number of samples to process. |
| Anna Bridge |
180:96ed750bd169 | 1358 | */ |
| Anna Bridge |
180:96ed750bd169 | 1359 | void arm_biquad_cascade_df1_f32( |
| Anna Bridge |
180:96ed750bd169 | 1360 | const arm_biquad_casd_df1_inst_f32 * S, |
| Anna Bridge |
180:96ed750bd169 | 1361 | float32_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 1362 | float32_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 1363 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 1364 | |
| Anna Bridge |
180:96ed750bd169 | 1365 | |
| Anna Bridge |
180:96ed750bd169 | 1366 | /** |
| Anna Bridge |
180:96ed750bd169 | 1367 | * @brief Initialization function for the floating-point Biquad cascade filter. |
| Anna Bridge |
180:96ed750bd169 | 1368 | * @param[in,out] S points to an instance of the floating-point Biquad cascade structure. |
| Anna Bridge |
180:96ed750bd169 | 1369 | * @param[in] numStages number of 2nd order stages in the filter. |
| Anna Bridge |
180:96ed750bd169 | 1370 | * @param[in] pCoeffs points to the filter coefficients. |
| Anna Bridge |
180:96ed750bd169 | 1371 | * @param[in] pState points to the state buffer. |
| Anna Bridge |
180:96ed750bd169 | 1372 | */ |
| Anna Bridge |
180:96ed750bd169 | 1373 | void arm_biquad_cascade_df1_init_f32( |
| Anna Bridge |
180:96ed750bd169 | 1374 | arm_biquad_casd_df1_inst_f32 * S, |
| Anna Bridge |
180:96ed750bd169 | 1375 | uint8_t numStages, |
| Anna Bridge |
180:96ed750bd169 | 1376 | float32_t * pCoeffs, |
| Anna Bridge |
180:96ed750bd169 | 1377 | float32_t * pState); |
| Anna Bridge |
180:96ed750bd169 | 1378 | |
| Anna Bridge |
180:96ed750bd169 | 1379 | |
| Anna Bridge |
180:96ed750bd169 | 1380 | /** |
| Anna Bridge |
180:96ed750bd169 | 1381 | * @brief Instance structure for the floating-point matrix structure. |
| Anna Bridge |
180:96ed750bd169 | 1382 | */ |
| Anna Bridge |
180:96ed750bd169 | 1383 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 1384 | { |
| Anna Bridge |
180:96ed750bd169 | 1385 | uint16_t numRows; /**< number of rows of the matrix. */ |
| Anna Bridge |
180:96ed750bd169 | 1386 | uint16_t numCols; /**< number of columns of the matrix. */ |
| Anna Bridge |
180:96ed750bd169 | 1387 | float32_t *pData; /**< points to the data of the matrix. */ |
| Anna Bridge |
180:96ed750bd169 | 1388 | } arm_matrix_instance_f32; |
| Anna Bridge |
180:96ed750bd169 | 1389 | |
| Anna Bridge |
180:96ed750bd169 | 1390 | |
| Anna Bridge |
180:96ed750bd169 | 1391 | /** |
| Anna Bridge |
180:96ed750bd169 | 1392 | * @brief Instance structure for the floating-point matrix structure. |
| Anna Bridge |
180:96ed750bd169 | 1393 | */ |
| Anna Bridge |
180:96ed750bd169 | 1394 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 1395 | { |
| Anna Bridge |
180:96ed750bd169 | 1396 | uint16_t numRows; /**< number of rows of the matrix. */ |
| Anna Bridge |
180:96ed750bd169 | 1397 | uint16_t numCols; /**< number of columns of the matrix. */ |
| Anna Bridge |
180:96ed750bd169 | 1398 | float64_t *pData; /**< points to the data of the matrix. */ |
| Anna Bridge |
180:96ed750bd169 | 1399 | } arm_matrix_instance_f64; |
| Anna Bridge |
180:96ed750bd169 | 1400 | |
| Anna Bridge |
180:96ed750bd169 | 1401 | /** |
| Anna Bridge |
180:96ed750bd169 | 1402 | * @brief Instance structure for the Q15 matrix structure. |
| Anna Bridge |
180:96ed750bd169 | 1403 | */ |
| Anna Bridge |
180:96ed750bd169 | 1404 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 1405 | { |
| Anna Bridge |
180:96ed750bd169 | 1406 | uint16_t numRows; /**< number of rows of the matrix. */ |
| Anna Bridge |
180:96ed750bd169 | 1407 | uint16_t numCols; /**< number of columns of the matrix. */ |
| Anna Bridge |
180:96ed750bd169 | 1408 | q15_t *pData; /**< points to the data of the matrix. */ |
| Anna Bridge |
180:96ed750bd169 | 1409 | } arm_matrix_instance_q15; |
| Anna Bridge |
180:96ed750bd169 | 1410 | |
| Anna Bridge |
180:96ed750bd169 | 1411 | /** |
| Anna Bridge |
180:96ed750bd169 | 1412 | * @brief Instance structure for the Q31 matrix structure. |
| Anna Bridge |
180:96ed750bd169 | 1413 | */ |
| Anna Bridge |
180:96ed750bd169 | 1414 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 1415 | { |
| Anna Bridge |
180:96ed750bd169 | 1416 | uint16_t numRows; /**< number of rows of the matrix. */ |
| Anna Bridge |
180:96ed750bd169 | 1417 | uint16_t numCols; /**< number of columns of the matrix. */ |
| Anna Bridge |
180:96ed750bd169 | 1418 | q31_t *pData; /**< points to the data of the matrix. */ |
| Anna Bridge |
180:96ed750bd169 | 1419 | } arm_matrix_instance_q31; |
| Anna Bridge |
180:96ed750bd169 | 1420 | |
| Anna Bridge |
180:96ed750bd169 | 1421 | |
| Anna Bridge |
180:96ed750bd169 | 1422 | /** |
| Anna Bridge |
180:96ed750bd169 | 1423 | * @brief Floating-point matrix addition. |
| Anna Bridge |
180:96ed750bd169 | 1424 | * @param[in] pSrcA points to the first input matrix structure |
| Anna Bridge |
180:96ed750bd169 | 1425 | * @param[in] pSrcB points to the second input matrix structure |
| Anna Bridge |
180:96ed750bd169 | 1426 | * @param[out] pDst points to output matrix structure |
| Anna Bridge |
180:96ed750bd169 | 1427 | * @return The function returns either |
| Anna Bridge |
180:96ed750bd169 | 1428 | * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking. |
| Anna Bridge |
180:96ed750bd169 | 1429 | */ |
| Anna Bridge |
180:96ed750bd169 | 1430 | arm_status arm_mat_add_f32( |
| Anna Bridge |
180:96ed750bd169 | 1431 | const arm_matrix_instance_f32 * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 1432 | const arm_matrix_instance_f32 * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 1433 | arm_matrix_instance_f32 * pDst); |
| Anna Bridge |
180:96ed750bd169 | 1434 | |
| Anna Bridge |
180:96ed750bd169 | 1435 | |
| Anna Bridge |
180:96ed750bd169 | 1436 | /** |
| Anna Bridge |
180:96ed750bd169 | 1437 | * @brief Q15 matrix addition. |
| Anna Bridge |
180:96ed750bd169 | 1438 | * @param[in] pSrcA points to the first input matrix structure |
| Anna Bridge |
180:96ed750bd169 | 1439 | * @param[in] pSrcB points to the second input matrix structure |
| Anna Bridge |
180:96ed750bd169 | 1440 | * @param[out] pDst points to output matrix structure |
| Anna Bridge |
180:96ed750bd169 | 1441 | * @return The function returns either |
| Anna Bridge |
180:96ed750bd169 | 1442 | * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking. |
| Anna Bridge |
180:96ed750bd169 | 1443 | */ |
| Anna Bridge |
180:96ed750bd169 | 1444 | arm_status arm_mat_add_q15( |
| Anna Bridge |
180:96ed750bd169 | 1445 | const arm_matrix_instance_q15 * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 1446 | const arm_matrix_instance_q15 * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 1447 | arm_matrix_instance_q15 * pDst); |
| Anna Bridge |
180:96ed750bd169 | 1448 | |
| Anna Bridge |
180:96ed750bd169 | 1449 | |
| Anna Bridge |
180:96ed750bd169 | 1450 | /** |
| Anna Bridge |
180:96ed750bd169 | 1451 | * @brief Q31 matrix addition. |
| Anna Bridge |
180:96ed750bd169 | 1452 | * @param[in] pSrcA points to the first input matrix structure |
| Anna Bridge |
180:96ed750bd169 | 1453 | * @param[in] pSrcB points to the second input matrix structure |
| Anna Bridge |
180:96ed750bd169 | 1454 | * @param[out] pDst points to output matrix structure |
| Anna Bridge |
180:96ed750bd169 | 1455 | * @return The function returns either |
| Anna Bridge |
180:96ed750bd169 | 1456 | * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking. |
| Anna Bridge |
180:96ed750bd169 | 1457 | */ |
| Anna Bridge |
180:96ed750bd169 | 1458 | arm_status arm_mat_add_q31( |
| Anna Bridge |
180:96ed750bd169 | 1459 | const arm_matrix_instance_q31 * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 1460 | const arm_matrix_instance_q31 * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 1461 | arm_matrix_instance_q31 * pDst); |
| Anna Bridge |
180:96ed750bd169 | 1462 | |
| Anna Bridge |
180:96ed750bd169 | 1463 | |
| Anna Bridge |
180:96ed750bd169 | 1464 | /** |
| Anna Bridge |
180:96ed750bd169 | 1465 | * @brief Floating-point, complex, matrix multiplication. |
| Anna Bridge |
180:96ed750bd169 | 1466 | * @param[in] pSrcA points to the first input matrix structure |
| Anna Bridge |
180:96ed750bd169 | 1467 | * @param[in] pSrcB points to the second input matrix structure |
| Anna Bridge |
180:96ed750bd169 | 1468 | * @param[out] pDst points to output matrix structure |
| Anna Bridge |
180:96ed750bd169 | 1469 | * @return The function returns either |
| Anna Bridge |
180:96ed750bd169 | 1470 | * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking. |
| Anna Bridge |
180:96ed750bd169 | 1471 | */ |
| Anna Bridge |
180:96ed750bd169 | 1472 | arm_status arm_mat_cmplx_mult_f32( |
| Anna Bridge |
180:96ed750bd169 | 1473 | const arm_matrix_instance_f32 * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 1474 | const arm_matrix_instance_f32 * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 1475 | arm_matrix_instance_f32 * pDst); |
| Anna Bridge |
180:96ed750bd169 | 1476 | |
| Anna Bridge |
180:96ed750bd169 | 1477 | |
| Anna Bridge |
180:96ed750bd169 | 1478 | /** |
| Anna Bridge |
180:96ed750bd169 | 1479 | * @brief Q15, complex, matrix multiplication. |
| Anna Bridge |
180:96ed750bd169 | 1480 | * @param[in] pSrcA points to the first input matrix structure |
| Anna Bridge |
180:96ed750bd169 | 1481 | * @param[in] pSrcB points to the second input matrix structure |
| Anna Bridge |
180:96ed750bd169 | 1482 | * @param[out] pDst points to output matrix structure |
| Anna Bridge |
180:96ed750bd169 | 1483 | * @return The function returns either |
| Anna Bridge |
180:96ed750bd169 | 1484 | * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking. |
| Anna Bridge |
180:96ed750bd169 | 1485 | */ |
| Anna Bridge |
180:96ed750bd169 | 1486 | arm_status arm_mat_cmplx_mult_q15( |
| Anna Bridge |
180:96ed750bd169 | 1487 | const arm_matrix_instance_q15 * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 1488 | const arm_matrix_instance_q15 * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 1489 | arm_matrix_instance_q15 * pDst, |
| Anna Bridge |
180:96ed750bd169 | 1490 | q15_t * pScratch); |
| Anna Bridge |
180:96ed750bd169 | 1491 | |
| Anna Bridge |
180:96ed750bd169 | 1492 | |
| Anna Bridge |
180:96ed750bd169 | 1493 | /** |
| Anna Bridge |
180:96ed750bd169 | 1494 | * @brief Q31, complex, matrix multiplication. |
| Anna Bridge |
180:96ed750bd169 | 1495 | * @param[in] pSrcA points to the first input matrix structure |
| Anna Bridge |
180:96ed750bd169 | 1496 | * @param[in] pSrcB points to the second input matrix structure |
| Anna Bridge |
180:96ed750bd169 | 1497 | * @param[out] pDst points to output matrix structure |
| Anna Bridge |
180:96ed750bd169 | 1498 | * @return The function returns either |
| Anna Bridge |
180:96ed750bd169 | 1499 | * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking. |
| Anna Bridge |
180:96ed750bd169 | 1500 | */ |
| Anna Bridge |
180:96ed750bd169 | 1501 | arm_status arm_mat_cmplx_mult_q31( |
| Anna Bridge |
180:96ed750bd169 | 1502 | const arm_matrix_instance_q31 * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 1503 | const arm_matrix_instance_q31 * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 1504 | arm_matrix_instance_q31 * pDst); |
| Anna Bridge |
180:96ed750bd169 | 1505 | |
| Anna Bridge |
180:96ed750bd169 | 1506 | |
| Anna Bridge |
180:96ed750bd169 | 1507 | /** |
| Anna Bridge |
180:96ed750bd169 | 1508 | * @brief Floating-point matrix transpose. |
| Anna Bridge |
180:96ed750bd169 | 1509 | * @param[in] pSrc points to the input matrix |
| Anna Bridge |
180:96ed750bd169 | 1510 | * @param[out] pDst points to the output matrix |
| Anna Bridge |
180:96ed750bd169 | 1511 | * @return The function returns either <code>ARM_MATH_SIZE_MISMATCH</code> |
| Anna Bridge |
180:96ed750bd169 | 1512 | * or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking. |
| Anna Bridge |
180:96ed750bd169 | 1513 | */ |
| Anna Bridge |
180:96ed750bd169 | 1514 | arm_status arm_mat_trans_f32( |
| Anna Bridge |
180:96ed750bd169 | 1515 | const arm_matrix_instance_f32 * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 1516 | arm_matrix_instance_f32 * pDst); |
| Anna Bridge |
180:96ed750bd169 | 1517 | |
| Anna Bridge |
180:96ed750bd169 | 1518 | |
| Anna Bridge |
180:96ed750bd169 | 1519 | /** |
| Anna Bridge |
180:96ed750bd169 | 1520 | * @brief Q15 matrix transpose. |
| Anna Bridge |
180:96ed750bd169 | 1521 | * @param[in] pSrc points to the input matrix |
| Anna Bridge |
180:96ed750bd169 | 1522 | * @param[out] pDst points to the output matrix |
| Anna Bridge |
180:96ed750bd169 | 1523 | * @return The function returns either <code>ARM_MATH_SIZE_MISMATCH</code> |
| Anna Bridge |
180:96ed750bd169 | 1524 | * or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking. |
| Anna Bridge |
180:96ed750bd169 | 1525 | */ |
| Anna Bridge |
180:96ed750bd169 | 1526 | arm_status arm_mat_trans_q15( |
| Anna Bridge |
180:96ed750bd169 | 1527 | const arm_matrix_instance_q15 * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 1528 | arm_matrix_instance_q15 * pDst); |
| Anna Bridge |
180:96ed750bd169 | 1529 | |
| Anna Bridge |
180:96ed750bd169 | 1530 | |
| Anna Bridge |
180:96ed750bd169 | 1531 | /** |
| Anna Bridge |
180:96ed750bd169 | 1532 | * @brief Q31 matrix transpose. |
| Anna Bridge |
180:96ed750bd169 | 1533 | * @param[in] pSrc points to the input matrix |
| Anna Bridge |
180:96ed750bd169 | 1534 | * @param[out] pDst points to the output matrix |
| Anna Bridge |
180:96ed750bd169 | 1535 | * @return The function returns either <code>ARM_MATH_SIZE_MISMATCH</code> |
| Anna Bridge |
180:96ed750bd169 | 1536 | * or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking. |
| Anna Bridge |
180:96ed750bd169 | 1537 | */ |
| Anna Bridge |
180:96ed750bd169 | 1538 | arm_status arm_mat_trans_q31( |
| Anna Bridge |
180:96ed750bd169 | 1539 | const arm_matrix_instance_q31 * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 1540 | arm_matrix_instance_q31 * pDst); |
| Anna Bridge |
180:96ed750bd169 | 1541 | |
| Anna Bridge |
180:96ed750bd169 | 1542 | |
| Anna Bridge |
180:96ed750bd169 | 1543 | /** |
| Anna Bridge |
180:96ed750bd169 | 1544 | * @brief Floating-point matrix multiplication |
| Anna Bridge |
180:96ed750bd169 | 1545 | * @param[in] pSrcA points to the first input matrix structure |
| Anna Bridge |
180:96ed750bd169 | 1546 | * @param[in] pSrcB points to the second input matrix structure |
| Anna Bridge |
180:96ed750bd169 | 1547 | * @param[out] pDst points to output matrix structure |
| Anna Bridge |
180:96ed750bd169 | 1548 | * @return The function returns either |
| Anna Bridge |
180:96ed750bd169 | 1549 | * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking. |
| Anna Bridge |
180:96ed750bd169 | 1550 | */ |
| Anna Bridge |
180:96ed750bd169 | 1551 | arm_status arm_mat_mult_f32( |
| Anna Bridge |
180:96ed750bd169 | 1552 | const arm_matrix_instance_f32 * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 1553 | const arm_matrix_instance_f32 * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 1554 | arm_matrix_instance_f32 * pDst); |
| Anna Bridge |
180:96ed750bd169 | 1555 | |
| Anna Bridge |
180:96ed750bd169 | 1556 | |
| Anna Bridge |
180:96ed750bd169 | 1557 | /** |
| Anna Bridge |
180:96ed750bd169 | 1558 | * @brief Q15 matrix multiplication |
| Anna Bridge |
180:96ed750bd169 | 1559 | * @param[in] pSrcA points to the first input matrix structure |
| Anna Bridge |
180:96ed750bd169 | 1560 | * @param[in] pSrcB points to the second input matrix structure |
| Anna Bridge |
180:96ed750bd169 | 1561 | * @param[out] pDst points to output matrix structure |
| Anna Bridge |
180:96ed750bd169 | 1562 | * @param[in] pState points to the array for storing intermediate results |
| Anna Bridge |
180:96ed750bd169 | 1563 | * @return The function returns either |
| Anna Bridge |
180:96ed750bd169 | 1564 | * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking. |
| Anna Bridge |
180:96ed750bd169 | 1565 | */ |
| Anna Bridge |
180:96ed750bd169 | 1566 | arm_status arm_mat_mult_q15( |
| Anna Bridge |
180:96ed750bd169 | 1567 | const arm_matrix_instance_q15 * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 1568 | const arm_matrix_instance_q15 * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 1569 | arm_matrix_instance_q15 * pDst, |
| Anna Bridge |
180:96ed750bd169 | 1570 | q15_t * pState); |
| Anna Bridge |
180:96ed750bd169 | 1571 | |
| Anna Bridge |
180:96ed750bd169 | 1572 | |
| Anna Bridge |
180:96ed750bd169 | 1573 | /** |
| Anna Bridge |
180:96ed750bd169 | 1574 | * @brief Q15 matrix multiplication (fast variant) for Cortex-M3 and Cortex-M4 |
| Anna Bridge |
180:96ed750bd169 | 1575 | * @param[in] pSrcA points to the first input matrix structure |
| Anna Bridge |
180:96ed750bd169 | 1576 | * @param[in] pSrcB points to the second input matrix structure |
| Anna Bridge |
180:96ed750bd169 | 1577 | * @param[out] pDst points to output matrix structure |
| Anna Bridge |
180:96ed750bd169 | 1578 | * @param[in] pState points to the array for storing intermediate results |
| Anna Bridge |
180:96ed750bd169 | 1579 | * @return The function returns either |
| Anna Bridge |
180:96ed750bd169 | 1580 | * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking. |
| Anna Bridge |
180:96ed750bd169 | 1581 | */ |
| Anna Bridge |
180:96ed750bd169 | 1582 | arm_status arm_mat_mult_fast_q15( |
| Anna Bridge |
180:96ed750bd169 | 1583 | const arm_matrix_instance_q15 * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 1584 | const arm_matrix_instance_q15 * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 1585 | arm_matrix_instance_q15 * pDst, |
| Anna Bridge |
180:96ed750bd169 | 1586 | q15_t * pState); |
| Anna Bridge |
180:96ed750bd169 | 1587 | |
| Anna Bridge |
180:96ed750bd169 | 1588 | |
| Anna Bridge |
180:96ed750bd169 | 1589 | /** |
| Anna Bridge |
180:96ed750bd169 | 1590 | * @brief Q31 matrix multiplication |
| Anna Bridge |
180:96ed750bd169 | 1591 | * @param[in] pSrcA points to the first input matrix structure |
| Anna Bridge |
180:96ed750bd169 | 1592 | * @param[in] pSrcB points to the second input matrix structure |
| Anna Bridge |
180:96ed750bd169 | 1593 | * @param[out] pDst points to output matrix structure |
| Anna Bridge |
180:96ed750bd169 | 1594 | * @return The function returns either |
| Anna Bridge |
180:96ed750bd169 | 1595 | * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking. |
| Anna Bridge |
180:96ed750bd169 | 1596 | */ |
| Anna Bridge |
180:96ed750bd169 | 1597 | arm_status arm_mat_mult_q31( |
| Anna Bridge |
180:96ed750bd169 | 1598 | const arm_matrix_instance_q31 * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 1599 | const arm_matrix_instance_q31 * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 1600 | arm_matrix_instance_q31 * pDst); |
| Anna Bridge |
180:96ed750bd169 | 1601 | |
| Anna Bridge |
180:96ed750bd169 | 1602 | |
| Anna Bridge |
180:96ed750bd169 | 1603 | /** |
| Anna Bridge |
180:96ed750bd169 | 1604 | * @brief Q31 matrix multiplication (fast variant) for Cortex-M3 and Cortex-M4 |
| Anna Bridge |
180:96ed750bd169 | 1605 | * @param[in] pSrcA points to the first input matrix structure |
| Anna Bridge |
180:96ed750bd169 | 1606 | * @param[in] pSrcB points to the second input matrix structure |
| Anna Bridge |
180:96ed750bd169 | 1607 | * @param[out] pDst points to output matrix structure |
| Anna Bridge |
180:96ed750bd169 | 1608 | * @return The function returns either |
| Anna Bridge |
180:96ed750bd169 | 1609 | * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking. |
| Anna Bridge |
180:96ed750bd169 | 1610 | */ |
| Anna Bridge |
180:96ed750bd169 | 1611 | arm_status arm_mat_mult_fast_q31( |
| Anna Bridge |
180:96ed750bd169 | 1612 | const arm_matrix_instance_q31 * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 1613 | const arm_matrix_instance_q31 * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 1614 | arm_matrix_instance_q31 * pDst); |
| Anna Bridge |
180:96ed750bd169 | 1615 | |
| Anna Bridge |
180:96ed750bd169 | 1616 | |
| Anna Bridge |
180:96ed750bd169 | 1617 | /** |
| Anna Bridge |
180:96ed750bd169 | 1618 | * @brief Floating-point matrix subtraction |
| Anna Bridge |
180:96ed750bd169 | 1619 | * @param[in] pSrcA points to the first input matrix structure |
| Anna Bridge |
180:96ed750bd169 | 1620 | * @param[in] pSrcB points to the second input matrix structure |
| Anna Bridge |
180:96ed750bd169 | 1621 | * @param[out] pDst points to output matrix structure |
| Anna Bridge |
180:96ed750bd169 | 1622 | * @return The function returns either |
| Anna Bridge |
180:96ed750bd169 | 1623 | * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking. |
| Anna Bridge |
180:96ed750bd169 | 1624 | */ |
| Anna Bridge |
180:96ed750bd169 | 1625 | arm_status arm_mat_sub_f32( |
| Anna Bridge |
180:96ed750bd169 | 1626 | const arm_matrix_instance_f32 * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 1627 | const arm_matrix_instance_f32 * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 1628 | arm_matrix_instance_f32 * pDst); |
| Anna Bridge |
180:96ed750bd169 | 1629 | |
| Anna Bridge |
180:96ed750bd169 | 1630 | |
| Anna Bridge |
180:96ed750bd169 | 1631 | /** |
| Anna Bridge |
180:96ed750bd169 | 1632 | * @brief Q15 matrix subtraction |
| Anna Bridge |
180:96ed750bd169 | 1633 | * @param[in] pSrcA points to the first input matrix structure |
| Anna Bridge |
180:96ed750bd169 | 1634 | * @param[in] pSrcB points to the second input matrix structure |
| Anna Bridge |
180:96ed750bd169 | 1635 | * @param[out] pDst points to output matrix structure |
| Anna Bridge |
180:96ed750bd169 | 1636 | * @return The function returns either |
| Anna Bridge |
180:96ed750bd169 | 1637 | * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking. |
| Anna Bridge |
180:96ed750bd169 | 1638 | */ |
| Anna Bridge |
180:96ed750bd169 | 1639 | arm_status arm_mat_sub_q15( |
| Anna Bridge |
180:96ed750bd169 | 1640 | const arm_matrix_instance_q15 * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 1641 | const arm_matrix_instance_q15 * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 1642 | arm_matrix_instance_q15 * pDst); |
| Anna Bridge |
180:96ed750bd169 | 1643 | |
| Anna Bridge |
180:96ed750bd169 | 1644 | |
| Anna Bridge |
180:96ed750bd169 | 1645 | /** |
| Anna Bridge |
180:96ed750bd169 | 1646 | * @brief Q31 matrix subtraction |
| Anna Bridge |
180:96ed750bd169 | 1647 | * @param[in] pSrcA points to the first input matrix structure |
| Anna Bridge |
180:96ed750bd169 | 1648 | * @param[in] pSrcB points to the second input matrix structure |
| Anna Bridge |
180:96ed750bd169 | 1649 | * @param[out] pDst points to output matrix structure |
| Anna Bridge |
180:96ed750bd169 | 1650 | * @return The function returns either |
| Anna Bridge |
180:96ed750bd169 | 1651 | * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking. |
| Anna Bridge |
180:96ed750bd169 | 1652 | */ |
| Anna Bridge |
180:96ed750bd169 | 1653 | arm_status arm_mat_sub_q31( |
| Anna Bridge |
180:96ed750bd169 | 1654 | const arm_matrix_instance_q31 * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 1655 | const arm_matrix_instance_q31 * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 1656 | arm_matrix_instance_q31 * pDst); |
| Anna Bridge |
180:96ed750bd169 | 1657 | |
| Anna Bridge |
180:96ed750bd169 | 1658 | |
| Anna Bridge |
180:96ed750bd169 | 1659 | /** |
| Anna Bridge |
180:96ed750bd169 | 1660 | * @brief Floating-point matrix scaling. |
| Anna Bridge |
180:96ed750bd169 | 1661 | * @param[in] pSrc points to the input matrix |
| Anna Bridge |
180:96ed750bd169 | 1662 | * @param[in] scale scale factor |
| Anna Bridge |
180:96ed750bd169 | 1663 | * @param[out] pDst points to the output matrix |
| Anna Bridge |
180:96ed750bd169 | 1664 | * @return The function returns either |
| Anna Bridge |
180:96ed750bd169 | 1665 | * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking. |
| Anna Bridge |
180:96ed750bd169 | 1666 | */ |
| Anna Bridge |
180:96ed750bd169 | 1667 | arm_status arm_mat_scale_f32( |
| Anna Bridge |
180:96ed750bd169 | 1668 | const arm_matrix_instance_f32 * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 1669 | float32_t scale, |
| Anna Bridge |
180:96ed750bd169 | 1670 | arm_matrix_instance_f32 * pDst); |
| Anna Bridge |
180:96ed750bd169 | 1671 | |
| Anna Bridge |
180:96ed750bd169 | 1672 | |
| Anna Bridge |
180:96ed750bd169 | 1673 | /** |
| Anna Bridge |
180:96ed750bd169 | 1674 | * @brief Q15 matrix scaling. |
| Anna Bridge |
180:96ed750bd169 | 1675 | * @param[in] pSrc points to input matrix |
| Anna Bridge |
180:96ed750bd169 | 1676 | * @param[in] scaleFract fractional portion of the scale factor |
| Anna Bridge |
180:96ed750bd169 | 1677 | * @param[in] shift number of bits to shift the result by |
| Anna Bridge |
180:96ed750bd169 | 1678 | * @param[out] pDst points to output matrix |
| Anna Bridge |
180:96ed750bd169 | 1679 | * @return The function returns either |
| Anna Bridge |
180:96ed750bd169 | 1680 | * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking. |
| Anna Bridge |
180:96ed750bd169 | 1681 | */ |
| Anna Bridge |
180:96ed750bd169 | 1682 | arm_status arm_mat_scale_q15( |
| Anna Bridge |
180:96ed750bd169 | 1683 | const arm_matrix_instance_q15 * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 1684 | q15_t scaleFract, |
| Anna Bridge |
180:96ed750bd169 | 1685 | int32_t shift, |
| Anna Bridge |
180:96ed750bd169 | 1686 | arm_matrix_instance_q15 * pDst); |
| Anna Bridge |
180:96ed750bd169 | 1687 | |
| Anna Bridge |
180:96ed750bd169 | 1688 | |
| Anna Bridge |
180:96ed750bd169 | 1689 | /** |
| Anna Bridge |
180:96ed750bd169 | 1690 | * @brief Q31 matrix scaling. |
| Anna Bridge |
180:96ed750bd169 | 1691 | * @param[in] pSrc points to input matrix |
| Anna Bridge |
180:96ed750bd169 | 1692 | * @param[in] scaleFract fractional portion of the scale factor |
| Anna Bridge |
180:96ed750bd169 | 1693 | * @param[in] shift number of bits to shift the result by |
| Anna Bridge |
180:96ed750bd169 | 1694 | * @param[out] pDst points to output matrix structure |
| Anna Bridge |
180:96ed750bd169 | 1695 | * @return The function returns either |
| Anna Bridge |
180:96ed750bd169 | 1696 | * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking. |
| Anna Bridge |
180:96ed750bd169 | 1697 | */ |
| Anna Bridge |
180:96ed750bd169 | 1698 | arm_status arm_mat_scale_q31( |
| Anna Bridge |
180:96ed750bd169 | 1699 | const arm_matrix_instance_q31 * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 1700 | q31_t scaleFract, |
| Anna Bridge |
180:96ed750bd169 | 1701 | int32_t shift, |
| Anna Bridge |
180:96ed750bd169 | 1702 | arm_matrix_instance_q31 * pDst); |
| Anna Bridge |
180:96ed750bd169 | 1703 | |
| Anna Bridge |
180:96ed750bd169 | 1704 | |
| Anna Bridge |
180:96ed750bd169 | 1705 | /** |
| Anna Bridge |
180:96ed750bd169 | 1706 | * @brief Q31 matrix initialization. |
| Anna Bridge |
180:96ed750bd169 | 1707 | * @param[in,out] S points to an instance of the floating-point matrix structure. |
| Anna Bridge |
180:96ed750bd169 | 1708 | * @param[in] nRows number of rows in the matrix. |
| Anna Bridge |
180:96ed750bd169 | 1709 | * @param[in] nColumns number of columns in the matrix. |
| Anna Bridge |
180:96ed750bd169 | 1710 | * @param[in] pData points to the matrix data array. |
| Anna Bridge |
180:96ed750bd169 | 1711 | */ |
| Anna Bridge |
180:96ed750bd169 | 1712 | void arm_mat_init_q31( |
| Anna Bridge |
180:96ed750bd169 | 1713 | arm_matrix_instance_q31 * S, |
| Anna Bridge |
180:96ed750bd169 | 1714 | uint16_t nRows, |
| Anna Bridge |
180:96ed750bd169 | 1715 | uint16_t nColumns, |
| Anna Bridge |
180:96ed750bd169 | 1716 | q31_t * pData); |
| Anna Bridge |
180:96ed750bd169 | 1717 | |
| Anna Bridge |
180:96ed750bd169 | 1718 | |
| Anna Bridge |
180:96ed750bd169 | 1719 | /** |
| Anna Bridge |
180:96ed750bd169 | 1720 | * @brief Q15 matrix initialization. |
| Anna Bridge |
180:96ed750bd169 | 1721 | * @param[in,out] S points to an instance of the floating-point matrix structure. |
| Anna Bridge |
180:96ed750bd169 | 1722 | * @param[in] nRows number of rows in the matrix. |
| Anna Bridge |
180:96ed750bd169 | 1723 | * @param[in] nColumns number of columns in the matrix. |
| Anna Bridge |
180:96ed750bd169 | 1724 | * @param[in] pData points to the matrix data array. |
| Anna Bridge |
180:96ed750bd169 | 1725 | */ |
| Anna Bridge |
180:96ed750bd169 | 1726 | void arm_mat_init_q15( |
| Anna Bridge |
180:96ed750bd169 | 1727 | arm_matrix_instance_q15 * S, |
| Anna Bridge |
180:96ed750bd169 | 1728 | uint16_t nRows, |
| Anna Bridge |
180:96ed750bd169 | 1729 | uint16_t nColumns, |
| Anna Bridge |
180:96ed750bd169 | 1730 | q15_t * pData); |
| Anna Bridge |
180:96ed750bd169 | 1731 | |
| Anna Bridge |
180:96ed750bd169 | 1732 | |
| Anna Bridge |
180:96ed750bd169 | 1733 | /** |
| Anna Bridge |
180:96ed750bd169 | 1734 | * @brief Floating-point matrix initialization. |
| Anna Bridge |
180:96ed750bd169 | 1735 | * @param[in,out] S points to an instance of the floating-point matrix structure. |
| Anna Bridge |
180:96ed750bd169 | 1736 | * @param[in] nRows number of rows in the matrix. |
| Anna Bridge |
180:96ed750bd169 | 1737 | * @param[in] nColumns number of columns in the matrix. |
| Anna Bridge |
180:96ed750bd169 | 1738 | * @param[in] pData points to the matrix data array. |
| Anna Bridge |
180:96ed750bd169 | 1739 | */ |
| Anna Bridge |
180:96ed750bd169 | 1740 | void arm_mat_init_f32( |
| Anna Bridge |
180:96ed750bd169 | 1741 | arm_matrix_instance_f32 * S, |
| Anna Bridge |
180:96ed750bd169 | 1742 | uint16_t nRows, |
| Anna Bridge |
180:96ed750bd169 | 1743 | uint16_t nColumns, |
| Anna Bridge |
180:96ed750bd169 | 1744 | float32_t * pData); |
| Anna Bridge |
180:96ed750bd169 | 1745 | |
| Anna Bridge |
180:96ed750bd169 | 1746 | |
| Anna Bridge |
180:96ed750bd169 | 1747 | |
| Anna Bridge |
180:96ed750bd169 | 1748 | /** |
| Anna Bridge |
180:96ed750bd169 | 1749 | * @brief Instance structure for the Q15 PID Control. |
| Anna Bridge |
180:96ed750bd169 | 1750 | */ |
| Anna Bridge |
180:96ed750bd169 | 1751 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 1752 | { |
| Anna Bridge |
180:96ed750bd169 | 1753 | q15_t A0; /**< The derived gain, A0 = Kp + Ki + Kd . */ |
| Anna Bridge |
180:96ed750bd169 | 1754 | #if !defined (ARM_MATH_DSP) |
| Anna Bridge |
180:96ed750bd169 | 1755 | q15_t A1; |
| Anna Bridge |
180:96ed750bd169 | 1756 | q15_t A2; |
| Anna Bridge |
180:96ed750bd169 | 1757 | #else |
| Anna Bridge |
180:96ed750bd169 | 1758 | q31_t A1; /**< The derived gain A1 = -Kp - 2Kd | Kd.*/ |
| Anna Bridge |
180:96ed750bd169 | 1759 | #endif |
| Anna Bridge |
180:96ed750bd169 | 1760 | q15_t state[3]; /**< The state array of length 3. */ |
| Anna Bridge |
180:96ed750bd169 | 1761 | q15_t Kp; /**< The proportional gain. */ |
| Anna Bridge |
180:96ed750bd169 | 1762 | q15_t Ki; /**< The integral gain. */ |
| Anna Bridge |
180:96ed750bd169 | 1763 | q15_t Kd; /**< The derivative gain. */ |
| Anna Bridge |
180:96ed750bd169 | 1764 | } arm_pid_instance_q15; |
| Anna Bridge |
180:96ed750bd169 | 1765 | |
| Anna Bridge |
180:96ed750bd169 | 1766 | /** |
| Anna Bridge |
180:96ed750bd169 | 1767 | * @brief Instance structure for the Q31 PID Control. |
| Anna Bridge |
180:96ed750bd169 | 1768 | */ |
| Anna Bridge |
180:96ed750bd169 | 1769 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 1770 | { |
| Anna Bridge |
180:96ed750bd169 | 1771 | q31_t A0; /**< The derived gain, A0 = Kp + Ki + Kd . */ |
| Anna Bridge |
180:96ed750bd169 | 1772 | q31_t A1; /**< The derived gain, A1 = -Kp - 2Kd. */ |
| Anna Bridge |
180:96ed750bd169 | 1773 | q31_t A2; /**< The derived gain, A2 = Kd . */ |
| Anna Bridge |
180:96ed750bd169 | 1774 | q31_t state[3]; /**< The state array of length 3. */ |
| Anna Bridge |
180:96ed750bd169 | 1775 | q31_t Kp; /**< The proportional gain. */ |
| Anna Bridge |
180:96ed750bd169 | 1776 | q31_t Ki; /**< The integral gain. */ |
| Anna Bridge |
180:96ed750bd169 | 1777 | q31_t Kd; /**< The derivative gain. */ |
| Anna Bridge |
180:96ed750bd169 | 1778 | } arm_pid_instance_q31; |
| Anna Bridge |
180:96ed750bd169 | 1779 | |
| Anna Bridge |
180:96ed750bd169 | 1780 | /** |
| Anna Bridge |
180:96ed750bd169 | 1781 | * @brief Instance structure for the floating-point PID Control. |
| Anna Bridge |
180:96ed750bd169 | 1782 | */ |
| Anna Bridge |
180:96ed750bd169 | 1783 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 1784 | { |
| Anna Bridge |
180:96ed750bd169 | 1785 | float32_t A0; /**< The derived gain, A0 = Kp + Ki + Kd . */ |
| Anna Bridge |
180:96ed750bd169 | 1786 | float32_t A1; /**< The derived gain, A1 = -Kp - 2Kd. */ |
| Anna Bridge |
180:96ed750bd169 | 1787 | float32_t A2; /**< The derived gain, A2 = Kd . */ |
| Anna Bridge |
180:96ed750bd169 | 1788 | float32_t state[3]; /**< The state array of length 3. */ |
| Anna Bridge |
180:96ed750bd169 | 1789 | float32_t Kp; /**< The proportional gain. */ |
| Anna Bridge |
180:96ed750bd169 | 1790 | float32_t Ki; /**< The integral gain. */ |
| Anna Bridge |
180:96ed750bd169 | 1791 | float32_t Kd; /**< The derivative gain. */ |
| Anna Bridge |
180:96ed750bd169 | 1792 | } arm_pid_instance_f32; |
| Anna Bridge |
180:96ed750bd169 | 1793 | |
| Anna Bridge |
180:96ed750bd169 | 1794 | |
| Anna Bridge |
180:96ed750bd169 | 1795 | |
| Anna Bridge |
180:96ed750bd169 | 1796 | /** |
| Anna Bridge |
180:96ed750bd169 | 1797 | * @brief Initialization function for the floating-point PID Control. |
| Anna Bridge |
180:96ed750bd169 | 1798 | * @param[in,out] S points to an instance of the PID structure. |
| Anna Bridge |
180:96ed750bd169 | 1799 | * @param[in] resetStateFlag flag to reset the state. 0 = no change in state 1 = reset the state. |
| Anna Bridge |
180:96ed750bd169 | 1800 | */ |
| Anna Bridge |
180:96ed750bd169 | 1801 | void arm_pid_init_f32( |
| Anna Bridge |
180:96ed750bd169 | 1802 | arm_pid_instance_f32 * S, |
| Anna Bridge |
180:96ed750bd169 | 1803 | int32_t resetStateFlag); |
| Anna Bridge |
180:96ed750bd169 | 1804 | |
| Anna Bridge |
180:96ed750bd169 | 1805 | |
| Anna Bridge |
180:96ed750bd169 | 1806 | /** |
| Anna Bridge |
180:96ed750bd169 | 1807 | * @brief Reset function for the floating-point PID Control. |
| Anna Bridge |
180:96ed750bd169 | 1808 | * @param[in,out] S is an instance of the floating-point PID Control structure |
| Anna Bridge |
180:96ed750bd169 | 1809 | */ |
| Anna Bridge |
180:96ed750bd169 | 1810 | void arm_pid_reset_f32( |
| Anna Bridge |
180:96ed750bd169 | 1811 | arm_pid_instance_f32 * S); |
| Anna Bridge |
180:96ed750bd169 | 1812 | |
| Anna Bridge |
180:96ed750bd169 | 1813 | |
| Anna Bridge |
180:96ed750bd169 | 1814 | /** |
| Anna Bridge |
180:96ed750bd169 | 1815 | * @brief Initialization function for the Q31 PID Control. |
| Anna Bridge |
180:96ed750bd169 | 1816 | * @param[in,out] S points to an instance of the Q15 PID structure. |
| Anna Bridge |
180:96ed750bd169 | 1817 | * @param[in] resetStateFlag flag to reset the state. 0 = no change in state 1 = reset the state. |
| Anna Bridge |
180:96ed750bd169 | 1818 | */ |
| Anna Bridge |
180:96ed750bd169 | 1819 | void arm_pid_init_q31( |
| Anna Bridge |
180:96ed750bd169 | 1820 | arm_pid_instance_q31 * S, |
| Anna Bridge |
180:96ed750bd169 | 1821 | int32_t resetStateFlag); |
| Anna Bridge |
180:96ed750bd169 | 1822 | |
| Anna Bridge |
180:96ed750bd169 | 1823 | |
| Anna Bridge |
180:96ed750bd169 | 1824 | /** |
| Anna Bridge |
180:96ed750bd169 | 1825 | * @brief Reset function for the Q31 PID Control. |
| Anna Bridge |
180:96ed750bd169 | 1826 | * @param[in,out] S points to an instance of the Q31 PID Control structure |
| Anna Bridge |
180:96ed750bd169 | 1827 | */ |
| Anna Bridge |
180:96ed750bd169 | 1828 | |
| Anna Bridge |
180:96ed750bd169 | 1829 | void arm_pid_reset_q31( |
| Anna Bridge |
180:96ed750bd169 | 1830 | arm_pid_instance_q31 * S); |
| Anna Bridge |
180:96ed750bd169 | 1831 | |
| Anna Bridge |
180:96ed750bd169 | 1832 | |
| Anna Bridge |
180:96ed750bd169 | 1833 | /** |
| Anna Bridge |
180:96ed750bd169 | 1834 | * @brief Initialization function for the Q15 PID Control. |
| Anna Bridge |
180:96ed750bd169 | 1835 | * @param[in,out] S points to an instance of the Q15 PID structure. |
| Anna Bridge |
180:96ed750bd169 | 1836 | * @param[in] resetStateFlag flag to reset the state. 0 = no change in state 1 = reset the state. |
| Anna Bridge |
180:96ed750bd169 | 1837 | */ |
| Anna Bridge |
180:96ed750bd169 | 1838 | void arm_pid_init_q15( |
| Anna Bridge |
180:96ed750bd169 | 1839 | arm_pid_instance_q15 * S, |
| Anna Bridge |
180:96ed750bd169 | 1840 | int32_t resetStateFlag); |
| Anna Bridge |
180:96ed750bd169 | 1841 | |
| Anna Bridge |
180:96ed750bd169 | 1842 | |
| Anna Bridge |
180:96ed750bd169 | 1843 | /** |
| Anna Bridge |
180:96ed750bd169 | 1844 | * @brief Reset function for the Q15 PID Control. |
| Anna Bridge |
180:96ed750bd169 | 1845 | * @param[in,out] S points to an instance of the q15 PID Control structure |
| Anna Bridge |
180:96ed750bd169 | 1846 | */ |
| Anna Bridge |
180:96ed750bd169 | 1847 | void arm_pid_reset_q15( |
| Anna Bridge |
180:96ed750bd169 | 1848 | arm_pid_instance_q15 * S); |
| Anna Bridge |
180:96ed750bd169 | 1849 | |
| Anna Bridge |
180:96ed750bd169 | 1850 | |
| Anna Bridge |
180:96ed750bd169 | 1851 | /** |
| Anna Bridge |
180:96ed750bd169 | 1852 | * @brief Instance structure for the floating-point Linear Interpolate function. |
| Anna Bridge |
180:96ed750bd169 | 1853 | */ |
| Anna Bridge |
180:96ed750bd169 | 1854 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 1855 | { |
| Anna Bridge |
180:96ed750bd169 | 1856 | uint32_t nValues; /**< nValues */ |
| Anna Bridge |
180:96ed750bd169 | 1857 | float32_t x1; /**< x1 */ |
| Anna Bridge |
180:96ed750bd169 | 1858 | float32_t xSpacing; /**< xSpacing */ |
| Anna Bridge |
180:96ed750bd169 | 1859 | float32_t *pYData; /**< pointer to the table of Y values */ |
| Anna Bridge |
180:96ed750bd169 | 1860 | } arm_linear_interp_instance_f32; |
| Anna Bridge |
180:96ed750bd169 | 1861 | |
| Anna Bridge |
180:96ed750bd169 | 1862 | /** |
| Anna Bridge |
180:96ed750bd169 | 1863 | * @brief Instance structure for the floating-point bilinear interpolation function. |
| Anna Bridge |
180:96ed750bd169 | 1864 | */ |
| Anna Bridge |
180:96ed750bd169 | 1865 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 1866 | { |
| Anna Bridge |
180:96ed750bd169 | 1867 | uint16_t numRows; /**< number of rows in the data table. */ |
| Anna Bridge |
180:96ed750bd169 | 1868 | uint16_t numCols; /**< number of columns in the data table. */ |
| Anna Bridge |
180:96ed750bd169 | 1869 | float32_t *pData; /**< points to the data table. */ |
| Anna Bridge |
180:96ed750bd169 | 1870 | } arm_bilinear_interp_instance_f32; |
| Anna Bridge |
180:96ed750bd169 | 1871 | |
| Anna Bridge |
180:96ed750bd169 | 1872 | /** |
| Anna Bridge |
180:96ed750bd169 | 1873 | * @brief Instance structure for the Q31 bilinear interpolation function. |
| Anna Bridge |
180:96ed750bd169 | 1874 | */ |
| Anna Bridge |
180:96ed750bd169 | 1875 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 1876 | { |
| Anna Bridge |
180:96ed750bd169 | 1877 | uint16_t numRows; /**< number of rows in the data table. */ |
| Anna Bridge |
180:96ed750bd169 | 1878 | uint16_t numCols; /**< number of columns in the data table. */ |
| Anna Bridge |
180:96ed750bd169 | 1879 | q31_t *pData; /**< points to the data table. */ |
| Anna Bridge |
180:96ed750bd169 | 1880 | } arm_bilinear_interp_instance_q31; |
| Anna Bridge |
180:96ed750bd169 | 1881 | |
| Anna Bridge |
180:96ed750bd169 | 1882 | /** |
| Anna Bridge |
180:96ed750bd169 | 1883 | * @brief Instance structure for the Q15 bilinear interpolation function. |
| Anna Bridge |
180:96ed750bd169 | 1884 | */ |
| Anna Bridge |
180:96ed750bd169 | 1885 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 1886 | { |
| Anna Bridge |
180:96ed750bd169 | 1887 | uint16_t numRows; /**< number of rows in the data table. */ |
| Anna Bridge |
180:96ed750bd169 | 1888 | uint16_t numCols; /**< number of columns in the data table. */ |
| Anna Bridge |
180:96ed750bd169 | 1889 | q15_t *pData; /**< points to the data table. */ |
| Anna Bridge |
180:96ed750bd169 | 1890 | } arm_bilinear_interp_instance_q15; |
| Anna Bridge |
180:96ed750bd169 | 1891 | |
| Anna Bridge |
180:96ed750bd169 | 1892 | /** |
| Anna Bridge |
180:96ed750bd169 | 1893 | * @brief Instance structure for the Q15 bilinear interpolation function. |
| Anna Bridge |
180:96ed750bd169 | 1894 | */ |
| Anna Bridge |
180:96ed750bd169 | 1895 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 1896 | { |
| Anna Bridge |
180:96ed750bd169 | 1897 | uint16_t numRows; /**< number of rows in the data table. */ |
| Anna Bridge |
180:96ed750bd169 | 1898 | uint16_t numCols; /**< number of columns in the data table. */ |
| Anna Bridge |
180:96ed750bd169 | 1899 | q7_t *pData; /**< points to the data table. */ |
| Anna Bridge |
180:96ed750bd169 | 1900 | } arm_bilinear_interp_instance_q7; |
| Anna Bridge |
180:96ed750bd169 | 1901 | |
| Anna Bridge |
180:96ed750bd169 | 1902 | |
| Anna Bridge |
180:96ed750bd169 | 1903 | /** |
| Anna Bridge |
180:96ed750bd169 | 1904 | * @brief Q7 vector multiplication. |
| Anna Bridge |
180:96ed750bd169 | 1905 | * @param[in] pSrcA points to the first input vector |
| Anna Bridge |
180:96ed750bd169 | 1906 | * @param[in] pSrcB points to the second input vector |
| Anna Bridge |
180:96ed750bd169 | 1907 | * @param[out] pDst points to the output vector |
| Anna Bridge |
180:96ed750bd169 | 1908 | * @param[in] blockSize number of samples in each vector |
| Anna Bridge |
180:96ed750bd169 | 1909 | */ |
| Anna Bridge |
180:96ed750bd169 | 1910 | void arm_mult_q7( |
| Anna Bridge |
180:96ed750bd169 | 1911 | q7_t * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 1912 | q7_t * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 1913 | q7_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 1914 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 1915 | |
| Anna Bridge |
180:96ed750bd169 | 1916 | |
| Anna Bridge |
180:96ed750bd169 | 1917 | /** |
| Anna Bridge |
180:96ed750bd169 | 1918 | * @brief Q15 vector multiplication. |
| Anna Bridge |
180:96ed750bd169 | 1919 | * @param[in] pSrcA points to the first input vector |
| Anna Bridge |
180:96ed750bd169 | 1920 | * @param[in] pSrcB points to the second input vector |
| Anna Bridge |
180:96ed750bd169 | 1921 | * @param[out] pDst points to the output vector |
| Anna Bridge |
180:96ed750bd169 | 1922 | * @param[in] blockSize number of samples in each vector |
| Anna Bridge |
180:96ed750bd169 | 1923 | */ |
| Anna Bridge |
180:96ed750bd169 | 1924 | void arm_mult_q15( |
| Anna Bridge |
180:96ed750bd169 | 1925 | q15_t * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 1926 | q15_t * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 1927 | q15_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 1928 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 1929 | |
| Anna Bridge |
180:96ed750bd169 | 1930 | |
| Anna Bridge |
180:96ed750bd169 | 1931 | /** |
| Anna Bridge |
180:96ed750bd169 | 1932 | * @brief Q31 vector multiplication. |
| Anna Bridge |
180:96ed750bd169 | 1933 | * @param[in] pSrcA points to the first input vector |
| Anna Bridge |
180:96ed750bd169 | 1934 | * @param[in] pSrcB points to the second input vector |
| Anna Bridge |
180:96ed750bd169 | 1935 | * @param[out] pDst points to the output vector |
| Anna Bridge |
180:96ed750bd169 | 1936 | * @param[in] blockSize number of samples in each vector |
| Anna Bridge |
180:96ed750bd169 | 1937 | */ |
| Anna Bridge |
180:96ed750bd169 | 1938 | void arm_mult_q31( |
| Anna Bridge |
180:96ed750bd169 | 1939 | q31_t * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 1940 | q31_t * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 1941 | q31_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 1942 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 1943 | |
| Anna Bridge |
180:96ed750bd169 | 1944 | |
| Anna Bridge |
180:96ed750bd169 | 1945 | /** |
| Anna Bridge |
180:96ed750bd169 | 1946 | * @brief Floating-point vector multiplication. |
| Anna Bridge |
180:96ed750bd169 | 1947 | * @param[in] pSrcA points to the first input vector |
| Anna Bridge |
180:96ed750bd169 | 1948 | * @param[in] pSrcB points to the second input vector |
| Anna Bridge |
180:96ed750bd169 | 1949 | * @param[out] pDst points to the output vector |
| Anna Bridge |
180:96ed750bd169 | 1950 | * @param[in] blockSize number of samples in each vector |
| Anna Bridge |
180:96ed750bd169 | 1951 | */ |
| Anna Bridge |
180:96ed750bd169 | 1952 | void arm_mult_f32( |
| Anna Bridge |
180:96ed750bd169 | 1953 | float32_t * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 1954 | float32_t * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 1955 | float32_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 1956 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 1957 | |
| Anna Bridge |
180:96ed750bd169 | 1958 | |
| Anna Bridge |
180:96ed750bd169 | 1959 | /** |
| Anna Bridge |
180:96ed750bd169 | 1960 | * @brief Instance structure for the Q15 CFFT/CIFFT function. |
| Anna Bridge |
180:96ed750bd169 | 1961 | */ |
| Anna Bridge |
180:96ed750bd169 | 1962 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 1963 | { |
| Anna Bridge |
180:96ed750bd169 | 1964 | uint16_t fftLen; /**< length of the FFT. */ |
| Anna Bridge |
180:96ed750bd169 | 1965 | uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ |
| Anna Bridge |
180:96ed750bd169 | 1966 | uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ |
| Anna Bridge |
180:96ed750bd169 | 1967 | q15_t *pTwiddle; /**< points to the Sin twiddle factor table. */ |
| Anna Bridge |
180:96ed750bd169 | 1968 | uint16_t *pBitRevTable; /**< points to the bit reversal table. */ |
| Anna Bridge |
180:96ed750bd169 | 1969 | uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ |
| Anna Bridge |
180:96ed750bd169 | 1970 | uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ |
| Anna Bridge |
180:96ed750bd169 | 1971 | } arm_cfft_radix2_instance_q15; |
| Anna Bridge |
180:96ed750bd169 | 1972 | |
| Anna Bridge |
180:96ed750bd169 | 1973 | /* Deprecated */ |
| Anna Bridge |
180:96ed750bd169 | 1974 | arm_status arm_cfft_radix2_init_q15( |
| Anna Bridge |
180:96ed750bd169 | 1975 | arm_cfft_radix2_instance_q15 * S, |
| Anna Bridge |
180:96ed750bd169 | 1976 | uint16_t fftLen, |
| Anna Bridge |
180:96ed750bd169 | 1977 | uint8_t ifftFlag, |
| Anna Bridge |
180:96ed750bd169 | 1978 | uint8_t bitReverseFlag); |
| Anna Bridge |
180:96ed750bd169 | 1979 | |
| Anna Bridge |
180:96ed750bd169 | 1980 | /* Deprecated */ |
| Anna Bridge |
180:96ed750bd169 | 1981 | void arm_cfft_radix2_q15( |
| Anna Bridge |
180:96ed750bd169 | 1982 | const arm_cfft_radix2_instance_q15 * S, |
| Anna Bridge |
180:96ed750bd169 | 1983 | q15_t * pSrc); |
| Anna Bridge |
180:96ed750bd169 | 1984 | |
| Anna Bridge |
180:96ed750bd169 | 1985 | |
| Anna Bridge |
180:96ed750bd169 | 1986 | /** |
| Anna Bridge |
180:96ed750bd169 | 1987 | * @brief Instance structure for the Q15 CFFT/CIFFT function. |
| Anna Bridge |
180:96ed750bd169 | 1988 | */ |
| Anna Bridge |
180:96ed750bd169 | 1989 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 1990 | { |
| Anna Bridge |
180:96ed750bd169 | 1991 | uint16_t fftLen; /**< length of the FFT. */ |
| Anna Bridge |
180:96ed750bd169 | 1992 | uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ |
| Anna Bridge |
180:96ed750bd169 | 1993 | uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ |
| Anna Bridge |
180:96ed750bd169 | 1994 | q15_t *pTwiddle; /**< points to the twiddle factor table. */ |
| Anna Bridge |
180:96ed750bd169 | 1995 | uint16_t *pBitRevTable; /**< points to the bit reversal table. */ |
| Anna Bridge |
180:96ed750bd169 | 1996 | uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ |
| Anna Bridge |
180:96ed750bd169 | 1997 | uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ |
| Anna Bridge |
180:96ed750bd169 | 1998 | } arm_cfft_radix4_instance_q15; |
| Anna Bridge |
180:96ed750bd169 | 1999 | |
| Anna Bridge |
180:96ed750bd169 | 2000 | /* Deprecated */ |
| Anna Bridge |
180:96ed750bd169 | 2001 | arm_status arm_cfft_radix4_init_q15( |
| Anna Bridge |
180:96ed750bd169 | 2002 | arm_cfft_radix4_instance_q15 * S, |
| Anna Bridge |
180:96ed750bd169 | 2003 | uint16_t fftLen, |
| Anna Bridge |
180:96ed750bd169 | 2004 | uint8_t ifftFlag, |
| Anna Bridge |
180:96ed750bd169 | 2005 | uint8_t bitReverseFlag); |
| Anna Bridge |
180:96ed750bd169 | 2006 | |
| Anna Bridge |
180:96ed750bd169 | 2007 | /* Deprecated */ |
| Anna Bridge |
180:96ed750bd169 | 2008 | void arm_cfft_radix4_q15( |
| Anna Bridge |
180:96ed750bd169 | 2009 | const arm_cfft_radix4_instance_q15 * S, |
| Anna Bridge |
180:96ed750bd169 | 2010 | q15_t * pSrc); |
| Anna Bridge |
180:96ed750bd169 | 2011 | |
| Anna Bridge |
180:96ed750bd169 | 2012 | /** |
| Anna Bridge |
180:96ed750bd169 | 2013 | * @brief Instance structure for the Radix-2 Q31 CFFT/CIFFT function. |
| Anna Bridge |
180:96ed750bd169 | 2014 | */ |
| Anna Bridge |
180:96ed750bd169 | 2015 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 2016 | { |
| Anna Bridge |
180:96ed750bd169 | 2017 | uint16_t fftLen; /**< length of the FFT. */ |
| Anna Bridge |
180:96ed750bd169 | 2018 | uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ |
| Anna Bridge |
180:96ed750bd169 | 2019 | uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ |
| Anna Bridge |
180:96ed750bd169 | 2020 | q31_t *pTwiddle; /**< points to the Twiddle factor table. */ |
| Anna Bridge |
180:96ed750bd169 | 2021 | uint16_t *pBitRevTable; /**< points to the bit reversal table. */ |
| Anna Bridge |
180:96ed750bd169 | 2022 | uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ |
| Anna Bridge |
180:96ed750bd169 | 2023 | uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ |
| Anna Bridge |
180:96ed750bd169 | 2024 | } arm_cfft_radix2_instance_q31; |
| Anna Bridge |
180:96ed750bd169 | 2025 | |
| Anna Bridge |
180:96ed750bd169 | 2026 | /* Deprecated */ |
| Anna Bridge |
180:96ed750bd169 | 2027 | arm_status arm_cfft_radix2_init_q31( |
| Anna Bridge |
180:96ed750bd169 | 2028 | arm_cfft_radix2_instance_q31 * S, |
| Anna Bridge |
180:96ed750bd169 | 2029 | uint16_t fftLen, |
| Anna Bridge |
180:96ed750bd169 | 2030 | uint8_t ifftFlag, |
| Anna Bridge |
180:96ed750bd169 | 2031 | uint8_t bitReverseFlag); |
| Anna Bridge |
180:96ed750bd169 | 2032 | |
| Anna Bridge |
180:96ed750bd169 | 2033 | /* Deprecated */ |
| Anna Bridge |
180:96ed750bd169 | 2034 | void arm_cfft_radix2_q31( |
| Anna Bridge |
180:96ed750bd169 | 2035 | const arm_cfft_radix2_instance_q31 * S, |
| Anna Bridge |
180:96ed750bd169 | 2036 | q31_t * pSrc); |
| Anna Bridge |
180:96ed750bd169 | 2037 | |
| Anna Bridge |
180:96ed750bd169 | 2038 | /** |
| Anna Bridge |
180:96ed750bd169 | 2039 | * @brief Instance structure for the Q31 CFFT/CIFFT function. |
| Anna Bridge |
180:96ed750bd169 | 2040 | */ |
| Anna Bridge |
180:96ed750bd169 | 2041 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 2042 | { |
| Anna Bridge |
180:96ed750bd169 | 2043 | uint16_t fftLen; /**< length of the FFT. */ |
| Anna Bridge |
180:96ed750bd169 | 2044 | uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ |
| Anna Bridge |
180:96ed750bd169 | 2045 | uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ |
| Anna Bridge |
180:96ed750bd169 | 2046 | q31_t *pTwiddle; /**< points to the twiddle factor table. */ |
| Anna Bridge |
180:96ed750bd169 | 2047 | uint16_t *pBitRevTable; /**< points to the bit reversal table. */ |
| Anna Bridge |
180:96ed750bd169 | 2048 | uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ |
| Anna Bridge |
180:96ed750bd169 | 2049 | uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ |
| Anna Bridge |
180:96ed750bd169 | 2050 | } arm_cfft_radix4_instance_q31; |
| Anna Bridge |
180:96ed750bd169 | 2051 | |
| Anna Bridge |
180:96ed750bd169 | 2052 | /* Deprecated */ |
| Anna Bridge |
180:96ed750bd169 | 2053 | void arm_cfft_radix4_q31( |
| Anna Bridge |
180:96ed750bd169 | 2054 | const arm_cfft_radix4_instance_q31 * S, |
| Anna Bridge |
180:96ed750bd169 | 2055 | q31_t * pSrc); |
| Anna Bridge |
180:96ed750bd169 | 2056 | |
| Anna Bridge |
180:96ed750bd169 | 2057 | /* Deprecated */ |
| Anna Bridge |
180:96ed750bd169 | 2058 | arm_status arm_cfft_radix4_init_q31( |
| Anna Bridge |
180:96ed750bd169 | 2059 | arm_cfft_radix4_instance_q31 * S, |
| Anna Bridge |
180:96ed750bd169 | 2060 | uint16_t fftLen, |
| Anna Bridge |
180:96ed750bd169 | 2061 | uint8_t ifftFlag, |
| Anna Bridge |
180:96ed750bd169 | 2062 | uint8_t bitReverseFlag); |
| Anna Bridge |
180:96ed750bd169 | 2063 | |
| Anna Bridge |
180:96ed750bd169 | 2064 | /** |
| Anna Bridge |
180:96ed750bd169 | 2065 | * @brief Instance structure for the floating-point CFFT/CIFFT function. |
| Anna Bridge |
180:96ed750bd169 | 2066 | */ |
| Anna Bridge |
180:96ed750bd169 | 2067 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 2068 | { |
| Anna Bridge |
180:96ed750bd169 | 2069 | uint16_t fftLen; /**< length of the FFT. */ |
| Anna Bridge |
180:96ed750bd169 | 2070 | uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ |
| Anna Bridge |
180:96ed750bd169 | 2071 | uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ |
| Anna Bridge |
180:96ed750bd169 | 2072 | float32_t *pTwiddle; /**< points to the Twiddle factor table. */ |
| Anna Bridge |
180:96ed750bd169 | 2073 | uint16_t *pBitRevTable; /**< points to the bit reversal table. */ |
| Anna Bridge |
180:96ed750bd169 | 2074 | uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ |
| Anna Bridge |
180:96ed750bd169 | 2075 | uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ |
| Anna Bridge |
180:96ed750bd169 | 2076 | float32_t onebyfftLen; /**< value of 1/fftLen. */ |
| Anna Bridge |
180:96ed750bd169 | 2077 | } arm_cfft_radix2_instance_f32; |
| Anna Bridge |
180:96ed750bd169 | 2078 | |
| Anna Bridge |
180:96ed750bd169 | 2079 | /* Deprecated */ |
| Anna Bridge |
180:96ed750bd169 | 2080 | arm_status arm_cfft_radix2_init_f32( |
| Anna Bridge |
180:96ed750bd169 | 2081 | arm_cfft_radix2_instance_f32 * S, |
| Anna Bridge |
180:96ed750bd169 | 2082 | uint16_t fftLen, |
| Anna Bridge |
180:96ed750bd169 | 2083 | uint8_t ifftFlag, |
| Anna Bridge |
180:96ed750bd169 | 2084 | uint8_t bitReverseFlag); |
| Anna Bridge |
180:96ed750bd169 | 2085 | |
| Anna Bridge |
180:96ed750bd169 | 2086 | /* Deprecated */ |
| Anna Bridge |
180:96ed750bd169 | 2087 | void arm_cfft_radix2_f32( |
| Anna Bridge |
180:96ed750bd169 | 2088 | const arm_cfft_radix2_instance_f32 * S, |
| Anna Bridge |
180:96ed750bd169 | 2089 | float32_t * pSrc); |
| Anna Bridge |
180:96ed750bd169 | 2090 | |
| Anna Bridge |
180:96ed750bd169 | 2091 | /** |
| Anna Bridge |
180:96ed750bd169 | 2092 | * @brief Instance structure for the floating-point CFFT/CIFFT function. |
| Anna Bridge |
180:96ed750bd169 | 2093 | */ |
| Anna Bridge |
180:96ed750bd169 | 2094 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 2095 | { |
| Anna Bridge |
180:96ed750bd169 | 2096 | uint16_t fftLen; /**< length of the FFT. */ |
| Anna Bridge |
180:96ed750bd169 | 2097 | uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ |
| Anna Bridge |
180:96ed750bd169 | 2098 | uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ |
| Anna Bridge |
180:96ed750bd169 | 2099 | float32_t *pTwiddle; /**< points to the Twiddle factor table. */ |
| Anna Bridge |
180:96ed750bd169 | 2100 | uint16_t *pBitRevTable; /**< points to the bit reversal table. */ |
| Anna Bridge |
180:96ed750bd169 | 2101 | uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ |
| Anna Bridge |
180:96ed750bd169 | 2102 | uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ |
| Anna Bridge |
180:96ed750bd169 | 2103 | float32_t onebyfftLen; /**< value of 1/fftLen. */ |
| Anna Bridge |
180:96ed750bd169 | 2104 | } arm_cfft_radix4_instance_f32; |
| Anna Bridge |
180:96ed750bd169 | 2105 | |
| Anna Bridge |
180:96ed750bd169 | 2106 | /* Deprecated */ |
| Anna Bridge |
180:96ed750bd169 | 2107 | arm_status arm_cfft_radix4_init_f32( |
| Anna Bridge |
180:96ed750bd169 | 2108 | arm_cfft_radix4_instance_f32 * S, |
| Anna Bridge |
180:96ed750bd169 | 2109 | uint16_t fftLen, |
| Anna Bridge |
180:96ed750bd169 | 2110 | uint8_t ifftFlag, |
| Anna Bridge |
180:96ed750bd169 | 2111 | uint8_t bitReverseFlag); |
| Anna Bridge |
180:96ed750bd169 | 2112 | |
| Anna Bridge |
180:96ed750bd169 | 2113 | /* Deprecated */ |
| Anna Bridge |
180:96ed750bd169 | 2114 | void arm_cfft_radix4_f32( |
| Anna Bridge |
180:96ed750bd169 | 2115 | const arm_cfft_radix4_instance_f32 * S, |
| Anna Bridge |
180:96ed750bd169 | 2116 | float32_t * pSrc); |
| Anna Bridge |
180:96ed750bd169 | 2117 | |
| Anna Bridge |
180:96ed750bd169 | 2118 | /** |
| Anna Bridge |
180:96ed750bd169 | 2119 | * @brief Instance structure for the fixed-point CFFT/CIFFT function. |
| Anna Bridge |
180:96ed750bd169 | 2120 | */ |
| Anna Bridge |
180:96ed750bd169 | 2121 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 2122 | { |
| Anna Bridge |
180:96ed750bd169 | 2123 | uint16_t fftLen; /**< length of the FFT. */ |
| Anna Bridge |
180:96ed750bd169 | 2124 | const q15_t *pTwiddle; /**< points to the Twiddle factor table. */ |
| Anna Bridge |
180:96ed750bd169 | 2125 | const uint16_t *pBitRevTable; /**< points to the bit reversal table. */ |
| Anna Bridge |
180:96ed750bd169 | 2126 | uint16_t bitRevLength; /**< bit reversal table length. */ |
| Anna Bridge |
180:96ed750bd169 | 2127 | } arm_cfft_instance_q15; |
| Anna Bridge |
180:96ed750bd169 | 2128 | |
| Anna Bridge |
180:96ed750bd169 | 2129 | void arm_cfft_q15( |
| Anna Bridge |
180:96ed750bd169 | 2130 | const arm_cfft_instance_q15 * S, |
| Anna Bridge |
180:96ed750bd169 | 2131 | q15_t * p1, |
| Anna Bridge |
180:96ed750bd169 | 2132 | uint8_t ifftFlag, |
| Anna Bridge |
180:96ed750bd169 | 2133 | uint8_t bitReverseFlag); |
| Anna Bridge |
180:96ed750bd169 | 2134 | |
| Anna Bridge |
180:96ed750bd169 | 2135 | /** |
| Anna Bridge |
180:96ed750bd169 | 2136 | * @brief Instance structure for the fixed-point CFFT/CIFFT function. |
| Anna Bridge |
180:96ed750bd169 | 2137 | */ |
| Anna Bridge |
180:96ed750bd169 | 2138 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 2139 | { |
| Anna Bridge |
180:96ed750bd169 | 2140 | uint16_t fftLen; /**< length of the FFT. */ |
| Anna Bridge |
180:96ed750bd169 | 2141 | const q31_t *pTwiddle; /**< points to the Twiddle factor table. */ |
| Anna Bridge |
180:96ed750bd169 | 2142 | const uint16_t *pBitRevTable; /**< points to the bit reversal table. */ |
| Anna Bridge |
180:96ed750bd169 | 2143 | uint16_t bitRevLength; /**< bit reversal table length. */ |
| Anna Bridge |
180:96ed750bd169 | 2144 | } arm_cfft_instance_q31; |
| Anna Bridge |
180:96ed750bd169 | 2145 | |
| Anna Bridge |
180:96ed750bd169 | 2146 | void arm_cfft_q31( |
| Anna Bridge |
180:96ed750bd169 | 2147 | const arm_cfft_instance_q31 * S, |
| Anna Bridge |
180:96ed750bd169 | 2148 | q31_t * p1, |
| Anna Bridge |
180:96ed750bd169 | 2149 | uint8_t ifftFlag, |
| Anna Bridge |
180:96ed750bd169 | 2150 | uint8_t bitReverseFlag); |
| Anna Bridge |
180:96ed750bd169 | 2151 | |
| Anna Bridge |
180:96ed750bd169 | 2152 | /** |
| Anna Bridge |
180:96ed750bd169 | 2153 | * @brief Instance structure for the floating-point CFFT/CIFFT function. |
| Anna Bridge |
180:96ed750bd169 | 2154 | */ |
| Anna Bridge |
180:96ed750bd169 | 2155 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 2156 | { |
| Anna Bridge |
180:96ed750bd169 | 2157 | uint16_t fftLen; /**< length of the FFT. */ |
| Anna Bridge |
180:96ed750bd169 | 2158 | const float32_t *pTwiddle; /**< points to the Twiddle factor table. */ |
| Anna Bridge |
180:96ed750bd169 | 2159 | const uint16_t *pBitRevTable; /**< points to the bit reversal table. */ |
| Anna Bridge |
180:96ed750bd169 | 2160 | uint16_t bitRevLength; /**< bit reversal table length. */ |
| Anna Bridge |
180:96ed750bd169 | 2161 | } arm_cfft_instance_f32; |
| Anna Bridge |
180:96ed750bd169 | 2162 | |
| Anna Bridge |
180:96ed750bd169 | 2163 | void arm_cfft_f32( |
| Anna Bridge |
180:96ed750bd169 | 2164 | const arm_cfft_instance_f32 * S, |
| Anna Bridge |
180:96ed750bd169 | 2165 | float32_t * p1, |
| Anna Bridge |
180:96ed750bd169 | 2166 | uint8_t ifftFlag, |
| Anna Bridge |
180:96ed750bd169 | 2167 | uint8_t bitReverseFlag); |
| Anna Bridge |
180:96ed750bd169 | 2168 | |
| Anna Bridge |
180:96ed750bd169 | 2169 | /** |
| Anna Bridge |
180:96ed750bd169 | 2170 | * @brief Instance structure for the Q15 RFFT/RIFFT function. |
| Anna Bridge |
180:96ed750bd169 | 2171 | */ |
| Anna Bridge |
180:96ed750bd169 | 2172 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 2173 | { |
| Anna Bridge |
180:96ed750bd169 | 2174 | uint32_t fftLenReal; /**< length of the real FFT. */ |
| Anna Bridge |
180:96ed750bd169 | 2175 | uint8_t ifftFlagR; /**< flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform. */ |
| Anna Bridge |
180:96ed750bd169 | 2176 | uint8_t bitReverseFlagR; /**< flag that enables (bitReverseFlagR=1) or disables (bitReverseFlagR=0) bit reversal of output. */ |
| Anna Bridge |
180:96ed750bd169 | 2177 | uint32_t twidCoefRModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ |
| Anna Bridge |
180:96ed750bd169 | 2178 | q15_t *pTwiddleAReal; /**< points to the real twiddle factor table. */ |
| Anna Bridge |
180:96ed750bd169 | 2179 | q15_t *pTwiddleBReal; /**< points to the imag twiddle factor table. */ |
| Anna Bridge |
180:96ed750bd169 | 2180 | const arm_cfft_instance_q15 *pCfft; /**< points to the complex FFT instance. */ |
| Anna Bridge |
180:96ed750bd169 | 2181 | } arm_rfft_instance_q15; |
| Anna Bridge |
180:96ed750bd169 | 2182 | |
| Anna Bridge |
180:96ed750bd169 | 2183 | arm_status arm_rfft_init_q15( |
| Anna Bridge |
180:96ed750bd169 | 2184 | arm_rfft_instance_q15 * S, |
| Anna Bridge |
180:96ed750bd169 | 2185 | uint32_t fftLenReal, |
| Anna Bridge |
180:96ed750bd169 | 2186 | uint32_t ifftFlagR, |
| Anna Bridge |
180:96ed750bd169 | 2187 | uint32_t bitReverseFlag); |
| Anna Bridge |
180:96ed750bd169 | 2188 | |
| Anna Bridge |
180:96ed750bd169 | 2189 | void arm_rfft_q15( |
| Anna Bridge |
180:96ed750bd169 | 2190 | const arm_rfft_instance_q15 * S, |
| Anna Bridge |
180:96ed750bd169 | 2191 | q15_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 2192 | q15_t * pDst); |
| Anna Bridge |
180:96ed750bd169 | 2193 | |
| Anna Bridge |
180:96ed750bd169 | 2194 | /** |
| Anna Bridge |
180:96ed750bd169 | 2195 | * @brief Instance structure for the Q31 RFFT/RIFFT function. |
| Anna Bridge |
180:96ed750bd169 | 2196 | */ |
| Anna Bridge |
180:96ed750bd169 | 2197 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 2198 | { |
| Anna Bridge |
180:96ed750bd169 | 2199 | uint32_t fftLenReal; /**< length of the real FFT. */ |
| Anna Bridge |
180:96ed750bd169 | 2200 | uint8_t ifftFlagR; /**< flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform. */ |
| Anna Bridge |
180:96ed750bd169 | 2201 | uint8_t bitReverseFlagR; /**< flag that enables (bitReverseFlagR=1) or disables (bitReverseFlagR=0) bit reversal of output. */ |
| Anna Bridge |
180:96ed750bd169 | 2202 | uint32_t twidCoefRModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ |
| Anna Bridge |
180:96ed750bd169 | 2203 | q31_t *pTwiddleAReal; /**< points to the real twiddle factor table. */ |
| Anna Bridge |
180:96ed750bd169 | 2204 | q31_t *pTwiddleBReal; /**< points to the imag twiddle factor table. */ |
| Anna Bridge |
180:96ed750bd169 | 2205 | const arm_cfft_instance_q31 *pCfft; /**< points to the complex FFT instance. */ |
| Anna Bridge |
180:96ed750bd169 | 2206 | } arm_rfft_instance_q31; |
| Anna Bridge |
180:96ed750bd169 | 2207 | |
| Anna Bridge |
180:96ed750bd169 | 2208 | arm_status arm_rfft_init_q31( |
| Anna Bridge |
180:96ed750bd169 | 2209 | arm_rfft_instance_q31 * S, |
| Anna Bridge |
180:96ed750bd169 | 2210 | uint32_t fftLenReal, |
| Anna Bridge |
180:96ed750bd169 | 2211 | uint32_t ifftFlagR, |
| Anna Bridge |
180:96ed750bd169 | 2212 | uint32_t bitReverseFlag); |
| Anna Bridge |
180:96ed750bd169 | 2213 | |
| Anna Bridge |
180:96ed750bd169 | 2214 | void arm_rfft_q31( |
| Anna Bridge |
180:96ed750bd169 | 2215 | const arm_rfft_instance_q31 * S, |
| Anna Bridge |
180:96ed750bd169 | 2216 | q31_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 2217 | q31_t * pDst); |
| Anna Bridge |
180:96ed750bd169 | 2218 | |
| Anna Bridge |
180:96ed750bd169 | 2219 | /** |
| Anna Bridge |
180:96ed750bd169 | 2220 | * @brief Instance structure for the floating-point RFFT/RIFFT function. |
| Anna Bridge |
180:96ed750bd169 | 2221 | */ |
| Anna Bridge |
180:96ed750bd169 | 2222 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 2223 | { |
| Anna Bridge |
180:96ed750bd169 | 2224 | uint32_t fftLenReal; /**< length of the real FFT. */ |
| Anna Bridge |
180:96ed750bd169 | 2225 | uint16_t fftLenBy2; /**< length of the complex FFT. */ |
| Anna Bridge |
180:96ed750bd169 | 2226 | uint8_t ifftFlagR; /**< flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform. */ |
| Anna Bridge |
180:96ed750bd169 | 2227 | uint8_t bitReverseFlagR; /**< flag that enables (bitReverseFlagR=1) or disables (bitReverseFlagR=0) bit reversal of output. */ |
| Anna Bridge |
180:96ed750bd169 | 2228 | uint32_t twidCoefRModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ |
| Anna Bridge |
180:96ed750bd169 | 2229 | float32_t *pTwiddleAReal; /**< points to the real twiddle factor table. */ |
| Anna Bridge |
180:96ed750bd169 | 2230 | float32_t *pTwiddleBReal; /**< points to the imag twiddle factor table. */ |
| Anna Bridge |
180:96ed750bd169 | 2231 | arm_cfft_radix4_instance_f32 *pCfft; /**< points to the complex FFT instance. */ |
| Anna Bridge |
180:96ed750bd169 | 2232 | } arm_rfft_instance_f32; |
| Anna Bridge |
180:96ed750bd169 | 2233 | |
| Anna Bridge |
180:96ed750bd169 | 2234 | arm_status arm_rfft_init_f32( |
| Anna Bridge |
180:96ed750bd169 | 2235 | arm_rfft_instance_f32 * S, |
| Anna Bridge |
180:96ed750bd169 | 2236 | arm_cfft_radix4_instance_f32 * S_CFFT, |
| Anna Bridge |
180:96ed750bd169 | 2237 | uint32_t fftLenReal, |
| Anna Bridge |
180:96ed750bd169 | 2238 | uint32_t ifftFlagR, |
| Anna Bridge |
180:96ed750bd169 | 2239 | uint32_t bitReverseFlag); |
| Anna Bridge |
180:96ed750bd169 | 2240 | |
| Anna Bridge |
180:96ed750bd169 | 2241 | void arm_rfft_f32( |
| Anna Bridge |
180:96ed750bd169 | 2242 | const arm_rfft_instance_f32 * S, |
| Anna Bridge |
180:96ed750bd169 | 2243 | float32_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 2244 | float32_t * pDst); |
| Anna Bridge |
180:96ed750bd169 | 2245 | |
| Anna Bridge |
180:96ed750bd169 | 2246 | /** |
| Anna Bridge |
180:96ed750bd169 | 2247 | * @brief Instance structure for the floating-point RFFT/RIFFT function. |
| Anna Bridge |
180:96ed750bd169 | 2248 | */ |
| Anna Bridge |
180:96ed750bd169 | 2249 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 2250 | { |
| Anna Bridge |
180:96ed750bd169 | 2251 | arm_cfft_instance_f32 Sint; /**< Internal CFFT structure. */ |
| Anna Bridge |
180:96ed750bd169 | 2252 | uint16_t fftLenRFFT; /**< length of the real sequence */ |
| Anna Bridge |
180:96ed750bd169 | 2253 | float32_t * pTwiddleRFFT; /**< Twiddle factors real stage */ |
| Anna Bridge |
180:96ed750bd169 | 2254 | } arm_rfft_fast_instance_f32 ; |
| Anna Bridge |
180:96ed750bd169 | 2255 | |
| Anna Bridge |
180:96ed750bd169 | 2256 | arm_status arm_rfft_fast_init_f32 ( |
| Anna Bridge |
180:96ed750bd169 | 2257 | arm_rfft_fast_instance_f32 * S, |
| Anna Bridge |
180:96ed750bd169 | 2258 | uint16_t fftLen); |
| Anna Bridge |
180:96ed750bd169 | 2259 | |
| Anna Bridge |
180:96ed750bd169 | 2260 | void arm_rfft_fast_f32( |
| Anna Bridge |
180:96ed750bd169 | 2261 | arm_rfft_fast_instance_f32 * S, |
| Anna Bridge |
180:96ed750bd169 | 2262 | float32_t * p, float32_t * pOut, |
| Anna Bridge |
180:96ed750bd169 | 2263 | uint8_t ifftFlag); |
| Anna Bridge |
180:96ed750bd169 | 2264 | |
| Anna Bridge |
180:96ed750bd169 | 2265 | /** |
| Anna Bridge |
180:96ed750bd169 | 2266 | * @brief Instance structure for the floating-point DCT4/IDCT4 function. |
| Anna Bridge |
180:96ed750bd169 | 2267 | */ |
| Anna Bridge |
180:96ed750bd169 | 2268 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 2269 | { |
| Anna Bridge |
180:96ed750bd169 | 2270 | uint16_t N; /**< length of the DCT4. */ |
| Anna Bridge |
180:96ed750bd169 | 2271 | uint16_t Nby2; /**< half of the length of the DCT4. */ |
| Anna Bridge |
180:96ed750bd169 | 2272 | float32_t normalize; /**< normalizing factor. */ |
| Anna Bridge |
180:96ed750bd169 | 2273 | float32_t *pTwiddle; /**< points to the twiddle factor table. */ |
| Anna Bridge |
180:96ed750bd169 | 2274 | float32_t *pCosFactor; /**< points to the cosFactor table. */ |
| Anna Bridge |
180:96ed750bd169 | 2275 | arm_rfft_instance_f32 *pRfft; /**< points to the real FFT instance. */ |
| Anna Bridge |
180:96ed750bd169 | 2276 | arm_cfft_radix4_instance_f32 *pCfft; /**< points to the complex FFT instance. */ |
| Anna Bridge |
180:96ed750bd169 | 2277 | } arm_dct4_instance_f32; |
| Anna Bridge |
180:96ed750bd169 | 2278 | |
| Anna Bridge |
180:96ed750bd169 | 2279 | |
| Anna Bridge |
180:96ed750bd169 | 2280 | /** |
| Anna Bridge |
180:96ed750bd169 | 2281 | * @brief Initialization function for the floating-point DCT4/IDCT4. |
| Anna Bridge |
180:96ed750bd169 | 2282 | * @param[in,out] S points to an instance of floating-point DCT4/IDCT4 structure. |
| Anna Bridge |
180:96ed750bd169 | 2283 | * @param[in] S_RFFT points to an instance of floating-point RFFT/RIFFT structure. |
| Anna Bridge |
180:96ed750bd169 | 2284 | * @param[in] S_CFFT points to an instance of floating-point CFFT/CIFFT structure. |
| Anna Bridge |
180:96ed750bd169 | 2285 | * @param[in] N length of the DCT4. |
| Anna Bridge |
180:96ed750bd169 | 2286 | * @param[in] Nby2 half of the length of the DCT4. |
| Anna Bridge |
180:96ed750bd169 | 2287 | * @param[in] normalize normalizing factor. |
| Anna Bridge |
180:96ed750bd169 | 2288 | * @return arm_status function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if <code>fftLenReal</code> is not a supported transform length. |
| Anna Bridge |
180:96ed750bd169 | 2289 | */ |
| Anna Bridge |
180:96ed750bd169 | 2290 | arm_status arm_dct4_init_f32( |
| Anna Bridge |
180:96ed750bd169 | 2291 | arm_dct4_instance_f32 * S, |
| Anna Bridge |
180:96ed750bd169 | 2292 | arm_rfft_instance_f32 * S_RFFT, |
| Anna Bridge |
180:96ed750bd169 | 2293 | arm_cfft_radix4_instance_f32 * S_CFFT, |
| Anna Bridge |
180:96ed750bd169 | 2294 | uint16_t N, |
| Anna Bridge |
180:96ed750bd169 | 2295 | uint16_t Nby2, |
| Anna Bridge |
180:96ed750bd169 | 2296 | float32_t normalize); |
| Anna Bridge |
180:96ed750bd169 | 2297 | |
| Anna Bridge |
180:96ed750bd169 | 2298 | |
| Anna Bridge |
180:96ed750bd169 | 2299 | /** |
| Anna Bridge |
180:96ed750bd169 | 2300 | * @brief Processing function for the floating-point DCT4/IDCT4. |
| Anna Bridge |
180:96ed750bd169 | 2301 | * @param[in] S points to an instance of the floating-point DCT4/IDCT4 structure. |
| Anna Bridge |
180:96ed750bd169 | 2302 | * @param[in] pState points to state buffer. |
| Anna Bridge |
180:96ed750bd169 | 2303 | * @param[in,out] pInlineBuffer points to the in-place input and output buffer. |
| Anna Bridge |
180:96ed750bd169 | 2304 | */ |
| Anna Bridge |
180:96ed750bd169 | 2305 | void arm_dct4_f32( |
| Anna Bridge |
180:96ed750bd169 | 2306 | const arm_dct4_instance_f32 * S, |
| Anna Bridge |
180:96ed750bd169 | 2307 | float32_t * pState, |
| Anna Bridge |
180:96ed750bd169 | 2308 | float32_t * pInlineBuffer); |
| Anna Bridge |
180:96ed750bd169 | 2309 | |
| Anna Bridge |
180:96ed750bd169 | 2310 | |
| Anna Bridge |
180:96ed750bd169 | 2311 | /** |
| Anna Bridge |
180:96ed750bd169 | 2312 | * @brief Instance structure for the Q31 DCT4/IDCT4 function. |
| Anna Bridge |
180:96ed750bd169 | 2313 | */ |
| Anna Bridge |
180:96ed750bd169 | 2314 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 2315 | { |
| Anna Bridge |
180:96ed750bd169 | 2316 | uint16_t N; /**< length of the DCT4. */ |
| Anna Bridge |
180:96ed750bd169 | 2317 | uint16_t Nby2; /**< half of the length of the DCT4. */ |
| Anna Bridge |
180:96ed750bd169 | 2318 | q31_t normalize; /**< normalizing factor. */ |
| Anna Bridge |
180:96ed750bd169 | 2319 | q31_t *pTwiddle; /**< points to the twiddle factor table. */ |
| Anna Bridge |
180:96ed750bd169 | 2320 | q31_t *pCosFactor; /**< points to the cosFactor table. */ |
| Anna Bridge |
180:96ed750bd169 | 2321 | arm_rfft_instance_q31 *pRfft; /**< points to the real FFT instance. */ |
| Anna Bridge |
180:96ed750bd169 | 2322 | arm_cfft_radix4_instance_q31 *pCfft; /**< points to the complex FFT instance. */ |
| Anna Bridge |
180:96ed750bd169 | 2323 | } arm_dct4_instance_q31; |
| Anna Bridge |
180:96ed750bd169 | 2324 | |
| Anna Bridge |
180:96ed750bd169 | 2325 | |
| Anna Bridge |
180:96ed750bd169 | 2326 | /** |
| Anna Bridge |
180:96ed750bd169 | 2327 | * @brief Initialization function for the Q31 DCT4/IDCT4. |
| Anna Bridge |
180:96ed750bd169 | 2328 | * @param[in,out] S points to an instance of Q31 DCT4/IDCT4 structure. |
| Anna Bridge |
180:96ed750bd169 | 2329 | * @param[in] S_RFFT points to an instance of Q31 RFFT/RIFFT structure |
| Anna Bridge |
180:96ed750bd169 | 2330 | * @param[in] S_CFFT points to an instance of Q31 CFFT/CIFFT structure |
| Anna Bridge |
180:96ed750bd169 | 2331 | * @param[in] N length of the DCT4. |
| Anna Bridge |
180:96ed750bd169 | 2332 | * @param[in] Nby2 half of the length of the DCT4. |
| Anna Bridge |
180:96ed750bd169 | 2333 | * @param[in] normalize normalizing factor. |
| Anna Bridge |
180:96ed750bd169 | 2334 | * @return arm_status function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if <code>N</code> is not a supported transform length. |
| Anna Bridge |
180:96ed750bd169 | 2335 | */ |
| Anna Bridge |
180:96ed750bd169 | 2336 | arm_status arm_dct4_init_q31( |
| Anna Bridge |
180:96ed750bd169 | 2337 | arm_dct4_instance_q31 * S, |
| Anna Bridge |
180:96ed750bd169 | 2338 | arm_rfft_instance_q31 * S_RFFT, |
| Anna Bridge |
180:96ed750bd169 | 2339 | arm_cfft_radix4_instance_q31 * S_CFFT, |
| Anna Bridge |
180:96ed750bd169 | 2340 | uint16_t N, |
| Anna Bridge |
180:96ed750bd169 | 2341 | uint16_t Nby2, |
| Anna Bridge |
180:96ed750bd169 | 2342 | q31_t normalize); |
| Anna Bridge |
180:96ed750bd169 | 2343 | |
| Anna Bridge |
180:96ed750bd169 | 2344 | |
| Anna Bridge |
180:96ed750bd169 | 2345 | /** |
| Anna Bridge |
180:96ed750bd169 | 2346 | * @brief Processing function for the Q31 DCT4/IDCT4. |
| Anna Bridge |
180:96ed750bd169 | 2347 | * @param[in] S points to an instance of the Q31 DCT4 structure. |
| Anna Bridge |
180:96ed750bd169 | 2348 | * @param[in] pState points to state buffer. |
| Anna Bridge |
180:96ed750bd169 | 2349 | * @param[in,out] pInlineBuffer points to the in-place input and output buffer. |
| Anna Bridge |
180:96ed750bd169 | 2350 | */ |
| Anna Bridge |
180:96ed750bd169 | 2351 | void arm_dct4_q31( |
| Anna Bridge |
180:96ed750bd169 | 2352 | const arm_dct4_instance_q31 * S, |
| Anna Bridge |
180:96ed750bd169 | 2353 | q31_t * pState, |
| Anna Bridge |
180:96ed750bd169 | 2354 | q31_t * pInlineBuffer); |
| Anna Bridge |
180:96ed750bd169 | 2355 | |
| Anna Bridge |
180:96ed750bd169 | 2356 | |
| Anna Bridge |
180:96ed750bd169 | 2357 | /** |
| Anna Bridge |
180:96ed750bd169 | 2358 | * @brief Instance structure for the Q15 DCT4/IDCT4 function. |
| Anna Bridge |
180:96ed750bd169 | 2359 | */ |
| Anna Bridge |
180:96ed750bd169 | 2360 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 2361 | { |
| Anna Bridge |
180:96ed750bd169 | 2362 | uint16_t N; /**< length of the DCT4. */ |
| Anna Bridge |
180:96ed750bd169 | 2363 | uint16_t Nby2; /**< half of the length of the DCT4. */ |
| Anna Bridge |
180:96ed750bd169 | 2364 | q15_t normalize; /**< normalizing factor. */ |
| Anna Bridge |
180:96ed750bd169 | 2365 | q15_t *pTwiddle; /**< points to the twiddle factor table. */ |
| Anna Bridge |
180:96ed750bd169 | 2366 | q15_t *pCosFactor; /**< points to the cosFactor table. */ |
| Anna Bridge |
180:96ed750bd169 | 2367 | arm_rfft_instance_q15 *pRfft; /**< points to the real FFT instance. */ |
| Anna Bridge |
180:96ed750bd169 | 2368 | arm_cfft_radix4_instance_q15 *pCfft; /**< points to the complex FFT instance. */ |
| Anna Bridge |
180:96ed750bd169 | 2369 | } arm_dct4_instance_q15; |
| Anna Bridge |
180:96ed750bd169 | 2370 | |
| Anna Bridge |
180:96ed750bd169 | 2371 | |
| Anna Bridge |
180:96ed750bd169 | 2372 | /** |
| Anna Bridge |
180:96ed750bd169 | 2373 | * @brief Initialization function for the Q15 DCT4/IDCT4. |
| Anna Bridge |
180:96ed750bd169 | 2374 | * @param[in,out] S points to an instance of Q15 DCT4/IDCT4 structure. |
| Anna Bridge |
180:96ed750bd169 | 2375 | * @param[in] S_RFFT points to an instance of Q15 RFFT/RIFFT structure. |
| Anna Bridge |
180:96ed750bd169 | 2376 | * @param[in] S_CFFT points to an instance of Q15 CFFT/CIFFT structure. |
| Anna Bridge |
180:96ed750bd169 | 2377 | * @param[in] N length of the DCT4. |
| Anna Bridge |
180:96ed750bd169 | 2378 | * @param[in] Nby2 half of the length of the DCT4. |
| Anna Bridge |
180:96ed750bd169 | 2379 | * @param[in] normalize normalizing factor. |
| Anna Bridge |
180:96ed750bd169 | 2380 | * @return arm_status function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if <code>N</code> is not a supported transform length. |
| Anna Bridge |
180:96ed750bd169 | 2381 | */ |
| Anna Bridge |
180:96ed750bd169 | 2382 | arm_status arm_dct4_init_q15( |
| Anna Bridge |
180:96ed750bd169 | 2383 | arm_dct4_instance_q15 * S, |
| Anna Bridge |
180:96ed750bd169 | 2384 | arm_rfft_instance_q15 * S_RFFT, |
| Anna Bridge |
180:96ed750bd169 | 2385 | arm_cfft_radix4_instance_q15 * S_CFFT, |
| Anna Bridge |
180:96ed750bd169 | 2386 | uint16_t N, |
| Anna Bridge |
180:96ed750bd169 | 2387 | uint16_t Nby2, |
| Anna Bridge |
180:96ed750bd169 | 2388 | q15_t normalize); |
| Anna Bridge |
180:96ed750bd169 | 2389 | |
| Anna Bridge |
180:96ed750bd169 | 2390 | |
| Anna Bridge |
180:96ed750bd169 | 2391 | /** |
| Anna Bridge |
180:96ed750bd169 | 2392 | * @brief Processing function for the Q15 DCT4/IDCT4. |
| Anna Bridge |
180:96ed750bd169 | 2393 | * @param[in] S points to an instance of the Q15 DCT4 structure. |
| Anna Bridge |
180:96ed750bd169 | 2394 | * @param[in] pState points to state buffer. |
| Anna Bridge |
180:96ed750bd169 | 2395 | * @param[in,out] pInlineBuffer points to the in-place input and output buffer. |
| Anna Bridge |
180:96ed750bd169 | 2396 | */ |
| Anna Bridge |
180:96ed750bd169 | 2397 | void arm_dct4_q15( |
| Anna Bridge |
180:96ed750bd169 | 2398 | const arm_dct4_instance_q15 * S, |
| Anna Bridge |
180:96ed750bd169 | 2399 | q15_t * pState, |
| Anna Bridge |
180:96ed750bd169 | 2400 | q15_t * pInlineBuffer); |
| Anna Bridge |
180:96ed750bd169 | 2401 | |
| Anna Bridge |
180:96ed750bd169 | 2402 | |
| Anna Bridge |
180:96ed750bd169 | 2403 | /** |
| Anna Bridge |
180:96ed750bd169 | 2404 | * @brief Floating-point vector addition. |
| Anna Bridge |
180:96ed750bd169 | 2405 | * @param[in] pSrcA points to the first input vector |
| Anna Bridge |
180:96ed750bd169 | 2406 | * @param[in] pSrcB points to the second input vector |
| Anna Bridge |
180:96ed750bd169 | 2407 | * @param[out] pDst points to the output vector |
| Anna Bridge |
180:96ed750bd169 | 2408 | * @param[in] blockSize number of samples in each vector |
| Anna Bridge |
180:96ed750bd169 | 2409 | */ |
| Anna Bridge |
180:96ed750bd169 | 2410 | void arm_add_f32( |
| Anna Bridge |
180:96ed750bd169 | 2411 | float32_t * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 2412 | float32_t * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 2413 | float32_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 2414 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 2415 | |
| Anna Bridge |
180:96ed750bd169 | 2416 | |
| Anna Bridge |
180:96ed750bd169 | 2417 | /** |
| Anna Bridge |
180:96ed750bd169 | 2418 | * @brief Q7 vector addition. |
| Anna Bridge |
180:96ed750bd169 | 2419 | * @param[in] pSrcA points to the first input vector |
| Anna Bridge |
180:96ed750bd169 | 2420 | * @param[in] pSrcB points to the second input vector |
| Anna Bridge |
180:96ed750bd169 | 2421 | * @param[out] pDst points to the output vector |
| Anna Bridge |
180:96ed750bd169 | 2422 | * @param[in] blockSize number of samples in each vector |
| Anna Bridge |
180:96ed750bd169 | 2423 | */ |
| Anna Bridge |
180:96ed750bd169 | 2424 | void arm_add_q7( |
| Anna Bridge |
180:96ed750bd169 | 2425 | q7_t * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 2426 | q7_t * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 2427 | q7_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 2428 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 2429 | |
| Anna Bridge |
180:96ed750bd169 | 2430 | |
| Anna Bridge |
180:96ed750bd169 | 2431 | /** |
| Anna Bridge |
180:96ed750bd169 | 2432 | * @brief Q15 vector addition. |
| Anna Bridge |
180:96ed750bd169 | 2433 | * @param[in] pSrcA points to the first input vector |
| Anna Bridge |
180:96ed750bd169 | 2434 | * @param[in] pSrcB points to the second input vector |
| Anna Bridge |
180:96ed750bd169 | 2435 | * @param[out] pDst points to the output vector |
| Anna Bridge |
180:96ed750bd169 | 2436 | * @param[in] blockSize number of samples in each vector |
| Anna Bridge |
180:96ed750bd169 | 2437 | */ |
| Anna Bridge |
180:96ed750bd169 | 2438 | void arm_add_q15( |
| Anna Bridge |
180:96ed750bd169 | 2439 | q15_t * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 2440 | q15_t * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 2441 | q15_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 2442 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 2443 | |
| Anna Bridge |
180:96ed750bd169 | 2444 | |
| Anna Bridge |
180:96ed750bd169 | 2445 | /** |
| Anna Bridge |
180:96ed750bd169 | 2446 | * @brief Q31 vector addition. |
| Anna Bridge |
180:96ed750bd169 | 2447 | * @param[in] pSrcA points to the first input vector |
| Anna Bridge |
180:96ed750bd169 | 2448 | * @param[in] pSrcB points to the second input vector |
| Anna Bridge |
180:96ed750bd169 | 2449 | * @param[out] pDst points to the output vector |
| Anna Bridge |
180:96ed750bd169 | 2450 | * @param[in] blockSize number of samples in each vector |
| Anna Bridge |
180:96ed750bd169 | 2451 | */ |
| Anna Bridge |
180:96ed750bd169 | 2452 | void arm_add_q31( |
| Anna Bridge |
180:96ed750bd169 | 2453 | q31_t * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 2454 | q31_t * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 2455 | q31_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 2456 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 2457 | |
| Anna Bridge |
180:96ed750bd169 | 2458 | |
| Anna Bridge |
180:96ed750bd169 | 2459 | /** |
| Anna Bridge |
180:96ed750bd169 | 2460 | * @brief Floating-point vector subtraction. |
| Anna Bridge |
180:96ed750bd169 | 2461 | * @param[in] pSrcA points to the first input vector |
| Anna Bridge |
180:96ed750bd169 | 2462 | * @param[in] pSrcB points to the second input vector |
| Anna Bridge |
180:96ed750bd169 | 2463 | * @param[out] pDst points to the output vector |
| Anna Bridge |
180:96ed750bd169 | 2464 | * @param[in] blockSize number of samples in each vector |
| Anna Bridge |
180:96ed750bd169 | 2465 | */ |
| Anna Bridge |
180:96ed750bd169 | 2466 | void arm_sub_f32( |
| Anna Bridge |
180:96ed750bd169 | 2467 | float32_t * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 2468 | float32_t * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 2469 | float32_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 2470 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 2471 | |
| Anna Bridge |
180:96ed750bd169 | 2472 | |
| Anna Bridge |
180:96ed750bd169 | 2473 | /** |
| Anna Bridge |
180:96ed750bd169 | 2474 | * @brief Q7 vector subtraction. |
| Anna Bridge |
180:96ed750bd169 | 2475 | * @param[in] pSrcA points to the first input vector |
| Anna Bridge |
180:96ed750bd169 | 2476 | * @param[in] pSrcB points to the second input vector |
| Anna Bridge |
180:96ed750bd169 | 2477 | * @param[out] pDst points to the output vector |
| Anna Bridge |
180:96ed750bd169 | 2478 | * @param[in] blockSize number of samples in each vector |
| Anna Bridge |
180:96ed750bd169 | 2479 | */ |
| Anna Bridge |
180:96ed750bd169 | 2480 | void arm_sub_q7( |
| Anna Bridge |
180:96ed750bd169 | 2481 | q7_t * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 2482 | q7_t * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 2483 | q7_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 2484 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 2485 | |
| Anna Bridge |
180:96ed750bd169 | 2486 | |
| Anna Bridge |
180:96ed750bd169 | 2487 | /** |
| Anna Bridge |
180:96ed750bd169 | 2488 | * @brief Q15 vector subtraction. |
| Anna Bridge |
180:96ed750bd169 | 2489 | * @param[in] pSrcA points to the first input vector |
| Anna Bridge |
180:96ed750bd169 | 2490 | * @param[in] pSrcB points to the second input vector |
| Anna Bridge |
180:96ed750bd169 | 2491 | * @param[out] pDst points to the output vector |
| Anna Bridge |
180:96ed750bd169 | 2492 | * @param[in] blockSize number of samples in each vector |
| Anna Bridge |
180:96ed750bd169 | 2493 | */ |
| Anna Bridge |
180:96ed750bd169 | 2494 | void arm_sub_q15( |
| Anna Bridge |
180:96ed750bd169 | 2495 | q15_t * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 2496 | q15_t * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 2497 | q15_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 2498 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 2499 | |
| Anna Bridge |
180:96ed750bd169 | 2500 | |
| Anna Bridge |
180:96ed750bd169 | 2501 | /** |
| Anna Bridge |
180:96ed750bd169 | 2502 | * @brief Q31 vector subtraction. |
| Anna Bridge |
180:96ed750bd169 | 2503 | * @param[in] pSrcA points to the first input vector |
| Anna Bridge |
180:96ed750bd169 | 2504 | * @param[in] pSrcB points to the second input vector |
| Anna Bridge |
180:96ed750bd169 | 2505 | * @param[out] pDst points to the output vector |
| Anna Bridge |
180:96ed750bd169 | 2506 | * @param[in] blockSize number of samples in each vector |
| Anna Bridge |
180:96ed750bd169 | 2507 | */ |
| Anna Bridge |
180:96ed750bd169 | 2508 | void arm_sub_q31( |
| Anna Bridge |
180:96ed750bd169 | 2509 | q31_t * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 2510 | q31_t * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 2511 | q31_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 2512 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 2513 | |
| Anna Bridge |
180:96ed750bd169 | 2514 | |
| Anna Bridge |
180:96ed750bd169 | 2515 | /** |
| Anna Bridge |
180:96ed750bd169 | 2516 | * @brief Multiplies a floating-point vector by a scalar. |
| Anna Bridge |
180:96ed750bd169 | 2517 | * @param[in] pSrc points to the input vector |
| Anna Bridge |
180:96ed750bd169 | 2518 | * @param[in] scale scale factor to be applied |
| Anna Bridge |
180:96ed750bd169 | 2519 | * @param[out] pDst points to the output vector |
| Anna Bridge |
180:96ed750bd169 | 2520 | * @param[in] blockSize number of samples in the vector |
| Anna Bridge |
180:96ed750bd169 | 2521 | */ |
| Anna Bridge |
180:96ed750bd169 | 2522 | void arm_scale_f32( |
| Anna Bridge |
180:96ed750bd169 | 2523 | float32_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 2524 | float32_t scale, |
| Anna Bridge |
180:96ed750bd169 | 2525 | float32_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 2526 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 2527 | |
| Anna Bridge |
180:96ed750bd169 | 2528 | |
| Anna Bridge |
180:96ed750bd169 | 2529 | /** |
| Anna Bridge |
180:96ed750bd169 | 2530 | * @brief Multiplies a Q7 vector by a scalar. |
| Anna Bridge |
180:96ed750bd169 | 2531 | * @param[in] pSrc points to the input vector |
| Anna Bridge |
180:96ed750bd169 | 2532 | * @param[in] scaleFract fractional portion of the scale value |
| Anna Bridge |
180:96ed750bd169 | 2533 | * @param[in] shift number of bits to shift the result by |
| Anna Bridge |
180:96ed750bd169 | 2534 | * @param[out] pDst points to the output vector |
| Anna Bridge |
180:96ed750bd169 | 2535 | * @param[in] blockSize number of samples in the vector |
| Anna Bridge |
180:96ed750bd169 | 2536 | */ |
| Anna Bridge |
180:96ed750bd169 | 2537 | void arm_scale_q7( |
| Anna Bridge |
180:96ed750bd169 | 2538 | q7_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 2539 | q7_t scaleFract, |
| Anna Bridge |
180:96ed750bd169 | 2540 | int8_t shift, |
| Anna Bridge |
180:96ed750bd169 | 2541 | q7_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 2542 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 2543 | |
| Anna Bridge |
180:96ed750bd169 | 2544 | |
| Anna Bridge |
180:96ed750bd169 | 2545 | /** |
| Anna Bridge |
180:96ed750bd169 | 2546 | * @brief Multiplies a Q15 vector by a scalar. |
| Anna Bridge |
180:96ed750bd169 | 2547 | * @param[in] pSrc points to the input vector |
| Anna Bridge |
180:96ed750bd169 | 2548 | * @param[in] scaleFract fractional portion of the scale value |
| Anna Bridge |
180:96ed750bd169 | 2549 | * @param[in] shift number of bits to shift the result by |
| Anna Bridge |
180:96ed750bd169 | 2550 | * @param[out] pDst points to the output vector |
| Anna Bridge |
180:96ed750bd169 | 2551 | * @param[in] blockSize number of samples in the vector |
| Anna Bridge |
180:96ed750bd169 | 2552 | */ |
| Anna Bridge |
180:96ed750bd169 | 2553 | void arm_scale_q15( |
| Anna Bridge |
180:96ed750bd169 | 2554 | q15_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 2555 | q15_t scaleFract, |
| Anna Bridge |
180:96ed750bd169 | 2556 | int8_t shift, |
| Anna Bridge |
180:96ed750bd169 | 2557 | q15_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 2558 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 2559 | |
| Anna Bridge |
180:96ed750bd169 | 2560 | |
| Anna Bridge |
180:96ed750bd169 | 2561 | /** |
| Anna Bridge |
180:96ed750bd169 | 2562 | * @brief Multiplies a Q31 vector by a scalar. |
| Anna Bridge |
180:96ed750bd169 | 2563 | * @param[in] pSrc points to the input vector |
| Anna Bridge |
180:96ed750bd169 | 2564 | * @param[in] scaleFract fractional portion of the scale value |
| Anna Bridge |
180:96ed750bd169 | 2565 | * @param[in] shift number of bits to shift the result by |
| Anna Bridge |
180:96ed750bd169 | 2566 | * @param[out] pDst points to the output vector |
| Anna Bridge |
180:96ed750bd169 | 2567 | * @param[in] blockSize number of samples in the vector |
| Anna Bridge |
180:96ed750bd169 | 2568 | */ |
| Anna Bridge |
180:96ed750bd169 | 2569 | void arm_scale_q31( |
| Anna Bridge |
180:96ed750bd169 | 2570 | q31_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 2571 | q31_t scaleFract, |
| Anna Bridge |
180:96ed750bd169 | 2572 | int8_t shift, |
| Anna Bridge |
180:96ed750bd169 | 2573 | q31_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 2574 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 2575 | |
| Anna Bridge |
180:96ed750bd169 | 2576 | |
| Anna Bridge |
180:96ed750bd169 | 2577 | /** |
| Anna Bridge |
180:96ed750bd169 | 2578 | * @brief Q7 vector absolute value. |
| Anna Bridge |
180:96ed750bd169 | 2579 | * @param[in] pSrc points to the input buffer |
| Anna Bridge |
180:96ed750bd169 | 2580 | * @param[out] pDst points to the output buffer |
| Anna Bridge |
180:96ed750bd169 | 2581 | * @param[in] blockSize number of samples in each vector |
| Anna Bridge |
180:96ed750bd169 | 2582 | */ |
| Anna Bridge |
180:96ed750bd169 | 2583 | void arm_abs_q7( |
| Anna Bridge |
180:96ed750bd169 | 2584 | q7_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 2585 | q7_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 2586 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 2587 | |
| Anna Bridge |
180:96ed750bd169 | 2588 | |
| Anna Bridge |
180:96ed750bd169 | 2589 | /** |
| Anna Bridge |
180:96ed750bd169 | 2590 | * @brief Floating-point vector absolute value. |
| Anna Bridge |
180:96ed750bd169 | 2591 | * @param[in] pSrc points to the input buffer |
| Anna Bridge |
180:96ed750bd169 | 2592 | * @param[out] pDst points to the output buffer |
| Anna Bridge |
180:96ed750bd169 | 2593 | * @param[in] blockSize number of samples in each vector |
| Anna Bridge |
180:96ed750bd169 | 2594 | */ |
| Anna Bridge |
180:96ed750bd169 | 2595 | void arm_abs_f32( |
| Anna Bridge |
180:96ed750bd169 | 2596 | float32_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 2597 | float32_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 2598 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 2599 | |
| Anna Bridge |
180:96ed750bd169 | 2600 | |
| Anna Bridge |
180:96ed750bd169 | 2601 | /** |
| Anna Bridge |
180:96ed750bd169 | 2602 | * @brief Q15 vector absolute value. |
| Anna Bridge |
180:96ed750bd169 | 2603 | * @param[in] pSrc points to the input buffer |
| Anna Bridge |
180:96ed750bd169 | 2604 | * @param[out] pDst points to the output buffer |
| Anna Bridge |
180:96ed750bd169 | 2605 | * @param[in] blockSize number of samples in each vector |
| Anna Bridge |
180:96ed750bd169 | 2606 | */ |
| Anna Bridge |
180:96ed750bd169 | 2607 | void arm_abs_q15( |
| Anna Bridge |
180:96ed750bd169 | 2608 | q15_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 2609 | q15_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 2610 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 2611 | |
| Anna Bridge |
180:96ed750bd169 | 2612 | |
| Anna Bridge |
180:96ed750bd169 | 2613 | /** |
| Anna Bridge |
180:96ed750bd169 | 2614 | * @brief Q31 vector absolute value. |
| Anna Bridge |
180:96ed750bd169 | 2615 | * @param[in] pSrc points to the input buffer |
| Anna Bridge |
180:96ed750bd169 | 2616 | * @param[out] pDst points to the output buffer |
| Anna Bridge |
180:96ed750bd169 | 2617 | * @param[in] blockSize number of samples in each vector |
| Anna Bridge |
180:96ed750bd169 | 2618 | */ |
| Anna Bridge |
180:96ed750bd169 | 2619 | void arm_abs_q31( |
| Anna Bridge |
180:96ed750bd169 | 2620 | q31_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 2621 | q31_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 2622 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 2623 | |
| Anna Bridge |
180:96ed750bd169 | 2624 | |
| Anna Bridge |
180:96ed750bd169 | 2625 | /** |
| Anna Bridge |
180:96ed750bd169 | 2626 | * @brief Dot product of floating-point vectors. |
| Anna Bridge |
180:96ed750bd169 | 2627 | * @param[in] pSrcA points to the first input vector |
| Anna Bridge |
180:96ed750bd169 | 2628 | * @param[in] pSrcB points to the second input vector |
| Anna Bridge |
180:96ed750bd169 | 2629 | * @param[in] blockSize number of samples in each vector |
| Anna Bridge |
180:96ed750bd169 | 2630 | * @param[out] result output result returned here |
| Anna Bridge |
180:96ed750bd169 | 2631 | */ |
| Anna Bridge |
180:96ed750bd169 | 2632 | void arm_dot_prod_f32( |
| Anna Bridge |
180:96ed750bd169 | 2633 | float32_t * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 2634 | float32_t * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 2635 | uint32_t blockSize, |
| Anna Bridge |
180:96ed750bd169 | 2636 | float32_t * result); |
| Anna Bridge |
180:96ed750bd169 | 2637 | |
| Anna Bridge |
180:96ed750bd169 | 2638 | |
| Anna Bridge |
180:96ed750bd169 | 2639 | /** |
| Anna Bridge |
180:96ed750bd169 | 2640 | * @brief Dot product of Q7 vectors. |
| Anna Bridge |
180:96ed750bd169 | 2641 | * @param[in] pSrcA points to the first input vector |
| Anna Bridge |
180:96ed750bd169 | 2642 | * @param[in] pSrcB points to the second input vector |
| Anna Bridge |
180:96ed750bd169 | 2643 | * @param[in] blockSize number of samples in each vector |
| Anna Bridge |
180:96ed750bd169 | 2644 | * @param[out] result output result returned here |
| Anna Bridge |
180:96ed750bd169 | 2645 | */ |
| Anna Bridge |
180:96ed750bd169 | 2646 | void arm_dot_prod_q7( |
| Anna Bridge |
180:96ed750bd169 | 2647 | q7_t * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 2648 | q7_t * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 2649 | uint32_t blockSize, |
| Anna Bridge |
180:96ed750bd169 | 2650 | q31_t * result); |
| Anna Bridge |
180:96ed750bd169 | 2651 | |
| Anna Bridge |
180:96ed750bd169 | 2652 | |
| Anna Bridge |
180:96ed750bd169 | 2653 | /** |
| Anna Bridge |
180:96ed750bd169 | 2654 | * @brief Dot product of Q15 vectors. |
| Anna Bridge |
180:96ed750bd169 | 2655 | * @param[in] pSrcA points to the first input vector |
| Anna Bridge |
180:96ed750bd169 | 2656 | * @param[in] pSrcB points to the second input vector |
| Anna Bridge |
180:96ed750bd169 | 2657 | * @param[in] blockSize number of samples in each vector |
| Anna Bridge |
180:96ed750bd169 | 2658 | * @param[out] result output result returned here |
| Anna Bridge |
180:96ed750bd169 | 2659 | */ |
| Anna Bridge |
180:96ed750bd169 | 2660 | void arm_dot_prod_q15( |
| Anna Bridge |
180:96ed750bd169 | 2661 | q15_t * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 2662 | q15_t * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 2663 | uint32_t blockSize, |
| Anna Bridge |
180:96ed750bd169 | 2664 | q63_t * result); |
| Anna Bridge |
180:96ed750bd169 | 2665 | |
| Anna Bridge |
180:96ed750bd169 | 2666 | |
| Anna Bridge |
180:96ed750bd169 | 2667 | /** |
| Anna Bridge |
180:96ed750bd169 | 2668 | * @brief Dot product of Q31 vectors. |
| Anna Bridge |
180:96ed750bd169 | 2669 | * @param[in] pSrcA points to the first input vector |
| Anna Bridge |
180:96ed750bd169 | 2670 | * @param[in] pSrcB points to the second input vector |
| Anna Bridge |
180:96ed750bd169 | 2671 | * @param[in] blockSize number of samples in each vector |
| Anna Bridge |
180:96ed750bd169 | 2672 | * @param[out] result output result returned here |
| Anna Bridge |
180:96ed750bd169 | 2673 | */ |
| Anna Bridge |
180:96ed750bd169 | 2674 | void arm_dot_prod_q31( |
| Anna Bridge |
180:96ed750bd169 | 2675 | q31_t * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 2676 | q31_t * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 2677 | uint32_t blockSize, |
| Anna Bridge |
180:96ed750bd169 | 2678 | q63_t * result); |
| Anna Bridge |
180:96ed750bd169 | 2679 | |
| Anna Bridge |
180:96ed750bd169 | 2680 | |
| Anna Bridge |
180:96ed750bd169 | 2681 | /** |
| Anna Bridge |
180:96ed750bd169 | 2682 | * @brief Shifts the elements of a Q7 vector a specified number of bits. |
| Anna Bridge |
180:96ed750bd169 | 2683 | * @param[in] pSrc points to the input vector |
| Anna Bridge |
180:96ed750bd169 | 2684 | * @param[in] shiftBits number of bits to shift. A positive value shifts left; a negative value shifts right. |
| Anna Bridge |
180:96ed750bd169 | 2685 | * @param[out] pDst points to the output vector |
| Anna Bridge |
180:96ed750bd169 | 2686 | * @param[in] blockSize number of samples in the vector |
| Anna Bridge |
180:96ed750bd169 | 2687 | */ |
| Anna Bridge |
180:96ed750bd169 | 2688 | void arm_shift_q7( |
| Anna Bridge |
180:96ed750bd169 | 2689 | q7_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 2690 | int8_t shiftBits, |
| Anna Bridge |
180:96ed750bd169 | 2691 | q7_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 2692 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 2693 | |
| Anna Bridge |
180:96ed750bd169 | 2694 | |
| Anna Bridge |
180:96ed750bd169 | 2695 | /** |
| Anna Bridge |
180:96ed750bd169 | 2696 | * @brief Shifts the elements of a Q15 vector a specified number of bits. |
| Anna Bridge |
180:96ed750bd169 | 2697 | * @param[in] pSrc points to the input vector |
| Anna Bridge |
180:96ed750bd169 | 2698 | * @param[in] shiftBits number of bits to shift. A positive value shifts left; a negative value shifts right. |
| Anna Bridge |
180:96ed750bd169 | 2699 | * @param[out] pDst points to the output vector |
| Anna Bridge |
180:96ed750bd169 | 2700 | * @param[in] blockSize number of samples in the vector |
| Anna Bridge |
180:96ed750bd169 | 2701 | */ |
| Anna Bridge |
180:96ed750bd169 | 2702 | void arm_shift_q15( |
| Anna Bridge |
180:96ed750bd169 | 2703 | q15_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 2704 | int8_t shiftBits, |
| Anna Bridge |
180:96ed750bd169 | 2705 | q15_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 2706 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 2707 | |
| Anna Bridge |
180:96ed750bd169 | 2708 | |
| Anna Bridge |
180:96ed750bd169 | 2709 | /** |
| Anna Bridge |
180:96ed750bd169 | 2710 | * @brief Shifts the elements of a Q31 vector a specified number of bits. |
| Anna Bridge |
180:96ed750bd169 | 2711 | * @param[in] pSrc points to the input vector |
| Anna Bridge |
180:96ed750bd169 | 2712 | * @param[in] shiftBits number of bits to shift. A positive value shifts left; a negative value shifts right. |
| Anna Bridge |
180:96ed750bd169 | 2713 | * @param[out] pDst points to the output vector |
| Anna Bridge |
180:96ed750bd169 | 2714 | * @param[in] blockSize number of samples in the vector |
| Anna Bridge |
180:96ed750bd169 | 2715 | */ |
| Anna Bridge |
180:96ed750bd169 | 2716 | void arm_shift_q31( |
| Anna Bridge |
180:96ed750bd169 | 2717 | q31_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 2718 | int8_t shiftBits, |
| Anna Bridge |
180:96ed750bd169 | 2719 | q31_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 2720 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 2721 | |
| Anna Bridge |
180:96ed750bd169 | 2722 | |
| Anna Bridge |
180:96ed750bd169 | 2723 | /** |
| Anna Bridge |
180:96ed750bd169 | 2724 | * @brief Adds a constant offset to a floating-point vector. |
| Anna Bridge |
180:96ed750bd169 | 2725 | * @param[in] pSrc points to the input vector |
| Anna Bridge |
180:96ed750bd169 | 2726 | * @param[in] offset is the offset to be added |
| Anna Bridge |
180:96ed750bd169 | 2727 | * @param[out] pDst points to the output vector |
| Anna Bridge |
180:96ed750bd169 | 2728 | * @param[in] blockSize number of samples in the vector |
| Anna Bridge |
180:96ed750bd169 | 2729 | */ |
| Anna Bridge |
180:96ed750bd169 | 2730 | void arm_offset_f32( |
| Anna Bridge |
180:96ed750bd169 | 2731 | float32_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 2732 | float32_t offset, |
| Anna Bridge |
180:96ed750bd169 | 2733 | float32_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 2734 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 2735 | |
| Anna Bridge |
180:96ed750bd169 | 2736 | |
| Anna Bridge |
180:96ed750bd169 | 2737 | /** |
| Anna Bridge |
180:96ed750bd169 | 2738 | * @brief Adds a constant offset to a Q7 vector. |
| Anna Bridge |
180:96ed750bd169 | 2739 | * @param[in] pSrc points to the input vector |
| Anna Bridge |
180:96ed750bd169 | 2740 | * @param[in] offset is the offset to be added |
| Anna Bridge |
180:96ed750bd169 | 2741 | * @param[out] pDst points to the output vector |
| Anna Bridge |
180:96ed750bd169 | 2742 | * @param[in] blockSize number of samples in the vector |
| Anna Bridge |
180:96ed750bd169 | 2743 | */ |
| Anna Bridge |
180:96ed750bd169 | 2744 | void arm_offset_q7( |
| Anna Bridge |
180:96ed750bd169 | 2745 | q7_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 2746 | q7_t offset, |
| Anna Bridge |
180:96ed750bd169 | 2747 | q7_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 2748 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 2749 | |
| Anna Bridge |
180:96ed750bd169 | 2750 | |
| Anna Bridge |
180:96ed750bd169 | 2751 | /** |
| Anna Bridge |
180:96ed750bd169 | 2752 | * @brief Adds a constant offset to a Q15 vector. |
| Anna Bridge |
180:96ed750bd169 | 2753 | * @param[in] pSrc points to the input vector |
| Anna Bridge |
180:96ed750bd169 | 2754 | * @param[in] offset is the offset to be added |
| Anna Bridge |
180:96ed750bd169 | 2755 | * @param[out] pDst points to the output vector |
| Anna Bridge |
180:96ed750bd169 | 2756 | * @param[in] blockSize number of samples in the vector |
| Anna Bridge |
180:96ed750bd169 | 2757 | */ |
| Anna Bridge |
180:96ed750bd169 | 2758 | void arm_offset_q15( |
| Anna Bridge |
180:96ed750bd169 | 2759 | q15_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 2760 | q15_t offset, |
| Anna Bridge |
180:96ed750bd169 | 2761 | q15_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 2762 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 2763 | |
| Anna Bridge |
180:96ed750bd169 | 2764 | |
| Anna Bridge |
180:96ed750bd169 | 2765 | /** |
| Anna Bridge |
180:96ed750bd169 | 2766 | * @brief Adds a constant offset to a Q31 vector. |
| Anna Bridge |
180:96ed750bd169 | 2767 | * @param[in] pSrc points to the input vector |
| Anna Bridge |
180:96ed750bd169 | 2768 | * @param[in] offset is the offset to be added |
| Anna Bridge |
180:96ed750bd169 | 2769 | * @param[out] pDst points to the output vector |
| Anna Bridge |
180:96ed750bd169 | 2770 | * @param[in] blockSize number of samples in the vector |
| Anna Bridge |
180:96ed750bd169 | 2771 | */ |
| Anna Bridge |
180:96ed750bd169 | 2772 | void arm_offset_q31( |
| Anna Bridge |
180:96ed750bd169 | 2773 | q31_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 2774 | q31_t offset, |
| Anna Bridge |
180:96ed750bd169 | 2775 | q31_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 2776 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 2777 | |
| Anna Bridge |
180:96ed750bd169 | 2778 | |
| Anna Bridge |
180:96ed750bd169 | 2779 | /** |
| Anna Bridge |
180:96ed750bd169 | 2780 | * @brief Negates the elements of a floating-point vector. |
| Anna Bridge |
180:96ed750bd169 | 2781 | * @param[in] pSrc points to the input vector |
| Anna Bridge |
180:96ed750bd169 | 2782 | * @param[out] pDst points to the output vector |
| Anna Bridge |
180:96ed750bd169 | 2783 | * @param[in] blockSize number of samples in the vector |
| Anna Bridge |
180:96ed750bd169 | 2784 | */ |
| Anna Bridge |
180:96ed750bd169 | 2785 | void arm_negate_f32( |
| Anna Bridge |
180:96ed750bd169 | 2786 | float32_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 2787 | float32_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 2788 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 2789 | |
| Anna Bridge |
180:96ed750bd169 | 2790 | |
| Anna Bridge |
180:96ed750bd169 | 2791 | /** |
| Anna Bridge |
180:96ed750bd169 | 2792 | * @brief Negates the elements of a Q7 vector. |
| Anna Bridge |
180:96ed750bd169 | 2793 | * @param[in] pSrc points to the input vector |
| Anna Bridge |
180:96ed750bd169 | 2794 | * @param[out] pDst points to the output vector |
| Anna Bridge |
180:96ed750bd169 | 2795 | * @param[in] blockSize number of samples in the vector |
| Anna Bridge |
180:96ed750bd169 | 2796 | */ |
| Anna Bridge |
180:96ed750bd169 | 2797 | void arm_negate_q7( |
| Anna Bridge |
180:96ed750bd169 | 2798 | q7_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 2799 | q7_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 2800 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 2801 | |
| Anna Bridge |
180:96ed750bd169 | 2802 | |
| Anna Bridge |
180:96ed750bd169 | 2803 | /** |
| Anna Bridge |
180:96ed750bd169 | 2804 | * @brief Negates the elements of a Q15 vector. |
| Anna Bridge |
180:96ed750bd169 | 2805 | * @param[in] pSrc points to the input vector |
| Anna Bridge |
180:96ed750bd169 | 2806 | * @param[out] pDst points to the output vector |
| Anna Bridge |
180:96ed750bd169 | 2807 | * @param[in] blockSize number of samples in the vector |
| Anna Bridge |
180:96ed750bd169 | 2808 | */ |
| Anna Bridge |
180:96ed750bd169 | 2809 | void arm_negate_q15( |
| Anna Bridge |
180:96ed750bd169 | 2810 | q15_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 2811 | q15_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 2812 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 2813 | |
| Anna Bridge |
180:96ed750bd169 | 2814 | |
| Anna Bridge |
180:96ed750bd169 | 2815 | /** |
| Anna Bridge |
180:96ed750bd169 | 2816 | * @brief Negates the elements of a Q31 vector. |
| Anna Bridge |
180:96ed750bd169 | 2817 | * @param[in] pSrc points to the input vector |
| Anna Bridge |
180:96ed750bd169 | 2818 | * @param[out] pDst points to the output vector |
| Anna Bridge |
180:96ed750bd169 | 2819 | * @param[in] blockSize number of samples in the vector |
| Anna Bridge |
180:96ed750bd169 | 2820 | */ |
| Anna Bridge |
180:96ed750bd169 | 2821 | void arm_negate_q31( |
| Anna Bridge |
180:96ed750bd169 | 2822 | q31_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 2823 | q31_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 2824 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 2825 | |
| Anna Bridge |
180:96ed750bd169 | 2826 | |
| Anna Bridge |
180:96ed750bd169 | 2827 | /** |
| Anna Bridge |
180:96ed750bd169 | 2828 | * @brief Copies the elements of a floating-point vector. |
| Anna Bridge |
180:96ed750bd169 | 2829 | * @param[in] pSrc input pointer |
| Anna Bridge |
180:96ed750bd169 | 2830 | * @param[out] pDst output pointer |
| Anna Bridge |
180:96ed750bd169 | 2831 | * @param[in] blockSize number of samples to process |
| Anna Bridge |
180:96ed750bd169 | 2832 | */ |
| Anna Bridge |
180:96ed750bd169 | 2833 | void arm_copy_f32( |
| Anna Bridge |
180:96ed750bd169 | 2834 | float32_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 2835 | float32_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 2836 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 2837 | |
| Anna Bridge |
180:96ed750bd169 | 2838 | |
| Anna Bridge |
180:96ed750bd169 | 2839 | /** |
| Anna Bridge |
180:96ed750bd169 | 2840 | * @brief Copies the elements of a Q7 vector. |
| Anna Bridge |
180:96ed750bd169 | 2841 | * @param[in] pSrc input pointer |
| Anna Bridge |
180:96ed750bd169 | 2842 | * @param[out] pDst output pointer |
| Anna Bridge |
180:96ed750bd169 | 2843 | * @param[in] blockSize number of samples to process |
| Anna Bridge |
180:96ed750bd169 | 2844 | */ |
| Anna Bridge |
180:96ed750bd169 | 2845 | void arm_copy_q7( |
| Anna Bridge |
180:96ed750bd169 | 2846 | q7_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 2847 | q7_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 2848 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 2849 | |
| Anna Bridge |
180:96ed750bd169 | 2850 | |
| Anna Bridge |
180:96ed750bd169 | 2851 | /** |
| Anna Bridge |
180:96ed750bd169 | 2852 | * @brief Copies the elements of a Q15 vector. |
| Anna Bridge |
180:96ed750bd169 | 2853 | * @param[in] pSrc input pointer |
| Anna Bridge |
180:96ed750bd169 | 2854 | * @param[out] pDst output pointer |
| Anna Bridge |
180:96ed750bd169 | 2855 | * @param[in] blockSize number of samples to process |
| Anna Bridge |
180:96ed750bd169 | 2856 | */ |
| Anna Bridge |
180:96ed750bd169 | 2857 | void arm_copy_q15( |
| Anna Bridge |
180:96ed750bd169 | 2858 | q15_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 2859 | q15_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 2860 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 2861 | |
| Anna Bridge |
180:96ed750bd169 | 2862 | |
| Anna Bridge |
180:96ed750bd169 | 2863 | /** |
| Anna Bridge |
180:96ed750bd169 | 2864 | * @brief Copies the elements of a Q31 vector. |
| Anna Bridge |
180:96ed750bd169 | 2865 | * @param[in] pSrc input pointer |
| Anna Bridge |
180:96ed750bd169 | 2866 | * @param[out] pDst output pointer |
| Anna Bridge |
180:96ed750bd169 | 2867 | * @param[in] blockSize number of samples to process |
| Anna Bridge |
180:96ed750bd169 | 2868 | */ |
| Anna Bridge |
180:96ed750bd169 | 2869 | void arm_copy_q31( |
| Anna Bridge |
180:96ed750bd169 | 2870 | q31_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 2871 | q31_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 2872 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 2873 | |
| Anna Bridge |
180:96ed750bd169 | 2874 | |
| Anna Bridge |
180:96ed750bd169 | 2875 | /** |
| Anna Bridge |
180:96ed750bd169 | 2876 | * @brief Fills a constant value into a floating-point vector. |
| Anna Bridge |
180:96ed750bd169 | 2877 | * @param[in] value input value to be filled |
| Anna Bridge |
180:96ed750bd169 | 2878 | * @param[out] pDst output pointer |
| Anna Bridge |
180:96ed750bd169 | 2879 | * @param[in] blockSize number of samples to process |
| Anna Bridge |
180:96ed750bd169 | 2880 | */ |
| Anna Bridge |
180:96ed750bd169 | 2881 | void arm_fill_f32( |
| Anna Bridge |
180:96ed750bd169 | 2882 | float32_t value, |
| Anna Bridge |
180:96ed750bd169 | 2883 | float32_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 2884 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 2885 | |
| Anna Bridge |
180:96ed750bd169 | 2886 | |
| Anna Bridge |
180:96ed750bd169 | 2887 | /** |
| Anna Bridge |
180:96ed750bd169 | 2888 | * @brief Fills a constant value into a Q7 vector. |
| Anna Bridge |
180:96ed750bd169 | 2889 | * @param[in] value input value to be filled |
| Anna Bridge |
180:96ed750bd169 | 2890 | * @param[out] pDst output pointer |
| Anna Bridge |
180:96ed750bd169 | 2891 | * @param[in] blockSize number of samples to process |
| Anna Bridge |
180:96ed750bd169 | 2892 | */ |
| Anna Bridge |
180:96ed750bd169 | 2893 | void arm_fill_q7( |
| Anna Bridge |
180:96ed750bd169 | 2894 | q7_t value, |
| Anna Bridge |
180:96ed750bd169 | 2895 | q7_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 2896 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 2897 | |
| Anna Bridge |
180:96ed750bd169 | 2898 | |
| Anna Bridge |
180:96ed750bd169 | 2899 | /** |
| Anna Bridge |
180:96ed750bd169 | 2900 | * @brief Fills a constant value into a Q15 vector. |
| Anna Bridge |
180:96ed750bd169 | 2901 | * @param[in] value input value to be filled |
| Anna Bridge |
180:96ed750bd169 | 2902 | * @param[out] pDst output pointer |
| Anna Bridge |
180:96ed750bd169 | 2903 | * @param[in] blockSize number of samples to process |
| Anna Bridge |
180:96ed750bd169 | 2904 | */ |
| Anna Bridge |
180:96ed750bd169 | 2905 | void arm_fill_q15( |
| Anna Bridge |
180:96ed750bd169 | 2906 | q15_t value, |
| Anna Bridge |
180:96ed750bd169 | 2907 | q15_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 2908 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 2909 | |
| Anna Bridge |
180:96ed750bd169 | 2910 | |
| Anna Bridge |
180:96ed750bd169 | 2911 | /** |
| Anna Bridge |
180:96ed750bd169 | 2912 | * @brief Fills a constant value into a Q31 vector. |
| Anna Bridge |
180:96ed750bd169 | 2913 | * @param[in] value input value to be filled |
| Anna Bridge |
180:96ed750bd169 | 2914 | * @param[out] pDst output pointer |
| Anna Bridge |
180:96ed750bd169 | 2915 | * @param[in] blockSize number of samples to process |
| Anna Bridge |
180:96ed750bd169 | 2916 | */ |
| Anna Bridge |
180:96ed750bd169 | 2917 | void arm_fill_q31( |
| Anna Bridge |
180:96ed750bd169 | 2918 | q31_t value, |
| Anna Bridge |
180:96ed750bd169 | 2919 | q31_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 2920 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 2921 | |
| Anna Bridge |
180:96ed750bd169 | 2922 | |
| Anna Bridge |
180:96ed750bd169 | 2923 | /** |
| Anna Bridge |
180:96ed750bd169 | 2924 | * @brief Convolution of floating-point sequences. |
| Anna Bridge |
180:96ed750bd169 | 2925 | * @param[in] pSrcA points to the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 2926 | * @param[in] srcALen length of the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 2927 | * @param[in] pSrcB points to the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 2928 | * @param[in] srcBLen length of the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 2929 | * @param[out] pDst points to the location where the output result is written. Length srcALen+srcBLen-1. |
| Anna Bridge |
180:96ed750bd169 | 2930 | */ |
| Anna Bridge |
180:96ed750bd169 | 2931 | void arm_conv_f32( |
| Anna Bridge |
180:96ed750bd169 | 2932 | float32_t * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 2933 | uint32_t srcALen, |
| Anna Bridge |
180:96ed750bd169 | 2934 | float32_t * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 2935 | uint32_t srcBLen, |
| Anna Bridge |
180:96ed750bd169 | 2936 | float32_t * pDst); |
| Anna Bridge |
180:96ed750bd169 | 2937 | |
| Anna Bridge |
180:96ed750bd169 | 2938 | |
| Anna Bridge |
180:96ed750bd169 | 2939 | /** |
| Anna Bridge |
180:96ed750bd169 | 2940 | * @brief Convolution of Q15 sequences. |
| Anna Bridge |
180:96ed750bd169 | 2941 | * @param[in] pSrcA points to the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 2942 | * @param[in] srcALen length of the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 2943 | * @param[in] pSrcB points to the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 2944 | * @param[in] srcBLen length of the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 2945 | * @param[out] pDst points to the block of output data Length srcALen+srcBLen-1. |
| Anna Bridge |
180:96ed750bd169 | 2946 | * @param[in] pScratch1 points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. |
| Anna Bridge |
180:96ed750bd169 | 2947 | * @param[in] pScratch2 points to scratch buffer of size min(srcALen, srcBLen). |
| Anna Bridge |
180:96ed750bd169 | 2948 | */ |
| Anna Bridge |
180:96ed750bd169 | 2949 | void arm_conv_opt_q15( |
| Anna Bridge |
180:96ed750bd169 | 2950 | q15_t * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 2951 | uint32_t srcALen, |
| Anna Bridge |
180:96ed750bd169 | 2952 | q15_t * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 2953 | uint32_t srcBLen, |
| Anna Bridge |
180:96ed750bd169 | 2954 | q15_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 2955 | q15_t * pScratch1, |
| Anna Bridge |
180:96ed750bd169 | 2956 | q15_t * pScratch2); |
| Anna Bridge |
180:96ed750bd169 | 2957 | |
| Anna Bridge |
180:96ed750bd169 | 2958 | |
| Anna Bridge |
180:96ed750bd169 | 2959 | /** |
| Anna Bridge |
180:96ed750bd169 | 2960 | * @brief Convolution of Q15 sequences. |
| Anna Bridge |
180:96ed750bd169 | 2961 | * @param[in] pSrcA points to the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 2962 | * @param[in] srcALen length of the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 2963 | * @param[in] pSrcB points to the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 2964 | * @param[in] srcBLen length of the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 2965 | * @param[out] pDst points to the location where the output result is written. Length srcALen+srcBLen-1. |
| Anna Bridge |
180:96ed750bd169 | 2966 | */ |
| Anna Bridge |
180:96ed750bd169 | 2967 | void arm_conv_q15( |
| Anna Bridge |
180:96ed750bd169 | 2968 | q15_t * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 2969 | uint32_t srcALen, |
| Anna Bridge |
180:96ed750bd169 | 2970 | q15_t * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 2971 | uint32_t srcBLen, |
| Anna Bridge |
180:96ed750bd169 | 2972 | q15_t * pDst); |
| Anna Bridge |
180:96ed750bd169 | 2973 | |
| Anna Bridge |
180:96ed750bd169 | 2974 | |
| Anna Bridge |
180:96ed750bd169 | 2975 | /** |
| Anna Bridge |
180:96ed750bd169 | 2976 | * @brief Convolution of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4 |
| Anna Bridge |
180:96ed750bd169 | 2977 | * @param[in] pSrcA points to the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 2978 | * @param[in] srcALen length of the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 2979 | * @param[in] pSrcB points to the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 2980 | * @param[in] srcBLen length of the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 2981 | * @param[out] pDst points to the block of output data Length srcALen+srcBLen-1. |
| Anna Bridge |
180:96ed750bd169 | 2982 | */ |
| Anna Bridge |
180:96ed750bd169 | 2983 | void arm_conv_fast_q15( |
| Anna Bridge |
180:96ed750bd169 | 2984 | q15_t * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 2985 | uint32_t srcALen, |
| Anna Bridge |
180:96ed750bd169 | 2986 | q15_t * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 2987 | uint32_t srcBLen, |
| Anna Bridge |
180:96ed750bd169 | 2988 | q15_t * pDst); |
| Anna Bridge |
180:96ed750bd169 | 2989 | |
| Anna Bridge |
180:96ed750bd169 | 2990 | |
| Anna Bridge |
180:96ed750bd169 | 2991 | /** |
| Anna Bridge |
180:96ed750bd169 | 2992 | * @brief Convolution of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4 |
| Anna Bridge |
180:96ed750bd169 | 2993 | * @param[in] pSrcA points to the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 2994 | * @param[in] srcALen length of the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 2995 | * @param[in] pSrcB points to the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 2996 | * @param[in] srcBLen length of the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 2997 | * @param[out] pDst points to the block of output data Length srcALen+srcBLen-1. |
| Anna Bridge |
180:96ed750bd169 | 2998 | * @param[in] pScratch1 points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. |
| Anna Bridge |
180:96ed750bd169 | 2999 | * @param[in] pScratch2 points to scratch buffer of size min(srcALen, srcBLen). |
| Anna Bridge |
180:96ed750bd169 | 3000 | */ |
| Anna Bridge |
180:96ed750bd169 | 3001 | void arm_conv_fast_opt_q15( |
| Anna Bridge |
180:96ed750bd169 | 3002 | q15_t * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 3003 | uint32_t srcALen, |
| Anna Bridge |
180:96ed750bd169 | 3004 | q15_t * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 3005 | uint32_t srcBLen, |
| Anna Bridge |
180:96ed750bd169 | 3006 | q15_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 3007 | q15_t * pScratch1, |
| Anna Bridge |
180:96ed750bd169 | 3008 | q15_t * pScratch2); |
| Anna Bridge |
180:96ed750bd169 | 3009 | |
| Anna Bridge |
180:96ed750bd169 | 3010 | |
| Anna Bridge |
180:96ed750bd169 | 3011 | /** |
| Anna Bridge |
180:96ed750bd169 | 3012 | * @brief Convolution of Q31 sequences. |
| Anna Bridge |
180:96ed750bd169 | 3013 | * @param[in] pSrcA points to the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3014 | * @param[in] srcALen length of the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3015 | * @param[in] pSrcB points to the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3016 | * @param[in] srcBLen length of the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3017 | * @param[out] pDst points to the block of output data Length srcALen+srcBLen-1. |
| Anna Bridge |
180:96ed750bd169 | 3018 | */ |
| Anna Bridge |
180:96ed750bd169 | 3019 | void arm_conv_q31( |
| Anna Bridge |
180:96ed750bd169 | 3020 | q31_t * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 3021 | uint32_t srcALen, |
| Anna Bridge |
180:96ed750bd169 | 3022 | q31_t * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 3023 | uint32_t srcBLen, |
| Anna Bridge |
180:96ed750bd169 | 3024 | q31_t * pDst); |
| Anna Bridge |
180:96ed750bd169 | 3025 | |
| Anna Bridge |
180:96ed750bd169 | 3026 | |
| Anna Bridge |
180:96ed750bd169 | 3027 | /** |
| Anna Bridge |
180:96ed750bd169 | 3028 | * @brief Convolution of Q31 sequences (fast version) for Cortex-M3 and Cortex-M4 |
| Anna Bridge |
180:96ed750bd169 | 3029 | * @param[in] pSrcA points to the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3030 | * @param[in] srcALen length of the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3031 | * @param[in] pSrcB points to the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3032 | * @param[in] srcBLen length of the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3033 | * @param[out] pDst points to the block of output data Length srcALen+srcBLen-1. |
| Anna Bridge |
180:96ed750bd169 | 3034 | */ |
| Anna Bridge |
180:96ed750bd169 | 3035 | void arm_conv_fast_q31( |
| Anna Bridge |
180:96ed750bd169 | 3036 | q31_t * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 3037 | uint32_t srcALen, |
| Anna Bridge |
180:96ed750bd169 | 3038 | q31_t * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 3039 | uint32_t srcBLen, |
| Anna Bridge |
180:96ed750bd169 | 3040 | q31_t * pDst); |
| Anna Bridge |
180:96ed750bd169 | 3041 | |
| Anna Bridge |
180:96ed750bd169 | 3042 | |
| Anna Bridge |
180:96ed750bd169 | 3043 | /** |
| Anna Bridge |
180:96ed750bd169 | 3044 | * @brief Convolution of Q7 sequences. |
| Anna Bridge |
180:96ed750bd169 | 3045 | * @param[in] pSrcA points to the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3046 | * @param[in] srcALen length of the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3047 | * @param[in] pSrcB points to the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3048 | * @param[in] srcBLen length of the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3049 | * @param[out] pDst points to the block of output data Length srcALen+srcBLen-1. |
| Anna Bridge |
180:96ed750bd169 | 3050 | * @param[in] pScratch1 points to scratch buffer(of type q15_t) of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. |
| Anna Bridge |
180:96ed750bd169 | 3051 | * @param[in] pScratch2 points to scratch buffer (of type q15_t) of size min(srcALen, srcBLen). |
| Anna Bridge |
180:96ed750bd169 | 3052 | */ |
| Anna Bridge |
180:96ed750bd169 | 3053 | void arm_conv_opt_q7( |
| Anna Bridge |
180:96ed750bd169 | 3054 | q7_t * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 3055 | uint32_t srcALen, |
| Anna Bridge |
180:96ed750bd169 | 3056 | q7_t * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 3057 | uint32_t srcBLen, |
| Anna Bridge |
180:96ed750bd169 | 3058 | q7_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 3059 | q15_t * pScratch1, |
| Anna Bridge |
180:96ed750bd169 | 3060 | q15_t * pScratch2); |
| Anna Bridge |
180:96ed750bd169 | 3061 | |
| Anna Bridge |
180:96ed750bd169 | 3062 | |
| Anna Bridge |
180:96ed750bd169 | 3063 | /** |
| Anna Bridge |
180:96ed750bd169 | 3064 | * @brief Convolution of Q7 sequences. |
| Anna Bridge |
180:96ed750bd169 | 3065 | * @param[in] pSrcA points to the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3066 | * @param[in] srcALen length of the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3067 | * @param[in] pSrcB points to the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3068 | * @param[in] srcBLen length of the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3069 | * @param[out] pDst points to the block of output data Length srcALen+srcBLen-1. |
| Anna Bridge |
180:96ed750bd169 | 3070 | */ |
| Anna Bridge |
180:96ed750bd169 | 3071 | void arm_conv_q7( |
| Anna Bridge |
180:96ed750bd169 | 3072 | q7_t * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 3073 | uint32_t srcALen, |
| Anna Bridge |
180:96ed750bd169 | 3074 | q7_t * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 3075 | uint32_t srcBLen, |
| Anna Bridge |
180:96ed750bd169 | 3076 | q7_t * pDst); |
| Anna Bridge |
180:96ed750bd169 | 3077 | |
| Anna Bridge |
180:96ed750bd169 | 3078 | |
| Anna Bridge |
180:96ed750bd169 | 3079 | /** |
| Anna Bridge |
180:96ed750bd169 | 3080 | * @brief Partial convolution of floating-point sequences. |
| Anna Bridge |
180:96ed750bd169 | 3081 | * @param[in] pSrcA points to the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3082 | * @param[in] srcALen length of the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3083 | * @param[in] pSrcB points to the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3084 | * @param[in] srcBLen length of the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3085 | * @param[out] pDst points to the block of output data |
| Anna Bridge |
180:96ed750bd169 | 3086 | * @param[in] firstIndex is the first output sample to start with. |
| Anna Bridge |
180:96ed750bd169 | 3087 | * @param[in] numPoints is the number of output points to be computed. |
| Anna Bridge |
180:96ed750bd169 | 3088 | * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. |
| Anna Bridge |
180:96ed750bd169 | 3089 | */ |
| Anna Bridge |
180:96ed750bd169 | 3090 | arm_status arm_conv_partial_f32( |
| Anna Bridge |
180:96ed750bd169 | 3091 | float32_t * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 3092 | uint32_t srcALen, |
| Anna Bridge |
180:96ed750bd169 | 3093 | float32_t * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 3094 | uint32_t srcBLen, |
| Anna Bridge |
180:96ed750bd169 | 3095 | float32_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 3096 | uint32_t firstIndex, |
| Anna Bridge |
180:96ed750bd169 | 3097 | uint32_t numPoints); |
| Anna Bridge |
180:96ed750bd169 | 3098 | |
| Anna Bridge |
180:96ed750bd169 | 3099 | |
| Anna Bridge |
180:96ed750bd169 | 3100 | /** |
| Anna Bridge |
180:96ed750bd169 | 3101 | * @brief Partial convolution of Q15 sequences. |
| Anna Bridge |
180:96ed750bd169 | 3102 | * @param[in] pSrcA points to the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3103 | * @param[in] srcALen length of the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3104 | * @param[in] pSrcB points to the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3105 | * @param[in] srcBLen length of the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3106 | * @param[out] pDst points to the block of output data |
| Anna Bridge |
180:96ed750bd169 | 3107 | * @param[in] firstIndex is the first output sample to start with. |
| Anna Bridge |
180:96ed750bd169 | 3108 | * @param[in] numPoints is the number of output points to be computed. |
| Anna Bridge |
180:96ed750bd169 | 3109 | * @param[in] pScratch1 points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. |
| Anna Bridge |
180:96ed750bd169 | 3110 | * @param[in] pScratch2 points to scratch buffer of size min(srcALen, srcBLen). |
| Anna Bridge |
180:96ed750bd169 | 3111 | * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. |
| Anna Bridge |
180:96ed750bd169 | 3112 | */ |
| Anna Bridge |
180:96ed750bd169 | 3113 | arm_status arm_conv_partial_opt_q15( |
| Anna Bridge |
180:96ed750bd169 | 3114 | q15_t * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 3115 | uint32_t srcALen, |
| Anna Bridge |
180:96ed750bd169 | 3116 | q15_t * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 3117 | uint32_t srcBLen, |
| Anna Bridge |
180:96ed750bd169 | 3118 | q15_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 3119 | uint32_t firstIndex, |
| Anna Bridge |
180:96ed750bd169 | 3120 | uint32_t numPoints, |
| Anna Bridge |
180:96ed750bd169 | 3121 | q15_t * pScratch1, |
| Anna Bridge |
180:96ed750bd169 | 3122 | q15_t * pScratch2); |
| Anna Bridge |
180:96ed750bd169 | 3123 | |
| Anna Bridge |
180:96ed750bd169 | 3124 | |
| Anna Bridge |
180:96ed750bd169 | 3125 | /** |
| Anna Bridge |
180:96ed750bd169 | 3126 | * @brief Partial convolution of Q15 sequences. |
| Anna Bridge |
180:96ed750bd169 | 3127 | * @param[in] pSrcA points to the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3128 | * @param[in] srcALen length of the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3129 | * @param[in] pSrcB points to the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3130 | * @param[in] srcBLen length of the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3131 | * @param[out] pDst points to the block of output data |
| Anna Bridge |
180:96ed750bd169 | 3132 | * @param[in] firstIndex is the first output sample to start with. |
| Anna Bridge |
180:96ed750bd169 | 3133 | * @param[in] numPoints is the number of output points to be computed. |
| Anna Bridge |
180:96ed750bd169 | 3134 | * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. |
| Anna Bridge |
180:96ed750bd169 | 3135 | */ |
| Anna Bridge |
180:96ed750bd169 | 3136 | arm_status arm_conv_partial_q15( |
| Anna Bridge |
180:96ed750bd169 | 3137 | q15_t * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 3138 | uint32_t srcALen, |
| Anna Bridge |
180:96ed750bd169 | 3139 | q15_t * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 3140 | uint32_t srcBLen, |
| Anna Bridge |
180:96ed750bd169 | 3141 | q15_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 3142 | uint32_t firstIndex, |
| Anna Bridge |
180:96ed750bd169 | 3143 | uint32_t numPoints); |
| Anna Bridge |
180:96ed750bd169 | 3144 | |
| Anna Bridge |
180:96ed750bd169 | 3145 | |
| Anna Bridge |
180:96ed750bd169 | 3146 | /** |
| Anna Bridge |
180:96ed750bd169 | 3147 | * @brief Partial convolution of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4 |
| Anna Bridge |
180:96ed750bd169 | 3148 | * @param[in] pSrcA points to the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3149 | * @param[in] srcALen length of the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3150 | * @param[in] pSrcB points to the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3151 | * @param[in] srcBLen length of the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3152 | * @param[out] pDst points to the block of output data |
| Anna Bridge |
180:96ed750bd169 | 3153 | * @param[in] firstIndex is the first output sample to start with. |
| Anna Bridge |
180:96ed750bd169 | 3154 | * @param[in] numPoints is the number of output points to be computed. |
| Anna Bridge |
180:96ed750bd169 | 3155 | * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. |
| Anna Bridge |
180:96ed750bd169 | 3156 | */ |
| Anna Bridge |
180:96ed750bd169 | 3157 | arm_status arm_conv_partial_fast_q15( |
| Anna Bridge |
180:96ed750bd169 | 3158 | q15_t * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 3159 | uint32_t srcALen, |
| Anna Bridge |
180:96ed750bd169 | 3160 | q15_t * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 3161 | uint32_t srcBLen, |
| Anna Bridge |
180:96ed750bd169 | 3162 | q15_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 3163 | uint32_t firstIndex, |
| Anna Bridge |
180:96ed750bd169 | 3164 | uint32_t numPoints); |
| Anna Bridge |
180:96ed750bd169 | 3165 | |
| Anna Bridge |
180:96ed750bd169 | 3166 | |
| Anna Bridge |
180:96ed750bd169 | 3167 | /** |
| Anna Bridge |
180:96ed750bd169 | 3168 | * @brief Partial convolution of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4 |
| Anna Bridge |
180:96ed750bd169 | 3169 | * @param[in] pSrcA points to the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3170 | * @param[in] srcALen length of the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3171 | * @param[in] pSrcB points to the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3172 | * @param[in] srcBLen length of the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3173 | * @param[out] pDst points to the block of output data |
| Anna Bridge |
180:96ed750bd169 | 3174 | * @param[in] firstIndex is the first output sample to start with. |
| Anna Bridge |
180:96ed750bd169 | 3175 | * @param[in] numPoints is the number of output points to be computed. |
| Anna Bridge |
180:96ed750bd169 | 3176 | * @param[in] pScratch1 points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. |
| Anna Bridge |
180:96ed750bd169 | 3177 | * @param[in] pScratch2 points to scratch buffer of size min(srcALen, srcBLen). |
| Anna Bridge |
180:96ed750bd169 | 3178 | * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. |
| Anna Bridge |
180:96ed750bd169 | 3179 | */ |
| Anna Bridge |
180:96ed750bd169 | 3180 | arm_status arm_conv_partial_fast_opt_q15( |
| Anna Bridge |
180:96ed750bd169 | 3181 | q15_t * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 3182 | uint32_t srcALen, |
| Anna Bridge |
180:96ed750bd169 | 3183 | q15_t * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 3184 | uint32_t srcBLen, |
| Anna Bridge |
180:96ed750bd169 | 3185 | q15_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 3186 | uint32_t firstIndex, |
| Anna Bridge |
180:96ed750bd169 | 3187 | uint32_t numPoints, |
| Anna Bridge |
180:96ed750bd169 | 3188 | q15_t * pScratch1, |
| Anna Bridge |
180:96ed750bd169 | 3189 | q15_t * pScratch2); |
| Anna Bridge |
180:96ed750bd169 | 3190 | |
| Anna Bridge |
180:96ed750bd169 | 3191 | |
| Anna Bridge |
180:96ed750bd169 | 3192 | /** |
| Anna Bridge |
180:96ed750bd169 | 3193 | * @brief Partial convolution of Q31 sequences. |
| Anna Bridge |
180:96ed750bd169 | 3194 | * @param[in] pSrcA points to the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3195 | * @param[in] srcALen length of the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3196 | * @param[in] pSrcB points to the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3197 | * @param[in] srcBLen length of the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3198 | * @param[out] pDst points to the block of output data |
| Anna Bridge |
180:96ed750bd169 | 3199 | * @param[in] firstIndex is the first output sample to start with. |
| Anna Bridge |
180:96ed750bd169 | 3200 | * @param[in] numPoints is the number of output points to be computed. |
| Anna Bridge |
180:96ed750bd169 | 3201 | * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. |
| Anna Bridge |
180:96ed750bd169 | 3202 | */ |
| Anna Bridge |
180:96ed750bd169 | 3203 | arm_status arm_conv_partial_q31( |
| Anna Bridge |
180:96ed750bd169 | 3204 | q31_t * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 3205 | uint32_t srcALen, |
| Anna Bridge |
180:96ed750bd169 | 3206 | q31_t * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 3207 | uint32_t srcBLen, |
| Anna Bridge |
180:96ed750bd169 | 3208 | q31_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 3209 | uint32_t firstIndex, |
| Anna Bridge |
180:96ed750bd169 | 3210 | uint32_t numPoints); |
| Anna Bridge |
180:96ed750bd169 | 3211 | |
| Anna Bridge |
180:96ed750bd169 | 3212 | |
| Anna Bridge |
180:96ed750bd169 | 3213 | /** |
| Anna Bridge |
180:96ed750bd169 | 3214 | * @brief Partial convolution of Q31 sequences (fast version) for Cortex-M3 and Cortex-M4 |
| Anna Bridge |
180:96ed750bd169 | 3215 | * @param[in] pSrcA points to the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3216 | * @param[in] srcALen length of the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3217 | * @param[in] pSrcB points to the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3218 | * @param[in] srcBLen length of the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3219 | * @param[out] pDst points to the block of output data |
| Anna Bridge |
180:96ed750bd169 | 3220 | * @param[in] firstIndex is the first output sample to start with. |
| Anna Bridge |
180:96ed750bd169 | 3221 | * @param[in] numPoints is the number of output points to be computed. |
| Anna Bridge |
180:96ed750bd169 | 3222 | * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. |
| Anna Bridge |
180:96ed750bd169 | 3223 | */ |
| Anna Bridge |
180:96ed750bd169 | 3224 | arm_status arm_conv_partial_fast_q31( |
| Anna Bridge |
180:96ed750bd169 | 3225 | q31_t * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 3226 | uint32_t srcALen, |
| Anna Bridge |
180:96ed750bd169 | 3227 | q31_t * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 3228 | uint32_t srcBLen, |
| Anna Bridge |
180:96ed750bd169 | 3229 | q31_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 3230 | uint32_t firstIndex, |
| Anna Bridge |
180:96ed750bd169 | 3231 | uint32_t numPoints); |
| Anna Bridge |
180:96ed750bd169 | 3232 | |
| Anna Bridge |
180:96ed750bd169 | 3233 | |
| Anna Bridge |
180:96ed750bd169 | 3234 | /** |
| Anna Bridge |
180:96ed750bd169 | 3235 | * @brief Partial convolution of Q7 sequences |
| Anna Bridge |
180:96ed750bd169 | 3236 | * @param[in] pSrcA points to the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3237 | * @param[in] srcALen length of the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3238 | * @param[in] pSrcB points to the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3239 | * @param[in] srcBLen length of the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3240 | * @param[out] pDst points to the block of output data |
| Anna Bridge |
180:96ed750bd169 | 3241 | * @param[in] firstIndex is the first output sample to start with. |
| Anna Bridge |
180:96ed750bd169 | 3242 | * @param[in] numPoints is the number of output points to be computed. |
| Anna Bridge |
180:96ed750bd169 | 3243 | * @param[in] pScratch1 points to scratch buffer(of type q15_t) of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. |
| Anna Bridge |
180:96ed750bd169 | 3244 | * @param[in] pScratch2 points to scratch buffer (of type q15_t) of size min(srcALen, srcBLen). |
| Anna Bridge |
180:96ed750bd169 | 3245 | * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. |
| Anna Bridge |
180:96ed750bd169 | 3246 | */ |
| Anna Bridge |
180:96ed750bd169 | 3247 | arm_status arm_conv_partial_opt_q7( |
| Anna Bridge |
180:96ed750bd169 | 3248 | q7_t * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 3249 | uint32_t srcALen, |
| Anna Bridge |
180:96ed750bd169 | 3250 | q7_t * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 3251 | uint32_t srcBLen, |
| Anna Bridge |
180:96ed750bd169 | 3252 | q7_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 3253 | uint32_t firstIndex, |
| Anna Bridge |
180:96ed750bd169 | 3254 | uint32_t numPoints, |
| Anna Bridge |
180:96ed750bd169 | 3255 | q15_t * pScratch1, |
| Anna Bridge |
180:96ed750bd169 | 3256 | q15_t * pScratch2); |
| Anna Bridge |
180:96ed750bd169 | 3257 | |
| Anna Bridge |
180:96ed750bd169 | 3258 | |
| Anna Bridge |
180:96ed750bd169 | 3259 | /** |
| Anna Bridge |
180:96ed750bd169 | 3260 | * @brief Partial convolution of Q7 sequences. |
| Anna Bridge |
180:96ed750bd169 | 3261 | * @param[in] pSrcA points to the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3262 | * @param[in] srcALen length of the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3263 | * @param[in] pSrcB points to the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3264 | * @param[in] srcBLen length of the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 3265 | * @param[out] pDst points to the block of output data |
| Anna Bridge |
180:96ed750bd169 | 3266 | * @param[in] firstIndex is the first output sample to start with. |
| Anna Bridge |
180:96ed750bd169 | 3267 | * @param[in] numPoints is the number of output points to be computed. |
| Anna Bridge |
180:96ed750bd169 | 3268 | * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. |
| Anna Bridge |
180:96ed750bd169 | 3269 | */ |
| Anna Bridge |
180:96ed750bd169 | 3270 | arm_status arm_conv_partial_q7( |
| Anna Bridge |
180:96ed750bd169 | 3271 | q7_t * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 3272 | uint32_t srcALen, |
| Anna Bridge |
180:96ed750bd169 | 3273 | q7_t * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 3274 | uint32_t srcBLen, |
| Anna Bridge |
180:96ed750bd169 | 3275 | q7_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 3276 | uint32_t firstIndex, |
| Anna Bridge |
180:96ed750bd169 | 3277 | uint32_t numPoints); |
| Anna Bridge |
180:96ed750bd169 | 3278 | |
| Anna Bridge |
180:96ed750bd169 | 3279 | |
| Anna Bridge |
180:96ed750bd169 | 3280 | /** |
| Anna Bridge |
180:96ed750bd169 | 3281 | * @brief Instance structure for the Q15 FIR decimator. |
| Anna Bridge |
180:96ed750bd169 | 3282 | */ |
| Anna Bridge |
180:96ed750bd169 | 3283 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 3284 | { |
| Anna Bridge |
180:96ed750bd169 | 3285 | uint8_t M; /**< decimation factor. */ |
| Anna Bridge |
180:96ed750bd169 | 3286 | uint16_t numTaps; /**< number of coefficients in the filter. */ |
| Anna Bridge |
180:96ed750bd169 | 3287 | q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ |
| Anna Bridge |
180:96ed750bd169 | 3288 | q15_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ |
| Anna Bridge |
180:96ed750bd169 | 3289 | } arm_fir_decimate_instance_q15; |
| Anna Bridge |
180:96ed750bd169 | 3290 | |
| Anna Bridge |
180:96ed750bd169 | 3291 | /** |
| Anna Bridge |
180:96ed750bd169 | 3292 | * @brief Instance structure for the Q31 FIR decimator. |
| Anna Bridge |
180:96ed750bd169 | 3293 | */ |
| Anna Bridge |
180:96ed750bd169 | 3294 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 3295 | { |
| Anna Bridge |
180:96ed750bd169 | 3296 | uint8_t M; /**< decimation factor. */ |
| Anna Bridge |
180:96ed750bd169 | 3297 | uint16_t numTaps; /**< number of coefficients in the filter. */ |
| Anna Bridge |
180:96ed750bd169 | 3298 | q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ |
| Anna Bridge |
180:96ed750bd169 | 3299 | q31_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ |
| Anna Bridge |
180:96ed750bd169 | 3300 | } arm_fir_decimate_instance_q31; |
| Anna Bridge |
180:96ed750bd169 | 3301 | |
| Anna Bridge |
180:96ed750bd169 | 3302 | /** |
| Anna Bridge |
180:96ed750bd169 | 3303 | * @brief Instance structure for the floating-point FIR decimator. |
| Anna Bridge |
180:96ed750bd169 | 3304 | */ |
| Anna Bridge |
180:96ed750bd169 | 3305 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 3306 | { |
| Anna Bridge |
180:96ed750bd169 | 3307 | uint8_t M; /**< decimation factor. */ |
| Anna Bridge |
180:96ed750bd169 | 3308 | uint16_t numTaps; /**< number of coefficients in the filter. */ |
| Anna Bridge |
180:96ed750bd169 | 3309 | float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ |
| Anna Bridge |
180:96ed750bd169 | 3310 | float32_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ |
| Anna Bridge |
180:96ed750bd169 | 3311 | } arm_fir_decimate_instance_f32; |
| Anna Bridge |
180:96ed750bd169 | 3312 | |
| Anna Bridge |
180:96ed750bd169 | 3313 | |
| Anna Bridge |
180:96ed750bd169 | 3314 | /** |
| Anna Bridge |
180:96ed750bd169 | 3315 | * @brief Processing function for the floating-point FIR decimator. |
| Anna Bridge |
180:96ed750bd169 | 3316 | * @param[in] S points to an instance of the floating-point FIR decimator structure. |
| Anna Bridge |
180:96ed750bd169 | 3317 | * @param[in] pSrc points to the block of input data. |
| Anna Bridge |
180:96ed750bd169 | 3318 | * @param[out] pDst points to the block of output data |
| Anna Bridge |
180:96ed750bd169 | 3319 | * @param[in] blockSize number of input samples to process per call. |
| Anna Bridge |
180:96ed750bd169 | 3320 | */ |
| Anna Bridge |
180:96ed750bd169 | 3321 | void arm_fir_decimate_f32( |
| Anna Bridge |
180:96ed750bd169 | 3322 | const arm_fir_decimate_instance_f32 * S, |
| Anna Bridge |
180:96ed750bd169 | 3323 | float32_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 3324 | float32_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 3325 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 3326 | |
| Anna Bridge |
180:96ed750bd169 | 3327 | |
| Anna Bridge |
180:96ed750bd169 | 3328 | /** |
| Anna Bridge |
180:96ed750bd169 | 3329 | * @brief Initialization function for the floating-point FIR decimator. |
| Anna Bridge |
180:96ed750bd169 | 3330 | * @param[in,out] S points to an instance of the floating-point FIR decimator structure. |
| Anna Bridge |
180:96ed750bd169 | 3331 | * @param[in] numTaps number of coefficients in the filter. |
| Anna Bridge |
180:96ed750bd169 | 3332 | * @param[in] M decimation factor. |
| Anna Bridge |
180:96ed750bd169 | 3333 | * @param[in] pCoeffs points to the filter coefficients. |
| Anna Bridge |
180:96ed750bd169 | 3334 | * @param[in] pState points to the state buffer. |
| Anna Bridge |
180:96ed750bd169 | 3335 | * @param[in] blockSize number of input samples to process per call. |
| Anna Bridge |
180:96ed750bd169 | 3336 | * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if |
| Anna Bridge |
180:96ed750bd169 | 3337 | * <code>blockSize</code> is not a multiple of <code>M</code>. |
| Anna Bridge |
180:96ed750bd169 | 3338 | */ |
| Anna Bridge |
180:96ed750bd169 | 3339 | arm_status arm_fir_decimate_init_f32( |
| Anna Bridge |
180:96ed750bd169 | 3340 | arm_fir_decimate_instance_f32 * S, |
| Anna Bridge |
180:96ed750bd169 | 3341 | uint16_t numTaps, |
| Anna Bridge |
180:96ed750bd169 | 3342 | uint8_t M, |
| Anna Bridge |
180:96ed750bd169 | 3343 | float32_t * pCoeffs, |
| Anna Bridge |
180:96ed750bd169 | 3344 | float32_t * pState, |
| Anna Bridge |
180:96ed750bd169 | 3345 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 3346 | |
| Anna Bridge |
180:96ed750bd169 | 3347 | |
| Anna Bridge |
180:96ed750bd169 | 3348 | /** |
| Anna Bridge |
180:96ed750bd169 | 3349 | * @brief Processing function for the Q15 FIR decimator. |
| Anna Bridge |
180:96ed750bd169 | 3350 | * @param[in] S points to an instance of the Q15 FIR decimator structure. |
| Anna Bridge |
180:96ed750bd169 | 3351 | * @param[in] pSrc points to the block of input data. |
| Anna Bridge |
180:96ed750bd169 | 3352 | * @param[out] pDst points to the block of output data |
| Anna Bridge |
180:96ed750bd169 | 3353 | * @param[in] blockSize number of input samples to process per call. |
| Anna Bridge |
180:96ed750bd169 | 3354 | */ |
| Anna Bridge |
180:96ed750bd169 | 3355 | void arm_fir_decimate_q15( |
| Anna Bridge |
180:96ed750bd169 | 3356 | const arm_fir_decimate_instance_q15 * S, |
| Anna Bridge |
180:96ed750bd169 | 3357 | q15_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 3358 | q15_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 3359 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 3360 | |
| Anna Bridge |
180:96ed750bd169 | 3361 | |
| Anna Bridge |
180:96ed750bd169 | 3362 | /** |
| Anna Bridge |
180:96ed750bd169 | 3363 | * @brief Processing function for the Q15 FIR decimator (fast variant) for Cortex-M3 and Cortex-M4. |
| Anna Bridge |
180:96ed750bd169 | 3364 | * @param[in] S points to an instance of the Q15 FIR decimator structure. |
| Anna Bridge |
180:96ed750bd169 | 3365 | * @param[in] pSrc points to the block of input data. |
| Anna Bridge |
180:96ed750bd169 | 3366 | * @param[out] pDst points to the block of output data |
| Anna Bridge |
180:96ed750bd169 | 3367 | * @param[in] blockSize number of input samples to process per call. |
| Anna Bridge |
180:96ed750bd169 | 3368 | */ |
| Anna Bridge |
180:96ed750bd169 | 3369 | void arm_fir_decimate_fast_q15( |
| Anna Bridge |
180:96ed750bd169 | 3370 | const arm_fir_decimate_instance_q15 * S, |
| Anna Bridge |
180:96ed750bd169 | 3371 | q15_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 3372 | q15_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 3373 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 3374 | |
| Anna Bridge |
180:96ed750bd169 | 3375 | |
| Anna Bridge |
180:96ed750bd169 | 3376 | /** |
| Anna Bridge |
180:96ed750bd169 | 3377 | * @brief Initialization function for the Q15 FIR decimator. |
| Anna Bridge |
180:96ed750bd169 | 3378 | * @param[in,out] S points to an instance of the Q15 FIR decimator structure. |
| Anna Bridge |
180:96ed750bd169 | 3379 | * @param[in] numTaps number of coefficients in the filter. |
| Anna Bridge |
180:96ed750bd169 | 3380 | * @param[in] M decimation factor. |
| Anna Bridge |
180:96ed750bd169 | 3381 | * @param[in] pCoeffs points to the filter coefficients. |
| Anna Bridge |
180:96ed750bd169 | 3382 | * @param[in] pState points to the state buffer. |
| Anna Bridge |
180:96ed750bd169 | 3383 | * @param[in] blockSize number of input samples to process per call. |
| Anna Bridge |
180:96ed750bd169 | 3384 | * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if |
| Anna Bridge |
180:96ed750bd169 | 3385 | * <code>blockSize</code> is not a multiple of <code>M</code>. |
| Anna Bridge |
180:96ed750bd169 | 3386 | */ |
| Anna Bridge |
180:96ed750bd169 | 3387 | arm_status arm_fir_decimate_init_q15( |
| Anna Bridge |
180:96ed750bd169 | 3388 | arm_fir_decimate_instance_q15 * S, |
| Anna Bridge |
180:96ed750bd169 | 3389 | uint16_t numTaps, |
| Anna Bridge |
180:96ed750bd169 | 3390 | uint8_t M, |
| Anna Bridge |
180:96ed750bd169 | 3391 | q15_t * pCoeffs, |
| Anna Bridge |
180:96ed750bd169 | 3392 | q15_t * pState, |
| Anna Bridge |
180:96ed750bd169 | 3393 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 3394 | |
| Anna Bridge |
180:96ed750bd169 | 3395 | |
| Anna Bridge |
180:96ed750bd169 | 3396 | /** |
| Anna Bridge |
180:96ed750bd169 | 3397 | * @brief Processing function for the Q31 FIR decimator. |
| Anna Bridge |
180:96ed750bd169 | 3398 | * @param[in] S points to an instance of the Q31 FIR decimator structure. |
| Anna Bridge |
180:96ed750bd169 | 3399 | * @param[in] pSrc points to the block of input data. |
| Anna Bridge |
180:96ed750bd169 | 3400 | * @param[out] pDst points to the block of output data |
| Anna Bridge |
180:96ed750bd169 | 3401 | * @param[in] blockSize number of input samples to process per call. |
| Anna Bridge |
180:96ed750bd169 | 3402 | */ |
| Anna Bridge |
180:96ed750bd169 | 3403 | void arm_fir_decimate_q31( |
| Anna Bridge |
180:96ed750bd169 | 3404 | const arm_fir_decimate_instance_q31 * S, |
| Anna Bridge |
180:96ed750bd169 | 3405 | q31_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 3406 | q31_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 3407 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 3408 | |
| Anna Bridge |
180:96ed750bd169 | 3409 | /** |
| Anna Bridge |
180:96ed750bd169 | 3410 | * @brief Processing function for the Q31 FIR decimator (fast variant) for Cortex-M3 and Cortex-M4. |
| Anna Bridge |
180:96ed750bd169 | 3411 | * @param[in] S points to an instance of the Q31 FIR decimator structure. |
| Anna Bridge |
180:96ed750bd169 | 3412 | * @param[in] pSrc points to the block of input data. |
| Anna Bridge |
180:96ed750bd169 | 3413 | * @param[out] pDst points to the block of output data |
| Anna Bridge |
180:96ed750bd169 | 3414 | * @param[in] blockSize number of input samples to process per call. |
| Anna Bridge |
180:96ed750bd169 | 3415 | */ |
| Anna Bridge |
180:96ed750bd169 | 3416 | void arm_fir_decimate_fast_q31( |
| Anna Bridge |
180:96ed750bd169 | 3417 | arm_fir_decimate_instance_q31 * S, |
| Anna Bridge |
180:96ed750bd169 | 3418 | q31_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 3419 | q31_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 3420 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 3421 | |
| Anna Bridge |
180:96ed750bd169 | 3422 | |
| Anna Bridge |
180:96ed750bd169 | 3423 | /** |
| Anna Bridge |
180:96ed750bd169 | 3424 | * @brief Initialization function for the Q31 FIR decimator. |
| Anna Bridge |
180:96ed750bd169 | 3425 | * @param[in,out] S points to an instance of the Q31 FIR decimator structure. |
| Anna Bridge |
180:96ed750bd169 | 3426 | * @param[in] numTaps number of coefficients in the filter. |
| Anna Bridge |
180:96ed750bd169 | 3427 | * @param[in] M decimation factor. |
| Anna Bridge |
180:96ed750bd169 | 3428 | * @param[in] pCoeffs points to the filter coefficients. |
| Anna Bridge |
180:96ed750bd169 | 3429 | * @param[in] pState points to the state buffer. |
| Anna Bridge |
180:96ed750bd169 | 3430 | * @param[in] blockSize number of input samples to process per call. |
| Anna Bridge |
180:96ed750bd169 | 3431 | * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if |
| Anna Bridge |
180:96ed750bd169 | 3432 | * <code>blockSize</code> is not a multiple of <code>M</code>. |
| Anna Bridge |
180:96ed750bd169 | 3433 | */ |
| Anna Bridge |
180:96ed750bd169 | 3434 | arm_status arm_fir_decimate_init_q31( |
| Anna Bridge |
180:96ed750bd169 | 3435 | arm_fir_decimate_instance_q31 * S, |
| Anna Bridge |
180:96ed750bd169 | 3436 | uint16_t numTaps, |
| Anna Bridge |
180:96ed750bd169 | 3437 | uint8_t M, |
| Anna Bridge |
180:96ed750bd169 | 3438 | q31_t * pCoeffs, |
| Anna Bridge |
180:96ed750bd169 | 3439 | q31_t * pState, |
| Anna Bridge |
180:96ed750bd169 | 3440 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 3441 | |
| Anna Bridge |
180:96ed750bd169 | 3442 | |
| Anna Bridge |
180:96ed750bd169 | 3443 | /** |
| Anna Bridge |
180:96ed750bd169 | 3444 | * @brief Instance structure for the Q15 FIR interpolator. |
| Anna Bridge |
180:96ed750bd169 | 3445 | */ |
| Anna Bridge |
180:96ed750bd169 | 3446 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 3447 | { |
| Anna Bridge |
180:96ed750bd169 | 3448 | uint8_t L; /**< upsample factor. */ |
| Anna Bridge |
180:96ed750bd169 | 3449 | uint16_t phaseLength; /**< length of each polyphase filter component. */ |
| Anna Bridge |
180:96ed750bd169 | 3450 | q15_t *pCoeffs; /**< points to the coefficient array. The array is of length L*phaseLength. */ |
| Anna Bridge |
180:96ed750bd169 | 3451 | q15_t *pState; /**< points to the state variable array. The array is of length blockSize+phaseLength-1. */ |
| Anna Bridge |
180:96ed750bd169 | 3452 | } arm_fir_interpolate_instance_q15; |
| Anna Bridge |
180:96ed750bd169 | 3453 | |
| Anna Bridge |
180:96ed750bd169 | 3454 | /** |
| Anna Bridge |
180:96ed750bd169 | 3455 | * @brief Instance structure for the Q31 FIR interpolator. |
| Anna Bridge |
180:96ed750bd169 | 3456 | */ |
| Anna Bridge |
180:96ed750bd169 | 3457 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 3458 | { |
| Anna Bridge |
180:96ed750bd169 | 3459 | uint8_t L; /**< upsample factor. */ |
| Anna Bridge |
180:96ed750bd169 | 3460 | uint16_t phaseLength; /**< length of each polyphase filter component. */ |
| Anna Bridge |
180:96ed750bd169 | 3461 | q31_t *pCoeffs; /**< points to the coefficient array. The array is of length L*phaseLength. */ |
| Anna Bridge |
180:96ed750bd169 | 3462 | q31_t *pState; /**< points to the state variable array. The array is of length blockSize+phaseLength-1. */ |
| Anna Bridge |
180:96ed750bd169 | 3463 | } arm_fir_interpolate_instance_q31; |
| Anna Bridge |
180:96ed750bd169 | 3464 | |
| Anna Bridge |
180:96ed750bd169 | 3465 | /** |
| Anna Bridge |
180:96ed750bd169 | 3466 | * @brief Instance structure for the floating-point FIR interpolator. |
| Anna Bridge |
180:96ed750bd169 | 3467 | */ |
| Anna Bridge |
180:96ed750bd169 | 3468 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 3469 | { |
| Anna Bridge |
180:96ed750bd169 | 3470 | uint8_t L; /**< upsample factor. */ |
| Anna Bridge |
180:96ed750bd169 | 3471 | uint16_t phaseLength; /**< length of each polyphase filter component. */ |
| Anna Bridge |
180:96ed750bd169 | 3472 | float32_t *pCoeffs; /**< points to the coefficient array. The array is of length L*phaseLength. */ |
| Anna Bridge |
180:96ed750bd169 | 3473 | float32_t *pState; /**< points to the state variable array. The array is of length phaseLength+numTaps-1. */ |
| Anna Bridge |
180:96ed750bd169 | 3474 | } arm_fir_interpolate_instance_f32; |
| Anna Bridge |
180:96ed750bd169 | 3475 | |
| Anna Bridge |
180:96ed750bd169 | 3476 | |
| Anna Bridge |
180:96ed750bd169 | 3477 | /** |
| Anna Bridge |
180:96ed750bd169 | 3478 | * @brief Processing function for the Q15 FIR interpolator. |
| Anna Bridge |
180:96ed750bd169 | 3479 | * @param[in] S points to an instance of the Q15 FIR interpolator structure. |
| Anna Bridge |
180:96ed750bd169 | 3480 | * @param[in] pSrc points to the block of input data. |
| Anna Bridge |
180:96ed750bd169 | 3481 | * @param[out] pDst points to the block of output data. |
| Anna Bridge |
180:96ed750bd169 | 3482 | * @param[in] blockSize number of input samples to process per call. |
| Anna Bridge |
180:96ed750bd169 | 3483 | */ |
| Anna Bridge |
180:96ed750bd169 | 3484 | void arm_fir_interpolate_q15( |
| Anna Bridge |
180:96ed750bd169 | 3485 | const arm_fir_interpolate_instance_q15 * S, |
| Anna Bridge |
180:96ed750bd169 | 3486 | q15_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 3487 | q15_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 3488 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 3489 | |
| Anna Bridge |
180:96ed750bd169 | 3490 | |
| Anna Bridge |
180:96ed750bd169 | 3491 | /** |
| Anna Bridge |
180:96ed750bd169 | 3492 | * @brief Initialization function for the Q15 FIR interpolator. |
| Anna Bridge |
180:96ed750bd169 | 3493 | * @param[in,out] S points to an instance of the Q15 FIR interpolator structure. |
| Anna Bridge |
180:96ed750bd169 | 3494 | * @param[in] L upsample factor. |
| Anna Bridge |
180:96ed750bd169 | 3495 | * @param[in] numTaps number of filter coefficients in the filter. |
| Anna Bridge |
180:96ed750bd169 | 3496 | * @param[in] pCoeffs points to the filter coefficient buffer. |
| Anna Bridge |
180:96ed750bd169 | 3497 | * @param[in] pState points to the state buffer. |
| Anna Bridge |
180:96ed750bd169 | 3498 | * @param[in] blockSize number of input samples to process per call. |
| Anna Bridge |
180:96ed750bd169 | 3499 | * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if |
| Anna Bridge |
180:96ed750bd169 | 3500 | * the filter length <code>numTaps</code> is not a multiple of the interpolation factor <code>L</code>. |
| Anna Bridge |
180:96ed750bd169 | 3501 | */ |
| Anna Bridge |
180:96ed750bd169 | 3502 | arm_status arm_fir_interpolate_init_q15( |
| Anna Bridge |
180:96ed750bd169 | 3503 | arm_fir_interpolate_instance_q15 * S, |
| Anna Bridge |
180:96ed750bd169 | 3504 | uint8_t L, |
| Anna Bridge |
180:96ed750bd169 | 3505 | uint16_t numTaps, |
| Anna Bridge |
180:96ed750bd169 | 3506 | q15_t * pCoeffs, |
| Anna Bridge |
180:96ed750bd169 | 3507 | q15_t * pState, |
| Anna Bridge |
180:96ed750bd169 | 3508 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 3509 | |
| Anna Bridge |
180:96ed750bd169 | 3510 | |
| Anna Bridge |
180:96ed750bd169 | 3511 | /** |
| Anna Bridge |
180:96ed750bd169 | 3512 | * @brief Processing function for the Q31 FIR interpolator. |
| Anna Bridge |
180:96ed750bd169 | 3513 | * @param[in] S points to an instance of the Q15 FIR interpolator structure. |
| Anna Bridge |
180:96ed750bd169 | 3514 | * @param[in] pSrc points to the block of input data. |
| Anna Bridge |
180:96ed750bd169 | 3515 | * @param[out] pDst points to the block of output data. |
| Anna Bridge |
180:96ed750bd169 | 3516 | * @param[in] blockSize number of input samples to process per call. |
| Anna Bridge |
180:96ed750bd169 | 3517 | */ |
| Anna Bridge |
180:96ed750bd169 | 3518 | void arm_fir_interpolate_q31( |
| Anna Bridge |
180:96ed750bd169 | 3519 | const arm_fir_interpolate_instance_q31 * S, |
| Anna Bridge |
180:96ed750bd169 | 3520 | q31_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 3521 | q31_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 3522 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 3523 | |
| Anna Bridge |
180:96ed750bd169 | 3524 | |
| Anna Bridge |
180:96ed750bd169 | 3525 | /** |
| Anna Bridge |
180:96ed750bd169 | 3526 | * @brief Initialization function for the Q31 FIR interpolator. |
| Anna Bridge |
180:96ed750bd169 | 3527 | * @param[in,out] S points to an instance of the Q31 FIR interpolator structure. |
| Anna Bridge |
180:96ed750bd169 | 3528 | * @param[in] L upsample factor. |
| Anna Bridge |
180:96ed750bd169 | 3529 | * @param[in] numTaps number of filter coefficients in the filter. |
| Anna Bridge |
180:96ed750bd169 | 3530 | * @param[in] pCoeffs points to the filter coefficient buffer. |
| Anna Bridge |
180:96ed750bd169 | 3531 | * @param[in] pState points to the state buffer. |
| Anna Bridge |
180:96ed750bd169 | 3532 | * @param[in] blockSize number of input samples to process per call. |
| Anna Bridge |
180:96ed750bd169 | 3533 | * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if |
| Anna Bridge |
180:96ed750bd169 | 3534 | * the filter length <code>numTaps</code> is not a multiple of the interpolation factor <code>L</code>. |
| Anna Bridge |
180:96ed750bd169 | 3535 | */ |
| Anna Bridge |
180:96ed750bd169 | 3536 | arm_status arm_fir_interpolate_init_q31( |
| Anna Bridge |
180:96ed750bd169 | 3537 | arm_fir_interpolate_instance_q31 * S, |
| Anna Bridge |
180:96ed750bd169 | 3538 | uint8_t L, |
| Anna Bridge |
180:96ed750bd169 | 3539 | uint16_t numTaps, |
| Anna Bridge |
180:96ed750bd169 | 3540 | q31_t * pCoeffs, |
| Anna Bridge |
180:96ed750bd169 | 3541 | q31_t * pState, |
| Anna Bridge |
180:96ed750bd169 | 3542 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 3543 | |
| Anna Bridge |
180:96ed750bd169 | 3544 | |
| Anna Bridge |
180:96ed750bd169 | 3545 | /** |
| Anna Bridge |
180:96ed750bd169 | 3546 | * @brief Processing function for the floating-point FIR interpolator. |
| Anna Bridge |
180:96ed750bd169 | 3547 | * @param[in] S points to an instance of the floating-point FIR interpolator structure. |
| Anna Bridge |
180:96ed750bd169 | 3548 | * @param[in] pSrc points to the block of input data. |
| Anna Bridge |
180:96ed750bd169 | 3549 | * @param[out] pDst points to the block of output data. |
| Anna Bridge |
180:96ed750bd169 | 3550 | * @param[in] blockSize number of input samples to process per call. |
| Anna Bridge |
180:96ed750bd169 | 3551 | */ |
| Anna Bridge |
180:96ed750bd169 | 3552 | void arm_fir_interpolate_f32( |
| Anna Bridge |
180:96ed750bd169 | 3553 | const arm_fir_interpolate_instance_f32 * S, |
| Anna Bridge |
180:96ed750bd169 | 3554 | float32_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 3555 | float32_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 3556 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 3557 | |
| Anna Bridge |
180:96ed750bd169 | 3558 | |
| Anna Bridge |
180:96ed750bd169 | 3559 | /** |
| Anna Bridge |
180:96ed750bd169 | 3560 | * @brief Initialization function for the floating-point FIR interpolator. |
| Anna Bridge |
180:96ed750bd169 | 3561 | * @param[in,out] S points to an instance of the floating-point FIR interpolator structure. |
| Anna Bridge |
180:96ed750bd169 | 3562 | * @param[in] L upsample factor. |
| Anna Bridge |
180:96ed750bd169 | 3563 | * @param[in] numTaps number of filter coefficients in the filter. |
| Anna Bridge |
180:96ed750bd169 | 3564 | * @param[in] pCoeffs points to the filter coefficient buffer. |
| Anna Bridge |
180:96ed750bd169 | 3565 | * @param[in] pState points to the state buffer. |
| Anna Bridge |
180:96ed750bd169 | 3566 | * @param[in] blockSize number of input samples to process per call. |
| Anna Bridge |
180:96ed750bd169 | 3567 | * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if |
| Anna Bridge |
180:96ed750bd169 | 3568 | * the filter length <code>numTaps</code> is not a multiple of the interpolation factor <code>L</code>. |
| Anna Bridge |
180:96ed750bd169 | 3569 | */ |
| Anna Bridge |
180:96ed750bd169 | 3570 | arm_status arm_fir_interpolate_init_f32( |
| Anna Bridge |
180:96ed750bd169 | 3571 | arm_fir_interpolate_instance_f32 * S, |
| Anna Bridge |
180:96ed750bd169 | 3572 | uint8_t L, |
| Anna Bridge |
180:96ed750bd169 | 3573 | uint16_t numTaps, |
| Anna Bridge |
180:96ed750bd169 | 3574 | float32_t * pCoeffs, |
| Anna Bridge |
180:96ed750bd169 | 3575 | float32_t * pState, |
| Anna Bridge |
180:96ed750bd169 | 3576 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 3577 | |
| Anna Bridge |
180:96ed750bd169 | 3578 | |
| Anna Bridge |
180:96ed750bd169 | 3579 | /** |
| Anna Bridge |
180:96ed750bd169 | 3580 | * @brief Instance structure for the high precision Q31 Biquad cascade filter. |
| Anna Bridge |
180:96ed750bd169 | 3581 | */ |
| Anna Bridge |
180:96ed750bd169 | 3582 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 3583 | { |
| Anna Bridge |
180:96ed750bd169 | 3584 | uint8_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ |
| Anna Bridge |
180:96ed750bd169 | 3585 | q63_t *pState; /**< points to the array of state coefficients. The array is of length 4*numStages. */ |
| Anna Bridge |
180:96ed750bd169 | 3586 | q31_t *pCoeffs; /**< points to the array of coefficients. The array is of length 5*numStages. */ |
| Anna Bridge |
180:96ed750bd169 | 3587 | uint8_t postShift; /**< additional shift, in bits, applied to each output sample. */ |
| Anna Bridge |
180:96ed750bd169 | 3588 | } arm_biquad_cas_df1_32x64_ins_q31; |
| Anna Bridge |
180:96ed750bd169 | 3589 | |
| Anna Bridge |
180:96ed750bd169 | 3590 | |
| Anna Bridge |
180:96ed750bd169 | 3591 | /** |
| Anna Bridge |
180:96ed750bd169 | 3592 | * @param[in] S points to an instance of the high precision Q31 Biquad cascade filter structure. |
| Anna Bridge |
180:96ed750bd169 | 3593 | * @param[in] pSrc points to the block of input data. |
| Anna Bridge |
180:96ed750bd169 | 3594 | * @param[out] pDst points to the block of output data |
| Anna Bridge |
180:96ed750bd169 | 3595 | * @param[in] blockSize number of samples to process. |
| Anna Bridge |
180:96ed750bd169 | 3596 | */ |
| Anna Bridge |
180:96ed750bd169 | 3597 | void arm_biquad_cas_df1_32x64_q31( |
| Anna Bridge |
180:96ed750bd169 | 3598 | const arm_biquad_cas_df1_32x64_ins_q31 * S, |
| Anna Bridge |
180:96ed750bd169 | 3599 | q31_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 3600 | q31_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 3601 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 3602 | |
| Anna Bridge |
180:96ed750bd169 | 3603 | |
| Anna Bridge |
180:96ed750bd169 | 3604 | /** |
| Anna Bridge |
180:96ed750bd169 | 3605 | * @param[in,out] S points to an instance of the high precision Q31 Biquad cascade filter structure. |
| Anna Bridge |
180:96ed750bd169 | 3606 | * @param[in] numStages number of 2nd order stages in the filter. |
| Anna Bridge |
180:96ed750bd169 | 3607 | * @param[in] pCoeffs points to the filter coefficients. |
| Anna Bridge |
180:96ed750bd169 | 3608 | * @param[in] pState points to the state buffer. |
| Anna Bridge |
180:96ed750bd169 | 3609 | * @param[in] postShift shift to be applied to the output. Varies according to the coefficients format |
| Anna Bridge |
180:96ed750bd169 | 3610 | */ |
| Anna Bridge |
180:96ed750bd169 | 3611 | void arm_biquad_cas_df1_32x64_init_q31( |
| Anna Bridge |
180:96ed750bd169 | 3612 | arm_biquad_cas_df1_32x64_ins_q31 * S, |
| Anna Bridge |
180:96ed750bd169 | 3613 | uint8_t numStages, |
| Anna Bridge |
180:96ed750bd169 | 3614 | q31_t * pCoeffs, |
| Anna Bridge |
180:96ed750bd169 | 3615 | q63_t * pState, |
| Anna Bridge |
180:96ed750bd169 | 3616 | uint8_t postShift); |
| Anna Bridge |
180:96ed750bd169 | 3617 | |
| Anna Bridge |
180:96ed750bd169 | 3618 | |
| Anna Bridge |
180:96ed750bd169 | 3619 | /** |
| Anna Bridge |
180:96ed750bd169 | 3620 | * @brief Instance structure for the floating-point transposed direct form II Biquad cascade filter. |
| Anna Bridge |
180:96ed750bd169 | 3621 | */ |
| Anna Bridge |
180:96ed750bd169 | 3622 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 3623 | { |
| Anna Bridge |
180:96ed750bd169 | 3624 | uint8_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ |
| Anna Bridge |
180:96ed750bd169 | 3625 | float32_t *pState; /**< points to the array of state coefficients. The array is of length 2*numStages. */ |
| Anna Bridge |
180:96ed750bd169 | 3626 | float32_t *pCoeffs; /**< points to the array of coefficients. The array is of length 5*numStages. */ |
| Anna Bridge |
180:96ed750bd169 | 3627 | } arm_biquad_cascade_df2T_instance_f32; |
| Anna Bridge |
180:96ed750bd169 | 3628 | |
| Anna Bridge |
180:96ed750bd169 | 3629 | /** |
| Anna Bridge |
180:96ed750bd169 | 3630 | * @brief Instance structure for the floating-point transposed direct form II Biquad cascade filter. |
| Anna Bridge |
180:96ed750bd169 | 3631 | */ |
| Anna Bridge |
180:96ed750bd169 | 3632 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 3633 | { |
| Anna Bridge |
180:96ed750bd169 | 3634 | uint8_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ |
| Anna Bridge |
180:96ed750bd169 | 3635 | float32_t *pState; /**< points to the array of state coefficients. The array is of length 4*numStages. */ |
| Anna Bridge |
180:96ed750bd169 | 3636 | float32_t *pCoeffs; /**< points to the array of coefficients. The array is of length 5*numStages. */ |
| Anna Bridge |
180:96ed750bd169 | 3637 | } arm_biquad_cascade_stereo_df2T_instance_f32; |
| Anna Bridge |
180:96ed750bd169 | 3638 | |
| Anna Bridge |
180:96ed750bd169 | 3639 | /** |
| Anna Bridge |
180:96ed750bd169 | 3640 | * @brief Instance structure for the floating-point transposed direct form II Biquad cascade filter. |
| Anna Bridge |
180:96ed750bd169 | 3641 | */ |
| Anna Bridge |
180:96ed750bd169 | 3642 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 3643 | { |
| Anna Bridge |
180:96ed750bd169 | 3644 | uint8_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ |
| Anna Bridge |
180:96ed750bd169 | 3645 | float64_t *pState; /**< points to the array of state coefficients. The array is of length 2*numStages. */ |
| Anna Bridge |
180:96ed750bd169 | 3646 | float64_t *pCoeffs; /**< points to the array of coefficients. The array is of length 5*numStages. */ |
| Anna Bridge |
180:96ed750bd169 | 3647 | } arm_biquad_cascade_df2T_instance_f64; |
| Anna Bridge |
180:96ed750bd169 | 3648 | |
| Anna Bridge |
180:96ed750bd169 | 3649 | |
| Anna Bridge |
180:96ed750bd169 | 3650 | /** |
| Anna Bridge |
180:96ed750bd169 | 3651 | * @brief Processing function for the floating-point transposed direct form II Biquad cascade filter. |
| Anna Bridge |
180:96ed750bd169 | 3652 | * @param[in] S points to an instance of the filter data structure. |
| Anna Bridge |
180:96ed750bd169 | 3653 | * @param[in] pSrc points to the block of input data. |
| Anna Bridge |
180:96ed750bd169 | 3654 | * @param[out] pDst points to the block of output data |
| Anna Bridge |
180:96ed750bd169 | 3655 | * @param[in] blockSize number of samples to process. |
| Anna Bridge |
180:96ed750bd169 | 3656 | */ |
| Anna Bridge |
180:96ed750bd169 | 3657 | void arm_biquad_cascade_df2T_f32( |
| Anna Bridge |
180:96ed750bd169 | 3658 | const arm_biquad_cascade_df2T_instance_f32 * S, |
| Anna Bridge |
180:96ed750bd169 | 3659 | float32_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 3660 | float32_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 3661 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 3662 | |
| Anna Bridge |
180:96ed750bd169 | 3663 | |
| Anna Bridge |
180:96ed750bd169 | 3664 | /** |
| Anna Bridge |
180:96ed750bd169 | 3665 | * @brief Processing function for the floating-point transposed direct form II Biquad cascade filter. 2 channels |
| Anna Bridge |
180:96ed750bd169 | 3666 | * @param[in] S points to an instance of the filter data structure. |
| Anna Bridge |
180:96ed750bd169 | 3667 | * @param[in] pSrc points to the block of input data. |
| Anna Bridge |
180:96ed750bd169 | 3668 | * @param[out] pDst points to the block of output data |
| Anna Bridge |
180:96ed750bd169 | 3669 | * @param[in] blockSize number of samples to process. |
| Anna Bridge |
180:96ed750bd169 | 3670 | */ |
| Anna Bridge |
180:96ed750bd169 | 3671 | void arm_biquad_cascade_stereo_df2T_f32( |
| Anna Bridge |
180:96ed750bd169 | 3672 | const arm_biquad_cascade_stereo_df2T_instance_f32 * S, |
| Anna Bridge |
180:96ed750bd169 | 3673 | float32_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 3674 | float32_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 3675 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 3676 | |
| Anna Bridge |
180:96ed750bd169 | 3677 | |
| Anna Bridge |
180:96ed750bd169 | 3678 | /** |
| Anna Bridge |
180:96ed750bd169 | 3679 | * @brief Processing function for the floating-point transposed direct form II Biquad cascade filter. |
| Anna Bridge |
180:96ed750bd169 | 3680 | * @param[in] S points to an instance of the filter data structure. |
| Anna Bridge |
180:96ed750bd169 | 3681 | * @param[in] pSrc points to the block of input data. |
| Anna Bridge |
180:96ed750bd169 | 3682 | * @param[out] pDst points to the block of output data |
| Anna Bridge |
180:96ed750bd169 | 3683 | * @param[in] blockSize number of samples to process. |
| Anna Bridge |
180:96ed750bd169 | 3684 | */ |
| Anna Bridge |
180:96ed750bd169 | 3685 | void arm_biquad_cascade_df2T_f64( |
| Anna Bridge |
180:96ed750bd169 | 3686 | const arm_biquad_cascade_df2T_instance_f64 * S, |
| Anna Bridge |
180:96ed750bd169 | 3687 | float64_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 3688 | float64_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 3689 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 3690 | |
| Anna Bridge |
180:96ed750bd169 | 3691 | |
| Anna Bridge |
180:96ed750bd169 | 3692 | /** |
| Anna Bridge |
180:96ed750bd169 | 3693 | * @brief Initialization function for the floating-point transposed direct form II Biquad cascade filter. |
| Anna Bridge |
180:96ed750bd169 | 3694 | * @param[in,out] S points to an instance of the filter data structure. |
| Anna Bridge |
180:96ed750bd169 | 3695 | * @param[in] numStages number of 2nd order stages in the filter. |
| Anna Bridge |
180:96ed750bd169 | 3696 | * @param[in] pCoeffs points to the filter coefficients. |
| Anna Bridge |
180:96ed750bd169 | 3697 | * @param[in] pState points to the state buffer. |
| Anna Bridge |
180:96ed750bd169 | 3698 | */ |
| Anna Bridge |
180:96ed750bd169 | 3699 | void arm_biquad_cascade_df2T_init_f32( |
| Anna Bridge |
180:96ed750bd169 | 3700 | arm_biquad_cascade_df2T_instance_f32 * S, |
| Anna Bridge |
180:96ed750bd169 | 3701 | uint8_t numStages, |
| Anna Bridge |
180:96ed750bd169 | 3702 | float32_t * pCoeffs, |
| Anna Bridge |
180:96ed750bd169 | 3703 | float32_t * pState); |
| Anna Bridge |
180:96ed750bd169 | 3704 | |
| Anna Bridge |
180:96ed750bd169 | 3705 | |
| Anna Bridge |
180:96ed750bd169 | 3706 | /** |
| Anna Bridge |
180:96ed750bd169 | 3707 | * @brief Initialization function for the floating-point transposed direct form II Biquad cascade filter. |
| Anna Bridge |
180:96ed750bd169 | 3708 | * @param[in,out] S points to an instance of the filter data structure. |
| Anna Bridge |
180:96ed750bd169 | 3709 | * @param[in] numStages number of 2nd order stages in the filter. |
| Anna Bridge |
180:96ed750bd169 | 3710 | * @param[in] pCoeffs points to the filter coefficients. |
| Anna Bridge |
180:96ed750bd169 | 3711 | * @param[in] pState points to the state buffer. |
| Anna Bridge |
180:96ed750bd169 | 3712 | */ |
| Anna Bridge |
180:96ed750bd169 | 3713 | void arm_biquad_cascade_stereo_df2T_init_f32( |
| Anna Bridge |
180:96ed750bd169 | 3714 | arm_biquad_cascade_stereo_df2T_instance_f32 * S, |
| Anna Bridge |
180:96ed750bd169 | 3715 | uint8_t numStages, |
| Anna Bridge |
180:96ed750bd169 | 3716 | float32_t * pCoeffs, |
| Anna Bridge |
180:96ed750bd169 | 3717 | float32_t * pState); |
| Anna Bridge |
180:96ed750bd169 | 3718 | |
| Anna Bridge |
180:96ed750bd169 | 3719 | |
| Anna Bridge |
180:96ed750bd169 | 3720 | /** |
| Anna Bridge |
180:96ed750bd169 | 3721 | * @brief Initialization function for the floating-point transposed direct form II Biquad cascade filter. |
| Anna Bridge |
180:96ed750bd169 | 3722 | * @param[in,out] S points to an instance of the filter data structure. |
| Anna Bridge |
180:96ed750bd169 | 3723 | * @param[in] numStages number of 2nd order stages in the filter. |
| Anna Bridge |
180:96ed750bd169 | 3724 | * @param[in] pCoeffs points to the filter coefficients. |
| Anna Bridge |
180:96ed750bd169 | 3725 | * @param[in] pState points to the state buffer. |
| Anna Bridge |
180:96ed750bd169 | 3726 | */ |
| Anna Bridge |
180:96ed750bd169 | 3727 | void arm_biquad_cascade_df2T_init_f64( |
| Anna Bridge |
180:96ed750bd169 | 3728 | arm_biquad_cascade_df2T_instance_f64 * S, |
| Anna Bridge |
180:96ed750bd169 | 3729 | uint8_t numStages, |
| Anna Bridge |
180:96ed750bd169 | 3730 | float64_t * pCoeffs, |
| Anna Bridge |
180:96ed750bd169 | 3731 | float64_t * pState); |
| Anna Bridge |
180:96ed750bd169 | 3732 | |
| Anna Bridge |
180:96ed750bd169 | 3733 | |
| Anna Bridge |
180:96ed750bd169 | 3734 | /** |
| Anna Bridge |
180:96ed750bd169 | 3735 | * @brief Instance structure for the Q15 FIR lattice filter. |
| Anna Bridge |
180:96ed750bd169 | 3736 | */ |
| Anna Bridge |
180:96ed750bd169 | 3737 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 3738 | { |
| Anna Bridge |
180:96ed750bd169 | 3739 | uint16_t numStages; /**< number of filter stages. */ |
| Anna Bridge |
180:96ed750bd169 | 3740 | q15_t *pState; /**< points to the state variable array. The array is of length numStages. */ |
| Anna Bridge |
180:96ed750bd169 | 3741 | q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numStages. */ |
| Anna Bridge |
180:96ed750bd169 | 3742 | } arm_fir_lattice_instance_q15; |
| Anna Bridge |
180:96ed750bd169 | 3743 | |
| Anna Bridge |
180:96ed750bd169 | 3744 | /** |
| Anna Bridge |
180:96ed750bd169 | 3745 | * @brief Instance structure for the Q31 FIR lattice filter. |
| Anna Bridge |
180:96ed750bd169 | 3746 | */ |
| Anna Bridge |
180:96ed750bd169 | 3747 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 3748 | { |
| Anna Bridge |
180:96ed750bd169 | 3749 | uint16_t numStages; /**< number of filter stages. */ |
| Anna Bridge |
180:96ed750bd169 | 3750 | q31_t *pState; /**< points to the state variable array. The array is of length numStages. */ |
| Anna Bridge |
180:96ed750bd169 | 3751 | q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numStages. */ |
| Anna Bridge |
180:96ed750bd169 | 3752 | } arm_fir_lattice_instance_q31; |
| Anna Bridge |
180:96ed750bd169 | 3753 | |
| Anna Bridge |
180:96ed750bd169 | 3754 | /** |
| Anna Bridge |
180:96ed750bd169 | 3755 | * @brief Instance structure for the floating-point FIR lattice filter. |
| Anna Bridge |
180:96ed750bd169 | 3756 | */ |
| Anna Bridge |
180:96ed750bd169 | 3757 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 3758 | { |
| Anna Bridge |
180:96ed750bd169 | 3759 | uint16_t numStages; /**< number of filter stages. */ |
| Anna Bridge |
180:96ed750bd169 | 3760 | float32_t *pState; /**< points to the state variable array. The array is of length numStages. */ |
| Anna Bridge |
180:96ed750bd169 | 3761 | float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numStages. */ |
| Anna Bridge |
180:96ed750bd169 | 3762 | } arm_fir_lattice_instance_f32; |
| Anna Bridge |
180:96ed750bd169 | 3763 | |
| Anna Bridge |
180:96ed750bd169 | 3764 | |
| Anna Bridge |
180:96ed750bd169 | 3765 | /** |
| Anna Bridge |
180:96ed750bd169 | 3766 | * @brief Initialization function for the Q15 FIR lattice filter. |
| Anna Bridge |
180:96ed750bd169 | 3767 | * @param[in] S points to an instance of the Q15 FIR lattice structure. |
| Anna Bridge |
180:96ed750bd169 | 3768 | * @param[in] numStages number of filter stages. |
| Anna Bridge |
180:96ed750bd169 | 3769 | * @param[in] pCoeffs points to the coefficient buffer. The array is of length numStages. |
| Anna Bridge |
180:96ed750bd169 | 3770 | * @param[in] pState points to the state buffer. The array is of length numStages. |
| Anna Bridge |
180:96ed750bd169 | 3771 | */ |
| Anna Bridge |
180:96ed750bd169 | 3772 | void arm_fir_lattice_init_q15( |
| Anna Bridge |
180:96ed750bd169 | 3773 | arm_fir_lattice_instance_q15 * S, |
| Anna Bridge |
180:96ed750bd169 | 3774 | uint16_t numStages, |
| Anna Bridge |
180:96ed750bd169 | 3775 | q15_t * pCoeffs, |
| Anna Bridge |
180:96ed750bd169 | 3776 | q15_t * pState); |
| Anna Bridge |
180:96ed750bd169 | 3777 | |
| Anna Bridge |
180:96ed750bd169 | 3778 | |
| Anna Bridge |
180:96ed750bd169 | 3779 | /** |
| Anna Bridge |
180:96ed750bd169 | 3780 | * @brief Processing function for the Q15 FIR lattice filter. |
| Anna Bridge |
180:96ed750bd169 | 3781 | * @param[in] S points to an instance of the Q15 FIR lattice structure. |
| Anna Bridge |
180:96ed750bd169 | 3782 | * @param[in] pSrc points to the block of input data. |
| Anna Bridge |
180:96ed750bd169 | 3783 | * @param[out] pDst points to the block of output data. |
| Anna Bridge |
180:96ed750bd169 | 3784 | * @param[in] blockSize number of samples to process. |
| Anna Bridge |
180:96ed750bd169 | 3785 | */ |
| Anna Bridge |
180:96ed750bd169 | 3786 | void arm_fir_lattice_q15( |
| Anna Bridge |
180:96ed750bd169 | 3787 | const arm_fir_lattice_instance_q15 * S, |
| Anna Bridge |
180:96ed750bd169 | 3788 | q15_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 3789 | q15_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 3790 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 3791 | |
| Anna Bridge |
180:96ed750bd169 | 3792 | |
| Anna Bridge |
180:96ed750bd169 | 3793 | /** |
| Anna Bridge |
180:96ed750bd169 | 3794 | * @brief Initialization function for the Q31 FIR lattice filter. |
| Anna Bridge |
180:96ed750bd169 | 3795 | * @param[in] S points to an instance of the Q31 FIR lattice structure. |
| Anna Bridge |
180:96ed750bd169 | 3796 | * @param[in] numStages number of filter stages. |
| Anna Bridge |
180:96ed750bd169 | 3797 | * @param[in] pCoeffs points to the coefficient buffer. The array is of length numStages. |
| Anna Bridge |
180:96ed750bd169 | 3798 | * @param[in] pState points to the state buffer. The array is of length numStages. |
| Anna Bridge |
180:96ed750bd169 | 3799 | */ |
| Anna Bridge |
180:96ed750bd169 | 3800 | void arm_fir_lattice_init_q31( |
| Anna Bridge |
180:96ed750bd169 | 3801 | arm_fir_lattice_instance_q31 * S, |
| Anna Bridge |
180:96ed750bd169 | 3802 | uint16_t numStages, |
| Anna Bridge |
180:96ed750bd169 | 3803 | q31_t * pCoeffs, |
| Anna Bridge |
180:96ed750bd169 | 3804 | q31_t * pState); |
| Anna Bridge |
180:96ed750bd169 | 3805 | |
| Anna Bridge |
180:96ed750bd169 | 3806 | |
| Anna Bridge |
180:96ed750bd169 | 3807 | /** |
| Anna Bridge |
180:96ed750bd169 | 3808 | * @brief Processing function for the Q31 FIR lattice filter. |
| Anna Bridge |
180:96ed750bd169 | 3809 | * @param[in] S points to an instance of the Q31 FIR lattice structure. |
| Anna Bridge |
180:96ed750bd169 | 3810 | * @param[in] pSrc points to the block of input data. |
| Anna Bridge |
180:96ed750bd169 | 3811 | * @param[out] pDst points to the block of output data |
| Anna Bridge |
180:96ed750bd169 | 3812 | * @param[in] blockSize number of samples to process. |
| Anna Bridge |
180:96ed750bd169 | 3813 | */ |
| Anna Bridge |
180:96ed750bd169 | 3814 | void arm_fir_lattice_q31( |
| Anna Bridge |
180:96ed750bd169 | 3815 | const arm_fir_lattice_instance_q31 * S, |
| Anna Bridge |
180:96ed750bd169 | 3816 | q31_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 3817 | q31_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 3818 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 3819 | |
| Anna Bridge |
180:96ed750bd169 | 3820 | |
| Anna Bridge |
180:96ed750bd169 | 3821 | /** |
| Anna Bridge |
180:96ed750bd169 | 3822 | * @brief Initialization function for the floating-point FIR lattice filter. |
| Anna Bridge |
180:96ed750bd169 | 3823 | * @param[in] S points to an instance of the floating-point FIR lattice structure. |
| Anna Bridge |
180:96ed750bd169 | 3824 | * @param[in] numStages number of filter stages. |
| Anna Bridge |
180:96ed750bd169 | 3825 | * @param[in] pCoeffs points to the coefficient buffer. The array is of length numStages. |
| Anna Bridge |
180:96ed750bd169 | 3826 | * @param[in] pState points to the state buffer. The array is of length numStages. |
| Anna Bridge |
180:96ed750bd169 | 3827 | */ |
| Anna Bridge |
180:96ed750bd169 | 3828 | void arm_fir_lattice_init_f32( |
| Anna Bridge |
180:96ed750bd169 | 3829 | arm_fir_lattice_instance_f32 * S, |
| Anna Bridge |
180:96ed750bd169 | 3830 | uint16_t numStages, |
| Anna Bridge |
180:96ed750bd169 | 3831 | float32_t * pCoeffs, |
| Anna Bridge |
180:96ed750bd169 | 3832 | float32_t * pState); |
| Anna Bridge |
180:96ed750bd169 | 3833 | |
| Anna Bridge |
180:96ed750bd169 | 3834 | |
| Anna Bridge |
180:96ed750bd169 | 3835 | /** |
| Anna Bridge |
180:96ed750bd169 | 3836 | * @brief Processing function for the floating-point FIR lattice filter. |
| Anna Bridge |
180:96ed750bd169 | 3837 | * @param[in] S points to an instance of the floating-point FIR lattice structure. |
| Anna Bridge |
180:96ed750bd169 | 3838 | * @param[in] pSrc points to the block of input data. |
| Anna Bridge |
180:96ed750bd169 | 3839 | * @param[out] pDst points to the block of output data |
| Anna Bridge |
180:96ed750bd169 | 3840 | * @param[in] blockSize number of samples to process. |
| Anna Bridge |
180:96ed750bd169 | 3841 | */ |
| Anna Bridge |
180:96ed750bd169 | 3842 | void arm_fir_lattice_f32( |
| Anna Bridge |
180:96ed750bd169 | 3843 | const arm_fir_lattice_instance_f32 * S, |
| Anna Bridge |
180:96ed750bd169 | 3844 | float32_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 3845 | float32_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 3846 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 3847 | |
| Anna Bridge |
180:96ed750bd169 | 3848 | |
| Anna Bridge |
180:96ed750bd169 | 3849 | /** |
| Anna Bridge |
180:96ed750bd169 | 3850 | * @brief Instance structure for the Q15 IIR lattice filter. |
| Anna Bridge |
180:96ed750bd169 | 3851 | */ |
| Anna Bridge |
180:96ed750bd169 | 3852 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 3853 | { |
| Anna Bridge |
180:96ed750bd169 | 3854 | uint16_t numStages; /**< number of stages in the filter. */ |
| Anna Bridge |
180:96ed750bd169 | 3855 | q15_t *pState; /**< points to the state variable array. The array is of length numStages+blockSize. */ |
| Anna Bridge |
180:96ed750bd169 | 3856 | q15_t *pkCoeffs; /**< points to the reflection coefficient array. The array is of length numStages. */ |
| Anna Bridge |
180:96ed750bd169 | 3857 | q15_t *pvCoeffs; /**< points to the ladder coefficient array. The array is of length numStages+1. */ |
| Anna Bridge |
180:96ed750bd169 | 3858 | } arm_iir_lattice_instance_q15; |
| Anna Bridge |
180:96ed750bd169 | 3859 | |
| Anna Bridge |
180:96ed750bd169 | 3860 | /** |
| Anna Bridge |
180:96ed750bd169 | 3861 | * @brief Instance structure for the Q31 IIR lattice filter. |
| Anna Bridge |
180:96ed750bd169 | 3862 | */ |
| Anna Bridge |
180:96ed750bd169 | 3863 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 3864 | { |
| Anna Bridge |
180:96ed750bd169 | 3865 | uint16_t numStages; /**< number of stages in the filter. */ |
| Anna Bridge |
180:96ed750bd169 | 3866 | q31_t *pState; /**< points to the state variable array. The array is of length numStages+blockSize. */ |
| Anna Bridge |
180:96ed750bd169 | 3867 | q31_t *pkCoeffs; /**< points to the reflection coefficient array. The array is of length numStages. */ |
| Anna Bridge |
180:96ed750bd169 | 3868 | q31_t *pvCoeffs; /**< points to the ladder coefficient array. The array is of length numStages+1. */ |
| Anna Bridge |
180:96ed750bd169 | 3869 | } arm_iir_lattice_instance_q31; |
| Anna Bridge |
180:96ed750bd169 | 3870 | |
| Anna Bridge |
180:96ed750bd169 | 3871 | /** |
| Anna Bridge |
180:96ed750bd169 | 3872 | * @brief Instance structure for the floating-point IIR lattice filter. |
| Anna Bridge |
180:96ed750bd169 | 3873 | */ |
| Anna Bridge |
180:96ed750bd169 | 3874 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 3875 | { |
| Anna Bridge |
180:96ed750bd169 | 3876 | uint16_t numStages; /**< number of stages in the filter. */ |
| Anna Bridge |
180:96ed750bd169 | 3877 | float32_t *pState; /**< points to the state variable array. The array is of length numStages+blockSize. */ |
| Anna Bridge |
180:96ed750bd169 | 3878 | float32_t *pkCoeffs; /**< points to the reflection coefficient array. The array is of length numStages. */ |
| Anna Bridge |
180:96ed750bd169 | 3879 | float32_t *pvCoeffs; /**< points to the ladder coefficient array. The array is of length numStages+1. */ |
| Anna Bridge |
180:96ed750bd169 | 3880 | } arm_iir_lattice_instance_f32; |
| Anna Bridge |
180:96ed750bd169 | 3881 | |
| Anna Bridge |
180:96ed750bd169 | 3882 | |
| Anna Bridge |
180:96ed750bd169 | 3883 | /** |
| Anna Bridge |
180:96ed750bd169 | 3884 | * @brief Processing function for the floating-point IIR lattice filter. |
| Anna Bridge |
180:96ed750bd169 | 3885 | * @param[in] S points to an instance of the floating-point IIR lattice structure. |
| Anna Bridge |
180:96ed750bd169 | 3886 | * @param[in] pSrc points to the block of input data. |
| Anna Bridge |
180:96ed750bd169 | 3887 | * @param[out] pDst points to the block of output data. |
| Anna Bridge |
180:96ed750bd169 | 3888 | * @param[in] blockSize number of samples to process. |
| Anna Bridge |
180:96ed750bd169 | 3889 | */ |
| Anna Bridge |
180:96ed750bd169 | 3890 | void arm_iir_lattice_f32( |
| Anna Bridge |
180:96ed750bd169 | 3891 | const arm_iir_lattice_instance_f32 * S, |
| Anna Bridge |
180:96ed750bd169 | 3892 | float32_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 3893 | float32_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 3894 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 3895 | |
| Anna Bridge |
180:96ed750bd169 | 3896 | |
| Anna Bridge |
180:96ed750bd169 | 3897 | /** |
| Anna Bridge |
180:96ed750bd169 | 3898 | * @brief Initialization function for the floating-point IIR lattice filter. |
| Anna Bridge |
180:96ed750bd169 | 3899 | * @param[in] S points to an instance of the floating-point IIR lattice structure. |
| Anna Bridge |
180:96ed750bd169 | 3900 | * @param[in] numStages number of stages in the filter. |
| Anna Bridge |
180:96ed750bd169 | 3901 | * @param[in] pkCoeffs points to the reflection coefficient buffer. The array is of length numStages. |
| Anna Bridge |
180:96ed750bd169 | 3902 | * @param[in] pvCoeffs points to the ladder coefficient buffer. The array is of length numStages+1. |
| Anna Bridge |
180:96ed750bd169 | 3903 | * @param[in] pState points to the state buffer. The array is of length numStages+blockSize-1. |
| Anna Bridge |
180:96ed750bd169 | 3904 | * @param[in] blockSize number of samples to process. |
| Anna Bridge |
180:96ed750bd169 | 3905 | */ |
| Anna Bridge |
180:96ed750bd169 | 3906 | void arm_iir_lattice_init_f32( |
| Anna Bridge |
180:96ed750bd169 | 3907 | arm_iir_lattice_instance_f32 * S, |
| Anna Bridge |
180:96ed750bd169 | 3908 | uint16_t numStages, |
| Anna Bridge |
180:96ed750bd169 | 3909 | float32_t * pkCoeffs, |
| Anna Bridge |
180:96ed750bd169 | 3910 | float32_t * pvCoeffs, |
| Anna Bridge |
180:96ed750bd169 | 3911 | float32_t * pState, |
| Anna Bridge |
180:96ed750bd169 | 3912 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 3913 | |
| Anna Bridge |
180:96ed750bd169 | 3914 | |
| Anna Bridge |
180:96ed750bd169 | 3915 | /** |
| Anna Bridge |
180:96ed750bd169 | 3916 | * @brief Processing function for the Q31 IIR lattice filter. |
| Anna Bridge |
180:96ed750bd169 | 3917 | * @param[in] S points to an instance of the Q31 IIR lattice structure. |
| Anna Bridge |
180:96ed750bd169 | 3918 | * @param[in] pSrc points to the block of input data. |
| Anna Bridge |
180:96ed750bd169 | 3919 | * @param[out] pDst points to the block of output data. |
| Anna Bridge |
180:96ed750bd169 | 3920 | * @param[in] blockSize number of samples to process. |
| Anna Bridge |
180:96ed750bd169 | 3921 | */ |
| Anna Bridge |
180:96ed750bd169 | 3922 | void arm_iir_lattice_q31( |
| Anna Bridge |
180:96ed750bd169 | 3923 | const arm_iir_lattice_instance_q31 * S, |
| Anna Bridge |
180:96ed750bd169 | 3924 | q31_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 3925 | q31_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 3926 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 3927 | |
| Anna Bridge |
180:96ed750bd169 | 3928 | |
| Anna Bridge |
180:96ed750bd169 | 3929 | /** |
| Anna Bridge |
180:96ed750bd169 | 3930 | * @brief Initialization function for the Q31 IIR lattice filter. |
| Anna Bridge |
180:96ed750bd169 | 3931 | * @param[in] S points to an instance of the Q31 IIR lattice structure. |
| Anna Bridge |
180:96ed750bd169 | 3932 | * @param[in] numStages number of stages in the filter. |
| Anna Bridge |
180:96ed750bd169 | 3933 | * @param[in] pkCoeffs points to the reflection coefficient buffer. The array is of length numStages. |
| Anna Bridge |
180:96ed750bd169 | 3934 | * @param[in] pvCoeffs points to the ladder coefficient buffer. The array is of length numStages+1. |
| Anna Bridge |
180:96ed750bd169 | 3935 | * @param[in] pState points to the state buffer. The array is of length numStages+blockSize. |
| Anna Bridge |
180:96ed750bd169 | 3936 | * @param[in] blockSize number of samples to process. |
| Anna Bridge |
180:96ed750bd169 | 3937 | */ |
| Anna Bridge |
180:96ed750bd169 | 3938 | void arm_iir_lattice_init_q31( |
| Anna Bridge |
180:96ed750bd169 | 3939 | arm_iir_lattice_instance_q31 * S, |
| Anna Bridge |
180:96ed750bd169 | 3940 | uint16_t numStages, |
| Anna Bridge |
180:96ed750bd169 | 3941 | q31_t * pkCoeffs, |
| Anna Bridge |
180:96ed750bd169 | 3942 | q31_t * pvCoeffs, |
| Anna Bridge |
180:96ed750bd169 | 3943 | q31_t * pState, |
| Anna Bridge |
180:96ed750bd169 | 3944 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 3945 | |
| Anna Bridge |
180:96ed750bd169 | 3946 | |
| Anna Bridge |
180:96ed750bd169 | 3947 | /** |
| Anna Bridge |
180:96ed750bd169 | 3948 | * @brief Processing function for the Q15 IIR lattice filter. |
| Anna Bridge |
180:96ed750bd169 | 3949 | * @param[in] S points to an instance of the Q15 IIR lattice structure. |
| Anna Bridge |
180:96ed750bd169 | 3950 | * @param[in] pSrc points to the block of input data. |
| Anna Bridge |
180:96ed750bd169 | 3951 | * @param[out] pDst points to the block of output data. |
| Anna Bridge |
180:96ed750bd169 | 3952 | * @param[in] blockSize number of samples to process. |
| Anna Bridge |
180:96ed750bd169 | 3953 | */ |
| Anna Bridge |
180:96ed750bd169 | 3954 | void arm_iir_lattice_q15( |
| Anna Bridge |
180:96ed750bd169 | 3955 | const arm_iir_lattice_instance_q15 * S, |
| Anna Bridge |
180:96ed750bd169 | 3956 | q15_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 3957 | q15_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 3958 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 3959 | |
| Anna Bridge |
180:96ed750bd169 | 3960 | |
| Anna Bridge |
180:96ed750bd169 | 3961 | /** |
| Anna Bridge |
180:96ed750bd169 | 3962 | * @brief Initialization function for the Q15 IIR lattice filter. |
| Anna Bridge |
180:96ed750bd169 | 3963 | * @param[in] S points to an instance of the fixed-point Q15 IIR lattice structure. |
| Anna Bridge |
180:96ed750bd169 | 3964 | * @param[in] numStages number of stages in the filter. |
| Anna Bridge |
180:96ed750bd169 | 3965 | * @param[in] pkCoeffs points to reflection coefficient buffer. The array is of length numStages. |
| Anna Bridge |
180:96ed750bd169 | 3966 | * @param[in] pvCoeffs points to ladder coefficient buffer. The array is of length numStages+1. |
| Anna Bridge |
180:96ed750bd169 | 3967 | * @param[in] pState points to state buffer. The array is of length numStages+blockSize. |
| Anna Bridge |
180:96ed750bd169 | 3968 | * @param[in] blockSize number of samples to process per call. |
| Anna Bridge |
180:96ed750bd169 | 3969 | */ |
| Anna Bridge |
180:96ed750bd169 | 3970 | void arm_iir_lattice_init_q15( |
| Anna Bridge |
180:96ed750bd169 | 3971 | arm_iir_lattice_instance_q15 * S, |
| Anna Bridge |
180:96ed750bd169 | 3972 | uint16_t numStages, |
| Anna Bridge |
180:96ed750bd169 | 3973 | q15_t * pkCoeffs, |
| Anna Bridge |
180:96ed750bd169 | 3974 | q15_t * pvCoeffs, |
| Anna Bridge |
180:96ed750bd169 | 3975 | q15_t * pState, |
| Anna Bridge |
180:96ed750bd169 | 3976 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 3977 | |
| Anna Bridge |
180:96ed750bd169 | 3978 | |
| Anna Bridge |
180:96ed750bd169 | 3979 | /** |
| Anna Bridge |
180:96ed750bd169 | 3980 | * @brief Instance structure for the floating-point LMS filter. |
| Anna Bridge |
180:96ed750bd169 | 3981 | */ |
| Anna Bridge |
180:96ed750bd169 | 3982 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 3983 | { |
| Anna Bridge |
180:96ed750bd169 | 3984 | uint16_t numTaps; /**< number of coefficients in the filter. */ |
| Anna Bridge |
180:96ed750bd169 | 3985 | float32_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ |
| Anna Bridge |
180:96ed750bd169 | 3986 | float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ |
| Anna Bridge |
180:96ed750bd169 | 3987 | float32_t mu; /**< step size that controls filter coefficient updates. */ |
| Anna Bridge |
180:96ed750bd169 | 3988 | } arm_lms_instance_f32; |
| Anna Bridge |
180:96ed750bd169 | 3989 | |
| Anna Bridge |
180:96ed750bd169 | 3990 | |
| Anna Bridge |
180:96ed750bd169 | 3991 | /** |
| Anna Bridge |
180:96ed750bd169 | 3992 | * @brief Processing function for floating-point LMS filter. |
| Anna Bridge |
180:96ed750bd169 | 3993 | * @param[in] S points to an instance of the floating-point LMS filter structure. |
| Anna Bridge |
180:96ed750bd169 | 3994 | * @param[in] pSrc points to the block of input data. |
| Anna Bridge |
180:96ed750bd169 | 3995 | * @param[in] pRef points to the block of reference data. |
| Anna Bridge |
180:96ed750bd169 | 3996 | * @param[out] pOut points to the block of output data. |
| Anna Bridge |
180:96ed750bd169 | 3997 | * @param[out] pErr points to the block of error data. |
| Anna Bridge |
180:96ed750bd169 | 3998 | * @param[in] blockSize number of samples to process. |
| Anna Bridge |
180:96ed750bd169 | 3999 | */ |
| Anna Bridge |
180:96ed750bd169 | 4000 | void arm_lms_f32( |
| Anna Bridge |
180:96ed750bd169 | 4001 | const arm_lms_instance_f32 * S, |
| Anna Bridge |
180:96ed750bd169 | 4002 | float32_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 4003 | float32_t * pRef, |
| Anna Bridge |
180:96ed750bd169 | 4004 | float32_t * pOut, |
| Anna Bridge |
180:96ed750bd169 | 4005 | float32_t * pErr, |
| Anna Bridge |
180:96ed750bd169 | 4006 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 4007 | |
| Anna Bridge |
180:96ed750bd169 | 4008 | |
| Anna Bridge |
180:96ed750bd169 | 4009 | /** |
| Anna Bridge |
180:96ed750bd169 | 4010 | * @brief Initialization function for floating-point LMS filter. |
| Anna Bridge |
180:96ed750bd169 | 4011 | * @param[in] S points to an instance of the floating-point LMS filter structure. |
| Anna Bridge |
180:96ed750bd169 | 4012 | * @param[in] numTaps number of filter coefficients. |
| Anna Bridge |
180:96ed750bd169 | 4013 | * @param[in] pCoeffs points to the coefficient buffer. |
| Anna Bridge |
180:96ed750bd169 | 4014 | * @param[in] pState points to state buffer. |
| Anna Bridge |
180:96ed750bd169 | 4015 | * @param[in] mu step size that controls filter coefficient updates. |
| Anna Bridge |
180:96ed750bd169 | 4016 | * @param[in] blockSize number of samples to process. |
| Anna Bridge |
180:96ed750bd169 | 4017 | */ |
| Anna Bridge |
180:96ed750bd169 | 4018 | void arm_lms_init_f32( |
| Anna Bridge |
180:96ed750bd169 | 4019 | arm_lms_instance_f32 * S, |
| Anna Bridge |
180:96ed750bd169 | 4020 | uint16_t numTaps, |
| Anna Bridge |
180:96ed750bd169 | 4021 | float32_t * pCoeffs, |
| Anna Bridge |
180:96ed750bd169 | 4022 | float32_t * pState, |
| Anna Bridge |
180:96ed750bd169 | 4023 | float32_t mu, |
| Anna Bridge |
180:96ed750bd169 | 4024 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 4025 | |
| Anna Bridge |
180:96ed750bd169 | 4026 | |
| Anna Bridge |
180:96ed750bd169 | 4027 | /** |
| Anna Bridge |
180:96ed750bd169 | 4028 | * @brief Instance structure for the Q15 LMS filter. |
| Anna Bridge |
180:96ed750bd169 | 4029 | */ |
| Anna Bridge |
180:96ed750bd169 | 4030 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 4031 | { |
| Anna Bridge |
180:96ed750bd169 | 4032 | uint16_t numTaps; /**< number of coefficients in the filter. */ |
| Anna Bridge |
180:96ed750bd169 | 4033 | q15_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ |
| Anna Bridge |
180:96ed750bd169 | 4034 | q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ |
| Anna Bridge |
180:96ed750bd169 | 4035 | q15_t mu; /**< step size that controls filter coefficient updates. */ |
| Anna Bridge |
180:96ed750bd169 | 4036 | uint32_t postShift; /**< bit shift applied to coefficients. */ |
| Anna Bridge |
180:96ed750bd169 | 4037 | } arm_lms_instance_q15; |
| Anna Bridge |
180:96ed750bd169 | 4038 | |
| Anna Bridge |
180:96ed750bd169 | 4039 | |
| Anna Bridge |
180:96ed750bd169 | 4040 | /** |
| Anna Bridge |
180:96ed750bd169 | 4041 | * @brief Initialization function for the Q15 LMS filter. |
| Anna Bridge |
180:96ed750bd169 | 4042 | * @param[in] S points to an instance of the Q15 LMS filter structure. |
| Anna Bridge |
180:96ed750bd169 | 4043 | * @param[in] numTaps number of filter coefficients. |
| Anna Bridge |
180:96ed750bd169 | 4044 | * @param[in] pCoeffs points to the coefficient buffer. |
| Anna Bridge |
180:96ed750bd169 | 4045 | * @param[in] pState points to the state buffer. |
| Anna Bridge |
180:96ed750bd169 | 4046 | * @param[in] mu step size that controls filter coefficient updates. |
| Anna Bridge |
180:96ed750bd169 | 4047 | * @param[in] blockSize number of samples to process. |
| Anna Bridge |
180:96ed750bd169 | 4048 | * @param[in] postShift bit shift applied to coefficients. |
| Anna Bridge |
180:96ed750bd169 | 4049 | */ |
| Anna Bridge |
180:96ed750bd169 | 4050 | void arm_lms_init_q15( |
| Anna Bridge |
180:96ed750bd169 | 4051 | arm_lms_instance_q15 * S, |
| Anna Bridge |
180:96ed750bd169 | 4052 | uint16_t numTaps, |
| Anna Bridge |
180:96ed750bd169 | 4053 | q15_t * pCoeffs, |
| Anna Bridge |
180:96ed750bd169 | 4054 | q15_t * pState, |
| Anna Bridge |
180:96ed750bd169 | 4055 | q15_t mu, |
| Anna Bridge |
180:96ed750bd169 | 4056 | uint32_t blockSize, |
| Anna Bridge |
180:96ed750bd169 | 4057 | uint32_t postShift); |
| Anna Bridge |
180:96ed750bd169 | 4058 | |
| Anna Bridge |
180:96ed750bd169 | 4059 | |
| Anna Bridge |
180:96ed750bd169 | 4060 | /** |
| Anna Bridge |
180:96ed750bd169 | 4061 | * @brief Processing function for Q15 LMS filter. |
| Anna Bridge |
180:96ed750bd169 | 4062 | * @param[in] S points to an instance of the Q15 LMS filter structure. |
| Anna Bridge |
180:96ed750bd169 | 4063 | * @param[in] pSrc points to the block of input data. |
| Anna Bridge |
180:96ed750bd169 | 4064 | * @param[in] pRef points to the block of reference data. |
| Anna Bridge |
180:96ed750bd169 | 4065 | * @param[out] pOut points to the block of output data. |
| Anna Bridge |
180:96ed750bd169 | 4066 | * @param[out] pErr points to the block of error data. |
| Anna Bridge |
180:96ed750bd169 | 4067 | * @param[in] blockSize number of samples to process. |
| Anna Bridge |
180:96ed750bd169 | 4068 | */ |
| Anna Bridge |
180:96ed750bd169 | 4069 | void arm_lms_q15( |
| Anna Bridge |
180:96ed750bd169 | 4070 | const arm_lms_instance_q15 * S, |
| Anna Bridge |
180:96ed750bd169 | 4071 | q15_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 4072 | q15_t * pRef, |
| Anna Bridge |
180:96ed750bd169 | 4073 | q15_t * pOut, |
| Anna Bridge |
180:96ed750bd169 | 4074 | q15_t * pErr, |
| Anna Bridge |
180:96ed750bd169 | 4075 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 4076 | |
| Anna Bridge |
180:96ed750bd169 | 4077 | |
| Anna Bridge |
180:96ed750bd169 | 4078 | /** |
| Anna Bridge |
180:96ed750bd169 | 4079 | * @brief Instance structure for the Q31 LMS filter. |
| Anna Bridge |
180:96ed750bd169 | 4080 | */ |
| Anna Bridge |
180:96ed750bd169 | 4081 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 4082 | { |
| Anna Bridge |
180:96ed750bd169 | 4083 | uint16_t numTaps; /**< number of coefficients in the filter. */ |
| Anna Bridge |
180:96ed750bd169 | 4084 | q31_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ |
| Anna Bridge |
180:96ed750bd169 | 4085 | q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ |
| Anna Bridge |
180:96ed750bd169 | 4086 | q31_t mu; /**< step size that controls filter coefficient updates. */ |
| Anna Bridge |
180:96ed750bd169 | 4087 | uint32_t postShift; /**< bit shift applied to coefficients. */ |
| Anna Bridge |
180:96ed750bd169 | 4088 | } arm_lms_instance_q31; |
| Anna Bridge |
180:96ed750bd169 | 4089 | |
| Anna Bridge |
180:96ed750bd169 | 4090 | |
| Anna Bridge |
180:96ed750bd169 | 4091 | /** |
| Anna Bridge |
180:96ed750bd169 | 4092 | * @brief Processing function for Q31 LMS filter. |
| Anna Bridge |
180:96ed750bd169 | 4093 | * @param[in] S points to an instance of the Q15 LMS filter structure. |
| Anna Bridge |
180:96ed750bd169 | 4094 | * @param[in] pSrc points to the block of input data. |
| Anna Bridge |
180:96ed750bd169 | 4095 | * @param[in] pRef points to the block of reference data. |
| Anna Bridge |
180:96ed750bd169 | 4096 | * @param[out] pOut points to the block of output data. |
| Anna Bridge |
180:96ed750bd169 | 4097 | * @param[out] pErr points to the block of error data. |
| Anna Bridge |
180:96ed750bd169 | 4098 | * @param[in] blockSize number of samples to process. |
| Anna Bridge |
180:96ed750bd169 | 4099 | */ |
| Anna Bridge |
180:96ed750bd169 | 4100 | void arm_lms_q31( |
| Anna Bridge |
180:96ed750bd169 | 4101 | const arm_lms_instance_q31 * S, |
| Anna Bridge |
180:96ed750bd169 | 4102 | q31_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 4103 | q31_t * pRef, |
| Anna Bridge |
180:96ed750bd169 | 4104 | q31_t * pOut, |
| Anna Bridge |
180:96ed750bd169 | 4105 | q31_t * pErr, |
| Anna Bridge |
180:96ed750bd169 | 4106 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 4107 | |
| Anna Bridge |
180:96ed750bd169 | 4108 | |
| Anna Bridge |
180:96ed750bd169 | 4109 | /** |
| Anna Bridge |
180:96ed750bd169 | 4110 | * @brief Initialization function for Q31 LMS filter. |
| Anna Bridge |
180:96ed750bd169 | 4111 | * @param[in] S points to an instance of the Q31 LMS filter structure. |
| Anna Bridge |
180:96ed750bd169 | 4112 | * @param[in] numTaps number of filter coefficients. |
| Anna Bridge |
180:96ed750bd169 | 4113 | * @param[in] pCoeffs points to coefficient buffer. |
| Anna Bridge |
180:96ed750bd169 | 4114 | * @param[in] pState points to state buffer. |
| Anna Bridge |
180:96ed750bd169 | 4115 | * @param[in] mu step size that controls filter coefficient updates. |
| Anna Bridge |
180:96ed750bd169 | 4116 | * @param[in] blockSize number of samples to process. |
| Anna Bridge |
180:96ed750bd169 | 4117 | * @param[in] postShift bit shift applied to coefficients. |
| Anna Bridge |
180:96ed750bd169 | 4118 | */ |
| Anna Bridge |
180:96ed750bd169 | 4119 | void arm_lms_init_q31( |
| Anna Bridge |
180:96ed750bd169 | 4120 | arm_lms_instance_q31 * S, |
| Anna Bridge |
180:96ed750bd169 | 4121 | uint16_t numTaps, |
| Anna Bridge |
180:96ed750bd169 | 4122 | q31_t * pCoeffs, |
| Anna Bridge |
180:96ed750bd169 | 4123 | q31_t * pState, |
| Anna Bridge |
180:96ed750bd169 | 4124 | q31_t mu, |
| Anna Bridge |
180:96ed750bd169 | 4125 | uint32_t blockSize, |
| Anna Bridge |
180:96ed750bd169 | 4126 | uint32_t postShift); |
| Anna Bridge |
180:96ed750bd169 | 4127 | |
| Anna Bridge |
180:96ed750bd169 | 4128 | |
| Anna Bridge |
180:96ed750bd169 | 4129 | /** |
| Anna Bridge |
180:96ed750bd169 | 4130 | * @brief Instance structure for the floating-point normalized LMS filter. |
| Anna Bridge |
180:96ed750bd169 | 4131 | */ |
| Anna Bridge |
180:96ed750bd169 | 4132 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 4133 | { |
| Anna Bridge |
180:96ed750bd169 | 4134 | uint16_t numTaps; /**< number of coefficients in the filter. */ |
| Anna Bridge |
180:96ed750bd169 | 4135 | float32_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ |
| Anna Bridge |
180:96ed750bd169 | 4136 | float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ |
| Anna Bridge |
180:96ed750bd169 | 4137 | float32_t mu; /**< step size that control filter coefficient updates. */ |
| Anna Bridge |
180:96ed750bd169 | 4138 | float32_t energy; /**< saves previous frame energy. */ |
| Anna Bridge |
180:96ed750bd169 | 4139 | float32_t x0; /**< saves previous input sample. */ |
| Anna Bridge |
180:96ed750bd169 | 4140 | } arm_lms_norm_instance_f32; |
| Anna Bridge |
180:96ed750bd169 | 4141 | |
| Anna Bridge |
180:96ed750bd169 | 4142 | |
| Anna Bridge |
180:96ed750bd169 | 4143 | /** |
| Anna Bridge |
180:96ed750bd169 | 4144 | * @brief Processing function for floating-point normalized LMS filter. |
| Anna Bridge |
180:96ed750bd169 | 4145 | * @param[in] S points to an instance of the floating-point normalized LMS filter structure. |
| Anna Bridge |
180:96ed750bd169 | 4146 | * @param[in] pSrc points to the block of input data. |
| Anna Bridge |
180:96ed750bd169 | 4147 | * @param[in] pRef points to the block of reference data. |
| Anna Bridge |
180:96ed750bd169 | 4148 | * @param[out] pOut points to the block of output data. |
| Anna Bridge |
180:96ed750bd169 | 4149 | * @param[out] pErr points to the block of error data. |
| Anna Bridge |
180:96ed750bd169 | 4150 | * @param[in] blockSize number of samples to process. |
| Anna Bridge |
180:96ed750bd169 | 4151 | */ |
| Anna Bridge |
180:96ed750bd169 | 4152 | void arm_lms_norm_f32( |
| Anna Bridge |
180:96ed750bd169 | 4153 | arm_lms_norm_instance_f32 * S, |
| Anna Bridge |
180:96ed750bd169 | 4154 | float32_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 4155 | float32_t * pRef, |
| Anna Bridge |
180:96ed750bd169 | 4156 | float32_t * pOut, |
| Anna Bridge |
180:96ed750bd169 | 4157 | float32_t * pErr, |
| Anna Bridge |
180:96ed750bd169 | 4158 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 4159 | |
| Anna Bridge |
180:96ed750bd169 | 4160 | |
| Anna Bridge |
180:96ed750bd169 | 4161 | /** |
| Anna Bridge |
180:96ed750bd169 | 4162 | * @brief Initialization function for floating-point normalized LMS filter. |
| Anna Bridge |
180:96ed750bd169 | 4163 | * @param[in] S points to an instance of the floating-point LMS filter structure. |
| Anna Bridge |
180:96ed750bd169 | 4164 | * @param[in] numTaps number of filter coefficients. |
| Anna Bridge |
180:96ed750bd169 | 4165 | * @param[in] pCoeffs points to coefficient buffer. |
| Anna Bridge |
180:96ed750bd169 | 4166 | * @param[in] pState points to state buffer. |
| Anna Bridge |
180:96ed750bd169 | 4167 | * @param[in] mu step size that controls filter coefficient updates. |
| Anna Bridge |
180:96ed750bd169 | 4168 | * @param[in] blockSize number of samples to process. |
| Anna Bridge |
180:96ed750bd169 | 4169 | */ |
| Anna Bridge |
180:96ed750bd169 | 4170 | void arm_lms_norm_init_f32( |
| Anna Bridge |
180:96ed750bd169 | 4171 | arm_lms_norm_instance_f32 * S, |
| Anna Bridge |
180:96ed750bd169 | 4172 | uint16_t numTaps, |
| Anna Bridge |
180:96ed750bd169 | 4173 | float32_t * pCoeffs, |
| Anna Bridge |
180:96ed750bd169 | 4174 | float32_t * pState, |
| Anna Bridge |
180:96ed750bd169 | 4175 | float32_t mu, |
| Anna Bridge |
180:96ed750bd169 | 4176 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 4177 | |
| Anna Bridge |
180:96ed750bd169 | 4178 | |
| Anna Bridge |
180:96ed750bd169 | 4179 | /** |
| Anna Bridge |
180:96ed750bd169 | 4180 | * @brief Instance structure for the Q31 normalized LMS filter. |
| Anna Bridge |
180:96ed750bd169 | 4181 | */ |
| Anna Bridge |
180:96ed750bd169 | 4182 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 4183 | { |
| Anna Bridge |
180:96ed750bd169 | 4184 | uint16_t numTaps; /**< number of coefficients in the filter. */ |
| Anna Bridge |
180:96ed750bd169 | 4185 | q31_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ |
| Anna Bridge |
180:96ed750bd169 | 4186 | q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ |
| Anna Bridge |
180:96ed750bd169 | 4187 | q31_t mu; /**< step size that controls filter coefficient updates. */ |
| Anna Bridge |
180:96ed750bd169 | 4188 | uint8_t postShift; /**< bit shift applied to coefficients. */ |
| Anna Bridge |
180:96ed750bd169 | 4189 | q31_t *recipTable; /**< points to the reciprocal initial value table. */ |
| Anna Bridge |
180:96ed750bd169 | 4190 | q31_t energy; /**< saves previous frame energy. */ |
| Anna Bridge |
180:96ed750bd169 | 4191 | q31_t x0; /**< saves previous input sample. */ |
| Anna Bridge |
180:96ed750bd169 | 4192 | } arm_lms_norm_instance_q31; |
| Anna Bridge |
180:96ed750bd169 | 4193 | |
| Anna Bridge |
180:96ed750bd169 | 4194 | |
| Anna Bridge |
180:96ed750bd169 | 4195 | /** |
| Anna Bridge |
180:96ed750bd169 | 4196 | * @brief Processing function for Q31 normalized LMS filter. |
| Anna Bridge |
180:96ed750bd169 | 4197 | * @param[in] S points to an instance of the Q31 normalized LMS filter structure. |
| Anna Bridge |
180:96ed750bd169 | 4198 | * @param[in] pSrc points to the block of input data. |
| Anna Bridge |
180:96ed750bd169 | 4199 | * @param[in] pRef points to the block of reference data. |
| Anna Bridge |
180:96ed750bd169 | 4200 | * @param[out] pOut points to the block of output data. |
| Anna Bridge |
180:96ed750bd169 | 4201 | * @param[out] pErr points to the block of error data. |
| Anna Bridge |
180:96ed750bd169 | 4202 | * @param[in] blockSize number of samples to process. |
| Anna Bridge |
180:96ed750bd169 | 4203 | */ |
| Anna Bridge |
180:96ed750bd169 | 4204 | void arm_lms_norm_q31( |
| Anna Bridge |
180:96ed750bd169 | 4205 | arm_lms_norm_instance_q31 * S, |
| Anna Bridge |
180:96ed750bd169 | 4206 | q31_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 4207 | q31_t * pRef, |
| Anna Bridge |
180:96ed750bd169 | 4208 | q31_t * pOut, |
| Anna Bridge |
180:96ed750bd169 | 4209 | q31_t * pErr, |
| Anna Bridge |
180:96ed750bd169 | 4210 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 4211 | |
| Anna Bridge |
180:96ed750bd169 | 4212 | |
| Anna Bridge |
180:96ed750bd169 | 4213 | /** |
| Anna Bridge |
180:96ed750bd169 | 4214 | * @brief Initialization function for Q31 normalized LMS filter. |
| Anna Bridge |
180:96ed750bd169 | 4215 | * @param[in] S points to an instance of the Q31 normalized LMS filter structure. |
| Anna Bridge |
180:96ed750bd169 | 4216 | * @param[in] numTaps number of filter coefficients. |
| Anna Bridge |
180:96ed750bd169 | 4217 | * @param[in] pCoeffs points to coefficient buffer. |
| Anna Bridge |
180:96ed750bd169 | 4218 | * @param[in] pState points to state buffer. |
| Anna Bridge |
180:96ed750bd169 | 4219 | * @param[in] mu step size that controls filter coefficient updates. |
| Anna Bridge |
180:96ed750bd169 | 4220 | * @param[in] blockSize number of samples to process. |
| Anna Bridge |
180:96ed750bd169 | 4221 | * @param[in] postShift bit shift applied to coefficients. |
| Anna Bridge |
180:96ed750bd169 | 4222 | */ |
| Anna Bridge |
180:96ed750bd169 | 4223 | void arm_lms_norm_init_q31( |
| Anna Bridge |
180:96ed750bd169 | 4224 | arm_lms_norm_instance_q31 * S, |
| Anna Bridge |
180:96ed750bd169 | 4225 | uint16_t numTaps, |
| Anna Bridge |
180:96ed750bd169 | 4226 | q31_t * pCoeffs, |
| Anna Bridge |
180:96ed750bd169 | 4227 | q31_t * pState, |
| Anna Bridge |
180:96ed750bd169 | 4228 | q31_t mu, |
| Anna Bridge |
180:96ed750bd169 | 4229 | uint32_t blockSize, |
| Anna Bridge |
180:96ed750bd169 | 4230 | uint8_t postShift); |
| Anna Bridge |
180:96ed750bd169 | 4231 | |
| Anna Bridge |
180:96ed750bd169 | 4232 | |
| Anna Bridge |
180:96ed750bd169 | 4233 | /** |
| Anna Bridge |
180:96ed750bd169 | 4234 | * @brief Instance structure for the Q15 normalized LMS filter. |
| Anna Bridge |
180:96ed750bd169 | 4235 | */ |
| Anna Bridge |
180:96ed750bd169 | 4236 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 4237 | { |
| Anna Bridge |
180:96ed750bd169 | 4238 | uint16_t numTaps; /**< Number of coefficients in the filter. */ |
| Anna Bridge |
180:96ed750bd169 | 4239 | q15_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ |
| Anna Bridge |
180:96ed750bd169 | 4240 | q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ |
| Anna Bridge |
180:96ed750bd169 | 4241 | q15_t mu; /**< step size that controls filter coefficient updates. */ |
| Anna Bridge |
180:96ed750bd169 | 4242 | uint8_t postShift; /**< bit shift applied to coefficients. */ |
| Anna Bridge |
180:96ed750bd169 | 4243 | q15_t *recipTable; /**< Points to the reciprocal initial value table. */ |
| Anna Bridge |
180:96ed750bd169 | 4244 | q15_t energy; /**< saves previous frame energy. */ |
| Anna Bridge |
180:96ed750bd169 | 4245 | q15_t x0; /**< saves previous input sample. */ |
| Anna Bridge |
180:96ed750bd169 | 4246 | } arm_lms_norm_instance_q15; |
| Anna Bridge |
180:96ed750bd169 | 4247 | |
| Anna Bridge |
180:96ed750bd169 | 4248 | |
| Anna Bridge |
180:96ed750bd169 | 4249 | /** |
| Anna Bridge |
180:96ed750bd169 | 4250 | * @brief Processing function for Q15 normalized LMS filter. |
| Anna Bridge |
180:96ed750bd169 | 4251 | * @param[in] S points to an instance of the Q15 normalized LMS filter structure. |
| Anna Bridge |
180:96ed750bd169 | 4252 | * @param[in] pSrc points to the block of input data. |
| Anna Bridge |
180:96ed750bd169 | 4253 | * @param[in] pRef points to the block of reference data. |
| Anna Bridge |
180:96ed750bd169 | 4254 | * @param[out] pOut points to the block of output data. |
| Anna Bridge |
180:96ed750bd169 | 4255 | * @param[out] pErr points to the block of error data. |
| Anna Bridge |
180:96ed750bd169 | 4256 | * @param[in] blockSize number of samples to process. |
| Anna Bridge |
180:96ed750bd169 | 4257 | */ |
| Anna Bridge |
180:96ed750bd169 | 4258 | void arm_lms_norm_q15( |
| Anna Bridge |
180:96ed750bd169 | 4259 | arm_lms_norm_instance_q15 * S, |
| Anna Bridge |
180:96ed750bd169 | 4260 | q15_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 4261 | q15_t * pRef, |
| Anna Bridge |
180:96ed750bd169 | 4262 | q15_t * pOut, |
| Anna Bridge |
180:96ed750bd169 | 4263 | q15_t * pErr, |
| Anna Bridge |
180:96ed750bd169 | 4264 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 4265 | |
| Anna Bridge |
180:96ed750bd169 | 4266 | |
| Anna Bridge |
180:96ed750bd169 | 4267 | /** |
| Anna Bridge |
180:96ed750bd169 | 4268 | * @brief Initialization function for Q15 normalized LMS filter. |
| Anna Bridge |
180:96ed750bd169 | 4269 | * @param[in] S points to an instance of the Q15 normalized LMS filter structure. |
| Anna Bridge |
180:96ed750bd169 | 4270 | * @param[in] numTaps number of filter coefficients. |
| Anna Bridge |
180:96ed750bd169 | 4271 | * @param[in] pCoeffs points to coefficient buffer. |
| Anna Bridge |
180:96ed750bd169 | 4272 | * @param[in] pState points to state buffer. |
| Anna Bridge |
180:96ed750bd169 | 4273 | * @param[in] mu step size that controls filter coefficient updates. |
| Anna Bridge |
180:96ed750bd169 | 4274 | * @param[in] blockSize number of samples to process. |
| Anna Bridge |
180:96ed750bd169 | 4275 | * @param[in] postShift bit shift applied to coefficients. |
| Anna Bridge |
180:96ed750bd169 | 4276 | */ |
| Anna Bridge |
180:96ed750bd169 | 4277 | void arm_lms_norm_init_q15( |
| Anna Bridge |
180:96ed750bd169 | 4278 | arm_lms_norm_instance_q15 * S, |
| Anna Bridge |
180:96ed750bd169 | 4279 | uint16_t numTaps, |
| Anna Bridge |
180:96ed750bd169 | 4280 | q15_t * pCoeffs, |
| Anna Bridge |
180:96ed750bd169 | 4281 | q15_t * pState, |
| Anna Bridge |
180:96ed750bd169 | 4282 | q15_t mu, |
| Anna Bridge |
180:96ed750bd169 | 4283 | uint32_t blockSize, |
| Anna Bridge |
180:96ed750bd169 | 4284 | uint8_t postShift); |
| Anna Bridge |
180:96ed750bd169 | 4285 | |
| Anna Bridge |
180:96ed750bd169 | 4286 | |
| Anna Bridge |
180:96ed750bd169 | 4287 | /** |
| Anna Bridge |
180:96ed750bd169 | 4288 | * @brief Correlation of floating-point sequences. |
| Anna Bridge |
180:96ed750bd169 | 4289 | * @param[in] pSrcA points to the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 4290 | * @param[in] srcALen length of the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 4291 | * @param[in] pSrcB points to the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 4292 | * @param[in] srcBLen length of the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 4293 | * @param[out] pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. |
| Anna Bridge |
180:96ed750bd169 | 4294 | */ |
| Anna Bridge |
180:96ed750bd169 | 4295 | void arm_correlate_f32( |
| Anna Bridge |
180:96ed750bd169 | 4296 | float32_t * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 4297 | uint32_t srcALen, |
| Anna Bridge |
180:96ed750bd169 | 4298 | float32_t * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 4299 | uint32_t srcBLen, |
| Anna Bridge |
180:96ed750bd169 | 4300 | float32_t * pDst); |
| Anna Bridge |
180:96ed750bd169 | 4301 | |
| Anna Bridge |
180:96ed750bd169 | 4302 | |
| Anna Bridge |
180:96ed750bd169 | 4303 | /** |
| Anna Bridge |
180:96ed750bd169 | 4304 | * @brief Correlation of Q15 sequences |
| Anna Bridge |
180:96ed750bd169 | 4305 | * @param[in] pSrcA points to the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 4306 | * @param[in] srcALen length of the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 4307 | * @param[in] pSrcB points to the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 4308 | * @param[in] srcBLen length of the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 4309 | * @param[out] pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. |
| Anna Bridge |
180:96ed750bd169 | 4310 | * @param[in] pScratch points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. |
| Anna Bridge |
180:96ed750bd169 | 4311 | */ |
| Anna Bridge |
180:96ed750bd169 | 4312 | void arm_correlate_opt_q15( |
| Anna Bridge |
180:96ed750bd169 | 4313 | q15_t * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 4314 | uint32_t srcALen, |
| Anna Bridge |
180:96ed750bd169 | 4315 | q15_t * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 4316 | uint32_t srcBLen, |
| Anna Bridge |
180:96ed750bd169 | 4317 | q15_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 4318 | q15_t * pScratch); |
| Anna Bridge |
180:96ed750bd169 | 4319 | |
| Anna Bridge |
180:96ed750bd169 | 4320 | |
| Anna Bridge |
180:96ed750bd169 | 4321 | /** |
| Anna Bridge |
180:96ed750bd169 | 4322 | * @brief Correlation of Q15 sequences. |
| Anna Bridge |
180:96ed750bd169 | 4323 | * @param[in] pSrcA points to the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 4324 | * @param[in] srcALen length of the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 4325 | * @param[in] pSrcB points to the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 4326 | * @param[in] srcBLen length of the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 4327 | * @param[out] pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. |
| Anna Bridge |
180:96ed750bd169 | 4328 | */ |
| Anna Bridge |
180:96ed750bd169 | 4329 | |
| Anna Bridge |
180:96ed750bd169 | 4330 | void arm_correlate_q15( |
| Anna Bridge |
180:96ed750bd169 | 4331 | q15_t * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 4332 | uint32_t srcALen, |
| Anna Bridge |
180:96ed750bd169 | 4333 | q15_t * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 4334 | uint32_t srcBLen, |
| Anna Bridge |
180:96ed750bd169 | 4335 | q15_t * pDst); |
| Anna Bridge |
180:96ed750bd169 | 4336 | |
| Anna Bridge |
180:96ed750bd169 | 4337 | |
| Anna Bridge |
180:96ed750bd169 | 4338 | /** |
| Anna Bridge |
180:96ed750bd169 | 4339 | * @brief Correlation of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4. |
| Anna Bridge |
180:96ed750bd169 | 4340 | * @param[in] pSrcA points to the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 4341 | * @param[in] srcALen length of the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 4342 | * @param[in] pSrcB points to the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 4343 | * @param[in] srcBLen length of the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 4344 | * @param[out] pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. |
| Anna Bridge |
180:96ed750bd169 | 4345 | */ |
| Anna Bridge |
180:96ed750bd169 | 4346 | |
| Anna Bridge |
180:96ed750bd169 | 4347 | void arm_correlate_fast_q15( |
| Anna Bridge |
180:96ed750bd169 | 4348 | q15_t * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 4349 | uint32_t srcALen, |
| Anna Bridge |
180:96ed750bd169 | 4350 | q15_t * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 4351 | uint32_t srcBLen, |
| Anna Bridge |
180:96ed750bd169 | 4352 | q15_t * pDst); |
| Anna Bridge |
180:96ed750bd169 | 4353 | |
| Anna Bridge |
180:96ed750bd169 | 4354 | |
| Anna Bridge |
180:96ed750bd169 | 4355 | /** |
| Anna Bridge |
180:96ed750bd169 | 4356 | * @brief Correlation of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4. |
| Anna Bridge |
180:96ed750bd169 | 4357 | * @param[in] pSrcA points to the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 4358 | * @param[in] srcALen length of the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 4359 | * @param[in] pSrcB points to the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 4360 | * @param[in] srcBLen length of the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 4361 | * @param[out] pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. |
| Anna Bridge |
180:96ed750bd169 | 4362 | * @param[in] pScratch points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. |
| Anna Bridge |
180:96ed750bd169 | 4363 | */ |
| Anna Bridge |
180:96ed750bd169 | 4364 | void arm_correlate_fast_opt_q15( |
| Anna Bridge |
180:96ed750bd169 | 4365 | q15_t * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 4366 | uint32_t srcALen, |
| Anna Bridge |
180:96ed750bd169 | 4367 | q15_t * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 4368 | uint32_t srcBLen, |
| Anna Bridge |
180:96ed750bd169 | 4369 | q15_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 4370 | q15_t * pScratch); |
| Anna Bridge |
180:96ed750bd169 | 4371 | |
| Anna Bridge |
180:96ed750bd169 | 4372 | |
| Anna Bridge |
180:96ed750bd169 | 4373 | /** |
| Anna Bridge |
180:96ed750bd169 | 4374 | * @brief Correlation of Q31 sequences. |
| Anna Bridge |
180:96ed750bd169 | 4375 | * @param[in] pSrcA points to the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 4376 | * @param[in] srcALen length of the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 4377 | * @param[in] pSrcB points to the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 4378 | * @param[in] srcBLen length of the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 4379 | * @param[out] pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. |
| Anna Bridge |
180:96ed750bd169 | 4380 | */ |
| Anna Bridge |
180:96ed750bd169 | 4381 | void arm_correlate_q31( |
| Anna Bridge |
180:96ed750bd169 | 4382 | q31_t * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 4383 | uint32_t srcALen, |
| Anna Bridge |
180:96ed750bd169 | 4384 | q31_t * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 4385 | uint32_t srcBLen, |
| Anna Bridge |
180:96ed750bd169 | 4386 | q31_t * pDst); |
| Anna Bridge |
180:96ed750bd169 | 4387 | |
| Anna Bridge |
180:96ed750bd169 | 4388 | |
| Anna Bridge |
180:96ed750bd169 | 4389 | /** |
| Anna Bridge |
180:96ed750bd169 | 4390 | * @brief Correlation of Q31 sequences (fast version) for Cortex-M3 and Cortex-M4 |
| Anna Bridge |
180:96ed750bd169 | 4391 | * @param[in] pSrcA points to the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 4392 | * @param[in] srcALen length of the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 4393 | * @param[in] pSrcB points to the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 4394 | * @param[in] srcBLen length of the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 4395 | * @param[out] pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. |
| Anna Bridge |
180:96ed750bd169 | 4396 | */ |
| Anna Bridge |
180:96ed750bd169 | 4397 | void arm_correlate_fast_q31( |
| Anna Bridge |
180:96ed750bd169 | 4398 | q31_t * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 4399 | uint32_t srcALen, |
| Anna Bridge |
180:96ed750bd169 | 4400 | q31_t * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 4401 | uint32_t srcBLen, |
| Anna Bridge |
180:96ed750bd169 | 4402 | q31_t * pDst); |
| Anna Bridge |
180:96ed750bd169 | 4403 | |
| Anna Bridge |
180:96ed750bd169 | 4404 | |
| Anna Bridge |
180:96ed750bd169 | 4405 | /** |
| Anna Bridge |
180:96ed750bd169 | 4406 | * @brief Correlation of Q7 sequences. |
| Anna Bridge |
180:96ed750bd169 | 4407 | * @param[in] pSrcA points to the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 4408 | * @param[in] srcALen length of the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 4409 | * @param[in] pSrcB points to the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 4410 | * @param[in] srcBLen length of the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 4411 | * @param[out] pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. |
| Anna Bridge |
180:96ed750bd169 | 4412 | * @param[in] pScratch1 points to scratch buffer(of type q15_t) of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. |
| Anna Bridge |
180:96ed750bd169 | 4413 | * @param[in] pScratch2 points to scratch buffer (of type q15_t) of size min(srcALen, srcBLen). |
| Anna Bridge |
180:96ed750bd169 | 4414 | */ |
| Anna Bridge |
180:96ed750bd169 | 4415 | void arm_correlate_opt_q7( |
| Anna Bridge |
180:96ed750bd169 | 4416 | q7_t * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 4417 | uint32_t srcALen, |
| Anna Bridge |
180:96ed750bd169 | 4418 | q7_t * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 4419 | uint32_t srcBLen, |
| Anna Bridge |
180:96ed750bd169 | 4420 | q7_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 4421 | q15_t * pScratch1, |
| Anna Bridge |
180:96ed750bd169 | 4422 | q15_t * pScratch2); |
| Anna Bridge |
180:96ed750bd169 | 4423 | |
| Anna Bridge |
180:96ed750bd169 | 4424 | |
| Anna Bridge |
180:96ed750bd169 | 4425 | /** |
| Anna Bridge |
180:96ed750bd169 | 4426 | * @brief Correlation of Q7 sequences. |
| Anna Bridge |
180:96ed750bd169 | 4427 | * @param[in] pSrcA points to the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 4428 | * @param[in] srcALen length of the first input sequence. |
| Anna Bridge |
180:96ed750bd169 | 4429 | * @param[in] pSrcB points to the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 4430 | * @param[in] srcBLen length of the second input sequence. |
| Anna Bridge |
180:96ed750bd169 | 4431 | * @param[out] pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. |
| Anna Bridge |
180:96ed750bd169 | 4432 | */ |
| Anna Bridge |
180:96ed750bd169 | 4433 | void arm_correlate_q7( |
| Anna Bridge |
180:96ed750bd169 | 4434 | q7_t * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 4435 | uint32_t srcALen, |
| Anna Bridge |
180:96ed750bd169 | 4436 | q7_t * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 4437 | uint32_t srcBLen, |
| Anna Bridge |
180:96ed750bd169 | 4438 | q7_t * pDst); |
| Anna Bridge |
180:96ed750bd169 | 4439 | |
| Anna Bridge |
180:96ed750bd169 | 4440 | |
| Anna Bridge |
180:96ed750bd169 | 4441 | /** |
| Anna Bridge |
180:96ed750bd169 | 4442 | * @brief Instance structure for the floating-point sparse FIR filter. |
| Anna Bridge |
180:96ed750bd169 | 4443 | */ |
| Anna Bridge |
180:96ed750bd169 | 4444 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 4445 | { |
| Anna Bridge |
180:96ed750bd169 | 4446 | uint16_t numTaps; /**< number of coefficients in the filter. */ |
| Anna Bridge |
180:96ed750bd169 | 4447 | uint16_t stateIndex; /**< state buffer index. Points to the oldest sample in the state buffer. */ |
| Anna Bridge |
180:96ed750bd169 | 4448 | float32_t *pState; /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */ |
| Anna Bridge |
180:96ed750bd169 | 4449 | float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ |
| Anna Bridge |
180:96ed750bd169 | 4450 | uint16_t maxDelay; /**< maximum offset specified by the pTapDelay array. */ |
| Anna Bridge |
180:96ed750bd169 | 4451 | int32_t *pTapDelay; /**< points to the array of delay values. The array is of length numTaps. */ |
| Anna Bridge |
180:96ed750bd169 | 4452 | } arm_fir_sparse_instance_f32; |
| Anna Bridge |
180:96ed750bd169 | 4453 | |
| Anna Bridge |
180:96ed750bd169 | 4454 | /** |
| Anna Bridge |
180:96ed750bd169 | 4455 | * @brief Instance structure for the Q31 sparse FIR filter. |
| Anna Bridge |
180:96ed750bd169 | 4456 | */ |
| Anna Bridge |
180:96ed750bd169 | 4457 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 4458 | { |
| Anna Bridge |
180:96ed750bd169 | 4459 | uint16_t numTaps; /**< number of coefficients in the filter. */ |
| Anna Bridge |
180:96ed750bd169 | 4460 | uint16_t stateIndex; /**< state buffer index. Points to the oldest sample in the state buffer. */ |
| Anna Bridge |
180:96ed750bd169 | 4461 | q31_t *pState; /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */ |
| Anna Bridge |
180:96ed750bd169 | 4462 | q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ |
| Anna Bridge |
180:96ed750bd169 | 4463 | uint16_t maxDelay; /**< maximum offset specified by the pTapDelay array. */ |
| Anna Bridge |
180:96ed750bd169 | 4464 | int32_t *pTapDelay; /**< points to the array of delay values. The array is of length numTaps. */ |
| Anna Bridge |
180:96ed750bd169 | 4465 | } arm_fir_sparse_instance_q31; |
| Anna Bridge |
180:96ed750bd169 | 4466 | |
| Anna Bridge |
180:96ed750bd169 | 4467 | /** |
| Anna Bridge |
180:96ed750bd169 | 4468 | * @brief Instance structure for the Q15 sparse FIR filter. |
| Anna Bridge |
180:96ed750bd169 | 4469 | */ |
| Anna Bridge |
180:96ed750bd169 | 4470 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 4471 | { |
| Anna Bridge |
180:96ed750bd169 | 4472 | uint16_t numTaps; /**< number of coefficients in the filter. */ |
| Anna Bridge |
180:96ed750bd169 | 4473 | uint16_t stateIndex; /**< state buffer index. Points to the oldest sample in the state buffer. */ |
| Anna Bridge |
180:96ed750bd169 | 4474 | q15_t *pState; /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */ |
| Anna Bridge |
180:96ed750bd169 | 4475 | q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ |
| Anna Bridge |
180:96ed750bd169 | 4476 | uint16_t maxDelay; /**< maximum offset specified by the pTapDelay array. */ |
| Anna Bridge |
180:96ed750bd169 | 4477 | int32_t *pTapDelay; /**< points to the array of delay values. The array is of length numTaps. */ |
| Anna Bridge |
180:96ed750bd169 | 4478 | } arm_fir_sparse_instance_q15; |
| Anna Bridge |
180:96ed750bd169 | 4479 | |
| Anna Bridge |
180:96ed750bd169 | 4480 | /** |
| Anna Bridge |
180:96ed750bd169 | 4481 | * @brief Instance structure for the Q7 sparse FIR filter. |
| Anna Bridge |
180:96ed750bd169 | 4482 | */ |
| Anna Bridge |
180:96ed750bd169 | 4483 | typedef struct |
| Anna Bridge |
180:96ed750bd169 | 4484 | { |
| Anna Bridge |
180:96ed750bd169 | 4485 | uint16_t numTaps; /**< number of coefficients in the filter. */ |
| Anna Bridge |
180:96ed750bd169 | 4486 | uint16_t stateIndex; /**< state buffer index. Points to the oldest sample in the state buffer. */ |
| Anna Bridge |
180:96ed750bd169 | 4487 | q7_t *pState; /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */ |
| Anna Bridge |
180:96ed750bd169 | 4488 | q7_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ |
| Anna Bridge |
180:96ed750bd169 | 4489 | uint16_t maxDelay; /**< maximum offset specified by the pTapDelay array. */ |
| Anna Bridge |
180:96ed750bd169 | 4490 | int32_t *pTapDelay; /**< points to the array of delay values. The array is of length numTaps. */ |
| Anna Bridge |
180:96ed750bd169 | 4491 | } arm_fir_sparse_instance_q7; |
| Anna Bridge |
180:96ed750bd169 | 4492 | |
| Anna Bridge |
180:96ed750bd169 | 4493 | |
| Anna Bridge |
180:96ed750bd169 | 4494 | /** |
| Anna Bridge |
180:96ed750bd169 | 4495 | * @brief Processing function for the floating-point sparse FIR filter. |
| Anna Bridge |
180:96ed750bd169 | 4496 | * @param[in] S points to an instance of the floating-point sparse FIR structure. |
| Anna Bridge |
180:96ed750bd169 | 4497 | * @param[in] pSrc points to the block of input data. |
| Anna Bridge |
180:96ed750bd169 | 4498 | * @param[out] pDst points to the block of output data |
| Anna Bridge |
180:96ed750bd169 | 4499 | * @param[in] pScratchIn points to a temporary buffer of size blockSize. |
| Anna Bridge |
180:96ed750bd169 | 4500 | * @param[in] blockSize number of input samples to process per call. |
| Anna Bridge |
180:96ed750bd169 | 4501 | */ |
| Anna Bridge |
180:96ed750bd169 | 4502 | void arm_fir_sparse_f32( |
| Anna Bridge |
180:96ed750bd169 | 4503 | arm_fir_sparse_instance_f32 * S, |
| Anna Bridge |
180:96ed750bd169 | 4504 | float32_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 4505 | float32_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 4506 | float32_t * pScratchIn, |
| Anna Bridge |
180:96ed750bd169 | 4507 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 4508 | |
| Anna Bridge |
180:96ed750bd169 | 4509 | |
| Anna Bridge |
180:96ed750bd169 | 4510 | /** |
| Anna Bridge |
180:96ed750bd169 | 4511 | * @brief Initialization function for the floating-point sparse FIR filter. |
| Anna Bridge |
180:96ed750bd169 | 4512 | * @param[in,out] S points to an instance of the floating-point sparse FIR structure. |
| Anna Bridge |
180:96ed750bd169 | 4513 | * @param[in] numTaps number of nonzero coefficients in the filter. |
| Anna Bridge |
180:96ed750bd169 | 4514 | * @param[in] pCoeffs points to the array of filter coefficients. |
| Anna Bridge |
180:96ed750bd169 | 4515 | * @param[in] pState points to the state buffer. |
| Anna Bridge |
180:96ed750bd169 | 4516 | * @param[in] pTapDelay points to the array of offset times. |
| Anna Bridge |
180:96ed750bd169 | 4517 | * @param[in] maxDelay maximum offset time supported. |
| Anna Bridge |
180:96ed750bd169 | 4518 | * @param[in] blockSize number of samples that will be processed per block. |
| Anna Bridge |
180:96ed750bd169 | 4519 | */ |
| Anna Bridge |
180:96ed750bd169 | 4520 | void arm_fir_sparse_init_f32( |
| Anna Bridge |
180:96ed750bd169 | 4521 | arm_fir_sparse_instance_f32 * S, |
| Anna Bridge |
180:96ed750bd169 | 4522 | uint16_t numTaps, |
| Anna Bridge |
180:96ed750bd169 | 4523 | float32_t * pCoeffs, |
| Anna Bridge |
180:96ed750bd169 | 4524 | float32_t * pState, |
| Anna Bridge |
180:96ed750bd169 | 4525 | int32_t * pTapDelay, |
| Anna Bridge |
180:96ed750bd169 | 4526 | uint16_t maxDelay, |
| Anna Bridge |
180:96ed750bd169 | 4527 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 4528 | |
| Anna Bridge |
180:96ed750bd169 | 4529 | |
| Anna Bridge |
180:96ed750bd169 | 4530 | /** |
| Anna Bridge |
180:96ed750bd169 | 4531 | * @brief Processing function for the Q31 sparse FIR filter. |
| Anna Bridge |
180:96ed750bd169 | 4532 | * @param[in] S points to an instance of the Q31 sparse FIR structure. |
| Anna Bridge |
180:96ed750bd169 | 4533 | * @param[in] pSrc points to the block of input data. |
| Anna Bridge |
180:96ed750bd169 | 4534 | * @param[out] pDst points to the block of output data |
| Anna Bridge |
180:96ed750bd169 | 4535 | * @param[in] pScratchIn points to a temporary buffer of size blockSize. |
| Anna Bridge |
180:96ed750bd169 | 4536 | * @param[in] blockSize number of input samples to process per call. |
| Anna Bridge |
180:96ed750bd169 | 4537 | */ |
| Anna Bridge |
180:96ed750bd169 | 4538 | void arm_fir_sparse_q31( |
| Anna Bridge |
180:96ed750bd169 | 4539 | arm_fir_sparse_instance_q31 * S, |
| Anna Bridge |
180:96ed750bd169 | 4540 | q31_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 4541 | q31_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 4542 | q31_t * pScratchIn, |
| Anna Bridge |
180:96ed750bd169 | 4543 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 4544 | |
| Anna Bridge |
180:96ed750bd169 | 4545 | |
| Anna Bridge |
180:96ed750bd169 | 4546 | /** |
| Anna Bridge |
180:96ed750bd169 | 4547 | * @brief Initialization function for the Q31 sparse FIR filter. |
| Anna Bridge |
180:96ed750bd169 | 4548 | * @param[in,out] S points to an instance of the Q31 sparse FIR structure. |
| Anna Bridge |
180:96ed750bd169 | 4549 | * @param[in] numTaps number of nonzero coefficients in the filter. |
| Anna Bridge |
180:96ed750bd169 | 4550 | * @param[in] pCoeffs points to the array of filter coefficients. |
| Anna Bridge |
180:96ed750bd169 | 4551 | * @param[in] pState points to the state buffer. |
| Anna Bridge |
180:96ed750bd169 | 4552 | * @param[in] pTapDelay points to the array of offset times. |
| Anna Bridge |
180:96ed750bd169 | 4553 | * @param[in] maxDelay maximum offset time supported. |
| Anna Bridge |
180:96ed750bd169 | 4554 | * @param[in] blockSize number of samples that will be processed per block. |
| Anna Bridge |
180:96ed750bd169 | 4555 | */ |
| Anna Bridge |
180:96ed750bd169 | 4556 | void arm_fir_sparse_init_q31( |
| Anna Bridge |
180:96ed750bd169 | 4557 | arm_fir_sparse_instance_q31 * S, |
| Anna Bridge |
180:96ed750bd169 | 4558 | uint16_t numTaps, |
| Anna Bridge |
180:96ed750bd169 | 4559 | q31_t * pCoeffs, |
| Anna Bridge |
180:96ed750bd169 | 4560 | q31_t * pState, |
| Anna Bridge |
180:96ed750bd169 | 4561 | int32_t * pTapDelay, |
| Anna Bridge |
180:96ed750bd169 | 4562 | uint16_t maxDelay, |
| Anna Bridge |
180:96ed750bd169 | 4563 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 4564 | |
| Anna Bridge |
180:96ed750bd169 | 4565 | |
| Anna Bridge |
180:96ed750bd169 | 4566 | /** |
| Anna Bridge |
180:96ed750bd169 | 4567 | * @brief Processing function for the Q15 sparse FIR filter. |
| Anna Bridge |
180:96ed750bd169 | 4568 | * @param[in] S points to an instance of the Q15 sparse FIR structure. |
| Anna Bridge |
180:96ed750bd169 | 4569 | * @param[in] pSrc points to the block of input data. |
| Anna Bridge |
180:96ed750bd169 | 4570 | * @param[out] pDst points to the block of output data |
| Anna Bridge |
180:96ed750bd169 | 4571 | * @param[in] pScratchIn points to a temporary buffer of size blockSize. |
| Anna Bridge |
180:96ed750bd169 | 4572 | * @param[in] pScratchOut points to a temporary buffer of size blockSize. |
| Anna Bridge |
180:96ed750bd169 | 4573 | * @param[in] blockSize number of input samples to process per call. |
| Anna Bridge |
180:96ed750bd169 | 4574 | */ |
| Anna Bridge |
180:96ed750bd169 | 4575 | void arm_fir_sparse_q15( |
| Anna Bridge |
180:96ed750bd169 | 4576 | arm_fir_sparse_instance_q15 * S, |
| Anna Bridge |
180:96ed750bd169 | 4577 | q15_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 4578 | q15_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 4579 | q15_t * pScratchIn, |
| Anna Bridge |
180:96ed750bd169 | 4580 | q31_t * pScratchOut, |
| Anna Bridge |
180:96ed750bd169 | 4581 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 4582 | |
| Anna Bridge |
180:96ed750bd169 | 4583 | |
| Anna Bridge |
180:96ed750bd169 | 4584 | /** |
| Anna Bridge |
180:96ed750bd169 | 4585 | * @brief Initialization function for the Q15 sparse FIR filter. |
| Anna Bridge |
180:96ed750bd169 | 4586 | * @param[in,out] S points to an instance of the Q15 sparse FIR structure. |
| Anna Bridge |
180:96ed750bd169 | 4587 | * @param[in] numTaps number of nonzero coefficients in the filter. |
| Anna Bridge |
180:96ed750bd169 | 4588 | * @param[in] pCoeffs points to the array of filter coefficients. |
| Anna Bridge |
180:96ed750bd169 | 4589 | * @param[in] pState points to the state buffer. |
| Anna Bridge |
180:96ed750bd169 | 4590 | * @param[in] pTapDelay points to the array of offset times. |
| Anna Bridge |
180:96ed750bd169 | 4591 | * @param[in] maxDelay maximum offset time supported. |
| Anna Bridge |
180:96ed750bd169 | 4592 | * @param[in] blockSize number of samples that will be processed per block. |
| Anna Bridge |
180:96ed750bd169 | 4593 | */ |
| Anna Bridge |
180:96ed750bd169 | 4594 | void arm_fir_sparse_init_q15( |
| Anna Bridge |
180:96ed750bd169 | 4595 | arm_fir_sparse_instance_q15 * S, |
| Anna Bridge |
180:96ed750bd169 | 4596 | uint16_t numTaps, |
| Anna Bridge |
180:96ed750bd169 | 4597 | q15_t * pCoeffs, |
| Anna Bridge |
180:96ed750bd169 | 4598 | q15_t * pState, |
| Anna Bridge |
180:96ed750bd169 | 4599 | int32_t * pTapDelay, |
| Anna Bridge |
180:96ed750bd169 | 4600 | uint16_t maxDelay, |
| Anna Bridge |
180:96ed750bd169 | 4601 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 4602 | |
| Anna Bridge |
180:96ed750bd169 | 4603 | |
| Anna Bridge |
180:96ed750bd169 | 4604 | /** |
| Anna Bridge |
180:96ed750bd169 | 4605 | * @brief Processing function for the Q7 sparse FIR filter. |
| Anna Bridge |
180:96ed750bd169 | 4606 | * @param[in] S points to an instance of the Q7 sparse FIR structure. |
| Anna Bridge |
180:96ed750bd169 | 4607 | * @param[in] pSrc points to the block of input data. |
| Anna Bridge |
180:96ed750bd169 | 4608 | * @param[out] pDst points to the block of output data |
| Anna Bridge |
180:96ed750bd169 | 4609 | * @param[in] pScratchIn points to a temporary buffer of size blockSize. |
| Anna Bridge |
180:96ed750bd169 | 4610 | * @param[in] pScratchOut points to a temporary buffer of size blockSize. |
| Anna Bridge |
180:96ed750bd169 | 4611 | * @param[in] blockSize number of input samples to process per call. |
| Anna Bridge |
180:96ed750bd169 | 4612 | */ |
| Anna Bridge |
180:96ed750bd169 | 4613 | void arm_fir_sparse_q7( |
| Anna Bridge |
180:96ed750bd169 | 4614 | arm_fir_sparse_instance_q7 * S, |
| Anna Bridge |
180:96ed750bd169 | 4615 | q7_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 4616 | q7_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 4617 | q7_t * pScratchIn, |
| Anna Bridge |
180:96ed750bd169 | 4618 | q31_t * pScratchOut, |
| Anna Bridge |
180:96ed750bd169 | 4619 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 4620 | |
| Anna Bridge |
180:96ed750bd169 | 4621 | |
| Anna Bridge |
180:96ed750bd169 | 4622 | /** |
| Anna Bridge |
180:96ed750bd169 | 4623 | * @brief Initialization function for the Q7 sparse FIR filter. |
| Anna Bridge |
180:96ed750bd169 | 4624 | * @param[in,out] S points to an instance of the Q7 sparse FIR structure. |
| Anna Bridge |
180:96ed750bd169 | 4625 | * @param[in] numTaps number of nonzero coefficients in the filter. |
| Anna Bridge |
180:96ed750bd169 | 4626 | * @param[in] pCoeffs points to the array of filter coefficients. |
| Anna Bridge |
180:96ed750bd169 | 4627 | * @param[in] pState points to the state buffer. |
| Anna Bridge |
180:96ed750bd169 | 4628 | * @param[in] pTapDelay points to the array of offset times. |
| Anna Bridge |
180:96ed750bd169 | 4629 | * @param[in] maxDelay maximum offset time supported. |
| Anna Bridge |
180:96ed750bd169 | 4630 | * @param[in] blockSize number of samples that will be processed per block. |
| Anna Bridge |
180:96ed750bd169 | 4631 | */ |
| Anna Bridge |
180:96ed750bd169 | 4632 | void arm_fir_sparse_init_q7( |
| Anna Bridge |
180:96ed750bd169 | 4633 | arm_fir_sparse_instance_q7 * S, |
| Anna Bridge |
180:96ed750bd169 | 4634 | uint16_t numTaps, |
| Anna Bridge |
180:96ed750bd169 | 4635 | q7_t * pCoeffs, |
| Anna Bridge |
180:96ed750bd169 | 4636 | q7_t * pState, |
| Anna Bridge |
180:96ed750bd169 | 4637 | int32_t * pTapDelay, |
| Anna Bridge |
180:96ed750bd169 | 4638 | uint16_t maxDelay, |
| Anna Bridge |
180:96ed750bd169 | 4639 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 4640 | |
| Anna Bridge |
180:96ed750bd169 | 4641 | |
| Anna Bridge |
180:96ed750bd169 | 4642 | /** |
| Anna Bridge |
180:96ed750bd169 | 4643 | * @brief Floating-point sin_cos function. |
| Anna Bridge |
180:96ed750bd169 | 4644 | * @param[in] theta input value in degrees |
| Anna Bridge |
180:96ed750bd169 | 4645 | * @param[out] pSinVal points to the processed sine output. |
| Anna Bridge |
180:96ed750bd169 | 4646 | * @param[out] pCosVal points to the processed cos output. |
| Anna Bridge |
180:96ed750bd169 | 4647 | */ |
| Anna Bridge |
180:96ed750bd169 | 4648 | void arm_sin_cos_f32( |
| Anna Bridge |
180:96ed750bd169 | 4649 | float32_t theta, |
| Anna Bridge |
180:96ed750bd169 | 4650 | float32_t * pSinVal, |
| Anna Bridge |
180:96ed750bd169 | 4651 | float32_t * pCosVal); |
| Anna Bridge |
180:96ed750bd169 | 4652 | |
| Anna Bridge |
180:96ed750bd169 | 4653 | |
| Anna Bridge |
180:96ed750bd169 | 4654 | /** |
| Anna Bridge |
180:96ed750bd169 | 4655 | * @brief Q31 sin_cos function. |
| Anna Bridge |
180:96ed750bd169 | 4656 | * @param[in] theta scaled input value in degrees |
| Anna Bridge |
180:96ed750bd169 | 4657 | * @param[out] pSinVal points to the processed sine output. |
| Anna Bridge |
180:96ed750bd169 | 4658 | * @param[out] pCosVal points to the processed cosine output. |
| Anna Bridge |
180:96ed750bd169 | 4659 | */ |
| Anna Bridge |
180:96ed750bd169 | 4660 | void arm_sin_cos_q31( |
| Anna Bridge |
180:96ed750bd169 | 4661 | q31_t theta, |
| Anna Bridge |
180:96ed750bd169 | 4662 | q31_t * pSinVal, |
| Anna Bridge |
180:96ed750bd169 | 4663 | q31_t * pCosVal); |
| Anna Bridge |
180:96ed750bd169 | 4664 | |
| Anna Bridge |
180:96ed750bd169 | 4665 | |
| Anna Bridge |
180:96ed750bd169 | 4666 | /** |
| Anna Bridge |
180:96ed750bd169 | 4667 | * @brief Floating-point complex conjugate. |
| Anna Bridge |
180:96ed750bd169 | 4668 | * @param[in] pSrc points to the input vector |
| Anna Bridge |
180:96ed750bd169 | 4669 | * @param[out] pDst points to the output vector |
| Anna Bridge |
180:96ed750bd169 | 4670 | * @param[in] numSamples number of complex samples in each vector |
| Anna Bridge |
180:96ed750bd169 | 4671 | */ |
| Anna Bridge |
180:96ed750bd169 | 4672 | void arm_cmplx_conj_f32( |
| Anna Bridge |
180:96ed750bd169 | 4673 | float32_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 4674 | float32_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 4675 | uint32_t numSamples); |
| Anna Bridge |
180:96ed750bd169 | 4676 | |
| Anna Bridge |
180:96ed750bd169 | 4677 | /** |
| Anna Bridge |
180:96ed750bd169 | 4678 | * @brief Q31 complex conjugate. |
| Anna Bridge |
180:96ed750bd169 | 4679 | * @param[in] pSrc points to the input vector |
| Anna Bridge |
180:96ed750bd169 | 4680 | * @param[out] pDst points to the output vector |
| Anna Bridge |
180:96ed750bd169 | 4681 | * @param[in] numSamples number of complex samples in each vector |
| Anna Bridge |
180:96ed750bd169 | 4682 | */ |
| Anna Bridge |
180:96ed750bd169 | 4683 | void arm_cmplx_conj_q31( |
| Anna Bridge |
180:96ed750bd169 | 4684 | q31_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 4685 | q31_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 4686 | uint32_t numSamples); |
| Anna Bridge |
180:96ed750bd169 | 4687 | |
| Anna Bridge |
180:96ed750bd169 | 4688 | |
| Anna Bridge |
180:96ed750bd169 | 4689 | /** |
| Anna Bridge |
180:96ed750bd169 | 4690 | * @brief Q15 complex conjugate. |
| Anna Bridge |
180:96ed750bd169 | 4691 | * @param[in] pSrc points to the input vector |
| Anna Bridge |
180:96ed750bd169 | 4692 | * @param[out] pDst points to the output vector |
| Anna Bridge |
180:96ed750bd169 | 4693 | * @param[in] numSamples number of complex samples in each vector |
| Anna Bridge |
180:96ed750bd169 | 4694 | */ |
| Anna Bridge |
180:96ed750bd169 | 4695 | void arm_cmplx_conj_q15( |
| Anna Bridge |
180:96ed750bd169 | 4696 | q15_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 4697 | q15_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 4698 | uint32_t numSamples); |
| Anna Bridge |
180:96ed750bd169 | 4699 | |
| Anna Bridge |
180:96ed750bd169 | 4700 | |
| Anna Bridge |
180:96ed750bd169 | 4701 | /** |
| Anna Bridge |
180:96ed750bd169 | 4702 | * @brief Floating-point complex magnitude squared |
| Anna Bridge |
180:96ed750bd169 | 4703 | * @param[in] pSrc points to the complex input vector |
| Anna Bridge |
180:96ed750bd169 | 4704 | * @param[out] pDst points to the real output vector |
| Anna Bridge |
180:96ed750bd169 | 4705 | * @param[in] numSamples number of complex samples in the input vector |
| Anna Bridge |
180:96ed750bd169 | 4706 | */ |
| Anna Bridge |
180:96ed750bd169 | 4707 | void arm_cmplx_mag_squared_f32( |
| Anna Bridge |
180:96ed750bd169 | 4708 | float32_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 4709 | float32_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 4710 | uint32_t numSamples); |
| Anna Bridge |
180:96ed750bd169 | 4711 | |
| Anna Bridge |
180:96ed750bd169 | 4712 | |
| Anna Bridge |
180:96ed750bd169 | 4713 | /** |
| Anna Bridge |
180:96ed750bd169 | 4714 | * @brief Q31 complex magnitude squared |
| Anna Bridge |
180:96ed750bd169 | 4715 | * @param[in] pSrc points to the complex input vector |
| Anna Bridge |
180:96ed750bd169 | 4716 | * @param[out] pDst points to the real output vector |
| Anna Bridge |
180:96ed750bd169 | 4717 | * @param[in] numSamples number of complex samples in the input vector |
| Anna Bridge |
180:96ed750bd169 | 4718 | */ |
| Anna Bridge |
180:96ed750bd169 | 4719 | void arm_cmplx_mag_squared_q31( |
| Anna Bridge |
180:96ed750bd169 | 4720 | q31_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 4721 | q31_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 4722 | uint32_t numSamples); |
| Anna Bridge |
180:96ed750bd169 | 4723 | |
| Anna Bridge |
180:96ed750bd169 | 4724 | |
| Anna Bridge |
180:96ed750bd169 | 4725 | /** |
| Anna Bridge |
180:96ed750bd169 | 4726 | * @brief Q15 complex magnitude squared |
| Anna Bridge |
180:96ed750bd169 | 4727 | * @param[in] pSrc points to the complex input vector |
| Anna Bridge |
180:96ed750bd169 | 4728 | * @param[out] pDst points to the real output vector |
| Anna Bridge |
180:96ed750bd169 | 4729 | * @param[in] numSamples number of complex samples in the input vector |
| Anna Bridge |
180:96ed750bd169 | 4730 | */ |
| Anna Bridge |
180:96ed750bd169 | 4731 | void arm_cmplx_mag_squared_q15( |
| Anna Bridge |
180:96ed750bd169 | 4732 | q15_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 4733 | q15_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 4734 | uint32_t numSamples); |
| Anna Bridge |
180:96ed750bd169 | 4735 | |
| Anna Bridge |
180:96ed750bd169 | 4736 | |
| Anna Bridge |
180:96ed750bd169 | 4737 | /** |
| Anna Bridge |
180:96ed750bd169 | 4738 | * @ingroup groupController |
| Anna Bridge |
180:96ed750bd169 | 4739 | */ |
| Anna Bridge |
180:96ed750bd169 | 4740 | |
| Anna Bridge |
180:96ed750bd169 | 4741 | /** |
| Anna Bridge |
180:96ed750bd169 | 4742 | * @defgroup PID PID Motor Control |
| Anna Bridge |
180:96ed750bd169 | 4743 | * |
| Anna Bridge |
180:96ed750bd169 | 4744 | * A Proportional Integral Derivative (PID) controller is a generic feedback control |
| Anna Bridge |
180:96ed750bd169 | 4745 | * loop mechanism widely used in industrial control systems. |
| Anna Bridge |
180:96ed750bd169 | 4746 | * A PID controller is the most commonly used type of feedback controller. |
| Anna Bridge |
180:96ed750bd169 | 4747 | * |
| Anna Bridge |
180:96ed750bd169 | 4748 | * This set of functions implements (PID) controllers |
| Anna Bridge |
180:96ed750bd169 | 4749 | * for Q15, Q31, and floating-point data types. The functions operate on a single sample |
| Anna Bridge |
180:96ed750bd169 | 4750 | * of data and each call to the function returns a single processed value. |
| Anna Bridge |
180:96ed750bd169 | 4751 | * <code>S</code> points to an instance of the PID control data structure. <code>in</code> |
| Anna Bridge |
180:96ed750bd169 | 4752 | * is the input sample value. The functions return the output value. |
| Anna Bridge |
180:96ed750bd169 | 4753 | * |
| Anna Bridge |
180:96ed750bd169 | 4754 | * \par Algorithm: |
| Anna Bridge |
180:96ed750bd169 | 4755 | * <pre> |
| Anna Bridge |
180:96ed750bd169 | 4756 | * y[n] = y[n-1] + A0 * x[n] + A1 * x[n-1] + A2 * x[n-2] |
| Anna Bridge |
180:96ed750bd169 | 4757 | * A0 = Kp + Ki + Kd |
| Anna Bridge |
180:96ed750bd169 | 4758 | * A1 = (-Kp ) - (2 * Kd ) |
| Anna Bridge |
180:96ed750bd169 | 4759 | * A2 = Kd </pre> |
| Anna Bridge |
180:96ed750bd169 | 4760 | * |
| Anna Bridge |
180:96ed750bd169 | 4761 | * \par |
| Anna Bridge |
180:96ed750bd169 | 4762 | * where \c Kp is proportional constant, \c Ki is Integral constant and \c Kd is Derivative constant |
| Anna Bridge |
180:96ed750bd169 | 4763 | * |
| Anna Bridge |
180:96ed750bd169 | 4764 | * \par |
| Anna Bridge |
180:96ed750bd169 | 4765 | * \image html PID.gif "Proportional Integral Derivative Controller" |
| Anna Bridge |
180:96ed750bd169 | 4766 | * |
| Anna Bridge |
180:96ed750bd169 | 4767 | * \par |
| Anna Bridge |
180:96ed750bd169 | 4768 | * The PID controller calculates an "error" value as the difference between |
| Anna Bridge |
180:96ed750bd169 | 4769 | * the measured output and the reference input. |
| Anna Bridge |
180:96ed750bd169 | 4770 | * The controller attempts to minimize the error by adjusting the process control inputs. |
| Anna Bridge |
180:96ed750bd169 | 4771 | * The proportional value determines the reaction to the current error, |
| Anna Bridge |
180:96ed750bd169 | 4772 | * the integral value determines the reaction based on the sum of recent errors, |
| Anna Bridge |
180:96ed750bd169 | 4773 | * and the derivative value determines the reaction based on the rate at which the error has been changing. |
| Anna Bridge |
180:96ed750bd169 | 4774 | * |
| Anna Bridge |
180:96ed750bd169 | 4775 | * \par Instance Structure |
| Anna Bridge |
180:96ed750bd169 | 4776 | * The Gains A0, A1, A2 and state variables for a PID controller are stored together in an instance data structure. |
| Anna Bridge |
180:96ed750bd169 | 4777 | * A separate instance structure must be defined for each PID Controller. |
| Anna Bridge |
180:96ed750bd169 | 4778 | * There are separate instance structure declarations for each of the 3 supported data types. |
| Anna Bridge |
180:96ed750bd169 | 4779 | * |
| Anna Bridge |
180:96ed750bd169 | 4780 | * \par Reset Functions |
| Anna Bridge |
180:96ed750bd169 | 4781 | * There is also an associated reset function for each data type which clears the state array. |
| Anna Bridge |
180:96ed750bd169 | 4782 | * |
| Anna Bridge |
180:96ed750bd169 | 4783 | * \par Initialization Functions |
| Anna Bridge |
180:96ed750bd169 | 4784 | * There is also an associated initialization function for each data type. |
| Anna Bridge |
180:96ed750bd169 | 4785 | * The initialization function performs the following operations: |
| Anna Bridge |
180:96ed750bd169 | 4786 | * - Initializes the Gains A0, A1, A2 from Kp,Ki, Kd gains. |
| Anna Bridge |
180:96ed750bd169 | 4787 | * - Zeros out the values in the state buffer. |
| Anna Bridge |
180:96ed750bd169 | 4788 | * |
| Anna Bridge |
180:96ed750bd169 | 4789 | * \par |
| Anna Bridge |
180:96ed750bd169 | 4790 | * Instance structure cannot be placed into a const data section and it is recommended to use the initialization function. |
| Anna Bridge |
180:96ed750bd169 | 4791 | * |
| Anna Bridge |
180:96ed750bd169 | 4792 | * \par Fixed-Point Behavior |
| Anna Bridge |
180:96ed750bd169 | 4793 | * Care must be taken when using the fixed-point versions of the PID Controller functions. |
| Anna Bridge |
180:96ed750bd169 | 4794 | * In particular, the overflow and saturation behavior of the accumulator used in each function must be considered. |
| Anna Bridge |
180:96ed750bd169 | 4795 | * Refer to the function specific documentation below for usage guidelines. |
| Anna Bridge |
180:96ed750bd169 | 4796 | */ |
| Anna Bridge |
180:96ed750bd169 | 4797 | |
| Anna Bridge |
180:96ed750bd169 | 4798 | /** |
| Anna Bridge |
180:96ed750bd169 | 4799 | * @addtogroup PID |
| Anna Bridge |
180:96ed750bd169 | 4800 | * @{ |
| Anna Bridge |
180:96ed750bd169 | 4801 | */ |
| Anna Bridge |
180:96ed750bd169 | 4802 | |
| Anna Bridge |
180:96ed750bd169 | 4803 | /** |
| Anna Bridge |
180:96ed750bd169 | 4804 | * @brief Process function for the floating-point PID Control. |
| Anna Bridge |
180:96ed750bd169 | 4805 | * @param[in,out] S is an instance of the floating-point PID Control structure |
| Anna Bridge |
180:96ed750bd169 | 4806 | * @param[in] in input sample to process |
| Anna Bridge |
180:96ed750bd169 | 4807 | * @return out processed output sample. |
| Anna Bridge |
180:96ed750bd169 | 4808 | */ |
| Anna Bridge |
180:96ed750bd169 | 4809 | CMSIS_INLINE __STATIC_INLINE float32_t arm_pid_f32( |
| Anna Bridge |
180:96ed750bd169 | 4810 | arm_pid_instance_f32 * S, |
| Anna Bridge |
180:96ed750bd169 | 4811 | float32_t in) |
| Anna Bridge |
180:96ed750bd169 | 4812 | { |
| Anna Bridge |
180:96ed750bd169 | 4813 | float32_t out; |
| Anna Bridge |
180:96ed750bd169 | 4814 | |
| Anna Bridge |
180:96ed750bd169 | 4815 | /* y[n] = y[n-1] + A0 * x[n] + A1 * x[n-1] + A2 * x[n-2] */ |
| Anna Bridge |
180:96ed750bd169 | 4816 | out = (S->A0 * in) + |
| Anna Bridge |
180:96ed750bd169 | 4817 | (S->A1 * S->state[0]) + (S->A2 * S->state[1]) + (S->state[2]); |
| Anna Bridge |
180:96ed750bd169 | 4818 | |
| Anna Bridge |
180:96ed750bd169 | 4819 | /* Update state */ |
| Anna Bridge |
180:96ed750bd169 | 4820 | S->state[1] = S->state[0]; |
| Anna Bridge |
180:96ed750bd169 | 4821 | S->state[0] = in; |
| Anna Bridge |
180:96ed750bd169 | 4822 | S->state[2] = out; |
| Anna Bridge |
180:96ed750bd169 | 4823 | |
| Anna Bridge |
180:96ed750bd169 | 4824 | /* return to application */ |
| Anna Bridge |
180:96ed750bd169 | 4825 | return (out); |
| Anna Bridge |
180:96ed750bd169 | 4826 | |
| Anna Bridge |
180:96ed750bd169 | 4827 | } |
| Anna Bridge |
180:96ed750bd169 | 4828 | |
| Anna Bridge |
180:96ed750bd169 | 4829 | /** |
| Anna Bridge |
180:96ed750bd169 | 4830 | * @brief Process function for the Q31 PID Control. |
| Anna Bridge |
180:96ed750bd169 | 4831 | * @param[in,out] S points to an instance of the Q31 PID Control structure |
| Anna Bridge |
180:96ed750bd169 | 4832 | * @param[in] in input sample to process |
| Anna Bridge |
180:96ed750bd169 | 4833 | * @return out processed output sample. |
| Anna Bridge |
180:96ed750bd169 | 4834 | * |
| Anna Bridge |
180:96ed750bd169 | 4835 | * <b>Scaling and Overflow Behavior:</b> |
| Anna Bridge |
180:96ed750bd169 | 4836 | * \par |
| Anna Bridge |
180:96ed750bd169 | 4837 | * The function is implemented using an internal 64-bit accumulator. |
| Anna Bridge |
180:96ed750bd169 | 4838 | * The accumulator has a 2.62 format and maintains full precision of the intermediate multiplication results but provides only a single guard bit. |
| Anna Bridge |
180:96ed750bd169 | 4839 | * Thus, if the accumulator result overflows it wraps around rather than clip. |
| Anna Bridge |
180:96ed750bd169 | 4840 | * In order to avoid overflows completely the input signal must be scaled down by 2 bits as there are four additions. |
| Anna Bridge |
180:96ed750bd169 | 4841 | * After all multiply-accumulates are performed, the 2.62 accumulator is truncated to 1.32 format and then saturated to 1.31 format. |
| Anna Bridge |
180:96ed750bd169 | 4842 | */ |
| Anna Bridge |
180:96ed750bd169 | 4843 | CMSIS_INLINE __STATIC_INLINE q31_t arm_pid_q31( |
| Anna Bridge |
180:96ed750bd169 | 4844 | arm_pid_instance_q31 * S, |
| Anna Bridge |
180:96ed750bd169 | 4845 | q31_t in) |
| Anna Bridge |
180:96ed750bd169 | 4846 | { |
| Anna Bridge |
180:96ed750bd169 | 4847 | q63_t acc; |
| Anna Bridge |
180:96ed750bd169 | 4848 | q31_t out; |
| Anna Bridge |
180:96ed750bd169 | 4849 | |
| Anna Bridge |
180:96ed750bd169 | 4850 | /* acc = A0 * x[n] */ |
| Anna Bridge |
180:96ed750bd169 | 4851 | acc = (q63_t) S->A0 * in; |
| Anna Bridge |
180:96ed750bd169 | 4852 | |
| Anna Bridge |
180:96ed750bd169 | 4853 | /* acc += A1 * x[n-1] */ |
| Anna Bridge |
180:96ed750bd169 | 4854 | acc += (q63_t) S->A1 * S->state[0]; |
| Anna Bridge |
180:96ed750bd169 | 4855 | |
| Anna Bridge |
180:96ed750bd169 | 4856 | /* acc += A2 * x[n-2] */ |
| Anna Bridge |
180:96ed750bd169 | 4857 | acc += (q63_t) S->A2 * S->state[1]; |
| Anna Bridge |
180:96ed750bd169 | 4858 | |
| Anna Bridge |
180:96ed750bd169 | 4859 | /* convert output to 1.31 format to add y[n-1] */ |
| Anna Bridge |
180:96ed750bd169 | 4860 | out = (q31_t) (acc >> 31u); |
| Anna Bridge |
180:96ed750bd169 | 4861 | |
| Anna Bridge |
180:96ed750bd169 | 4862 | /* out += y[n-1] */ |
| Anna Bridge |
180:96ed750bd169 | 4863 | out += S->state[2]; |
| Anna Bridge |
180:96ed750bd169 | 4864 | |
| Anna Bridge |
180:96ed750bd169 | 4865 | /* Update state */ |
| Anna Bridge |
180:96ed750bd169 | 4866 | S->state[1] = S->state[0]; |
| Anna Bridge |
180:96ed750bd169 | 4867 | S->state[0] = in; |
| Anna Bridge |
180:96ed750bd169 | 4868 | S->state[2] = out; |
| Anna Bridge |
180:96ed750bd169 | 4869 | |
| Anna Bridge |
180:96ed750bd169 | 4870 | /* return to application */ |
| Anna Bridge |
180:96ed750bd169 | 4871 | return (out); |
| Anna Bridge |
180:96ed750bd169 | 4872 | } |
| Anna Bridge |
180:96ed750bd169 | 4873 | |
| Anna Bridge |
180:96ed750bd169 | 4874 | |
| Anna Bridge |
180:96ed750bd169 | 4875 | /** |
| Anna Bridge |
180:96ed750bd169 | 4876 | * @brief Process function for the Q15 PID Control. |
| Anna Bridge |
180:96ed750bd169 | 4877 | * @param[in,out] S points to an instance of the Q15 PID Control structure |
| Anna Bridge |
180:96ed750bd169 | 4878 | * @param[in] in input sample to process |
| Anna Bridge |
180:96ed750bd169 | 4879 | * @return out processed output sample. |
| Anna Bridge |
180:96ed750bd169 | 4880 | * |
| Anna Bridge |
180:96ed750bd169 | 4881 | * <b>Scaling and Overflow Behavior:</b> |
| Anna Bridge |
180:96ed750bd169 | 4882 | * \par |
| Anna Bridge |
180:96ed750bd169 | 4883 | * The function is implemented using a 64-bit internal accumulator. |
| Anna Bridge |
180:96ed750bd169 | 4884 | * Both Gains and state variables are represented in 1.15 format and multiplications yield a 2.30 result. |
| Anna Bridge |
180:96ed750bd169 | 4885 | * The 2.30 intermediate results are accumulated in a 64-bit accumulator in 34.30 format. |
| Anna Bridge |
180:96ed750bd169 | 4886 | * There is no risk of internal overflow with this approach and the full precision of intermediate multiplications is preserved. |
| Anna Bridge |
180:96ed750bd169 | 4887 | * After all additions have been performed, the accumulator is truncated to 34.15 format by discarding low 15 bits. |
| Anna Bridge |
180:96ed750bd169 | 4888 | * Lastly, the accumulator is saturated to yield a result in 1.15 format. |
| Anna Bridge |
180:96ed750bd169 | 4889 | */ |
| Anna Bridge |
180:96ed750bd169 | 4890 | CMSIS_INLINE __STATIC_INLINE q15_t arm_pid_q15( |
| Anna Bridge |
180:96ed750bd169 | 4891 | arm_pid_instance_q15 * S, |
| Anna Bridge |
180:96ed750bd169 | 4892 | q15_t in) |
| Anna Bridge |
180:96ed750bd169 | 4893 | { |
| Anna Bridge |
180:96ed750bd169 | 4894 | q63_t acc; |
| Anna Bridge |
180:96ed750bd169 | 4895 | q15_t out; |
| Anna Bridge |
180:96ed750bd169 | 4896 | |
| Anna Bridge |
180:96ed750bd169 | 4897 | #if defined (ARM_MATH_DSP) |
| Anna Bridge |
180:96ed750bd169 | 4898 | __SIMD32_TYPE *vstate; |
| Anna Bridge |
180:96ed750bd169 | 4899 | |
| Anna Bridge |
180:96ed750bd169 | 4900 | /* Implementation of PID controller */ |
| Anna Bridge |
180:96ed750bd169 | 4901 | |
| Anna Bridge |
180:96ed750bd169 | 4902 | /* acc = A0 * x[n] */ |
| Anna Bridge |
180:96ed750bd169 | 4903 | acc = (q31_t) __SMUAD((uint32_t)S->A0, (uint32_t)in); |
| Anna Bridge |
180:96ed750bd169 | 4904 | |
| Anna Bridge |
180:96ed750bd169 | 4905 | /* acc += A1 * x[n-1] + A2 * x[n-2] */ |
| Anna Bridge |
180:96ed750bd169 | 4906 | vstate = __SIMD32_CONST(S->state); |
| Anna Bridge |
180:96ed750bd169 | 4907 | acc = (q63_t)__SMLALD((uint32_t)S->A1, (uint32_t)*vstate, (uint64_t)acc); |
| Anna Bridge |
180:96ed750bd169 | 4908 | #else |
| Anna Bridge |
180:96ed750bd169 | 4909 | /* acc = A0 * x[n] */ |
| Anna Bridge |
180:96ed750bd169 | 4910 | acc = ((q31_t) S->A0) * in; |
| Anna Bridge |
180:96ed750bd169 | 4911 | |
| Anna Bridge |
180:96ed750bd169 | 4912 | /* acc += A1 * x[n-1] + A2 * x[n-2] */ |
| Anna Bridge |
180:96ed750bd169 | 4913 | acc += (q31_t) S->A1 * S->state[0]; |
| Anna Bridge |
180:96ed750bd169 | 4914 | acc += (q31_t) S->A2 * S->state[1]; |
| Anna Bridge |
180:96ed750bd169 | 4915 | #endif |
| Anna Bridge |
180:96ed750bd169 | 4916 | |
| Anna Bridge |
180:96ed750bd169 | 4917 | /* acc += y[n-1] */ |
| Anna Bridge |
180:96ed750bd169 | 4918 | acc += (q31_t) S->state[2] << 15; |
| Anna Bridge |
180:96ed750bd169 | 4919 | |
| Anna Bridge |
180:96ed750bd169 | 4920 | /* saturate the output */ |
| Anna Bridge |
180:96ed750bd169 | 4921 | out = (q15_t) (__SSAT((acc >> 15), 16)); |
| Anna Bridge |
180:96ed750bd169 | 4922 | |
| Anna Bridge |
180:96ed750bd169 | 4923 | /* Update state */ |
| Anna Bridge |
180:96ed750bd169 | 4924 | S->state[1] = S->state[0]; |
| Anna Bridge |
180:96ed750bd169 | 4925 | S->state[0] = in; |
| Anna Bridge |
180:96ed750bd169 | 4926 | S->state[2] = out; |
| Anna Bridge |
180:96ed750bd169 | 4927 | |
| Anna Bridge |
180:96ed750bd169 | 4928 | /* return to application */ |
| Anna Bridge |
180:96ed750bd169 | 4929 | return (out); |
| Anna Bridge |
180:96ed750bd169 | 4930 | } |
| Anna Bridge |
180:96ed750bd169 | 4931 | |
| Anna Bridge |
180:96ed750bd169 | 4932 | /** |
| Anna Bridge |
180:96ed750bd169 | 4933 | * @} end of PID group |
| Anna Bridge |
180:96ed750bd169 | 4934 | */ |
| Anna Bridge |
180:96ed750bd169 | 4935 | |
| Anna Bridge |
180:96ed750bd169 | 4936 | |
| Anna Bridge |
180:96ed750bd169 | 4937 | /** |
| Anna Bridge |
180:96ed750bd169 | 4938 | * @brief Floating-point matrix inverse. |
| Anna Bridge |
180:96ed750bd169 | 4939 | * @param[in] src points to the instance of the input floating-point matrix structure. |
| Anna Bridge |
180:96ed750bd169 | 4940 | * @param[out] dst points to the instance of the output floating-point matrix structure. |
| Anna Bridge |
180:96ed750bd169 | 4941 | * @return The function returns ARM_MATH_SIZE_MISMATCH, if the dimensions do not match. |
| Anna Bridge |
180:96ed750bd169 | 4942 | * If the input matrix is singular (does not have an inverse), then the algorithm terminates and returns error status ARM_MATH_SINGULAR. |
| Anna Bridge |
180:96ed750bd169 | 4943 | */ |
| Anna Bridge |
180:96ed750bd169 | 4944 | arm_status arm_mat_inverse_f32( |
| Anna Bridge |
180:96ed750bd169 | 4945 | const arm_matrix_instance_f32 * src, |
| Anna Bridge |
180:96ed750bd169 | 4946 | arm_matrix_instance_f32 * dst); |
| Anna Bridge |
180:96ed750bd169 | 4947 | |
| Anna Bridge |
180:96ed750bd169 | 4948 | |
| Anna Bridge |
180:96ed750bd169 | 4949 | /** |
| Anna Bridge |
180:96ed750bd169 | 4950 | * @brief Floating-point matrix inverse. |
| Anna Bridge |
180:96ed750bd169 | 4951 | * @param[in] src points to the instance of the input floating-point matrix structure. |
| Anna Bridge |
180:96ed750bd169 | 4952 | * @param[out] dst points to the instance of the output floating-point matrix structure. |
| Anna Bridge |
180:96ed750bd169 | 4953 | * @return The function returns ARM_MATH_SIZE_MISMATCH, if the dimensions do not match. |
| Anna Bridge |
180:96ed750bd169 | 4954 | * If the input matrix is singular (does not have an inverse), then the algorithm terminates and returns error status ARM_MATH_SINGULAR. |
| Anna Bridge |
180:96ed750bd169 | 4955 | */ |
| Anna Bridge |
180:96ed750bd169 | 4956 | arm_status arm_mat_inverse_f64( |
| Anna Bridge |
180:96ed750bd169 | 4957 | const arm_matrix_instance_f64 * src, |
| Anna Bridge |
180:96ed750bd169 | 4958 | arm_matrix_instance_f64 * dst); |
| Anna Bridge |
180:96ed750bd169 | 4959 | |
| Anna Bridge |
180:96ed750bd169 | 4960 | |
| Anna Bridge |
180:96ed750bd169 | 4961 | |
| Anna Bridge |
180:96ed750bd169 | 4962 | /** |
| Anna Bridge |
180:96ed750bd169 | 4963 | * @ingroup groupController |
| Anna Bridge |
180:96ed750bd169 | 4964 | */ |
| Anna Bridge |
180:96ed750bd169 | 4965 | |
| Anna Bridge |
180:96ed750bd169 | 4966 | /** |
| Anna Bridge |
180:96ed750bd169 | 4967 | * @defgroup clarke Vector Clarke Transform |
| Anna Bridge |
180:96ed750bd169 | 4968 | * Forward Clarke transform converts the instantaneous stator phases into a two-coordinate time invariant vector. |
| Anna Bridge |
180:96ed750bd169 | 4969 | * Generally the Clarke transform uses three-phase currents <code>Ia, Ib and Ic</code> to calculate currents |
| Anna Bridge |
180:96ed750bd169 | 4970 | * in the two-phase orthogonal stator axis <code>Ialpha</code> and <code>Ibeta</code>. |
| Anna Bridge |
180:96ed750bd169 | 4971 | * When <code>Ialpha</code> is superposed with <code>Ia</code> as shown in the figure below |
| Anna Bridge |
180:96ed750bd169 | 4972 | * \image html clarke.gif Stator current space vector and its components in (a,b). |
| Anna Bridge |
180:96ed750bd169 | 4973 | * and <code>Ia + Ib + Ic = 0</code>, in this condition <code>Ialpha</code> and <code>Ibeta</code> |
| Anna Bridge |
180:96ed750bd169 | 4974 | * can be calculated using only <code>Ia</code> and <code>Ib</code>. |
| Anna Bridge |
180:96ed750bd169 | 4975 | * |
| Anna Bridge |
180:96ed750bd169 | 4976 | * The function operates on a single sample of data and each call to the function returns the processed output. |
| Anna Bridge |
180:96ed750bd169 | 4977 | * The library provides separate functions for Q31 and floating-point data types. |
| Anna Bridge |
180:96ed750bd169 | 4978 | * \par Algorithm |
| Anna Bridge |
180:96ed750bd169 | 4979 | * \image html clarkeFormula.gif |
| Anna Bridge |
180:96ed750bd169 | 4980 | * where <code>Ia</code> and <code>Ib</code> are the instantaneous stator phases and |
| Anna Bridge |
180:96ed750bd169 | 4981 | * <code>pIalpha</code> and <code>pIbeta</code> are the two coordinates of time invariant vector. |
| Anna Bridge |
180:96ed750bd169 | 4982 | * \par Fixed-Point Behavior |
| Anna Bridge |
180:96ed750bd169 | 4983 | * Care must be taken when using the Q31 version of the Clarke transform. |
| Anna Bridge |
180:96ed750bd169 | 4984 | * In particular, the overflow and saturation behavior of the accumulator used must be considered. |
| Anna Bridge |
180:96ed750bd169 | 4985 | * Refer to the function specific documentation below for usage guidelines. |
| Anna Bridge |
180:96ed750bd169 | 4986 | */ |
| Anna Bridge |
180:96ed750bd169 | 4987 | |
| Anna Bridge |
180:96ed750bd169 | 4988 | /** |
| Anna Bridge |
180:96ed750bd169 | 4989 | * @addtogroup clarke |
| Anna Bridge |
180:96ed750bd169 | 4990 | * @{ |
| Anna Bridge |
180:96ed750bd169 | 4991 | */ |
| Anna Bridge |
180:96ed750bd169 | 4992 | |
| Anna Bridge |
180:96ed750bd169 | 4993 | /** |
| Anna Bridge |
180:96ed750bd169 | 4994 | * |
| Anna Bridge |
180:96ed750bd169 | 4995 | * @brief Floating-point Clarke transform |
| Anna Bridge |
180:96ed750bd169 | 4996 | * @param[in] Ia input three-phase coordinate <code>a</code> |
| Anna Bridge |
180:96ed750bd169 | 4997 | * @param[in] Ib input three-phase coordinate <code>b</code> |
| Anna Bridge |
180:96ed750bd169 | 4998 | * @param[out] pIalpha points to output two-phase orthogonal vector axis alpha |
| Anna Bridge |
180:96ed750bd169 | 4999 | * @param[out] pIbeta points to output two-phase orthogonal vector axis beta |
| Anna Bridge |
180:96ed750bd169 | 5000 | */ |
| Anna Bridge |
180:96ed750bd169 | 5001 | CMSIS_INLINE __STATIC_INLINE void arm_clarke_f32( |
| Anna Bridge |
180:96ed750bd169 | 5002 | float32_t Ia, |
| Anna Bridge |
180:96ed750bd169 | 5003 | float32_t Ib, |
| Anna Bridge |
180:96ed750bd169 | 5004 | float32_t * pIalpha, |
| Anna Bridge |
180:96ed750bd169 | 5005 | float32_t * pIbeta) |
| Anna Bridge |
180:96ed750bd169 | 5006 | { |
| Anna Bridge |
180:96ed750bd169 | 5007 | /* Calculate pIalpha using the equation, pIalpha = Ia */ |
| Anna Bridge |
180:96ed750bd169 | 5008 | *pIalpha = Ia; |
| Anna Bridge |
180:96ed750bd169 | 5009 | |
| Anna Bridge |
180:96ed750bd169 | 5010 | /* Calculate pIbeta using the equation, pIbeta = (1/sqrt(3)) * Ia + (2/sqrt(3)) * Ib */ |
| Anna Bridge |
180:96ed750bd169 | 5011 | *pIbeta = ((float32_t) 0.57735026919 * Ia + (float32_t) 1.15470053838 * Ib); |
| Anna Bridge |
180:96ed750bd169 | 5012 | } |
| Anna Bridge |
180:96ed750bd169 | 5013 | |
| Anna Bridge |
180:96ed750bd169 | 5014 | |
| Anna Bridge |
180:96ed750bd169 | 5015 | /** |
| Anna Bridge |
180:96ed750bd169 | 5016 | * @brief Clarke transform for Q31 version |
| Anna Bridge |
180:96ed750bd169 | 5017 | * @param[in] Ia input three-phase coordinate <code>a</code> |
| Anna Bridge |
180:96ed750bd169 | 5018 | * @param[in] Ib input three-phase coordinate <code>b</code> |
| Anna Bridge |
180:96ed750bd169 | 5019 | * @param[out] pIalpha points to output two-phase orthogonal vector axis alpha |
| Anna Bridge |
180:96ed750bd169 | 5020 | * @param[out] pIbeta points to output two-phase orthogonal vector axis beta |
| Anna Bridge |
180:96ed750bd169 | 5021 | * |
| Anna Bridge |
180:96ed750bd169 | 5022 | * <b>Scaling and Overflow Behavior:</b> |
| Anna Bridge |
180:96ed750bd169 | 5023 | * \par |
| Anna Bridge |
180:96ed750bd169 | 5024 | * The function is implemented using an internal 32-bit accumulator. |
| Anna Bridge |
180:96ed750bd169 | 5025 | * The accumulator maintains 1.31 format by truncating lower 31 bits of the intermediate multiplication in 2.62 format. |
| Anna Bridge |
180:96ed750bd169 | 5026 | * There is saturation on the addition, hence there is no risk of overflow. |
| Anna Bridge |
180:96ed750bd169 | 5027 | */ |
| Anna Bridge |
180:96ed750bd169 | 5028 | CMSIS_INLINE __STATIC_INLINE void arm_clarke_q31( |
| Anna Bridge |
180:96ed750bd169 | 5029 | q31_t Ia, |
| Anna Bridge |
180:96ed750bd169 | 5030 | q31_t Ib, |
| Anna Bridge |
180:96ed750bd169 | 5031 | q31_t * pIalpha, |
| Anna Bridge |
180:96ed750bd169 | 5032 | q31_t * pIbeta) |
| Anna Bridge |
180:96ed750bd169 | 5033 | { |
| Anna Bridge |
180:96ed750bd169 | 5034 | q31_t product1, product2; /* Temporary variables used to store intermediate results */ |
| Anna Bridge |
180:96ed750bd169 | 5035 | |
| Anna Bridge |
180:96ed750bd169 | 5036 | /* Calculating pIalpha from Ia by equation pIalpha = Ia */ |
| Anna Bridge |
180:96ed750bd169 | 5037 | *pIalpha = Ia; |
| Anna Bridge |
180:96ed750bd169 | 5038 | |
| Anna Bridge |
180:96ed750bd169 | 5039 | /* Intermediate product is calculated by (1/(sqrt(3)) * Ia) */ |
| Anna Bridge |
180:96ed750bd169 | 5040 | product1 = (q31_t) (((q63_t) Ia * 0x24F34E8B) >> 30); |
| Anna Bridge |
180:96ed750bd169 | 5041 | |
| Anna Bridge |
180:96ed750bd169 | 5042 | /* Intermediate product is calculated by (2/sqrt(3) * Ib) */ |
| Anna Bridge |
180:96ed750bd169 | 5043 | product2 = (q31_t) (((q63_t) Ib * 0x49E69D16) >> 30); |
| Anna Bridge |
180:96ed750bd169 | 5044 | |
| Anna Bridge |
180:96ed750bd169 | 5045 | /* pIbeta is calculated by adding the intermediate products */ |
| Anna Bridge |
180:96ed750bd169 | 5046 | *pIbeta = __QADD(product1, product2); |
| Anna Bridge |
180:96ed750bd169 | 5047 | } |
| Anna Bridge |
180:96ed750bd169 | 5048 | |
| Anna Bridge |
180:96ed750bd169 | 5049 | /** |
| Anna Bridge |
180:96ed750bd169 | 5050 | * @} end of clarke group |
| Anna Bridge |
180:96ed750bd169 | 5051 | */ |
| Anna Bridge |
180:96ed750bd169 | 5052 | |
| Anna Bridge |
180:96ed750bd169 | 5053 | /** |
| Anna Bridge |
180:96ed750bd169 | 5054 | * @brief Converts the elements of the Q7 vector to Q31 vector. |
| Anna Bridge |
180:96ed750bd169 | 5055 | * @param[in] pSrc input pointer |
| Anna Bridge |
180:96ed750bd169 | 5056 | * @param[out] pDst output pointer |
| Anna Bridge |
180:96ed750bd169 | 5057 | * @param[in] blockSize number of samples to process |
| Anna Bridge |
180:96ed750bd169 | 5058 | */ |
| Anna Bridge |
180:96ed750bd169 | 5059 | void arm_q7_to_q31( |
| Anna Bridge |
180:96ed750bd169 | 5060 | q7_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 5061 | q31_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 5062 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 5063 | |
| Anna Bridge |
180:96ed750bd169 | 5064 | |
| Anna Bridge |
180:96ed750bd169 | 5065 | |
| Anna Bridge |
180:96ed750bd169 | 5066 | /** |
| Anna Bridge |
180:96ed750bd169 | 5067 | * @ingroup groupController |
| Anna Bridge |
180:96ed750bd169 | 5068 | */ |
| Anna Bridge |
180:96ed750bd169 | 5069 | |
| Anna Bridge |
180:96ed750bd169 | 5070 | /** |
| Anna Bridge |
180:96ed750bd169 | 5071 | * @defgroup inv_clarke Vector Inverse Clarke Transform |
| Anna Bridge |
180:96ed750bd169 | 5072 | * Inverse Clarke transform converts the two-coordinate time invariant vector into instantaneous stator phases. |
| Anna Bridge |
180:96ed750bd169 | 5073 | * |
| Anna Bridge |
180:96ed750bd169 | 5074 | * The function operates on a single sample of data and each call to the function returns the processed output. |
| Anna Bridge |
180:96ed750bd169 | 5075 | * The library provides separate functions for Q31 and floating-point data types. |
| Anna Bridge |
180:96ed750bd169 | 5076 | * \par Algorithm |
| Anna Bridge |
180:96ed750bd169 | 5077 | * \image html clarkeInvFormula.gif |
| Anna Bridge |
180:96ed750bd169 | 5078 | * where <code>pIa</code> and <code>pIb</code> are the instantaneous stator phases and |
| Anna Bridge |
180:96ed750bd169 | 5079 | * <code>Ialpha</code> and <code>Ibeta</code> are the two coordinates of time invariant vector. |
| Anna Bridge |
180:96ed750bd169 | 5080 | * \par Fixed-Point Behavior |
| Anna Bridge |
180:96ed750bd169 | 5081 | * Care must be taken when using the Q31 version of the Clarke transform. |
| Anna Bridge |
180:96ed750bd169 | 5082 | * In particular, the overflow and saturation behavior of the accumulator used must be considered. |
| Anna Bridge |
180:96ed750bd169 | 5083 | * Refer to the function specific documentation below for usage guidelines. |
| Anna Bridge |
180:96ed750bd169 | 5084 | */ |
| Anna Bridge |
180:96ed750bd169 | 5085 | |
| Anna Bridge |
180:96ed750bd169 | 5086 | /** |
| Anna Bridge |
180:96ed750bd169 | 5087 | * @addtogroup inv_clarke |
| Anna Bridge |
180:96ed750bd169 | 5088 | * @{ |
| Anna Bridge |
180:96ed750bd169 | 5089 | */ |
| Anna Bridge |
180:96ed750bd169 | 5090 | |
| Anna Bridge |
180:96ed750bd169 | 5091 | /** |
| Anna Bridge |
180:96ed750bd169 | 5092 | * @brief Floating-point Inverse Clarke transform |
| Anna Bridge |
180:96ed750bd169 | 5093 | * @param[in] Ialpha input two-phase orthogonal vector axis alpha |
| Anna Bridge |
180:96ed750bd169 | 5094 | * @param[in] Ibeta input two-phase orthogonal vector axis beta |
| Anna Bridge |
180:96ed750bd169 | 5095 | * @param[out] pIa points to output three-phase coordinate <code>a</code> |
| Anna Bridge |
180:96ed750bd169 | 5096 | * @param[out] pIb points to output three-phase coordinate <code>b</code> |
| Anna Bridge |
180:96ed750bd169 | 5097 | */ |
| Anna Bridge |
180:96ed750bd169 | 5098 | CMSIS_INLINE __STATIC_INLINE void arm_inv_clarke_f32( |
| Anna Bridge |
180:96ed750bd169 | 5099 | float32_t Ialpha, |
| Anna Bridge |
180:96ed750bd169 | 5100 | float32_t Ibeta, |
| Anna Bridge |
180:96ed750bd169 | 5101 | float32_t * pIa, |
| Anna Bridge |
180:96ed750bd169 | 5102 | float32_t * pIb) |
| Anna Bridge |
180:96ed750bd169 | 5103 | { |
| Anna Bridge |
180:96ed750bd169 | 5104 | /* Calculating pIa from Ialpha by equation pIa = Ialpha */ |
| Anna Bridge |
180:96ed750bd169 | 5105 | *pIa = Ialpha; |
| Anna Bridge |
180:96ed750bd169 | 5106 | |
| Anna Bridge |
180:96ed750bd169 | 5107 | /* Calculating pIb from Ialpha and Ibeta by equation pIb = -(1/2) * Ialpha + (sqrt(3)/2) * Ibeta */ |
| Anna Bridge |
180:96ed750bd169 | 5108 | *pIb = -0.5f * Ialpha + 0.8660254039f * Ibeta; |
| Anna Bridge |
180:96ed750bd169 | 5109 | } |
| Anna Bridge |
180:96ed750bd169 | 5110 | |
| Anna Bridge |
180:96ed750bd169 | 5111 | |
| Anna Bridge |
180:96ed750bd169 | 5112 | /** |
| Anna Bridge |
180:96ed750bd169 | 5113 | * @brief Inverse Clarke transform for Q31 version |
| Anna Bridge |
180:96ed750bd169 | 5114 | * @param[in] Ialpha input two-phase orthogonal vector axis alpha |
| Anna Bridge |
180:96ed750bd169 | 5115 | * @param[in] Ibeta input two-phase orthogonal vector axis beta |
| Anna Bridge |
180:96ed750bd169 | 5116 | * @param[out] pIa points to output three-phase coordinate <code>a</code> |
| Anna Bridge |
180:96ed750bd169 | 5117 | * @param[out] pIb points to output three-phase coordinate <code>b</code> |
| Anna Bridge |
180:96ed750bd169 | 5118 | * |
| Anna Bridge |
180:96ed750bd169 | 5119 | * <b>Scaling and Overflow Behavior:</b> |
| Anna Bridge |
180:96ed750bd169 | 5120 | * \par |
| Anna Bridge |
180:96ed750bd169 | 5121 | * The function is implemented using an internal 32-bit accumulator. |
| Anna Bridge |
180:96ed750bd169 | 5122 | * The accumulator maintains 1.31 format by truncating lower 31 bits of the intermediate multiplication in 2.62 format. |
| Anna Bridge |
180:96ed750bd169 | 5123 | * There is saturation on the subtraction, hence there is no risk of overflow. |
| Anna Bridge |
180:96ed750bd169 | 5124 | */ |
| Anna Bridge |
180:96ed750bd169 | 5125 | CMSIS_INLINE __STATIC_INLINE void arm_inv_clarke_q31( |
| Anna Bridge |
180:96ed750bd169 | 5126 | q31_t Ialpha, |
| Anna Bridge |
180:96ed750bd169 | 5127 | q31_t Ibeta, |
| Anna Bridge |
180:96ed750bd169 | 5128 | q31_t * pIa, |
| Anna Bridge |
180:96ed750bd169 | 5129 | q31_t * pIb) |
| Anna Bridge |
180:96ed750bd169 | 5130 | { |
| Anna Bridge |
180:96ed750bd169 | 5131 | q31_t product1, product2; /* Temporary variables used to store intermediate results */ |
| Anna Bridge |
180:96ed750bd169 | 5132 | |
| Anna Bridge |
180:96ed750bd169 | 5133 | /* Calculating pIa from Ialpha by equation pIa = Ialpha */ |
| Anna Bridge |
180:96ed750bd169 | 5134 | *pIa = Ialpha; |
| Anna Bridge |
180:96ed750bd169 | 5135 | |
| Anna Bridge |
180:96ed750bd169 | 5136 | /* Intermediate product is calculated by (1/(2*sqrt(3)) * Ia) */ |
| Anna Bridge |
180:96ed750bd169 | 5137 | product1 = (q31_t) (((q63_t) (Ialpha) * (0x40000000)) >> 31); |
| Anna Bridge |
180:96ed750bd169 | 5138 | |
| Anna Bridge |
180:96ed750bd169 | 5139 | /* Intermediate product is calculated by (1/sqrt(3) * pIb) */ |
| Anna Bridge |
180:96ed750bd169 | 5140 | product2 = (q31_t) (((q63_t) (Ibeta) * (0x6ED9EBA1)) >> 31); |
| Anna Bridge |
180:96ed750bd169 | 5141 | |
| Anna Bridge |
180:96ed750bd169 | 5142 | /* pIb is calculated by subtracting the products */ |
| Anna Bridge |
180:96ed750bd169 | 5143 | *pIb = __QSUB(product2, product1); |
| Anna Bridge |
180:96ed750bd169 | 5144 | } |
| Anna Bridge |
180:96ed750bd169 | 5145 | |
| Anna Bridge |
180:96ed750bd169 | 5146 | /** |
| Anna Bridge |
180:96ed750bd169 | 5147 | * @} end of inv_clarke group |
| Anna Bridge |
180:96ed750bd169 | 5148 | */ |
| Anna Bridge |
180:96ed750bd169 | 5149 | |
| Anna Bridge |
180:96ed750bd169 | 5150 | /** |
| Anna Bridge |
180:96ed750bd169 | 5151 | * @brief Converts the elements of the Q7 vector to Q15 vector. |
| Anna Bridge |
180:96ed750bd169 | 5152 | * @param[in] pSrc input pointer |
| Anna Bridge |
180:96ed750bd169 | 5153 | * @param[out] pDst output pointer |
| Anna Bridge |
180:96ed750bd169 | 5154 | * @param[in] blockSize number of samples to process |
| Anna Bridge |
180:96ed750bd169 | 5155 | */ |
| Anna Bridge |
180:96ed750bd169 | 5156 | void arm_q7_to_q15( |
| Anna Bridge |
180:96ed750bd169 | 5157 | q7_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 5158 | q15_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 5159 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 5160 | |
| Anna Bridge |
180:96ed750bd169 | 5161 | |
| Anna Bridge |
180:96ed750bd169 | 5162 | |
| Anna Bridge |
180:96ed750bd169 | 5163 | /** |
| Anna Bridge |
180:96ed750bd169 | 5164 | * @ingroup groupController |
| Anna Bridge |
180:96ed750bd169 | 5165 | */ |
| Anna Bridge |
180:96ed750bd169 | 5166 | |
| Anna Bridge |
180:96ed750bd169 | 5167 | /** |
| Anna Bridge |
180:96ed750bd169 | 5168 | * @defgroup park Vector Park Transform |
| Anna Bridge |
180:96ed750bd169 | 5169 | * |
| Anna Bridge |
180:96ed750bd169 | 5170 | * Forward Park transform converts the input two-coordinate vector to flux and torque components. |
| Anna Bridge |
180:96ed750bd169 | 5171 | * The Park transform can be used to realize the transformation of the <code>Ialpha</code> and the <code>Ibeta</code> currents |
| Anna Bridge |
180:96ed750bd169 | 5172 | * from the stationary to the moving reference frame and control the spatial relationship between |
| Anna Bridge |
180:96ed750bd169 | 5173 | * the stator vector current and rotor flux vector. |
| Anna Bridge |
180:96ed750bd169 | 5174 | * If we consider the d axis aligned with the rotor flux, the diagram below shows the |
| Anna Bridge |
180:96ed750bd169 | 5175 | * current vector and the relationship from the two reference frames: |
| Anna Bridge |
180:96ed750bd169 | 5176 | * \image html park.gif "Stator current space vector and its component in (a,b) and in the d,q rotating reference frame" |
| Anna Bridge |
180:96ed750bd169 | 5177 | * |
| Anna Bridge |
180:96ed750bd169 | 5178 | * The function operates on a single sample of data and each call to the function returns the processed output. |
| Anna Bridge |
180:96ed750bd169 | 5179 | * The library provides separate functions for Q31 and floating-point data types. |
| Anna Bridge |
180:96ed750bd169 | 5180 | * \par Algorithm |
| Anna Bridge |
180:96ed750bd169 | 5181 | * \image html parkFormula.gif |
| Anna Bridge |
180:96ed750bd169 | 5182 | * where <code>Ialpha</code> and <code>Ibeta</code> are the stator vector components, |
| Anna Bridge |
180:96ed750bd169 | 5183 | * <code>pId</code> and <code>pIq</code> are rotor vector components and <code>cosVal</code> and <code>sinVal</code> are the |
| Anna Bridge |
180:96ed750bd169 | 5184 | * cosine and sine values of theta (rotor flux position). |
| Anna Bridge |
180:96ed750bd169 | 5185 | * \par Fixed-Point Behavior |
| Anna Bridge |
180:96ed750bd169 | 5186 | * Care must be taken when using the Q31 version of the Park transform. |
| Anna Bridge |
180:96ed750bd169 | 5187 | * In particular, the overflow and saturation behavior of the accumulator used must be considered. |
| Anna Bridge |
180:96ed750bd169 | 5188 | * Refer to the function specific documentation below for usage guidelines. |
| Anna Bridge |
180:96ed750bd169 | 5189 | */ |
| Anna Bridge |
180:96ed750bd169 | 5190 | |
| Anna Bridge |
180:96ed750bd169 | 5191 | /** |
| Anna Bridge |
180:96ed750bd169 | 5192 | * @addtogroup park |
| Anna Bridge |
180:96ed750bd169 | 5193 | * @{ |
| Anna Bridge |
180:96ed750bd169 | 5194 | */ |
| Anna Bridge |
180:96ed750bd169 | 5195 | |
| Anna Bridge |
180:96ed750bd169 | 5196 | /** |
| Anna Bridge |
180:96ed750bd169 | 5197 | * @brief Floating-point Park transform |
| Anna Bridge |
180:96ed750bd169 | 5198 | * @param[in] Ialpha input two-phase vector coordinate alpha |
| Anna Bridge |
180:96ed750bd169 | 5199 | * @param[in] Ibeta input two-phase vector coordinate beta |
| Anna Bridge |
180:96ed750bd169 | 5200 | * @param[out] pId points to output rotor reference frame d |
| Anna Bridge |
180:96ed750bd169 | 5201 | * @param[out] pIq points to output rotor reference frame q |
| Anna Bridge |
180:96ed750bd169 | 5202 | * @param[in] sinVal sine value of rotation angle theta |
| Anna Bridge |
180:96ed750bd169 | 5203 | * @param[in] cosVal cosine value of rotation angle theta |
| Anna Bridge |
180:96ed750bd169 | 5204 | * |
| Anna Bridge |
180:96ed750bd169 | 5205 | * The function implements the forward Park transform. |
| Anna Bridge |
180:96ed750bd169 | 5206 | * |
| Anna Bridge |
180:96ed750bd169 | 5207 | */ |
| Anna Bridge |
180:96ed750bd169 | 5208 | CMSIS_INLINE __STATIC_INLINE void arm_park_f32( |
| Anna Bridge |
180:96ed750bd169 | 5209 | float32_t Ialpha, |
| Anna Bridge |
180:96ed750bd169 | 5210 | float32_t Ibeta, |
| Anna Bridge |
180:96ed750bd169 | 5211 | float32_t * pId, |
| Anna Bridge |
180:96ed750bd169 | 5212 | float32_t * pIq, |
| Anna Bridge |
180:96ed750bd169 | 5213 | float32_t sinVal, |
| Anna Bridge |
180:96ed750bd169 | 5214 | float32_t cosVal) |
| Anna Bridge |
180:96ed750bd169 | 5215 | { |
| Anna Bridge |
180:96ed750bd169 | 5216 | /* Calculate pId using the equation, pId = Ialpha * cosVal + Ibeta * sinVal */ |
| Anna Bridge |
180:96ed750bd169 | 5217 | *pId = Ialpha * cosVal + Ibeta * sinVal; |
| Anna Bridge |
180:96ed750bd169 | 5218 | |
| Anna Bridge |
180:96ed750bd169 | 5219 | /* Calculate pIq using the equation, pIq = - Ialpha * sinVal + Ibeta * cosVal */ |
| Anna Bridge |
180:96ed750bd169 | 5220 | *pIq = -Ialpha * sinVal + Ibeta * cosVal; |
| Anna Bridge |
180:96ed750bd169 | 5221 | } |
| Anna Bridge |
180:96ed750bd169 | 5222 | |
| Anna Bridge |
180:96ed750bd169 | 5223 | |
| Anna Bridge |
180:96ed750bd169 | 5224 | /** |
| Anna Bridge |
180:96ed750bd169 | 5225 | * @brief Park transform for Q31 version |
| Anna Bridge |
180:96ed750bd169 | 5226 | * @param[in] Ialpha input two-phase vector coordinate alpha |
| Anna Bridge |
180:96ed750bd169 | 5227 | * @param[in] Ibeta input two-phase vector coordinate beta |
| Anna Bridge |
180:96ed750bd169 | 5228 | * @param[out] pId points to output rotor reference frame d |
| Anna Bridge |
180:96ed750bd169 | 5229 | * @param[out] pIq points to output rotor reference frame q |
| Anna Bridge |
180:96ed750bd169 | 5230 | * @param[in] sinVal sine value of rotation angle theta |
| Anna Bridge |
180:96ed750bd169 | 5231 | * @param[in] cosVal cosine value of rotation angle theta |
| Anna Bridge |
180:96ed750bd169 | 5232 | * |
| Anna Bridge |
180:96ed750bd169 | 5233 | * <b>Scaling and Overflow Behavior:</b> |
| Anna Bridge |
180:96ed750bd169 | 5234 | * \par |
| Anna Bridge |
180:96ed750bd169 | 5235 | * The function is implemented using an internal 32-bit accumulator. |
| Anna Bridge |
180:96ed750bd169 | 5236 | * The accumulator maintains 1.31 format by truncating lower 31 bits of the intermediate multiplication in 2.62 format. |
| Anna Bridge |
180:96ed750bd169 | 5237 | * There is saturation on the addition and subtraction, hence there is no risk of overflow. |
| Anna Bridge |
180:96ed750bd169 | 5238 | */ |
| Anna Bridge |
180:96ed750bd169 | 5239 | CMSIS_INLINE __STATIC_INLINE void arm_park_q31( |
| Anna Bridge |
180:96ed750bd169 | 5240 | q31_t Ialpha, |
| Anna Bridge |
180:96ed750bd169 | 5241 | q31_t Ibeta, |
| Anna Bridge |
180:96ed750bd169 | 5242 | q31_t * pId, |
| Anna Bridge |
180:96ed750bd169 | 5243 | q31_t * pIq, |
| Anna Bridge |
180:96ed750bd169 | 5244 | q31_t sinVal, |
| Anna Bridge |
180:96ed750bd169 | 5245 | q31_t cosVal) |
| Anna Bridge |
180:96ed750bd169 | 5246 | { |
| Anna Bridge |
180:96ed750bd169 | 5247 | q31_t product1, product2; /* Temporary variables used to store intermediate results */ |
| Anna Bridge |
180:96ed750bd169 | 5248 | q31_t product3, product4; /* Temporary variables used to store intermediate results */ |
| Anna Bridge |
180:96ed750bd169 | 5249 | |
| Anna Bridge |
180:96ed750bd169 | 5250 | /* Intermediate product is calculated by (Ialpha * cosVal) */ |
| Anna Bridge |
180:96ed750bd169 | 5251 | product1 = (q31_t) (((q63_t) (Ialpha) * (cosVal)) >> 31); |
| Anna Bridge |
180:96ed750bd169 | 5252 | |
| Anna Bridge |
180:96ed750bd169 | 5253 | /* Intermediate product is calculated by (Ibeta * sinVal) */ |
| Anna Bridge |
180:96ed750bd169 | 5254 | product2 = (q31_t) (((q63_t) (Ibeta) * (sinVal)) >> 31); |
| Anna Bridge |
180:96ed750bd169 | 5255 | |
| Anna Bridge |
180:96ed750bd169 | 5256 | |
| Anna Bridge |
180:96ed750bd169 | 5257 | /* Intermediate product is calculated by (Ialpha * sinVal) */ |
| Anna Bridge |
180:96ed750bd169 | 5258 | product3 = (q31_t) (((q63_t) (Ialpha) * (sinVal)) >> 31); |
| Anna Bridge |
180:96ed750bd169 | 5259 | |
| Anna Bridge |
180:96ed750bd169 | 5260 | /* Intermediate product is calculated by (Ibeta * cosVal) */ |
| Anna Bridge |
180:96ed750bd169 | 5261 | product4 = (q31_t) (((q63_t) (Ibeta) * (cosVal)) >> 31); |
| Anna Bridge |
180:96ed750bd169 | 5262 | |
| Anna Bridge |
180:96ed750bd169 | 5263 | /* Calculate pId by adding the two intermediate products 1 and 2 */ |
| Anna Bridge |
180:96ed750bd169 | 5264 | *pId = __QADD(product1, product2); |
| Anna Bridge |
180:96ed750bd169 | 5265 | |
| Anna Bridge |
180:96ed750bd169 | 5266 | /* Calculate pIq by subtracting the two intermediate products 3 from 4 */ |
| Anna Bridge |
180:96ed750bd169 | 5267 | *pIq = __QSUB(product4, product3); |
| Anna Bridge |
180:96ed750bd169 | 5268 | } |
| Anna Bridge |
180:96ed750bd169 | 5269 | |
| Anna Bridge |
180:96ed750bd169 | 5270 | /** |
| Anna Bridge |
180:96ed750bd169 | 5271 | * @} end of park group |
| Anna Bridge |
180:96ed750bd169 | 5272 | */ |
| Anna Bridge |
180:96ed750bd169 | 5273 | |
| Anna Bridge |
180:96ed750bd169 | 5274 | /** |
| Anna Bridge |
180:96ed750bd169 | 5275 | * @brief Converts the elements of the Q7 vector to floating-point vector. |
| Anna Bridge |
180:96ed750bd169 | 5276 | * @param[in] pSrc is input pointer |
| Anna Bridge |
180:96ed750bd169 | 5277 | * @param[out] pDst is output pointer |
| Anna Bridge |
180:96ed750bd169 | 5278 | * @param[in] blockSize is the number of samples to process |
| Anna Bridge |
180:96ed750bd169 | 5279 | */ |
| Anna Bridge |
180:96ed750bd169 | 5280 | void arm_q7_to_float( |
| Anna Bridge |
180:96ed750bd169 | 5281 | q7_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 5282 | float32_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 5283 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 5284 | |
| Anna Bridge |
180:96ed750bd169 | 5285 | |
| Anna Bridge |
180:96ed750bd169 | 5286 | /** |
| Anna Bridge |
180:96ed750bd169 | 5287 | * @ingroup groupController |
| Anna Bridge |
180:96ed750bd169 | 5288 | */ |
| Anna Bridge |
180:96ed750bd169 | 5289 | |
| Anna Bridge |
180:96ed750bd169 | 5290 | /** |
| Anna Bridge |
180:96ed750bd169 | 5291 | * @defgroup inv_park Vector Inverse Park transform |
| Anna Bridge |
180:96ed750bd169 | 5292 | * Inverse Park transform converts the input flux and torque components to two-coordinate vector. |
| Anna Bridge |
180:96ed750bd169 | 5293 | * |
| Anna Bridge |
180:96ed750bd169 | 5294 | * The function operates on a single sample of data and each call to the function returns the processed output. |
| Anna Bridge |
180:96ed750bd169 | 5295 | * The library provides separate functions for Q31 and floating-point data types. |
| Anna Bridge |
180:96ed750bd169 | 5296 | * \par Algorithm |
| Anna Bridge |
180:96ed750bd169 | 5297 | * \image html parkInvFormula.gif |
| Anna Bridge |
180:96ed750bd169 | 5298 | * where <code>pIalpha</code> and <code>pIbeta</code> are the stator vector components, |
| Anna Bridge |
180:96ed750bd169 | 5299 | * <code>Id</code> and <code>Iq</code> are rotor vector components and <code>cosVal</code> and <code>sinVal</code> are the |
| Anna Bridge |
180:96ed750bd169 | 5300 | * cosine and sine values of theta (rotor flux position). |
| Anna Bridge |
180:96ed750bd169 | 5301 | * \par Fixed-Point Behavior |
| Anna Bridge |
180:96ed750bd169 | 5302 | * Care must be taken when using the Q31 version of the Park transform. |
| Anna Bridge |
180:96ed750bd169 | 5303 | * In particular, the overflow and saturation behavior of the accumulator used must be considered. |
| Anna Bridge |
180:96ed750bd169 | 5304 | * Refer to the function specific documentation below for usage guidelines. |
| Anna Bridge |
180:96ed750bd169 | 5305 | */ |
| Anna Bridge |
180:96ed750bd169 | 5306 | |
| Anna Bridge |
180:96ed750bd169 | 5307 | /** |
| Anna Bridge |
180:96ed750bd169 | 5308 | * @addtogroup inv_park |
| Anna Bridge |
180:96ed750bd169 | 5309 | * @{ |
| Anna Bridge |
180:96ed750bd169 | 5310 | */ |
| Anna Bridge |
180:96ed750bd169 | 5311 | |
| Anna Bridge |
180:96ed750bd169 | 5312 | /** |
| Anna Bridge |
180:96ed750bd169 | 5313 | * @brief Floating-point Inverse Park transform |
| Anna Bridge |
180:96ed750bd169 | 5314 | * @param[in] Id input coordinate of rotor reference frame d |
| Anna Bridge |
180:96ed750bd169 | 5315 | * @param[in] Iq input coordinate of rotor reference frame q |
| Anna Bridge |
180:96ed750bd169 | 5316 | * @param[out] pIalpha points to output two-phase orthogonal vector axis alpha |
| Anna Bridge |
180:96ed750bd169 | 5317 | * @param[out] pIbeta points to output two-phase orthogonal vector axis beta |
| Anna Bridge |
180:96ed750bd169 | 5318 | * @param[in] sinVal sine value of rotation angle theta |
| Anna Bridge |
180:96ed750bd169 | 5319 | * @param[in] cosVal cosine value of rotation angle theta |
| Anna Bridge |
180:96ed750bd169 | 5320 | */ |
| Anna Bridge |
180:96ed750bd169 | 5321 | CMSIS_INLINE __STATIC_INLINE void arm_inv_park_f32( |
| Anna Bridge |
180:96ed750bd169 | 5322 | float32_t Id, |
| Anna Bridge |
180:96ed750bd169 | 5323 | float32_t Iq, |
| Anna Bridge |
180:96ed750bd169 | 5324 | float32_t * pIalpha, |
| Anna Bridge |
180:96ed750bd169 | 5325 | float32_t * pIbeta, |
| Anna Bridge |
180:96ed750bd169 | 5326 | float32_t sinVal, |
| Anna Bridge |
180:96ed750bd169 | 5327 | float32_t cosVal) |
| Anna Bridge |
180:96ed750bd169 | 5328 | { |
| Anna Bridge |
180:96ed750bd169 | 5329 | /* Calculate pIalpha using the equation, pIalpha = Id * cosVal - Iq * sinVal */ |
| Anna Bridge |
180:96ed750bd169 | 5330 | *pIalpha = Id * cosVal - Iq * sinVal; |
| Anna Bridge |
180:96ed750bd169 | 5331 | |
| Anna Bridge |
180:96ed750bd169 | 5332 | /* Calculate pIbeta using the equation, pIbeta = Id * sinVal + Iq * cosVal */ |
| Anna Bridge |
180:96ed750bd169 | 5333 | *pIbeta = Id * sinVal + Iq * cosVal; |
| Anna Bridge |
180:96ed750bd169 | 5334 | } |
| Anna Bridge |
180:96ed750bd169 | 5335 | |
| Anna Bridge |
180:96ed750bd169 | 5336 | |
| Anna Bridge |
180:96ed750bd169 | 5337 | /** |
| Anna Bridge |
180:96ed750bd169 | 5338 | * @brief Inverse Park transform for Q31 version |
| Anna Bridge |
180:96ed750bd169 | 5339 | * @param[in] Id input coordinate of rotor reference frame d |
| Anna Bridge |
180:96ed750bd169 | 5340 | * @param[in] Iq input coordinate of rotor reference frame q |
| Anna Bridge |
180:96ed750bd169 | 5341 | * @param[out] pIalpha points to output two-phase orthogonal vector axis alpha |
| Anna Bridge |
180:96ed750bd169 | 5342 | * @param[out] pIbeta points to output two-phase orthogonal vector axis beta |
| Anna Bridge |
180:96ed750bd169 | 5343 | * @param[in] sinVal sine value of rotation angle theta |
| Anna Bridge |
180:96ed750bd169 | 5344 | * @param[in] cosVal cosine value of rotation angle theta |
| Anna Bridge |
180:96ed750bd169 | 5345 | * |
| Anna Bridge |
180:96ed750bd169 | 5346 | * <b>Scaling and Overflow Behavior:</b> |
| Anna Bridge |
180:96ed750bd169 | 5347 | * \par |
| Anna Bridge |
180:96ed750bd169 | 5348 | * The function is implemented using an internal 32-bit accumulator. |
| Anna Bridge |
180:96ed750bd169 | 5349 | * The accumulator maintains 1.31 format by truncating lower 31 bits of the intermediate multiplication in 2.62 format. |
| Anna Bridge |
180:96ed750bd169 | 5350 | * There is saturation on the addition, hence there is no risk of overflow. |
| Anna Bridge |
180:96ed750bd169 | 5351 | */ |
| Anna Bridge |
180:96ed750bd169 | 5352 | CMSIS_INLINE __STATIC_INLINE void arm_inv_park_q31( |
| Anna Bridge |
180:96ed750bd169 | 5353 | q31_t Id, |
| Anna Bridge |
180:96ed750bd169 | 5354 | q31_t Iq, |
| Anna Bridge |
180:96ed750bd169 | 5355 | q31_t * pIalpha, |
| Anna Bridge |
180:96ed750bd169 | 5356 | q31_t * pIbeta, |
| Anna Bridge |
180:96ed750bd169 | 5357 | q31_t sinVal, |
| Anna Bridge |
180:96ed750bd169 | 5358 | q31_t cosVal) |
| Anna Bridge |
180:96ed750bd169 | 5359 | { |
| Anna Bridge |
180:96ed750bd169 | 5360 | q31_t product1, product2; /* Temporary variables used to store intermediate results */ |
| Anna Bridge |
180:96ed750bd169 | 5361 | q31_t product3, product4; /* Temporary variables used to store intermediate results */ |
| Anna Bridge |
180:96ed750bd169 | 5362 | |
| Anna Bridge |
180:96ed750bd169 | 5363 | /* Intermediate product is calculated by (Id * cosVal) */ |
| Anna Bridge |
180:96ed750bd169 | 5364 | product1 = (q31_t) (((q63_t) (Id) * (cosVal)) >> 31); |
| Anna Bridge |
180:96ed750bd169 | 5365 | |
| Anna Bridge |
180:96ed750bd169 | 5366 | /* Intermediate product is calculated by (Iq * sinVal) */ |
| Anna Bridge |
180:96ed750bd169 | 5367 | product2 = (q31_t) (((q63_t) (Iq) * (sinVal)) >> 31); |
| Anna Bridge |
180:96ed750bd169 | 5368 | |
| Anna Bridge |
180:96ed750bd169 | 5369 | |
| Anna Bridge |
180:96ed750bd169 | 5370 | /* Intermediate product is calculated by (Id * sinVal) */ |
| Anna Bridge |
180:96ed750bd169 | 5371 | product3 = (q31_t) (((q63_t) (Id) * (sinVal)) >> 31); |
| Anna Bridge |
180:96ed750bd169 | 5372 | |
| Anna Bridge |
180:96ed750bd169 | 5373 | /* Intermediate product is calculated by (Iq * cosVal) */ |
| Anna Bridge |
180:96ed750bd169 | 5374 | product4 = (q31_t) (((q63_t) (Iq) * (cosVal)) >> 31); |
| Anna Bridge |
180:96ed750bd169 | 5375 | |
| Anna Bridge |
180:96ed750bd169 | 5376 | /* Calculate pIalpha by using the two intermediate products 1 and 2 */ |
| Anna Bridge |
180:96ed750bd169 | 5377 | *pIalpha = __QSUB(product1, product2); |
| Anna Bridge |
180:96ed750bd169 | 5378 | |
| Anna Bridge |
180:96ed750bd169 | 5379 | /* Calculate pIbeta by using the two intermediate products 3 and 4 */ |
| Anna Bridge |
180:96ed750bd169 | 5380 | *pIbeta = __QADD(product4, product3); |
| Anna Bridge |
180:96ed750bd169 | 5381 | } |
| Anna Bridge |
180:96ed750bd169 | 5382 | |
| Anna Bridge |
180:96ed750bd169 | 5383 | /** |
| Anna Bridge |
180:96ed750bd169 | 5384 | * @} end of Inverse park group |
| Anna Bridge |
180:96ed750bd169 | 5385 | */ |
| Anna Bridge |
180:96ed750bd169 | 5386 | |
| Anna Bridge |
180:96ed750bd169 | 5387 | |
| Anna Bridge |
180:96ed750bd169 | 5388 | /** |
| Anna Bridge |
180:96ed750bd169 | 5389 | * @brief Converts the elements of the Q31 vector to floating-point vector. |
| Anna Bridge |
180:96ed750bd169 | 5390 | * @param[in] pSrc is input pointer |
| Anna Bridge |
180:96ed750bd169 | 5391 | * @param[out] pDst is output pointer |
| Anna Bridge |
180:96ed750bd169 | 5392 | * @param[in] blockSize is the number of samples to process |
| Anna Bridge |
180:96ed750bd169 | 5393 | */ |
| Anna Bridge |
180:96ed750bd169 | 5394 | void arm_q31_to_float( |
| Anna Bridge |
180:96ed750bd169 | 5395 | q31_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 5396 | float32_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 5397 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 5398 | |
| Anna Bridge |
180:96ed750bd169 | 5399 | /** |
| Anna Bridge |
180:96ed750bd169 | 5400 | * @ingroup groupInterpolation |
| Anna Bridge |
180:96ed750bd169 | 5401 | */ |
| Anna Bridge |
180:96ed750bd169 | 5402 | |
| Anna Bridge |
180:96ed750bd169 | 5403 | /** |
| Anna Bridge |
180:96ed750bd169 | 5404 | * @defgroup LinearInterpolate Linear Interpolation |
| Anna Bridge |
180:96ed750bd169 | 5405 | * |
| Anna Bridge |
180:96ed750bd169 | 5406 | * Linear interpolation is a method of curve fitting using linear polynomials. |
| Anna Bridge |
180:96ed750bd169 | 5407 | * Linear interpolation works by effectively drawing a straight line between two neighboring samples and returning the appropriate point along that line |
| Anna Bridge |
180:96ed750bd169 | 5408 | * |
| Anna Bridge |
180:96ed750bd169 | 5409 | * \par |
| Anna Bridge |
180:96ed750bd169 | 5410 | * \image html LinearInterp.gif "Linear interpolation" |
| Anna Bridge |
180:96ed750bd169 | 5411 | * |
| Anna Bridge |
180:96ed750bd169 | 5412 | * \par |
| Anna Bridge |
180:96ed750bd169 | 5413 | * A Linear Interpolate function calculates an output value(y), for the input(x) |
| Anna Bridge |
180:96ed750bd169 | 5414 | * using linear interpolation of the input values x0, x1( nearest input values) and the output values y0 and y1(nearest output values) |
| Anna Bridge |
180:96ed750bd169 | 5415 | * |
| Anna Bridge |
180:96ed750bd169 | 5416 | * \par Algorithm: |
| Anna Bridge |
180:96ed750bd169 | 5417 | * <pre> |
| Anna Bridge |
180:96ed750bd169 | 5418 | * y = y0 + (x - x0) * ((y1 - y0)/(x1-x0)) |
| Anna Bridge |
180:96ed750bd169 | 5419 | * where x0, x1 are nearest values of input x |
| Anna Bridge |
180:96ed750bd169 | 5420 | * y0, y1 are nearest values to output y |
| Anna Bridge |
180:96ed750bd169 | 5421 | * </pre> |
| Anna Bridge |
180:96ed750bd169 | 5422 | * |
| Anna Bridge |
180:96ed750bd169 | 5423 | * \par |
| Anna Bridge |
180:96ed750bd169 | 5424 | * This set of functions implements Linear interpolation process |
| Anna Bridge |
180:96ed750bd169 | 5425 | * for Q7, Q15, Q31, and floating-point data types. The functions operate on a single |
| Anna Bridge |
180:96ed750bd169 | 5426 | * sample of data and each call to the function returns a single processed value. |
| Anna Bridge |
180:96ed750bd169 | 5427 | * <code>S</code> points to an instance of the Linear Interpolate function data structure. |
| Anna Bridge |
180:96ed750bd169 | 5428 | * <code>x</code> is the input sample value. The functions returns the output value. |
| Anna Bridge |
180:96ed750bd169 | 5429 | * |
| Anna Bridge |
180:96ed750bd169 | 5430 | * \par |
| Anna Bridge |
180:96ed750bd169 | 5431 | * if x is outside of the table boundary, Linear interpolation returns first value of the table |
| Anna Bridge |
180:96ed750bd169 | 5432 | * if x is below input range and returns last value of table if x is above range. |
| Anna Bridge |
180:96ed750bd169 | 5433 | */ |
| Anna Bridge |
180:96ed750bd169 | 5434 | |
| Anna Bridge |
180:96ed750bd169 | 5435 | /** |
| Anna Bridge |
180:96ed750bd169 | 5436 | * @addtogroup LinearInterpolate |
| Anna Bridge |
180:96ed750bd169 | 5437 | * @{ |
| Anna Bridge |
180:96ed750bd169 | 5438 | */ |
| Anna Bridge |
180:96ed750bd169 | 5439 | |
| Anna Bridge |
180:96ed750bd169 | 5440 | /** |
| Anna Bridge |
180:96ed750bd169 | 5441 | * @brief Process function for the floating-point Linear Interpolation Function. |
| Anna Bridge |
180:96ed750bd169 | 5442 | * @param[in,out] S is an instance of the floating-point Linear Interpolation structure |
| Anna Bridge |
180:96ed750bd169 | 5443 | * @param[in] x input sample to process |
| Anna Bridge |
180:96ed750bd169 | 5444 | * @return y processed output sample. |
| Anna Bridge |
180:96ed750bd169 | 5445 | * |
| Anna Bridge |
180:96ed750bd169 | 5446 | */ |
| Anna Bridge |
180:96ed750bd169 | 5447 | CMSIS_INLINE __STATIC_INLINE float32_t arm_linear_interp_f32( |
| Anna Bridge |
180:96ed750bd169 | 5448 | arm_linear_interp_instance_f32 * S, |
| Anna Bridge |
180:96ed750bd169 | 5449 | float32_t x) |
| Anna Bridge |
180:96ed750bd169 | 5450 | { |
| Anna Bridge |
180:96ed750bd169 | 5451 | float32_t y; |
| Anna Bridge |
180:96ed750bd169 | 5452 | float32_t x0, x1; /* Nearest input values */ |
| Anna Bridge |
180:96ed750bd169 | 5453 | float32_t y0, y1; /* Nearest output values */ |
| Anna Bridge |
180:96ed750bd169 | 5454 | float32_t xSpacing = S->xSpacing; /* spacing between input values */ |
| Anna Bridge |
180:96ed750bd169 | 5455 | int32_t i; /* Index variable */ |
| Anna Bridge |
180:96ed750bd169 | 5456 | float32_t *pYData = S->pYData; /* pointer to output table */ |
| Anna Bridge |
180:96ed750bd169 | 5457 | |
| Anna Bridge |
180:96ed750bd169 | 5458 | /* Calculation of index */ |
| Anna Bridge |
180:96ed750bd169 | 5459 | i = (int32_t) ((x - S->x1) / xSpacing); |
| Anna Bridge |
180:96ed750bd169 | 5460 | |
| Anna Bridge |
180:96ed750bd169 | 5461 | if (i < 0) |
| Anna Bridge |
180:96ed750bd169 | 5462 | { |
| Anna Bridge |
180:96ed750bd169 | 5463 | /* Iniatilize output for below specified range as least output value of table */ |
| Anna Bridge |
180:96ed750bd169 | 5464 | y = pYData[0]; |
| Anna Bridge |
180:96ed750bd169 | 5465 | } |
| Anna Bridge |
180:96ed750bd169 | 5466 | else if ((uint32_t)i >= S->nValues) |
| Anna Bridge |
180:96ed750bd169 | 5467 | { |
| Anna Bridge |
180:96ed750bd169 | 5468 | /* Iniatilize output for above specified range as last output value of table */ |
| Anna Bridge |
180:96ed750bd169 | 5469 | y = pYData[S->nValues - 1]; |
| Anna Bridge |
180:96ed750bd169 | 5470 | } |
| Anna Bridge |
180:96ed750bd169 | 5471 | else |
| Anna Bridge |
180:96ed750bd169 | 5472 | { |
| Anna Bridge |
180:96ed750bd169 | 5473 | /* Calculation of nearest input values */ |
| Anna Bridge |
180:96ed750bd169 | 5474 | x0 = S->x1 + i * xSpacing; |
| Anna Bridge |
180:96ed750bd169 | 5475 | x1 = S->x1 + (i + 1) * xSpacing; |
| Anna Bridge |
180:96ed750bd169 | 5476 | |
| Anna Bridge |
180:96ed750bd169 | 5477 | /* Read of nearest output values */ |
| Anna Bridge |
180:96ed750bd169 | 5478 | y0 = pYData[i]; |
| Anna Bridge |
180:96ed750bd169 | 5479 | y1 = pYData[i + 1]; |
| Anna Bridge |
180:96ed750bd169 | 5480 | |
| Anna Bridge |
180:96ed750bd169 | 5481 | /* Calculation of output */ |
| Anna Bridge |
180:96ed750bd169 | 5482 | y = y0 + (x - x0) * ((y1 - y0) / (x1 - x0)); |
| Anna Bridge |
180:96ed750bd169 | 5483 | |
| Anna Bridge |
180:96ed750bd169 | 5484 | } |
| Anna Bridge |
180:96ed750bd169 | 5485 | |
| Anna Bridge |
180:96ed750bd169 | 5486 | /* returns output value */ |
| Anna Bridge |
180:96ed750bd169 | 5487 | return (y); |
| Anna Bridge |
180:96ed750bd169 | 5488 | } |
| Anna Bridge |
180:96ed750bd169 | 5489 | |
| Anna Bridge |
180:96ed750bd169 | 5490 | |
| Anna Bridge |
180:96ed750bd169 | 5491 | /** |
| Anna Bridge |
180:96ed750bd169 | 5492 | * |
| Anna Bridge |
180:96ed750bd169 | 5493 | * @brief Process function for the Q31 Linear Interpolation Function. |
| Anna Bridge |
180:96ed750bd169 | 5494 | * @param[in] pYData pointer to Q31 Linear Interpolation table |
| Anna Bridge |
180:96ed750bd169 | 5495 | * @param[in] x input sample to process |
| Anna Bridge |
180:96ed750bd169 | 5496 | * @param[in] nValues number of table values |
| Anna Bridge |
180:96ed750bd169 | 5497 | * @return y processed output sample. |
| Anna Bridge |
180:96ed750bd169 | 5498 | * |
| Anna Bridge |
180:96ed750bd169 | 5499 | * \par |
| Anna Bridge |
180:96ed750bd169 | 5500 | * Input sample <code>x</code> is in 12.20 format which contains 12 bits for table index and 20 bits for fractional part. |
| Anna Bridge |
180:96ed750bd169 | 5501 | * This function can support maximum of table size 2^12. |
| Anna Bridge |
180:96ed750bd169 | 5502 | * |
| Anna Bridge |
180:96ed750bd169 | 5503 | */ |
| Anna Bridge |
180:96ed750bd169 | 5504 | CMSIS_INLINE __STATIC_INLINE q31_t arm_linear_interp_q31( |
| Anna Bridge |
180:96ed750bd169 | 5505 | q31_t * pYData, |
| Anna Bridge |
180:96ed750bd169 | 5506 | q31_t x, |
| Anna Bridge |
180:96ed750bd169 | 5507 | uint32_t nValues) |
| Anna Bridge |
180:96ed750bd169 | 5508 | { |
| Anna Bridge |
180:96ed750bd169 | 5509 | q31_t y; /* output */ |
| Anna Bridge |
180:96ed750bd169 | 5510 | q31_t y0, y1; /* Nearest output values */ |
| Anna Bridge |
180:96ed750bd169 | 5511 | q31_t fract; /* fractional part */ |
| Anna Bridge |
180:96ed750bd169 | 5512 | int32_t index; /* Index to read nearest output values */ |
| Anna Bridge |
180:96ed750bd169 | 5513 | |
| Anna Bridge |
180:96ed750bd169 | 5514 | /* Input is in 12.20 format */ |
| Anna Bridge |
180:96ed750bd169 | 5515 | /* 12 bits for the table index */ |
| Anna Bridge |
180:96ed750bd169 | 5516 | /* Index value calculation */ |
| Anna Bridge |
180:96ed750bd169 | 5517 | index = ((x & (q31_t)0xFFF00000) >> 20); |
| Anna Bridge |
180:96ed750bd169 | 5518 | |
| Anna Bridge |
180:96ed750bd169 | 5519 | if (index >= (int32_t)(nValues - 1)) |
| Anna Bridge |
180:96ed750bd169 | 5520 | { |
| Anna Bridge |
180:96ed750bd169 | 5521 | return (pYData[nValues - 1]); |
| Anna Bridge |
180:96ed750bd169 | 5522 | } |
| Anna Bridge |
180:96ed750bd169 | 5523 | else if (index < 0) |
| Anna Bridge |
180:96ed750bd169 | 5524 | { |
| Anna Bridge |
180:96ed750bd169 | 5525 | return (pYData[0]); |
| Anna Bridge |
180:96ed750bd169 | 5526 | } |
| Anna Bridge |
180:96ed750bd169 | 5527 | else |
| Anna Bridge |
180:96ed750bd169 | 5528 | { |
| Anna Bridge |
180:96ed750bd169 | 5529 | /* 20 bits for the fractional part */ |
| Anna Bridge |
180:96ed750bd169 | 5530 | /* shift left by 11 to keep fract in 1.31 format */ |
| Anna Bridge |
180:96ed750bd169 | 5531 | fract = (x & 0x000FFFFF) << 11; |
| Anna Bridge |
180:96ed750bd169 | 5532 | |
| Anna Bridge |
180:96ed750bd169 | 5533 | /* Read two nearest output values from the index in 1.31(q31) format */ |
| Anna Bridge |
180:96ed750bd169 | 5534 | y0 = pYData[index]; |
| Anna Bridge |
180:96ed750bd169 | 5535 | y1 = pYData[index + 1]; |
| Anna Bridge |
180:96ed750bd169 | 5536 | |
| Anna Bridge |
180:96ed750bd169 | 5537 | /* Calculation of y0 * (1-fract) and y is in 2.30 format */ |
| Anna Bridge |
180:96ed750bd169 | 5538 | y = ((q31_t) ((q63_t) y0 * (0x7FFFFFFF - fract) >> 32)); |
| Anna Bridge |
180:96ed750bd169 | 5539 | |
| Anna Bridge |
180:96ed750bd169 | 5540 | /* Calculation of y0 * (1-fract) + y1 *fract and y is in 2.30 format */ |
| Anna Bridge |
180:96ed750bd169 | 5541 | y += ((q31_t) (((q63_t) y1 * fract) >> 32)); |
| Anna Bridge |
180:96ed750bd169 | 5542 | |
| Anna Bridge |
180:96ed750bd169 | 5543 | /* Convert y to 1.31 format */ |
| Anna Bridge |
180:96ed750bd169 | 5544 | return (y << 1u); |
| Anna Bridge |
180:96ed750bd169 | 5545 | } |
| Anna Bridge |
180:96ed750bd169 | 5546 | } |
| Anna Bridge |
180:96ed750bd169 | 5547 | |
| Anna Bridge |
180:96ed750bd169 | 5548 | |
| Anna Bridge |
180:96ed750bd169 | 5549 | /** |
| Anna Bridge |
180:96ed750bd169 | 5550 | * |
| Anna Bridge |
180:96ed750bd169 | 5551 | * @brief Process function for the Q15 Linear Interpolation Function. |
| Anna Bridge |
180:96ed750bd169 | 5552 | * @param[in] pYData pointer to Q15 Linear Interpolation table |
| Anna Bridge |
180:96ed750bd169 | 5553 | * @param[in] x input sample to process |
| Anna Bridge |
180:96ed750bd169 | 5554 | * @param[in] nValues number of table values |
| Anna Bridge |
180:96ed750bd169 | 5555 | * @return y processed output sample. |
| Anna Bridge |
180:96ed750bd169 | 5556 | * |
| Anna Bridge |
180:96ed750bd169 | 5557 | * \par |
| Anna Bridge |
180:96ed750bd169 | 5558 | * Input sample <code>x</code> is in 12.20 format which contains 12 bits for table index and 20 bits for fractional part. |
| Anna Bridge |
180:96ed750bd169 | 5559 | * This function can support maximum of table size 2^12. |
| Anna Bridge |
180:96ed750bd169 | 5560 | * |
| Anna Bridge |
180:96ed750bd169 | 5561 | */ |
| Anna Bridge |
180:96ed750bd169 | 5562 | CMSIS_INLINE __STATIC_INLINE q15_t arm_linear_interp_q15( |
| Anna Bridge |
180:96ed750bd169 | 5563 | q15_t * pYData, |
| Anna Bridge |
180:96ed750bd169 | 5564 | q31_t x, |
| Anna Bridge |
180:96ed750bd169 | 5565 | uint32_t nValues) |
| Anna Bridge |
180:96ed750bd169 | 5566 | { |
| Anna Bridge |
180:96ed750bd169 | 5567 | q63_t y; /* output */ |
| Anna Bridge |
180:96ed750bd169 | 5568 | q15_t y0, y1; /* Nearest output values */ |
| Anna Bridge |
180:96ed750bd169 | 5569 | q31_t fract; /* fractional part */ |
| Anna Bridge |
180:96ed750bd169 | 5570 | int32_t index; /* Index to read nearest output values */ |
| Anna Bridge |
180:96ed750bd169 | 5571 | |
| Anna Bridge |
180:96ed750bd169 | 5572 | /* Input is in 12.20 format */ |
| Anna Bridge |
180:96ed750bd169 | 5573 | /* 12 bits for the table index */ |
| Anna Bridge |
180:96ed750bd169 | 5574 | /* Index value calculation */ |
| Anna Bridge |
180:96ed750bd169 | 5575 | index = ((x & (int32_t)0xFFF00000) >> 20); |
| Anna Bridge |
180:96ed750bd169 | 5576 | |
| Anna Bridge |
180:96ed750bd169 | 5577 | if (index >= (int32_t)(nValues - 1)) |
| Anna Bridge |
180:96ed750bd169 | 5578 | { |
| Anna Bridge |
180:96ed750bd169 | 5579 | return (pYData[nValues - 1]); |
| Anna Bridge |
180:96ed750bd169 | 5580 | } |
| Anna Bridge |
180:96ed750bd169 | 5581 | else if (index < 0) |
| Anna Bridge |
180:96ed750bd169 | 5582 | { |
| Anna Bridge |
180:96ed750bd169 | 5583 | return (pYData[0]); |
| Anna Bridge |
180:96ed750bd169 | 5584 | } |
| Anna Bridge |
180:96ed750bd169 | 5585 | else |
| Anna Bridge |
180:96ed750bd169 | 5586 | { |
| Anna Bridge |
180:96ed750bd169 | 5587 | /* 20 bits for the fractional part */ |
| Anna Bridge |
180:96ed750bd169 | 5588 | /* fract is in 12.20 format */ |
| Anna Bridge |
180:96ed750bd169 | 5589 | fract = (x & 0x000FFFFF); |
| Anna Bridge |
180:96ed750bd169 | 5590 | |
| Anna Bridge |
180:96ed750bd169 | 5591 | /* Read two nearest output values from the index */ |
| Anna Bridge |
180:96ed750bd169 | 5592 | y0 = pYData[index]; |
| Anna Bridge |
180:96ed750bd169 | 5593 | y1 = pYData[index + 1]; |
| Anna Bridge |
180:96ed750bd169 | 5594 | |
| Anna Bridge |
180:96ed750bd169 | 5595 | /* Calculation of y0 * (1-fract) and y is in 13.35 format */ |
| Anna Bridge |
180:96ed750bd169 | 5596 | y = ((q63_t) y0 * (0xFFFFF - fract)); |
| Anna Bridge |
180:96ed750bd169 | 5597 | |
| Anna Bridge |
180:96ed750bd169 | 5598 | /* Calculation of (y0 * (1-fract) + y1 * fract) and y is in 13.35 format */ |
| Anna Bridge |
180:96ed750bd169 | 5599 | y += ((q63_t) y1 * (fract)); |
| Anna Bridge |
180:96ed750bd169 | 5600 | |
| Anna Bridge |
180:96ed750bd169 | 5601 | /* convert y to 1.15 format */ |
| Anna Bridge |
180:96ed750bd169 | 5602 | return (q15_t) (y >> 20); |
| Anna Bridge |
180:96ed750bd169 | 5603 | } |
| Anna Bridge |
180:96ed750bd169 | 5604 | } |
| Anna Bridge |
180:96ed750bd169 | 5605 | |
| Anna Bridge |
180:96ed750bd169 | 5606 | |
| Anna Bridge |
180:96ed750bd169 | 5607 | /** |
| Anna Bridge |
180:96ed750bd169 | 5608 | * |
| Anna Bridge |
180:96ed750bd169 | 5609 | * @brief Process function for the Q7 Linear Interpolation Function. |
| Anna Bridge |
180:96ed750bd169 | 5610 | * @param[in] pYData pointer to Q7 Linear Interpolation table |
| Anna Bridge |
180:96ed750bd169 | 5611 | * @param[in] x input sample to process |
| Anna Bridge |
180:96ed750bd169 | 5612 | * @param[in] nValues number of table values |
| Anna Bridge |
180:96ed750bd169 | 5613 | * @return y processed output sample. |
| Anna Bridge |
180:96ed750bd169 | 5614 | * |
| Anna Bridge |
180:96ed750bd169 | 5615 | * \par |
| Anna Bridge |
180:96ed750bd169 | 5616 | * Input sample <code>x</code> is in 12.20 format which contains 12 bits for table index and 20 bits for fractional part. |
| Anna Bridge |
180:96ed750bd169 | 5617 | * This function can support maximum of table size 2^12. |
| Anna Bridge |
180:96ed750bd169 | 5618 | */ |
| Anna Bridge |
180:96ed750bd169 | 5619 | CMSIS_INLINE __STATIC_INLINE q7_t arm_linear_interp_q7( |
| Anna Bridge |
180:96ed750bd169 | 5620 | q7_t * pYData, |
| Anna Bridge |
180:96ed750bd169 | 5621 | q31_t x, |
| Anna Bridge |
180:96ed750bd169 | 5622 | uint32_t nValues) |
| Anna Bridge |
180:96ed750bd169 | 5623 | { |
| Anna Bridge |
180:96ed750bd169 | 5624 | q31_t y; /* output */ |
| Anna Bridge |
180:96ed750bd169 | 5625 | q7_t y0, y1; /* Nearest output values */ |
| Anna Bridge |
180:96ed750bd169 | 5626 | q31_t fract; /* fractional part */ |
| Anna Bridge |
180:96ed750bd169 | 5627 | uint32_t index; /* Index to read nearest output values */ |
| Anna Bridge |
180:96ed750bd169 | 5628 | |
| Anna Bridge |
180:96ed750bd169 | 5629 | /* Input is in 12.20 format */ |
| Anna Bridge |
180:96ed750bd169 | 5630 | /* 12 bits for the table index */ |
| Anna Bridge |
180:96ed750bd169 | 5631 | /* Index value calculation */ |
| Anna Bridge |
180:96ed750bd169 | 5632 | if (x < 0) |
| Anna Bridge |
180:96ed750bd169 | 5633 | { |
| Anna Bridge |
180:96ed750bd169 | 5634 | return (pYData[0]); |
| Anna Bridge |
180:96ed750bd169 | 5635 | } |
| Anna Bridge |
180:96ed750bd169 | 5636 | index = (x >> 20) & 0xfff; |
| Anna Bridge |
180:96ed750bd169 | 5637 | |
| Anna Bridge |
180:96ed750bd169 | 5638 | if (index >= (nValues - 1)) |
| Anna Bridge |
180:96ed750bd169 | 5639 | { |
| Anna Bridge |
180:96ed750bd169 | 5640 | return (pYData[nValues - 1]); |
| Anna Bridge |
180:96ed750bd169 | 5641 | } |
| Anna Bridge |
180:96ed750bd169 | 5642 | else |
| Anna Bridge |
180:96ed750bd169 | 5643 | { |
| Anna Bridge |
180:96ed750bd169 | 5644 | /* 20 bits for the fractional part */ |
| Anna Bridge |
180:96ed750bd169 | 5645 | /* fract is in 12.20 format */ |
| Anna Bridge |
180:96ed750bd169 | 5646 | fract = (x & 0x000FFFFF); |
| Anna Bridge |
180:96ed750bd169 | 5647 | |
| Anna Bridge |
180:96ed750bd169 | 5648 | /* Read two nearest output values from the index and are in 1.7(q7) format */ |
| Anna Bridge |
180:96ed750bd169 | 5649 | y0 = pYData[index]; |
| Anna Bridge |
180:96ed750bd169 | 5650 | y1 = pYData[index + 1]; |
| Anna Bridge |
180:96ed750bd169 | 5651 | |
| Anna Bridge |
180:96ed750bd169 | 5652 | /* Calculation of y0 * (1-fract ) and y is in 13.27(q27) format */ |
| Anna Bridge |
180:96ed750bd169 | 5653 | y = ((y0 * (0xFFFFF - fract))); |
| Anna Bridge |
180:96ed750bd169 | 5654 | |
| Anna Bridge |
180:96ed750bd169 | 5655 | /* Calculation of y1 * fract + y0 * (1-fract) and y is in 13.27(q27) format */ |
| Anna Bridge |
180:96ed750bd169 | 5656 | y += (y1 * fract); |
| Anna Bridge |
180:96ed750bd169 | 5657 | |
| Anna Bridge |
180:96ed750bd169 | 5658 | /* convert y to 1.7(q7) format */ |
| Anna Bridge |
180:96ed750bd169 | 5659 | return (q7_t) (y >> 20); |
| Anna Bridge |
180:96ed750bd169 | 5660 | } |
| Anna Bridge |
180:96ed750bd169 | 5661 | } |
| Anna Bridge |
180:96ed750bd169 | 5662 | |
| Anna Bridge |
180:96ed750bd169 | 5663 | /** |
| Anna Bridge |
180:96ed750bd169 | 5664 | * @} end of LinearInterpolate group |
| Anna Bridge |
180:96ed750bd169 | 5665 | */ |
| Anna Bridge |
180:96ed750bd169 | 5666 | |
| Anna Bridge |
180:96ed750bd169 | 5667 | /** |
| Anna Bridge |
180:96ed750bd169 | 5668 | * @brief Fast approximation to the trigonometric sine function for floating-point data. |
| Anna Bridge |
180:96ed750bd169 | 5669 | * @param[in] x input value in radians. |
| Anna Bridge |
180:96ed750bd169 | 5670 | * @return sin(x). |
| Anna Bridge |
180:96ed750bd169 | 5671 | */ |
| Anna Bridge |
180:96ed750bd169 | 5672 | float32_t arm_sin_f32( |
| Anna Bridge |
180:96ed750bd169 | 5673 | float32_t x); |
| Anna Bridge |
180:96ed750bd169 | 5674 | |
| Anna Bridge |
180:96ed750bd169 | 5675 | |
| Anna Bridge |
180:96ed750bd169 | 5676 | /** |
| Anna Bridge |
180:96ed750bd169 | 5677 | * @brief Fast approximation to the trigonometric sine function for Q31 data. |
| Anna Bridge |
180:96ed750bd169 | 5678 | * @param[in] x Scaled input value in radians. |
| Anna Bridge |
180:96ed750bd169 | 5679 | * @return sin(x). |
| Anna Bridge |
180:96ed750bd169 | 5680 | */ |
| Anna Bridge |
180:96ed750bd169 | 5681 | q31_t arm_sin_q31( |
| Anna Bridge |
180:96ed750bd169 | 5682 | q31_t x); |
| Anna Bridge |
180:96ed750bd169 | 5683 | |
| Anna Bridge |
180:96ed750bd169 | 5684 | |
| Anna Bridge |
180:96ed750bd169 | 5685 | /** |
| Anna Bridge |
180:96ed750bd169 | 5686 | * @brief Fast approximation to the trigonometric sine function for Q15 data. |
| Anna Bridge |
180:96ed750bd169 | 5687 | * @param[in] x Scaled input value in radians. |
| Anna Bridge |
180:96ed750bd169 | 5688 | * @return sin(x). |
| Anna Bridge |
180:96ed750bd169 | 5689 | */ |
| Anna Bridge |
180:96ed750bd169 | 5690 | q15_t arm_sin_q15( |
| Anna Bridge |
180:96ed750bd169 | 5691 | q15_t x); |
| Anna Bridge |
180:96ed750bd169 | 5692 | |
| Anna Bridge |
180:96ed750bd169 | 5693 | |
| Anna Bridge |
180:96ed750bd169 | 5694 | /** |
| Anna Bridge |
180:96ed750bd169 | 5695 | * @brief Fast approximation to the trigonometric cosine function for floating-point data. |
| Anna Bridge |
180:96ed750bd169 | 5696 | * @param[in] x input value in radians. |
| Anna Bridge |
180:96ed750bd169 | 5697 | * @return cos(x). |
| Anna Bridge |
180:96ed750bd169 | 5698 | */ |
| Anna Bridge |
180:96ed750bd169 | 5699 | float32_t arm_cos_f32( |
| Anna Bridge |
180:96ed750bd169 | 5700 | float32_t x); |
| Anna Bridge |
180:96ed750bd169 | 5701 | |
| Anna Bridge |
180:96ed750bd169 | 5702 | |
| Anna Bridge |
180:96ed750bd169 | 5703 | /** |
| Anna Bridge |
180:96ed750bd169 | 5704 | * @brief Fast approximation to the trigonometric cosine function for Q31 data. |
| Anna Bridge |
180:96ed750bd169 | 5705 | * @param[in] x Scaled input value in radians. |
| Anna Bridge |
180:96ed750bd169 | 5706 | * @return cos(x). |
| Anna Bridge |
180:96ed750bd169 | 5707 | */ |
| Anna Bridge |
180:96ed750bd169 | 5708 | q31_t arm_cos_q31( |
| Anna Bridge |
180:96ed750bd169 | 5709 | q31_t x); |
| Anna Bridge |
180:96ed750bd169 | 5710 | |
| Anna Bridge |
180:96ed750bd169 | 5711 | |
| Anna Bridge |
180:96ed750bd169 | 5712 | /** |
| Anna Bridge |
180:96ed750bd169 | 5713 | * @brief Fast approximation to the trigonometric cosine function for Q15 data. |
| Anna Bridge |
180:96ed750bd169 | 5714 | * @param[in] x Scaled input value in radians. |
| Anna Bridge |
180:96ed750bd169 | 5715 | * @return cos(x). |
| Anna Bridge |
180:96ed750bd169 | 5716 | */ |
| Anna Bridge |
180:96ed750bd169 | 5717 | q15_t arm_cos_q15( |
| Anna Bridge |
180:96ed750bd169 | 5718 | q15_t x); |
| Anna Bridge |
180:96ed750bd169 | 5719 | |
| Anna Bridge |
180:96ed750bd169 | 5720 | |
| Anna Bridge |
180:96ed750bd169 | 5721 | /** |
| Anna Bridge |
180:96ed750bd169 | 5722 | * @ingroup groupFastMath |
| Anna Bridge |
180:96ed750bd169 | 5723 | */ |
| Anna Bridge |
180:96ed750bd169 | 5724 | |
| Anna Bridge |
180:96ed750bd169 | 5725 | |
| Anna Bridge |
180:96ed750bd169 | 5726 | /** |
| Anna Bridge |
180:96ed750bd169 | 5727 | * @defgroup SQRT Square Root |
| Anna Bridge |
180:96ed750bd169 | 5728 | * |
| Anna Bridge |
180:96ed750bd169 | 5729 | * Computes the square root of a number. |
| Anna Bridge |
180:96ed750bd169 | 5730 | * There are separate functions for Q15, Q31, and floating-point data types. |
| Anna Bridge |
180:96ed750bd169 | 5731 | * The square root function is computed using the Newton-Raphson algorithm. |
| Anna Bridge |
180:96ed750bd169 | 5732 | * This is an iterative algorithm of the form: |
| Anna Bridge |
180:96ed750bd169 | 5733 | * <pre> |
| Anna Bridge |
180:96ed750bd169 | 5734 | * x1 = x0 - f(x0)/f'(x0) |
| Anna Bridge |
180:96ed750bd169 | 5735 | * </pre> |
| Anna Bridge |
180:96ed750bd169 | 5736 | * where <code>x1</code> is the current estimate, |
| Anna Bridge |
180:96ed750bd169 | 5737 | * <code>x0</code> is the previous estimate, and |
| Anna Bridge |
180:96ed750bd169 | 5738 | * <code>f'(x0)</code> is the derivative of <code>f()</code> evaluated at <code>x0</code>. |
| Anna Bridge |
180:96ed750bd169 | 5739 | * For the square root function, the algorithm reduces to: |
| Anna Bridge |
180:96ed750bd169 | 5740 | * <pre> |
| Anna Bridge |
180:96ed750bd169 | 5741 | * x0 = in/2 [initial guess] |
| Anna Bridge |
180:96ed750bd169 | 5742 | * x1 = 1/2 * ( x0 + in / x0) [each iteration] |
| Anna Bridge |
180:96ed750bd169 | 5743 | * </pre> |
| Anna Bridge |
180:96ed750bd169 | 5744 | */ |
| Anna Bridge |
180:96ed750bd169 | 5745 | |
| Anna Bridge |
180:96ed750bd169 | 5746 | |
| Anna Bridge |
180:96ed750bd169 | 5747 | /** |
| Anna Bridge |
180:96ed750bd169 | 5748 | * @addtogroup SQRT |
| Anna Bridge |
180:96ed750bd169 | 5749 | * @{ |
| Anna Bridge |
180:96ed750bd169 | 5750 | */ |
| Anna Bridge |
180:96ed750bd169 | 5751 | |
| Anna Bridge |
180:96ed750bd169 | 5752 | /** |
| Anna Bridge |
180:96ed750bd169 | 5753 | * @brief Floating-point square root function. |
| Anna Bridge |
180:96ed750bd169 | 5754 | * @param[in] in input value. |
| Anna Bridge |
180:96ed750bd169 | 5755 | * @param[out] pOut square root of input value. |
| Anna Bridge |
180:96ed750bd169 | 5756 | * @return The function returns ARM_MATH_SUCCESS if input value is positive value or ARM_MATH_ARGUMENT_ERROR if |
| Anna Bridge |
180:96ed750bd169 | 5757 | * <code>in</code> is negative value and returns zero output for negative values. |
| Anna Bridge |
180:96ed750bd169 | 5758 | */ |
| Anna Bridge |
180:96ed750bd169 | 5759 | CMSIS_INLINE __STATIC_INLINE arm_status arm_sqrt_f32( |
| Anna Bridge |
180:96ed750bd169 | 5760 | float32_t in, |
| Anna Bridge |
180:96ed750bd169 | 5761 | float32_t * pOut) |
| Anna Bridge |
180:96ed750bd169 | 5762 | { |
| Anna Bridge |
180:96ed750bd169 | 5763 | if (in >= 0.0f) |
| Anna Bridge |
180:96ed750bd169 | 5764 | { |
| Anna Bridge |
180:96ed750bd169 | 5765 | |
| Anna Bridge |
180:96ed750bd169 | 5766 | #if (__FPU_USED == 1) && defined ( __CC_ARM ) |
| Anna Bridge |
180:96ed750bd169 | 5767 | *pOut = __sqrtf(in); |
| Anna Bridge |
180:96ed750bd169 | 5768 | #elif (__FPU_USED == 1) && (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)) |
| Anna Bridge |
180:96ed750bd169 | 5769 | *pOut = __builtin_sqrtf(in); |
| Anna Bridge |
180:96ed750bd169 | 5770 | #elif (__FPU_USED == 1) && defined(__GNUC__) |
| Anna Bridge |
180:96ed750bd169 | 5771 | *pOut = __builtin_sqrtf(in); |
| Anna Bridge |
180:96ed750bd169 | 5772 | #elif (__FPU_USED == 1) && defined ( __ICCARM__ ) && (__VER__ >= 6040000) |
| Anna Bridge |
180:96ed750bd169 | 5773 | __ASM("VSQRT.F32 %0,%1" : "=t"(*pOut) : "t"(in)); |
| Anna Bridge |
180:96ed750bd169 | 5774 | #else |
| Anna Bridge |
180:96ed750bd169 | 5775 | *pOut = sqrtf(in); |
| Anna Bridge |
180:96ed750bd169 | 5776 | #endif |
| Anna Bridge |
180:96ed750bd169 | 5777 | |
| Anna Bridge |
180:96ed750bd169 | 5778 | return (ARM_MATH_SUCCESS); |
| Anna Bridge |
180:96ed750bd169 | 5779 | } |
| Anna Bridge |
180:96ed750bd169 | 5780 | else |
| Anna Bridge |
180:96ed750bd169 | 5781 | { |
| Anna Bridge |
180:96ed750bd169 | 5782 | *pOut = 0.0f; |
| Anna Bridge |
180:96ed750bd169 | 5783 | return (ARM_MATH_ARGUMENT_ERROR); |
| Anna Bridge |
180:96ed750bd169 | 5784 | } |
| Anna Bridge |
180:96ed750bd169 | 5785 | } |
| Anna Bridge |
180:96ed750bd169 | 5786 | |
| Anna Bridge |
180:96ed750bd169 | 5787 | |
| Anna Bridge |
180:96ed750bd169 | 5788 | /** |
| Anna Bridge |
180:96ed750bd169 | 5789 | * @brief Q31 square root function. |
| Anna Bridge |
180:96ed750bd169 | 5790 | * @param[in] in input value. The range of the input value is [0 +1) or 0x00000000 to 0x7FFFFFFF. |
| Anna Bridge |
180:96ed750bd169 | 5791 | * @param[out] pOut square root of input value. |
| Anna Bridge |
180:96ed750bd169 | 5792 | * @return The function returns ARM_MATH_SUCCESS if input value is positive value or ARM_MATH_ARGUMENT_ERROR if |
| Anna Bridge |
180:96ed750bd169 | 5793 | * <code>in</code> is negative value and returns zero output for negative values. |
| Anna Bridge |
180:96ed750bd169 | 5794 | */ |
| Anna Bridge |
180:96ed750bd169 | 5795 | arm_status arm_sqrt_q31( |
| Anna Bridge |
180:96ed750bd169 | 5796 | q31_t in, |
| Anna Bridge |
180:96ed750bd169 | 5797 | q31_t * pOut); |
| Anna Bridge |
180:96ed750bd169 | 5798 | |
| Anna Bridge |
180:96ed750bd169 | 5799 | |
| Anna Bridge |
180:96ed750bd169 | 5800 | /** |
| Anna Bridge |
180:96ed750bd169 | 5801 | * @brief Q15 square root function. |
| Anna Bridge |
180:96ed750bd169 | 5802 | * @param[in] in input value. The range of the input value is [0 +1) or 0x0000 to 0x7FFF. |
| Anna Bridge |
180:96ed750bd169 | 5803 | * @param[out] pOut square root of input value. |
| Anna Bridge |
180:96ed750bd169 | 5804 | * @return The function returns ARM_MATH_SUCCESS if input value is positive value or ARM_MATH_ARGUMENT_ERROR if |
| Anna Bridge |
180:96ed750bd169 | 5805 | * <code>in</code> is negative value and returns zero output for negative values. |
| Anna Bridge |
180:96ed750bd169 | 5806 | */ |
| Anna Bridge |
180:96ed750bd169 | 5807 | arm_status arm_sqrt_q15( |
| Anna Bridge |
180:96ed750bd169 | 5808 | q15_t in, |
| Anna Bridge |
180:96ed750bd169 | 5809 | q15_t * pOut); |
| Anna Bridge |
180:96ed750bd169 | 5810 | |
| Anna Bridge |
180:96ed750bd169 | 5811 | /** |
| Anna Bridge |
180:96ed750bd169 | 5812 | * @} end of SQRT group |
| Anna Bridge |
180:96ed750bd169 | 5813 | */ |
| Anna Bridge |
180:96ed750bd169 | 5814 | |
| Anna Bridge |
180:96ed750bd169 | 5815 | |
| Anna Bridge |
180:96ed750bd169 | 5816 | /** |
| Anna Bridge |
180:96ed750bd169 | 5817 | * @brief floating-point Circular write function. |
| Anna Bridge |
180:96ed750bd169 | 5818 | */ |
| Anna Bridge |
180:96ed750bd169 | 5819 | CMSIS_INLINE __STATIC_INLINE void arm_circularWrite_f32( |
| Anna Bridge |
180:96ed750bd169 | 5820 | int32_t * circBuffer, |
| Anna Bridge |
180:96ed750bd169 | 5821 | int32_t L, |
| Anna Bridge |
180:96ed750bd169 | 5822 | uint16_t * writeOffset, |
| Anna Bridge |
180:96ed750bd169 | 5823 | int32_t bufferInc, |
| Anna Bridge |
180:96ed750bd169 | 5824 | const int32_t * src, |
| Anna Bridge |
180:96ed750bd169 | 5825 | int32_t srcInc, |
| Anna Bridge |
180:96ed750bd169 | 5826 | uint32_t blockSize) |
| Anna Bridge |
180:96ed750bd169 | 5827 | { |
| Anna Bridge |
180:96ed750bd169 | 5828 | uint32_t i = 0u; |
| Anna Bridge |
180:96ed750bd169 | 5829 | int32_t wOffset; |
| Anna Bridge |
180:96ed750bd169 | 5830 | |
| Anna Bridge |
180:96ed750bd169 | 5831 | /* Copy the value of Index pointer that points |
| Anna Bridge |
180:96ed750bd169 | 5832 | * to the current location where the input samples to be copied */ |
| Anna Bridge |
180:96ed750bd169 | 5833 | wOffset = *writeOffset; |
| Anna Bridge |
180:96ed750bd169 | 5834 | |
| Anna Bridge |
180:96ed750bd169 | 5835 | /* Loop over the blockSize */ |
| Anna Bridge |
180:96ed750bd169 | 5836 | i = blockSize; |
| Anna Bridge |
180:96ed750bd169 | 5837 | |
| Anna Bridge |
180:96ed750bd169 | 5838 | while (i > 0u) |
| Anna Bridge |
180:96ed750bd169 | 5839 | { |
| Anna Bridge |
180:96ed750bd169 | 5840 | /* copy the input sample to the circular buffer */ |
| Anna Bridge |
180:96ed750bd169 | 5841 | circBuffer[wOffset] = *src; |
| Anna Bridge |
180:96ed750bd169 | 5842 | |
| Anna Bridge |
180:96ed750bd169 | 5843 | /* Update the input pointer */ |
| Anna Bridge |
180:96ed750bd169 | 5844 | src += srcInc; |
| Anna Bridge |
180:96ed750bd169 | 5845 | |
| Anna Bridge |
180:96ed750bd169 | 5846 | /* Circularly update wOffset. Watch out for positive and negative value */ |
| Anna Bridge |
180:96ed750bd169 | 5847 | wOffset += bufferInc; |
| Anna Bridge |
180:96ed750bd169 | 5848 | if (wOffset >= L) |
| Anna Bridge |
180:96ed750bd169 | 5849 | wOffset -= L; |
| Anna Bridge |
180:96ed750bd169 | 5850 | |
| Anna Bridge |
180:96ed750bd169 | 5851 | /* Decrement the loop counter */ |
| Anna Bridge |
180:96ed750bd169 | 5852 | i--; |
| Anna Bridge |
180:96ed750bd169 | 5853 | } |
| Anna Bridge |
180:96ed750bd169 | 5854 | |
| Anna Bridge |
180:96ed750bd169 | 5855 | /* Update the index pointer */ |
| Anna Bridge |
180:96ed750bd169 | 5856 | *writeOffset = (uint16_t)wOffset; |
| Anna Bridge |
180:96ed750bd169 | 5857 | } |
| Anna Bridge |
180:96ed750bd169 | 5858 | |
| Anna Bridge |
180:96ed750bd169 | 5859 | |
| Anna Bridge |
180:96ed750bd169 | 5860 | |
| Anna Bridge |
180:96ed750bd169 | 5861 | /** |
| Anna Bridge |
180:96ed750bd169 | 5862 | * @brief floating-point Circular Read function. |
| Anna Bridge |
180:96ed750bd169 | 5863 | */ |
| Anna Bridge |
180:96ed750bd169 | 5864 | CMSIS_INLINE __STATIC_INLINE void arm_circularRead_f32( |
| Anna Bridge |
180:96ed750bd169 | 5865 | int32_t * circBuffer, |
| Anna Bridge |
180:96ed750bd169 | 5866 | int32_t L, |
| Anna Bridge |
180:96ed750bd169 | 5867 | int32_t * readOffset, |
| Anna Bridge |
180:96ed750bd169 | 5868 | int32_t bufferInc, |
| Anna Bridge |
180:96ed750bd169 | 5869 | int32_t * dst, |
| Anna Bridge |
180:96ed750bd169 | 5870 | int32_t * dst_base, |
| Anna Bridge |
180:96ed750bd169 | 5871 | int32_t dst_length, |
| Anna Bridge |
180:96ed750bd169 | 5872 | int32_t dstInc, |
| Anna Bridge |
180:96ed750bd169 | 5873 | uint32_t blockSize) |
| Anna Bridge |
180:96ed750bd169 | 5874 | { |
| Anna Bridge |
180:96ed750bd169 | 5875 | uint32_t i = 0u; |
| Anna Bridge |
180:96ed750bd169 | 5876 | int32_t rOffset, dst_end; |
| Anna Bridge |
180:96ed750bd169 | 5877 | |
| Anna Bridge |
180:96ed750bd169 | 5878 | /* Copy the value of Index pointer that points |
| Anna Bridge |
180:96ed750bd169 | 5879 | * to the current location from where the input samples to be read */ |
| Anna Bridge |
180:96ed750bd169 | 5880 | rOffset = *readOffset; |
| Anna Bridge |
180:96ed750bd169 | 5881 | dst_end = (int32_t) (dst_base + dst_length); |
| Anna Bridge |
180:96ed750bd169 | 5882 | |
| Anna Bridge |
180:96ed750bd169 | 5883 | /* Loop over the blockSize */ |
| Anna Bridge |
180:96ed750bd169 | 5884 | i = blockSize; |
| Anna Bridge |
180:96ed750bd169 | 5885 | |
| Anna Bridge |
180:96ed750bd169 | 5886 | while (i > 0u) |
| Anna Bridge |
180:96ed750bd169 | 5887 | { |
| Anna Bridge |
180:96ed750bd169 | 5888 | /* copy the sample from the circular buffer to the destination buffer */ |
| Anna Bridge |
180:96ed750bd169 | 5889 | *dst = circBuffer[rOffset]; |
| Anna Bridge |
180:96ed750bd169 | 5890 | |
| Anna Bridge |
180:96ed750bd169 | 5891 | /* Update the input pointer */ |
| Anna Bridge |
180:96ed750bd169 | 5892 | dst += dstInc; |
| Anna Bridge |
180:96ed750bd169 | 5893 | |
| Anna Bridge |
180:96ed750bd169 | 5894 | if (dst == (int32_t *) dst_end) |
| Anna Bridge |
180:96ed750bd169 | 5895 | { |
| Anna Bridge |
180:96ed750bd169 | 5896 | dst = dst_base; |
| Anna Bridge |
180:96ed750bd169 | 5897 | } |
| Anna Bridge |
180:96ed750bd169 | 5898 | |
| Anna Bridge |
180:96ed750bd169 | 5899 | /* Circularly update rOffset. Watch out for positive and negative value */ |
| Anna Bridge |
180:96ed750bd169 | 5900 | rOffset += bufferInc; |
| Anna Bridge |
180:96ed750bd169 | 5901 | |
| Anna Bridge |
180:96ed750bd169 | 5902 | if (rOffset >= L) |
| Anna Bridge |
180:96ed750bd169 | 5903 | { |
| Anna Bridge |
180:96ed750bd169 | 5904 | rOffset -= L; |
| Anna Bridge |
180:96ed750bd169 | 5905 | } |
| Anna Bridge |
180:96ed750bd169 | 5906 | |
| Anna Bridge |
180:96ed750bd169 | 5907 | /* Decrement the loop counter */ |
| Anna Bridge |
180:96ed750bd169 | 5908 | i--; |
| Anna Bridge |
180:96ed750bd169 | 5909 | } |
| Anna Bridge |
180:96ed750bd169 | 5910 | |
| Anna Bridge |
180:96ed750bd169 | 5911 | /* Update the index pointer */ |
| Anna Bridge |
180:96ed750bd169 | 5912 | *readOffset = rOffset; |
| Anna Bridge |
180:96ed750bd169 | 5913 | } |
| Anna Bridge |
180:96ed750bd169 | 5914 | |
| Anna Bridge |
180:96ed750bd169 | 5915 | |
| Anna Bridge |
180:96ed750bd169 | 5916 | /** |
| Anna Bridge |
180:96ed750bd169 | 5917 | * @brief Q15 Circular write function. |
| Anna Bridge |
180:96ed750bd169 | 5918 | */ |
| Anna Bridge |
180:96ed750bd169 | 5919 | CMSIS_INLINE __STATIC_INLINE void arm_circularWrite_q15( |
| Anna Bridge |
180:96ed750bd169 | 5920 | q15_t * circBuffer, |
| Anna Bridge |
180:96ed750bd169 | 5921 | int32_t L, |
| Anna Bridge |
180:96ed750bd169 | 5922 | uint16_t * writeOffset, |
| Anna Bridge |
180:96ed750bd169 | 5923 | int32_t bufferInc, |
| Anna Bridge |
180:96ed750bd169 | 5924 | const q15_t * src, |
| Anna Bridge |
180:96ed750bd169 | 5925 | int32_t srcInc, |
| Anna Bridge |
180:96ed750bd169 | 5926 | uint32_t blockSize) |
| Anna Bridge |
180:96ed750bd169 | 5927 | { |
| Anna Bridge |
180:96ed750bd169 | 5928 | uint32_t i = 0u; |
| Anna Bridge |
180:96ed750bd169 | 5929 | int32_t wOffset; |
| Anna Bridge |
180:96ed750bd169 | 5930 | |
| Anna Bridge |
180:96ed750bd169 | 5931 | /* Copy the value of Index pointer that points |
| Anna Bridge |
180:96ed750bd169 | 5932 | * to the current location where the input samples to be copied */ |
| Anna Bridge |
180:96ed750bd169 | 5933 | wOffset = *writeOffset; |
| Anna Bridge |
180:96ed750bd169 | 5934 | |
| Anna Bridge |
180:96ed750bd169 | 5935 | /* Loop over the blockSize */ |
| Anna Bridge |
180:96ed750bd169 | 5936 | i = blockSize; |
| Anna Bridge |
180:96ed750bd169 | 5937 | |
| Anna Bridge |
180:96ed750bd169 | 5938 | while (i > 0u) |
| Anna Bridge |
180:96ed750bd169 | 5939 | { |
| Anna Bridge |
180:96ed750bd169 | 5940 | /* copy the input sample to the circular buffer */ |
| Anna Bridge |
180:96ed750bd169 | 5941 | circBuffer[wOffset] = *src; |
| Anna Bridge |
180:96ed750bd169 | 5942 | |
| Anna Bridge |
180:96ed750bd169 | 5943 | /* Update the input pointer */ |
| Anna Bridge |
180:96ed750bd169 | 5944 | src += srcInc; |
| Anna Bridge |
180:96ed750bd169 | 5945 | |
| Anna Bridge |
180:96ed750bd169 | 5946 | /* Circularly update wOffset. Watch out for positive and negative value */ |
| Anna Bridge |
180:96ed750bd169 | 5947 | wOffset += bufferInc; |
| Anna Bridge |
180:96ed750bd169 | 5948 | if (wOffset >= L) |
| Anna Bridge |
180:96ed750bd169 | 5949 | wOffset -= L; |
| Anna Bridge |
180:96ed750bd169 | 5950 | |
| Anna Bridge |
180:96ed750bd169 | 5951 | /* Decrement the loop counter */ |
| Anna Bridge |
180:96ed750bd169 | 5952 | i--; |
| Anna Bridge |
180:96ed750bd169 | 5953 | } |
| Anna Bridge |
180:96ed750bd169 | 5954 | |
| Anna Bridge |
180:96ed750bd169 | 5955 | /* Update the index pointer */ |
| Anna Bridge |
180:96ed750bd169 | 5956 | *writeOffset = (uint16_t)wOffset; |
| Anna Bridge |
180:96ed750bd169 | 5957 | } |
| Anna Bridge |
180:96ed750bd169 | 5958 | |
| Anna Bridge |
180:96ed750bd169 | 5959 | |
| Anna Bridge |
180:96ed750bd169 | 5960 | /** |
| Anna Bridge |
180:96ed750bd169 | 5961 | * @brief Q15 Circular Read function. |
| Anna Bridge |
180:96ed750bd169 | 5962 | */ |
| Anna Bridge |
180:96ed750bd169 | 5963 | CMSIS_INLINE __STATIC_INLINE void arm_circularRead_q15( |
| Anna Bridge |
180:96ed750bd169 | 5964 | q15_t * circBuffer, |
| Anna Bridge |
180:96ed750bd169 | 5965 | int32_t L, |
| Anna Bridge |
180:96ed750bd169 | 5966 | int32_t * readOffset, |
| Anna Bridge |
180:96ed750bd169 | 5967 | int32_t bufferInc, |
| Anna Bridge |
180:96ed750bd169 | 5968 | q15_t * dst, |
| Anna Bridge |
180:96ed750bd169 | 5969 | q15_t * dst_base, |
| Anna Bridge |
180:96ed750bd169 | 5970 | int32_t dst_length, |
| Anna Bridge |
180:96ed750bd169 | 5971 | int32_t dstInc, |
| Anna Bridge |
180:96ed750bd169 | 5972 | uint32_t blockSize) |
| Anna Bridge |
180:96ed750bd169 | 5973 | { |
| Anna Bridge |
180:96ed750bd169 | 5974 | uint32_t i = 0; |
| Anna Bridge |
180:96ed750bd169 | 5975 | int32_t rOffset, dst_end; |
| Anna Bridge |
180:96ed750bd169 | 5976 | |
| Anna Bridge |
180:96ed750bd169 | 5977 | /* Copy the value of Index pointer that points |
| Anna Bridge |
180:96ed750bd169 | 5978 | * to the current location from where the input samples to be read */ |
| Anna Bridge |
180:96ed750bd169 | 5979 | rOffset = *readOffset; |
| Anna Bridge |
180:96ed750bd169 | 5980 | |
| Anna Bridge |
180:96ed750bd169 | 5981 | dst_end = (int32_t) (dst_base + dst_length); |
| Anna Bridge |
180:96ed750bd169 | 5982 | |
| Anna Bridge |
180:96ed750bd169 | 5983 | /* Loop over the blockSize */ |
| Anna Bridge |
180:96ed750bd169 | 5984 | i = blockSize; |
| Anna Bridge |
180:96ed750bd169 | 5985 | |
| Anna Bridge |
180:96ed750bd169 | 5986 | while (i > 0u) |
| Anna Bridge |
180:96ed750bd169 | 5987 | { |
| Anna Bridge |
180:96ed750bd169 | 5988 | /* copy the sample from the circular buffer to the destination buffer */ |
| Anna Bridge |
180:96ed750bd169 | 5989 | *dst = circBuffer[rOffset]; |
| Anna Bridge |
180:96ed750bd169 | 5990 | |
| Anna Bridge |
180:96ed750bd169 | 5991 | /* Update the input pointer */ |
| Anna Bridge |
180:96ed750bd169 | 5992 | dst += dstInc; |
| Anna Bridge |
180:96ed750bd169 | 5993 | |
| Anna Bridge |
180:96ed750bd169 | 5994 | if (dst == (q15_t *) dst_end) |
| Anna Bridge |
180:96ed750bd169 | 5995 | { |
| Anna Bridge |
180:96ed750bd169 | 5996 | dst = dst_base; |
| Anna Bridge |
180:96ed750bd169 | 5997 | } |
| Anna Bridge |
180:96ed750bd169 | 5998 | |
| Anna Bridge |
180:96ed750bd169 | 5999 | /* Circularly update wOffset. Watch out for positive and negative value */ |
| Anna Bridge |
180:96ed750bd169 | 6000 | rOffset += bufferInc; |
| Anna Bridge |
180:96ed750bd169 | 6001 | |
| Anna Bridge |
180:96ed750bd169 | 6002 | if (rOffset >= L) |
| Anna Bridge |
180:96ed750bd169 | 6003 | { |
| Anna Bridge |
180:96ed750bd169 | 6004 | rOffset -= L; |
| Anna Bridge |
180:96ed750bd169 | 6005 | } |
| Anna Bridge |
180:96ed750bd169 | 6006 | |
| Anna Bridge |
180:96ed750bd169 | 6007 | /* Decrement the loop counter */ |
| Anna Bridge |
180:96ed750bd169 | 6008 | i--; |
| Anna Bridge |
180:96ed750bd169 | 6009 | } |
| Anna Bridge |
180:96ed750bd169 | 6010 | |
| Anna Bridge |
180:96ed750bd169 | 6011 | /* Update the index pointer */ |
| Anna Bridge |
180:96ed750bd169 | 6012 | *readOffset = rOffset; |
| Anna Bridge |
180:96ed750bd169 | 6013 | } |
| Anna Bridge |
180:96ed750bd169 | 6014 | |
| Anna Bridge |
180:96ed750bd169 | 6015 | |
| Anna Bridge |
180:96ed750bd169 | 6016 | /** |
| Anna Bridge |
180:96ed750bd169 | 6017 | * @brief Q7 Circular write function. |
| Anna Bridge |
180:96ed750bd169 | 6018 | */ |
| Anna Bridge |
180:96ed750bd169 | 6019 | CMSIS_INLINE __STATIC_INLINE void arm_circularWrite_q7( |
| Anna Bridge |
180:96ed750bd169 | 6020 | q7_t * circBuffer, |
| Anna Bridge |
180:96ed750bd169 | 6021 | int32_t L, |
| Anna Bridge |
180:96ed750bd169 | 6022 | uint16_t * writeOffset, |
| Anna Bridge |
180:96ed750bd169 | 6023 | int32_t bufferInc, |
| Anna Bridge |
180:96ed750bd169 | 6024 | const q7_t * src, |
| Anna Bridge |
180:96ed750bd169 | 6025 | int32_t srcInc, |
| Anna Bridge |
180:96ed750bd169 | 6026 | uint32_t blockSize) |
| Anna Bridge |
180:96ed750bd169 | 6027 | { |
| Anna Bridge |
180:96ed750bd169 | 6028 | uint32_t i = 0u; |
| Anna Bridge |
180:96ed750bd169 | 6029 | int32_t wOffset; |
| Anna Bridge |
180:96ed750bd169 | 6030 | |
| Anna Bridge |
180:96ed750bd169 | 6031 | /* Copy the value of Index pointer that points |
| Anna Bridge |
180:96ed750bd169 | 6032 | * to the current location where the input samples to be copied */ |
| Anna Bridge |
180:96ed750bd169 | 6033 | wOffset = *writeOffset; |
| Anna Bridge |
180:96ed750bd169 | 6034 | |
| Anna Bridge |
180:96ed750bd169 | 6035 | /* Loop over the blockSize */ |
| Anna Bridge |
180:96ed750bd169 | 6036 | i = blockSize; |
| Anna Bridge |
180:96ed750bd169 | 6037 | |
| Anna Bridge |
180:96ed750bd169 | 6038 | while (i > 0u) |
| Anna Bridge |
180:96ed750bd169 | 6039 | { |
| Anna Bridge |
180:96ed750bd169 | 6040 | /* copy the input sample to the circular buffer */ |
| Anna Bridge |
180:96ed750bd169 | 6041 | circBuffer[wOffset] = *src; |
| Anna Bridge |
180:96ed750bd169 | 6042 | |
| Anna Bridge |
180:96ed750bd169 | 6043 | /* Update the input pointer */ |
| Anna Bridge |
180:96ed750bd169 | 6044 | src += srcInc; |
| Anna Bridge |
180:96ed750bd169 | 6045 | |
| Anna Bridge |
180:96ed750bd169 | 6046 | /* Circularly update wOffset. Watch out for positive and negative value */ |
| Anna Bridge |
180:96ed750bd169 | 6047 | wOffset += bufferInc; |
| Anna Bridge |
180:96ed750bd169 | 6048 | if (wOffset >= L) |
| Anna Bridge |
180:96ed750bd169 | 6049 | wOffset -= L; |
| Anna Bridge |
180:96ed750bd169 | 6050 | |
| Anna Bridge |
180:96ed750bd169 | 6051 | /* Decrement the loop counter */ |
| Anna Bridge |
180:96ed750bd169 | 6052 | i--; |
| Anna Bridge |
180:96ed750bd169 | 6053 | } |
| Anna Bridge |
180:96ed750bd169 | 6054 | |
| Anna Bridge |
180:96ed750bd169 | 6055 | /* Update the index pointer */ |
| Anna Bridge |
180:96ed750bd169 | 6056 | *writeOffset = (uint16_t)wOffset; |
| Anna Bridge |
180:96ed750bd169 | 6057 | } |
| Anna Bridge |
180:96ed750bd169 | 6058 | |
| Anna Bridge |
180:96ed750bd169 | 6059 | |
| Anna Bridge |
180:96ed750bd169 | 6060 | /** |
| Anna Bridge |
180:96ed750bd169 | 6061 | * @brief Q7 Circular Read function. |
| Anna Bridge |
180:96ed750bd169 | 6062 | */ |
| Anna Bridge |
180:96ed750bd169 | 6063 | CMSIS_INLINE __STATIC_INLINE void arm_circularRead_q7( |
| Anna Bridge |
180:96ed750bd169 | 6064 | q7_t * circBuffer, |
| Anna Bridge |
180:96ed750bd169 | 6065 | int32_t L, |
| Anna Bridge |
180:96ed750bd169 | 6066 | int32_t * readOffset, |
| Anna Bridge |
180:96ed750bd169 | 6067 | int32_t bufferInc, |
| Anna Bridge |
180:96ed750bd169 | 6068 | q7_t * dst, |
| Anna Bridge |
180:96ed750bd169 | 6069 | q7_t * dst_base, |
| Anna Bridge |
180:96ed750bd169 | 6070 | int32_t dst_length, |
| Anna Bridge |
180:96ed750bd169 | 6071 | int32_t dstInc, |
| Anna Bridge |
180:96ed750bd169 | 6072 | uint32_t blockSize) |
| Anna Bridge |
180:96ed750bd169 | 6073 | { |
| Anna Bridge |
180:96ed750bd169 | 6074 | uint32_t i = 0; |
| Anna Bridge |
180:96ed750bd169 | 6075 | int32_t rOffset, dst_end; |
| Anna Bridge |
180:96ed750bd169 | 6076 | |
| Anna Bridge |
180:96ed750bd169 | 6077 | /* Copy the value of Index pointer that points |
| Anna Bridge |
180:96ed750bd169 | 6078 | * to the current location from where the input samples to be read */ |
| Anna Bridge |
180:96ed750bd169 | 6079 | rOffset = *readOffset; |
| Anna Bridge |
180:96ed750bd169 | 6080 | |
| Anna Bridge |
180:96ed750bd169 | 6081 | dst_end = (int32_t) (dst_base + dst_length); |
| Anna Bridge |
180:96ed750bd169 | 6082 | |
| Anna Bridge |
180:96ed750bd169 | 6083 | /* Loop over the blockSize */ |
| Anna Bridge |
180:96ed750bd169 | 6084 | i = blockSize; |
| Anna Bridge |
180:96ed750bd169 | 6085 | |
| Anna Bridge |
180:96ed750bd169 | 6086 | while (i > 0u) |
| Anna Bridge |
180:96ed750bd169 | 6087 | { |
| Anna Bridge |
180:96ed750bd169 | 6088 | /* copy the sample from the circular buffer to the destination buffer */ |
| Anna Bridge |
180:96ed750bd169 | 6089 | *dst = circBuffer[rOffset]; |
| Anna Bridge |
180:96ed750bd169 | 6090 | |
| Anna Bridge |
180:96ed750bd169 | 6091 | /* Update the input pointer */ |
| Anna Bridge |
180:96ed750bd169 | 6092 | dst += dstInc; |
| Anna Bridge |
180:96ed750bd169 | 6093 | |
| Anna Bridge |
180:96ed750bd169 | 6094 | if (dst == (q7_t *) dst_end) |
| Anna Bridge |
180:96ed750bd169 | 6095 | { |
| Anna Bridge |
180:96ed750bd169 | 6096 | dst = dst_base; |
| Anna Bridge |
180:96ed750bd169 | 6097 | } |
| Anna Bridge |
180:96ed750bd169 | 6098 | |
| Anna Bridge |
180:96ed750bd169 | 6099 | /* Circularly update rOffset. Watch out for positive and negative value */ |
| Anna Bridge |
180:96ed750bd169 | 6100 | rOffset += bufferInc; |
| Anna Bridge |
180:96ed750bd169 | 6101 | |
| Anna Bridge |
180:96ed750bd169 | 6102 | if (rOffset >= L) |
| Anna Bridge |
180:96ed750bd169 | 6103 | { |
| Anna Bridge |
180:96ed750bd169 | 6104 | rOffset -= L; |
| Anna Bridge |
180:96ed750bd169 | 6105 | } |
| Anna Bridge |
180:96ed750bd169 | 6106 | |
| Anna Bridge |
180:96ed750bd169 | 6107 | /* Decrement the loop counter */ |
| Anna Bridge |
180:96ed750bd169 | 6108 | i--; |
| Anna Bridge |
180:96ed750bd169 | 6109 | } |
| Anna Bridge |
180:96ed750bd169 | 6110 | |
| Anna Bridge |
180:96ed750bd169 | 6111 | /* Update the index pointer */ |
| Anna Bridge |
180:96ed750bd169 | 6112 | *readOffset = rOffset; |
| Anna Bridge |
180:96ed750bd169 | 6113 | } |
| Anna Bridge |
180:96ed750bd169 | 6114 | |
| Anna Bridge |
180:96ed750bd169 | 6115 | |
| Anna Bridge |
180:96ed750bd169 | 6116 | /** |
| Anna Bridge |
180:96ed750bd169 | 6117 | * @brief Sum of the squares of the elements of a Q31 vector. |
| Anna Bridge |
180:96ed750bd169 | 6118 | * @param[in] pSrc is input pointer |
| Anna Bridge |
180:96ed750bd169 | 6119 | * @param[in] blockSize is the number of samples to process |
| Anna Bridge |
180:96ed750bd169 | 6120 | * @param[out] pResult is output value. |
| Anna Bridge |
180:96ed750bd169 | 6121 | */ |
| Anna Bridge |
180:96ed750bd169 | 6122 | void arm_power_q31( |
| Anna Bridge |
180:96ed750bd169 | 6123 | q31_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 6124 | uint32_t blockSize, |
| Anna Bridge |
180:96ed750bd169 | 6125 | q63_t * pResult); |
| Anna Bridge |
180:96ed750bd169 | 6126 | |
| Anna Bridge |
180:96ed750bd169 | 6127 | |
| Anna Bridge |
180:96ed750bd169 | 6128 | /** |
| Anna Bridge |
180:96ed750bd169 | 6129 | * @brief Sum of the squares of the elements of a floating-point vector. |
| Anna Bridge |
180:96ed750bd169 | 6130 | * @param[in] pSrc is input pointer |
| Anna Bridge |
180:96ed750bd169 | 6131 | * @param[in] blockSize is the number of samples to process |
| Anna Bridge |
180:96ed750bd169 | 6132 | * @param[out] pResult is output value. |
| Anna Bridge |
180:96ed750bd169 | 6133 | */ |
| Anna Bridge |
180:96ed750bd169 | 6134 | void arm_power_f32( |
| Anna Bridge |
180:96ed750bd169 | 6135 | float32_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 6136 | uint32_t blockSize, |
| Anna Bridge |
180:96ed750bd169 | 6137 | float32_t * pResult); |
| Anna Bridge |
180:96ed750bd169 | 6138 | |
| Anna Bridge |
180:96ed750bd169 | 6139 | |
| Anna Bridge |
180:96ed750bd169 | 6140 | /** |
| Anna Bridge |
180:96ed750bd169 | 6141 | * @brief Sum of the squares of the elements of a Q15 vector. |
| Anna Bridge |
180:96ed750bd169 | 6142 | * @param[in] pSrc is input pointer |
| Anna Bridge |
180:96ed750bd169 | 6143 | * @param[in] blockSize is the number of samples to process |
| Anna Bridge |
180:96ed750bd169 | 6144 | * @param[out] pResult is output value. |
| Anna Bridge |
180:96ed750bd169 | 6145 | */ |
| Anna Bridge |
180:96ed750bd169 | 6146 | void arm_power_q15( |
| Anna Bridge |
180:96ed750bd169 | 6147 | q15_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 6148 | uint32_t blockSize, |
| Anna Bridge |
180:96ed750bd169 | 6149 | q63_t * pResult); |
| Anna Bridge |
180:96ed750bd169 | 6150 | |
| Anna Bridge |
180:96ed750bd169 | 6151 | |
| Anna Bridge |
180:96ed750bd169 | 6152 | /** |
| Anna Bridge |
180:96ed750bd169 | 6153 | * @brief Sum of the squares of the elements of a Q7 vector. |
| Anna Bridge |
180:96ed750bd169 | 6154 | * @param[in] pSrc is input pointer |
| Anna Bridge |
180:96ed750bd169 | 6155 | * @param[in] blockSize is the number of samples to process |
| Anna Bridge |
180:96ed750bd169 | 6156 | * @param[out] pResult is output value. |
| Anna Bridge |
180:96ed750bd169 | 6157 | */ |
| Anna Bridge |
180:96ed750bd169 | 6158 | void arm_power_q7( |
| Anna Bridge |
180:96ed750bd169 | 6159 | q7_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 6160 | uint32_t blockSize, |
| Anna Bridge |
180:96ed750bd169 | 6161 | q31_t * pResult); |
| Anna Bridge |
180:96ed750bd169 | 6162 | |
| Anna Bridge |
180:96ed750bd169 | 6163 | |
| Anna Bridge |
180:96ed750bd169 | 6164 | /** |
| Anna Bridge |
180:96ed750bd169 | 6165 | * @brief Mean value of a Q7 vector. |
| Anna Bridge |
180:96ed750bd169 | 6166 | * @param[in] pSrc is input pointer |
| Anna Bridge |
180:96ed750bd169 | 6167 | * @param[in] blockSize is the number of samples to process |
| Anna Bridge |
180:96ed750bd169 | 6168 | * @param[out] pResult is output value. |
| Anna Bridge |
180:96ed750bd169 | 6169 | */ |
| Anna Bridge |
180:96ed750bd169 | 6170 | void arm_mean_q7( |
| Anna Bridge |
180:96ed750bd169 | 6171 | q7_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 6172 | uint32_t blockSize, |
| Anna Bridge |
180:96ed750bd169 | 6173 | q7_t * pResult); |
| Anna Bridge |
180:96ed750bd169 | 6174 | |
| Anna Bridge |
180:96ed750bd169 | 6175 | |
| Anna Bridge |
180:96ed750bd169 | 6176 | /** |
| Anna Bridge |
180:96ed750bd169 | 6177 | * @brief Mean value of a Q15 vector. |
| Anna Bridge |
180:96ed750bd169 | 6178 | * @param[in] pSrc is input pointer |
| Anna Bridge |
180:96ed750bd169 | 6179 | * @param[in] blockSize is the number of samples to process |
| Anna Bridge |
180:96ed750bd169 | 6180 | * @param[out] pResult is output value. |
| Anna Bridge |
180:96ed750bd169 | 6181 | */ |
| Anna Bridge |
180:96ed750bd169 | 6182 | void arm_mean_q15( |
| Anna Bridge |
180:96ed750bd169 | 6183 | q15_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 6184 | uint32_t blockSize, |
| Anna Bridge |
180:96ed750bd169 | 6185 | q15_t * pResult); |
| Anna Bridge |
180:96ed750bd169 | 6186 | |
| Anna Bridge |
180:96ed750bd169 | 6187 | |
| Anna Bridge |
180:96ed750bd169 | 6188 | /** |
| Anna Bridge |
180:96ed750bd169 | 6189 | * @brief Mean value of a Q31 vector. |
| Anna Bridge |
180:96ed750bd169 | 6190 | * @param[in] pSrc is input pointer |
| Anna Bridge |
180:96ed750bd169 | 6191 | * @param[in] blockSize is the number of samples to process |
| Anna Bridge |
180:96ed750bd169 | 6192 | * @param[out] pResult is output value. |
| Anna Bridge |
180:96ed750bd169 | 6193 | */ |
| Anna Bridge |
180:96ed750bd169 | 6194 | void arm_mean_q31( |
| Anna Bridge |
180:96ed750bd169 | 6195 | q31_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 6196 | uint32_t blockSize, |
| Anna Bridge |
180:96ed750bd169 | 6197 | q31_t * pResult); |
| Anna Bridge |
180:96ed750bd169 | 6198 | |
| Anna Bridge |
180:96ed750bd169 | 6199 | |
| Anna Bridge |
180:96ed750bd169 | 6200 | /** |
| Anna Bridge |
180:96ed750bd169 | 6201 | * @brief Mean value of a floating-point vector. |
| Anna Bridge |
180:96ed750bd169 | 6202 | * @param[in] pSrc is input pointer |
| Anna Bridge |
180:96ed750bd169 | 6203 | * @param[in] blockSize is the number of samples to process |
| Anna Bridge |
180:96ed750bd169 | 6204 | * @param[out] pResult is output value. |
| Anna Bridge |
180:96ed750bd169 | 6205 | */ |
| Anna Bridge |
180:96ed750bd169 | 6206 | void arm_mean_f32( |
| Anna Bridge |
180:96ed750bd169 | 6207 | float32_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 6208 | uint32_t blockSize, |
| Anna Bridge |
180:96ed750bd169 | 6209 | float32_t * pResult); |
| Anna Bridge |
180:96ed750bd169 | 6210 | |
| Anna Bridge |
180:96ed750bd169 | 6211 | |
| Anna Bridge |
180:96ed750bd169 | 6212 | /** |
| Anna Bridge |
180:96ed750bd169 | 6213 | * @brief Variance of the elements of a floating-point vector. |
| Anna Bridge |
180:96ed750bd169 | 6214 | * @param[in] pSrc is input pointer |
| Anna Bridge |
180:96ed750bd169 | 6215 | * @param[in] blockSize is the number of samples to process |
| Anna Bridge |
180:96ed750bd169 | 6216 | * @param[out] pResult is output value. |
| Anna Bridge |
180:96ed750bd169 | 6217 | */ |
| Anna Bridge |
180:96ed750bd169 | 6218 | void arm_var_f32( |
| Anna Bridge |
180:96ed750bd169 | 6219 | float32_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 6220 | uint32_t blockSize, |
| Anna Bridge |
180:96ed750bd169 | 6221 | float32_t * pResult); |
| Anna Bridge |
180:96ed750bd169 | 6222 | |
| Anna Bridge |
180:96ed750bd169 | 6223 | |
| Anna Bridge |
180:96ed750bd169 | 6224 | /** |
| Anna Bridge |
180:96ed750bd169 | 6225 | * @brief Variance of the elements of a Q31 vector. |
| Anna Bridge |
180:96ed750bd169 | 6226 | * @param[in] pSrc is input pointer |
| Anna Bridge |
180:96ed750bd169 | 6227 | * @param[in] blockSize is the number of samples to process |
| Anna Bridge |
180:96ed750bd169 | 6228 | * @param[out] pResult is output value. |
| Anna Bridge |
180:96ed750bd169 | 6229 | */ |
| Anna Bridge |
180:96ed750bd169 | 6230 | void arm_var_q31( |
| Anna Bridge |
180:96ed750bd169 | 6231 | q31_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 6232 | uint32_t blockSize, |
| Anna Bridge |
180:96ed750bd169 | 6233 | q31_t * pResult); |
| Anna Bridge |
180:96ed750bd169 | 6234 | |
| Anna Bridge |
180:96ed750bd169 | 6235 | |
| Anna Bridge |
180:96ed750bd169 | 6236 | /** |
| Anna Bridge |
180:96ed750bd169 | 6237 | * @brief Variance of the elements of a Q15 vector. |
| Anna Bridge |
180:96ed750bd169 | 6238 | * @param[in] pSrc is input pointer |
| Anna Bridge |
180:96ed750bd169 | 6239 | * @param[in] blockSize is the number of samples to process |
| Anna Bridge |
180:96ed750bd169 | 6240 | * @param[out] pResult is output value. |
| Anna Bridge |
180:96ed750bd169 | 6241 | */ |
| Anna Bridge |
180:96ed750bd169 | 6242 | void arm_var_q15( |
| Anna Bridge |
180:96ed750bd169 | 6243 | q15_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 6244 | uint32_t blockSize, |
| Anna Bridge |
180:96ed750bd169 | 6245 | q15_t * pResult); |
| Anna Bridge |
180:96ed750bd169 | 6246 | |
| Anna Bridge |
180:96ed750bd169 | 6247 | |
| Anna Bridge |
180:96ed750bd169 | 6248 | /** |
| Anna Bridge |
180:96ed750bd169 | 6249 | * @brief Root Mean Square of the elements of a floating-point vector. |
| Anna Bridge |
180:96ed750bd169 | 6250 | * @param[in] pSrc is input pointer |
| Anna Bridge |
180:96ed750bd169 | 6251 | * @param[in] blockSize is the number of samples to process |
| Anna Bridge |
180:96ed750bd169 | 6252 | * @param[out] pResult is output value. |
| Anna Bridge |
180:96ed750bd169 | 6253 | */ |
| Anna Bridge |
180:96ed750bd169 | 6254 | void arm_rms_f32( |
| Anna Bridge |
180:96ed750bd169 | 6255 | float32_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 6256 | uint32_t blockSize, |
| Anna Bridge |
180:96ed750bd169 | 6257 | float32_t * pResult); |
| Anna Bridge |
180:96ed750bd169 | 6258 | |
| Anna Bridge |
180:96ed750bd169 | 6259 | |
| Anna Bridge |
180:96ed750bd169 | 6260 | /** |
| Anna Bridge |
180:96ed750bd169 | 6261 | * @brief Root Mean Square of the elements of a Q31 vector. |
| Anna Bridge |
180:96ed750bd169 | 6262 | * @param[in] pSrc is input pointer |
| Anna Bridge |
180:96ed750bd169 | 6263 | * @param[in] blockSize is the number of samples to process |
| Anna Bridge |
180:96ed750bd169 | 6264 | * @param[out] pResult is output value. |
| Anna Bridge |
180:96ed750bd169 | 6265 | */ |
| Anna Bridge |
180:96ed750bd169 | 6266 | void arm_rms_q31( |
| Anna Bridge |
180:96ed750bd169 | 6267 | q31_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 6268 | uint32_t blockSize, |
| Anna Bridge |
180:96ed750bd169 | 6269 | q31_t * pResult); |
| Anna Bridge |
180:96ed750bd169 | 6270 | |
| Anna Bridge |
180:96ed750bd169 | 6271 | |
| Anna Bridge |
180:96ed750bd169 | 6272 | /** |
| Anna Bridge |
180:96ed750bd169 | 6273 | * @brief Root Mean Square of the elements of a Q15 vector. |
| Anna Bridge |
180:96ed750bd169 | 6274 | * @param[in] pSrc is input pointer |
| Anna Bridge |
180:96ed750bd169 | 6275 | * @param[in] blockSize is the number of samples to process |
| Anna Bridge |
180:96ed750bd169 | 6276 | * @param[out] pResult is output value. |
| Anna Bridge |
180:96ed750bd169 | 6277 | */ |
| Anna Bridge |
180:96ed750bd169 | 6278 | void arm_rms_q15( |
| Anna Bridge |
180:96ed750bd169 | 6279 | q15_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 6280 | uint32_t blockSize, |
| Anna Bridge |
180:96ed750bd169 | 6281 | q15_t * pResult); |
| Anna Bridge |
180:96ed750bd169 | 6282 | |
| Anna Bridge |
180:96ed750bd169 | 6283 | |
| Anna Bridge |
180:96ed750bd169 | 6284 | /** |
| Anna Bridge |
180:96ed750bd169 | 6285 | * @brief Standard deviation of the elements of a floating-point vector. |
| Anna Bridge |
180:96ed750bd169 | 6286 | * @param[in] pSrc is input pointer |
| Anna Bridge |
180:96ed750bd169 | 6287 | * @param[in] blockSize is the number of samples to process |
| Anna Bridge |
180:96ed750bd169 | 6288 | * @param[out] pResult is output value. |
| Anna Bridge |
180:96ed750bd169 | 6289 | */ |
| Anna Bridge |
180:96ed750bd169 | 6290 | void arm_std_f32( |
| Anna Bridge |
180:96ed750bd169 | 6291 | float32_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 6292 | uint32_t blockSize, |
| Anna Bridge |
180:96ed750bd169 | 6293 | float32_t * pResult); |
| Anna Bridge |
180:96ed750bd169 | 6294 | |
| Anna Bridge |
180:96ed750bd169 | 6295 | |
| Anna Bridge |
180:96ed750bd169 | 6296 | /** |
| Anna Bridge |
180:96ed750bd169 | 6297 | * @brief Standard deviation of the elements of a Q31 vector. |
| Anna Bridge |
180:96ed750bd169 | 6298 | * @param[in] pSrc is input pointer |
| Anna Bridge |
180:96ed750bd169 | 6299 | * @param[in] blockSize is the number of samples to process |
| Anna Bridge |
180:96ed750bd169 | 6300 | * @param[out] pResult is output value. |
| Anna Bridge |
180:96ed750bd169 | 6301 | */ |
| Anna Bridge |
180:96ed750bd169 | 6302 | void arm_std_q31( |
| Anna Bridge |
180:96ed750bd169 | 6303 | q31_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 6304 | uint32_t blockSize, |
| Anna Bridge |
180:96ed750bd169 | 6305 | q31_t * pResult); |
| Anna Bridge |
180:96ed750bd169 | 6306 | |
| Anna Bridge |
180:96ed750bd169 | 6307 | |
| Anna Bridge |
180:96ed750bd169 | 6308 | /** |
| Anna Bridge |
180:96ed750bd169 | 6309 | * @brief Standard deviation of the elements of a Q15 vector. |
| Anna Bridge |
180:96ed750bd169 | 6310 | * @param[in] pSrc is input pointer |
| Anna Bridge |
180:96ed750bd169 | 6311 | * @param[in] blockSize is the number of samples to process |
| Anna Bridge |
180:96ed750bd169 | 6312 | * @param[out] pResult is output value. |
| Anna Bridge |
180:96ed750bd169 | 6313 | */ |
| Anna Bridge |
180:96ed750bd169 | 6314 | void arm_std_q15( |
| Anna Bridge |
180:96ed750bd169 | 6315 | q15_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 6316 | uint32_t blockSize, |
| Anna Bridge |
180:96ed750bd169 | 6317 | q15_t * pResult); |
| Anna Bridge |
180:96ed750bd169 | 6318 | |
| Anna Bridge |
180:96ed750bd169 | 6319 | |
| Anna Bridge |
180:96ed750bd169 | 6320 | /** |
| Anna Bridge |
180:96ed750bd169 | 6321 | * @brief Floating-point complex magnitude |
| Anna Bridge |
180:96ed750bd169 | 6322 | * @param[in] pSrc points to the complex input vector |
| Anna Bridge |
180:96ed750bd169 | 6323 | * @param[out] pDst points to the real output vector |
| Anna Bridge |
180:96ed750bd169 | 6324 | * @param[in] numSamples number of complex samples in the input vector |
| Anna Bridge |
180:96ed750bd169 | 6325 | */ |
| Anna Bridge |
180:96ed750bd169 | 6326 | void arm_cmplx_mag_f32( |
| Anna Bridge |
180:96ed750bd169 | 6327 | float32_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 6328 | float32_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 6329 | uint32_t numSamples); |
| Anna Bridge |
180:96ed750bd169 | 6330 | |
| Anna Bridge |
180:96ed750bd169 | 6331 | |
| Anna Bridge |
180:96ed750bd169 | 6332 | /** |
| Anna Bridge |
180:96ed750bd169 | 6333 | * @brief Q31 complex magnitude |
| Anna Bridge |
180:96ed750bd169 | 6334 | * @param[in] pSrc points to the complex input vector |
| Anna Bridge |
180:96ed750bd169 | 6335 | * @param[out] pDst points to the real output vector |
| Anna Bridge |
180:96ed750bd169 | 6336 | * @param[in] numSamples number of complex samples in the input vector |
| Anna Bridge |
180:96ed750bd169 | 6337 | */ |
| Anna Bridge |
180:96ed750bd169 | 6338 | void arm_cmplx_mag_q31( |
| Anna Bridge |
180:96ed750bd169 | 6339 | q31_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 6340 | q31_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 6341 | uint32_t numSamples); |
| Anna Bridge |
180:96ed750bd169 | 6342 | |
| Anna Bridge |
180:96ed750bd169 | 6343 | |
| Anna Bridge |
180:96ed750bd169 | 6344 | /** |
| Anna Bridge |
180:96ed750bd169 | 6345 | * @brief Q15 complex magnitude |
| Anna Bridge |
180:96ed750bd169 | 6346 | * @param[in] pSrc points to the complex input vector |
| Anna Bridge |
180:96ed750bd169 | 6347 | * @param[out] pDst points to the real output vector |
| Anna Bridge |
180:96ed750bd169 | 6348 | * @param[in] numSamples number of complex samples in the input vector |
| Anna Bridge |
180:96ed750bd169 | 6349 | */ |
| Anna Bridge |
180:96ed750bd169 | 6350 | void arm_cmplx_mag_q15( |
| Anna Bridge |
180:96ed750bd169 | 6351 | q15_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 6352 | q15_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 6353 | uint32_t numSamples); |
| Anna Bridge |
180:96ed750bd169 | 6354 | |
| Anna Bridge |
180:96ed750bd169 | 6355 | |
| Anna Bridge |
180:96ed750bd169 | 6356 | /** |
| Anna Bridge |
180:96ed750bd169 | 6357 | * @brief Q15 complex dot product |
| Anna Bridge |
180:96ed750bd169 | 6358 | * @param[in] pSrcA points to the first input vector |
| Anna Bridge |
180:96ed750bd169 | 6359 | * @param[in] pSrcB points to the second input vector |
| Anna Bridge |
180:96ed750bd169 | 6360 | * @param[in] numSamples number of complex samples in each vector |
| Anna Bridge |
180:96ed750bd169 | 6361 | * @param[out] realResult real part of the result returned here |
| Anna Bridge |
180:96ed750bd169 | 6362 | * @param[out] imagResult imaginary part of the result returned here |
| Anna Bridge |
180:96ed750bd169 | 6363 | */ |
| Anna Bridge |
180:96ed750bd169 | 6364 | void arm_cmplx_dot_prod_q15( |
| Anna Bridge |
180:96ed750bd169 | 6365 | q15_t * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 6366 | q15_t * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 6367 | uint32_t numSamples, |
| Anna Bridge |
180:96ed750bd169 | 6368 | q31_t * realResult, |
| Anna Bridge |
180:96ed750bd169 | 6369 | q31_t * imagResult); |
| Anna Bridge |
180:96ed750bd169 | 6370 | |
| Anna Bridge |
180:96ed750bd169 | 6371 | |
| Anna Bridge |
180:96ed750bd169 | 6372 | /** |
| Anna Bridge |
180:96ed750bd169 | 6373 | * @brief Q31 complex dot product |
| Anna Bridge |
180:96ed750bd169 | 6374 | * @param[in] pSrcA points to the first input vector |
| Anna Bridge |
180:96ed750bd169 | 6375 | * @param[in] pSrcB points to the second input vector |
| Anna Bridge |
180:96ed750bd169 | 6376 | * @param[in] numSamples number of complex samples in each vector |
| Anna Bridge |
180:96ed750bd169 | 6377 | * @param[out] realResult real part of the result returned here |
| Anna Bridge |
180:96ed750bd169 | 6378 | * @param[out] imagResult imaginary part of the result returned here |
| Anna Bridge |
180:96ed750bd169 | 6379 | */ |
| Anna Bridge |
180:96ed750bd169 | 6380 | void arm_cmplx_dot_prod_q31( |
| Anna Bridge |
180:96ed750bd169 | 6381 | q31_t * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 6382 | q31_t * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 6383 | uint32_t numSamples, |
| Anna Bridge |
180:96ed750bd169 | 6384 | q63_t * realResult, |
| Anna Bridge |
180:96ed750bd169 | 6385 | q63_t * imagResult); |
| Anna Bridge |
180:96ed750bd169 | 6386 | |
| Anna Bridge |
180:96ed750bd169 | 6387 | |
| Anna Bridge |
180:96ed750bd169 | 6388 | /** |
| Anna Bridge |
180:96ed750bd169 | 6389 | * @brief Floating-point complex dot product |
| Anna Bridge |
180:96ed750bd169 | 6390 | * @param[in] pSrcA points to the first input vector |
| Anna Bridge |
180:96ed750bd169 | 6391 | * @param[in] pSrcB points to the second input vector |
| Anna Bridge |
180:96ed750bd169 | 6392 | * @param[in] numSamples number of complex samples in each vector |
| Anna Bridge |
180:96ed750bd169 | 6393 | * @param[out] realResult real part of the result returned here |
| Anna Bridge |
180:96ed750bd169 | 6394 | * @param[out] imagResult imaginary part of the result returned here |
| Anna Bridge |
180:96ed750bd169 | 6395 | */ |
| Anna Bridge |
180:96ed750bd169 | 6396 | void arm_cmplx_dot_prod_f32( |
| Anna Bridge |
180:96ed750bd169 | 6397 | float32_t * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 6398 | float32_t * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 6399 | uint32_t numSamples, |
| Anna Bridge |
180:96ed750bd169 | 6400 | float32_t * realResult, |
| Anna Bridge |
180:96ed750bd169 | 6401 | float32_t * imagResult); |
| Anna Bridge |
180:96ed750bd169 | 6402 | |
| Anna Bridge |
180:96ed750bd169 | 6403 | |
| Anna Bridge |
180:96ed750bd169 | 6404 | /** |
| Anna Bridge |
180:96ed750bd169 | 6405 | * @brief Q15 complex-by-real multiplication |
| Anna Bridge |
180:96ed750bd169 | 6406 | * @param[in] pSrcCmplx points to the complex input vector |
| Anna Bridge |
180:96ed750bd169 | 6407 | * @param[in] pSrcReal points to the real input vector |
| Anna Bridge |
180:96ed750bd169 | 6408 | * @param[out] pCmplxDst points to the complex output vector |
| Anna Bridge |
180:96ed750bd169 | 6409 | * @param[in] numSamples number of samples in each vector |
| Anna Bridge |
180:96ed750bd169 | 6410 | */ |
| Anna Bridge |
180:96ed750bd169 | 6411 | void arm_cmplx_mult_real_q15( |
| Anna Bridge |
180:96ed750bd169 | 6412 | q15_t * pSrcCmplx, |
| Anna Bridge |
180:96ed750bd169 | 6413 | q15_t * pSrcReal, |
| Anna Bridge |
180:96ed750bd169 | 6414 | q15_t * pCmplxDst, |
| Anna Bridge |
180:96ed750bd169 | 6415 | uint32_t numSamples); |
| Anna Bridge |
180:96ed750bd169 | 6416 | |
| Anna Bridge |
180:96ed750bd169 | 6417 | |
| Anna Bridge |
180:96ed750bd169 | 6418 | /** |
| Anna Bridge |
180:96ed750bd169 | 6419 | * @brief Q31 complex-by-real multiplication |
| Anna Bridge |
180:96ed750bd169 | 6420 | * @param[in] pSrcCmplx points to the complex input vector |
| Anna Bridge |
180:96ed750bd169 | 6421 | * @param[in] pSrcReal points to the real input vector |
| Anna Bridge |
180:96ed750bd169 | 6422 | * @param[out] pCmplxDst points to the complex output vector |
| Anna Bridge |
180:96ed750bd169 | 6423 | * @param[in] numSamples number of samples in each vector |
| Anna Bridge |
180:96ed750bd169 | 6424 | */ |
| Anna Bridge |
180:96ed750bd169 | 6425 | void arm_cmplx_mult_real_q31( |
| Anna Bridge |
180:96ed750bd169 | 6426 | q31_t * pSrcCmplx, |
| Anna Bridge |
180:96ed750bd169 | 6427 | q31_t * pSrcReal, |
| Anna Bridge |
180:96ed750bd169 | 6428 | q31_t * pCmplxDst, |
| Anna Bridge |
180:96ed750bd169 | 6429 | uint32_t numSamples); |
| Anna Bridge |
180:96ed750bd169 | 6430 | |
| Anna Bridge |
180:96ed750bd169 | 6431 | |
| Anna Bridge |
180:96ed750bd169 | 6432 | /** |
| Anna Bridge |
180:96ed750bd169 | 6433 | * @brief Floating-point complex-by-real multiplication |
| Anna Bridge |
180:96ed750bd169 | 6434 | * @param[in] pSrcCmplx points to the complex input vector |
| Anna Bridge |
180:96ed750bd169 | 6435 | * @param[in] pSrcReal points to the real input vector |
| Anna Bridge |
180:96ed750bd169 | 6436 | * @param[out] pCmplxDst points to the complex output vector |
| Anna Bridge |
180:96ed750bd169 | 6437 | * @param[in] numSamples number of samples in each vector |
| Anna Bridge |
180:96ed750bd169 | 6438 | */ |
| Anna Bridge |
180:96ed750bd169 | 6439 | void arm_cmplx_mult_real_f32( |
| Anna Bridge |
180:96ed750bd169 | 6440 | float32_t * pSrcCmplx, |
| Anna Bridge |
180:96ed750bd169 | 6441 | float32_t * pSrcReal, |
| Anna Bridge |
180:96ed750bd169 | 6442 | float32_t * pCmplxDst, |
| Anna Bridge |
180:96ed750bd169 | 6443 | uint32_t numSamples); |
| Anna Bridge |
180:96ed750bd169 | 6444 | |
| Anna Bridge |
180:96ed750bd169 | 6445 | |
| Anna Bridge |
180:96ed750bd169 | 6446 | /** |
| Anna Bridge |
180:96ed750bd169 | 6447 | * @brief Minimum value of a Q7 vector. |
| Anna Bridge |
180:96ed750bd169 | 6448 | * @param[in] pSrc is input pointer |
| Anna Bridge |
180:96ed750bd169 | 6449 | * @param[in] blockSize is the number of samples to process |
| Anna Bridge |
180:96ed750bd169 | 6450 | * @param[out] result is output pointer |
| Anna Bridge |
180:96ed750bd169 | 6451 | * @param[in] index is the array index of the minimum value in the input buffer. |
| Anna Bridge |
180:96ed750bd169 | 6452 | */ |
| Anna Bridge |
180:96ed750bd169 | 6453 | void arm_min_q7( |
| Anna Bridge |
180:96ed750bd169 | 6454 | q7_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 6455 | uint32_t blockSize, |
| Anna Bridge |
180:96ed750bd169 | 6456 | q7_t * result, |
| Anna Bridge |
180:96ed750bd169 | 6457 | uint32_t * index); |
| Anna Bridge |
180:96ed750bd169 | 6458 | |
| Anna Bridge |
180:96ed750bd169 | 6459 | |
| Anna Bridge |
180:96ed750bd169 | 6460 | /** |
| Anna Bridge |
180:96ed750bd169 | 6461 | * @brief Minimum value of a Q15 vector. |
| Anna Bridge |
180:96ed750bd169 | 6462 | * @param[in] pSrc is input pointer |
| Anna Bridge |
180:96ed750bd169 | 6463 | * @param[in] blockSize is the number of samples to process |
| Anna Bridge |
180:96ed750bd169 | 6464 | * @param[out] pResult is output pointer |
| Anna Bridge |
180:96ed750bd169 | 6465 | * @param[in] pIndex is the array index of the minimum value in the input buffer. |
| Anna Bridge |
180:96ed750bd169 | 6466 | */ |
| Anna Bridge |
180:96ed750bd169 | 6467 | void arm_min_q15( |
| Anna Bridge |
180:96ed750bd169 | 6468 | q15_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 6469 | uint32_t blockSize, |
| Anna Bridge |
180:96ed750bd169 | 6470 | q15_t * pResult, |
| Anna Bridge |
180:96ed750bd169 | 6471 | uint32_t * pIndex); |
| Anna Bridge |
180:96ed750bd169 | 6472 | |
| Anna Bridge |
180:96ed750bd169 | 6473 | |
| Anna Bridge |
180:96ed750bd169 | 6474 | /** |
| Anna Bridge |
180:96ed750bd169 | 6475 | * @brief Minimum value of a Q31 vector. |
| Anna Bridge |
180:96ed750bd169 | 6476 | * @param[in] pSrc is input pointer |
| Anna Bridge |
180:96ed750bd169 | 6477 | * @param[in] blockSize is the number of samples to process |
| Anna Bridge |
180:96ed750bd169 | 6478 | * @param[out] pResult is output pointer |
| Anna Bridge |
180:96ed750bd169 | 6479 | * @param[out] pIndex is the array index of the minimum value in the input buffer. |
| Anna Bridge |
180:96ed750bd169 | 6480 | */ |
| Anna Bridge |
180:96ed750bd169 | 6481 | void arm_min_q31( |
| Anna Bridge |
180:96ed750bd169 | 6482 | q31_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 6483 | uint32_t blockSize, |
| Anna Bridge |
180:96ed750bd169 | 6484 | q31_t * pResult, |
| Anna Bridge |
180:96ed750bd169 | 6485 | uint32_t * pIndex); |
| Anna Bridge |
180:96ed750bd169 | 6486 | |
| Anna Bridge |
180:96ed750bd169 | 6487 | |
| Anna Bridge |
180:96ed750bd169 | 6488 | /** |
| Anna Bridge |
180:96ed750bd169 | 6489 | * @brief Minimum value of a floating-point vector. |
| Anna Bridge |
180:96ed750bd169 | 6490 | * @param[in] pSrc is input pointer |
| Anna Bridge |
180:96ed750bd169 | 6491 | * @param[in] blockSize is the number of samples to process |
| Anna Bridge |
180:96ed750bd169 | 6492 | * @param[out] pResult is output pointer |
| Anna Bridge |
180:96ed750bd169 | 6493 | * @param[out] pIndex is the array index of the minimum value in the input buffer. |
| Anna Bridge |
180:96ed750bd169 | 6494 | */ |
| Anna Bridge |
180:96ed750bd169 | 6495 | void arm_min_f32( |
| Anna Bridge |
180:96ed750bd169 | 6496 | float32_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 6497 | uint32_t blockSize, |
| Anna Bridge |
180:96ed750bd169 | 6498 | float32_t * pResult, |
| Anna Bridge |
180:96ed750bd169 | 6499 | uint32_t * pIndex); |
| Anna Bridge |
180:96ed750bd169 | 6500 | |
| Anna Bridge |
180:96ed750bd169 | 6501 | |
| Anna Bridge |
180:96ed750bd169 | 6502 | /** |
| Anna Bridge |
180:96ed750bd169 | 6503 | * @brief Maximum value of a Q7 vector. |
| Anna Bridge |
180:96ed750bd169 | 6504 | * @param[in] pSrc points to the input buffer |
| Anna Bridge |
180:96ed750bd169 | 6505 | * @param[in] blockSize length of the input vector |
| Anna Bridge |
180:96ed750bd169 | 6506 | * @param[out] pResult maximum value returned here |
| Anna Bridge |
180:96ed750bd169 | 6507 | * @param[out] pIndex index of maximum value returned here |
| Anna Bridge |
180:96ed750bd169 | 6508 | */ |
| Anna Bridge |
180:96ed750bd169 | 6509 | void arm_max_q7( |
| Anna Bridge |
180:96ed750bd169 | 6510 | q7_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 6511 | uint32_t blockSize, |
| Anna Bridge |
180:96ed750bd169 | 6512 | q7_t * pResult, |
| Anna Bridge |
180:96ed750bd169 | 6513 | uint32_t * pIndex); |
| Anna Bridge |
180:96ed750bd169 | 6514 | |
| Anna Bridge |
180:96ed750bd169 | 6515 | |
| Anna Bridge |
180:96ed750bd169 | 6516 | /** |
| Anna Bridge |
180:96ed750bd169 | 6517 | * @brief Maximum value of a Q15 vector. |
| Anna Bridge |
180:96ed750bd169 | 6518 | * @param[in] pSrc points to the input buffer |
| Anna Bridge |
180:96ed750bd169 | 6519 | * @param[in] blockSize length of the input vector |
| Anna Bridge |
180:96ed750bd169 | 6520 | * @param[out] pResult maximum value returned here |
| Anna Bridge |
180:96ed750bd169 | 6521 | * @param[out] pIndex index of maximum value returned here |
| Anna Bridge |
180:96ed750bd169 | 6522 | */ |
| Anna Bridge |
180:96ed750bd169 | 6523 | void arm_max_q15( |
| Anna Bridge |
180:96ed750bd169 | 6524 | q15_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 6525 | uint32_t blockSize, |
| Anna Bridge |
180:96ed750bd169 | 6526 | q15_t * pResult, |
| Anna Bridge |
180:96ed750bd169 | 6527 | uint32_t * pIndex); |
| Anna Bridge |
180:96ed750bd169 | 6528 | |
| Anna Bridge |
180:96ed750bd169 | 6529 | |
| Anna Bridge |
180:96ed750bd169 | 6530 | /** |
| Anna Bridge |
180:96ed750bd169 | 6531 | * @brief Maximum value of a Q31 vector. |
| Anna Bridge |
180:96ed750bd169 | 6532 | * @param[in] pSrc points to the input buffer |
| Anna Bridge |
180:96ed750bd169 | 6533 | * @param[in] blockSize length of the input vector |
| Anna Bridge |
180:96ed750bd169 | 6534 | * @param[out] pResult maximum value returned here |
| Anna Bridge |
180:96ed750bd169 | 6535 | * @param[out] pIndex index of maximum value returned here |
| Anna Bridge |
180:96ed750bd169 | 6536 | */ |
| Anna Bridge |
180:96ed750bd169 | 6537 | void arm_max_q31( |
| Anna Bridge |
180:96ed750bd169 | 6538 | q31_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 6539 | uint32_t blockSize, |
| Anna Bridge |
180:96ed750bd169 | 6540 | q31_t * pResult, |
| Anna Bridge |
180:96ed750bd169 | 6541 | uint32_t * pIndex); |
| Anna Bridge |
180:96ed750bd169 | 6542 | |
| Anna Bridge |
180:96ed750bd169 | 6543 | |
| Anna Bridge |
180:96ed750bd169 | 6544 | /** |
| Anna Bridge |
180:96ed750bd169 | 6545 | * @brief Maximum value of a floating-point vector. |
| Anna Bridge |
180:96ed750bd169 | 6546 | * @param[in] pSrc points to the input buffer |
| Anna Bridge |
180:96ed750bd169 | 6547 | * @param[in] blockSize length of the input vector |
| Anna Bridge |
180:96ed750bd169 | 6548 | * @param[out] pResult maximum value returned here |
| Anna Bridge |
180:96ed750bd169 | 6549 | * @param[out] pIndex index of maximum value returned here |
| Anna Bridge |
180:96ed750bd169 | 6550 | */ |
| Anna Bridge |
180:96ed750bd169 | 6551 | void arm_max_f32( |
| Anna Bridge |
180:96ed750bd169 | 6552 | float32_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 6553 | uint32_t blockSize, |
| Anna Bridge |
180:96ed750bd169 | 6554 | float32_t * pResult, |
| Anna Bridge |
180:96ed750bd169 | 6555 | uint32_t * pIndex); |
| Anna Bridge |
180:96ed750bd169 | 6556 | |
| Anna Bridge |
180:96ed750bd169 | 6557 | |
| Anna Bridge |
180:96ed750bd169 | 6558 | /** |
| Anna Bridge |
180:96ed750bd169 | 6559 | * @brief Q15 complex-by-complex multiplication |
| Anna Bridge |
180:96ed750bd169 | 6560 | * @param[in] pSrcA points to the first input vector |
| Anna Bridge |
180:96ed750bd169 | 6561 | * @param[in] pSrcB points to the second input vector |
| Anna Bridge |
180:96ed750bd169 | 6562 | * @param[out] pDst points to the output vector |
| Anna Bridge |
180:96ed750bd169 | 6563 | * @param[in] numSamples number of complex samples in each vector |
| Anna Bridge |
180:96ed750bd169 | 6564 | */ |
| Anna Bridge |
180:96ed750bd169 | 6565 | void arm_cmplx_mult_cmplx_q15( |
| Anna Bridge |
180:96ed750bd169 | 6566 | q15_t * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 6567 | q15_t * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 6568 | q15_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 6569 | uint32_t numSamples); |
| Anna Bridge |
180:96ed750bd169 | 6570 | |
| Anna Bridge |
180:96ed750bd169 | 6571 | |
| Anna Bridge |
180:96ed750bd169 | 6572 | /** |
| Anna Bridge |
180:96ed750bd169 | 6573 | * @brief Q31 complex-by-complex multiplication |
| Anna Bridge |
180:96ed750bd169 | 6574 | * @param[in] pSrcA points to the first input vector |
| Anna Bridge |
180:96ed750bd169 | 6575 | * @param[in] pSrcB points to the second input vector |
| Anna Bridge |
180:96ed750bd169 | 6576 | * @param[out] pDst points to the output vector |
| Anna Bridge |
180:96ed750bd169 | 6577 | * @param[in] numSamples number of complex samples in each vector |
| Anna Bridge |
180:96ed750bd169 | 6578 | */ |
| Anna Bridge |
180:96ed750bd169 | 6579 | void arm_cmplx_mult_cmplx_q31( |
| Anna Bridge |
180:96ed750bd169 | 6580 | q31_t * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 6581 | q31_t * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 6582 | q31_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 6583 | uint32_t numSamples); |
| Anna Bridge |
180:96ed750bd169 | 6584 | |
| Anna Bridge |
180:96ed750bd169 | 6585 | |
| Anna Bridge |
180:96ed750bd169 | 6586 | /** |
| Anna Bridge |
180:96ed750bd169 | 6587 | * @brief Floating-point complex-by-complex multiplication |
| Anna Bridge |
180:96ed750bd169 | 6588 | * @param[in] pSrcA points to the first input vector |
| Anna Bridge |
180:96ed750bd169 | 6589 | * @param[in] pSrcB points to the second input vector |
| Anna Bridge |
180:96ed750bd169 | 6590 | * @param[out] pDst points to the output vector |
| Anna Bridge |
180:96ed750bd169 | 6591 | * @param[in] numSamples number of complex samples in each vector |
| Anna Bridge |
180:96ed750bd169 | 6592 | */ |
| Anna Bridge |
180:96ed750bd169 | 6593 | void arm_cmplx_mult_cmplx_f32( |
| Anna Bridge |
180:96ed750bd169 | 6594 | float32_t * pSrcA, |
| Anna Bridge |
180:96ed750bd169 | 6595 | float32_t * pSrcB, |
| Anna Bridge |
180:96ed750bd169 | 6596 | float32_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 6597 | uint32_t numSamples); |
| Anna Bridge |
180:96ed750bd169 | 6598 | |
| Anna Bridge |
180:96ed750bd169 | 6599 | |
| Anna Bridge |
180:96ed750bd169 | 6600 | /** |
| Anna Bridge |
180:96ed750bd169 | 6601 | * @brief Converts the elements of the floating-point vector to Q31 vector. |
| Anna Bridge |
180:96ed750bd169 | 6602 | * @param[in] pSrc points to the floating-point input vector |
| Anna Bridge |
180:96ed750bd169 | 6603 | * @param[out] pDst points to the Q31 output vector |
| Anna Bridge |
180:96ed750bd169 | 6604 | * @param[in] blockSize length of the input vector |
| Anna Bridge |
180:96ed750bd169 | 6605 | */ |
| Anna Bridge |
180:96ed750bd169 | 6606 | void arm_float_to_q31( |
| Anna Bridge |
180:96ed750bd169 | 6607 | float32_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 6608 | q31_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 6609 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 6610 | |
| Anna Bridge |
180:96ed750bd169 | 6611 | |
| Anna Bridge |
180:96ed750bd169 | 6612 | /** |
| Anna Bridge |
180:96ed750bd169 | 6613 | * @brief Converts the elements of the floating-point vector to Q15 vector. |
| Anna Bridge |
180:96ed750bd169 | 6614 | * @param[in] pSrc points to the floating-point input vector |
| Anna Bridge |
180:96ed750bd169 | 6615 | * @param[out] pDst points to the Q15 output vector |
| Anna Bridge |
180:96ed750bd169 | 6616 | * @param[in] blockSize length of the input vector |
| Anna Bridge |
180:96ed750bd169 | 6617 | */ |
| Anna Bridge |
180:96ed750bd169 | 6618 | void arm_float_to_q15( |
| Anna Bridge |
180:96ed750bd169 | 6619 | float32_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 6620 | q15_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 6621 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 6622 | |
| Anna Bridge |
180:96ed750bd169 | 6623 | |
| Anna Bridge |
180:96ed750bd169 | 6624 | /** |
| Anna Bridge |
180:96ed750bd169 | 6625 | * @brief Converts the elements of the floating-point vector to Q7 vector. |
| Anna Bridge |
180:96ed750bd169 | 6626 | * @param[in] pSrc points to the floating-point input vector |
| Anna Bridge |
180:96ed750bd169 | 6627 | * @param[out] pDst points to the Q7 output vector |
| Anna Bridge |
180:96ed750bd169 | 6628 | * @param[in] blockSize length of the input vector |
| Anna Bridge |
180:96ed750bd169 | 6629 | */ |
| Anna Bridge |
180:96ed750bd169 | 6630 | void arm_float_to_q7( |
| Anna Bridge |
180:96ed750bd169 | 6631 | float32_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 6632 | q7_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 6633 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 6634 | |
| Anna Bridge |
180:96ed750bd169 | 6635 | |
| Anna Bridge |
180:96ed750bd169 | 6636 | /** |
| Anna Bridge |
180:96ed750bd169 | 6637 | * @brief Converts the elements of the Q31 vector to Q15 vector. |
| Anna Bridge |
180:96ed750bd169 | 6638 | * @param[in] pSrc is input pointer |
| Anna Bridge |
180:96ed750bd169 | 6639 | * @param[out] pDst is output pointer |
| Anna Bridge |
180:96ed750bd169 | 6640 | * @param[in] blockSize is the number of samples to process |
| Anna Bridge |
180:96ed750bd169 | 6641 | */ |
| Anna Bridge |
180:96ed750bd169 | 6642 | void arm_q31_to_q15( |
| Anna Bridge |
180:96ed750bd169 | 6643 | q31_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 6644 | q15_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 6645 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 6646 | |
| Anna Bridge |
180:96ed750bd169 | 6647 | |
| Anna Bridge |
180:96ed750bd169 | 6648 | /** |
| Anna Bridge |
180:96ed750bd169 | 6649 | * @brief Converts the elements of the Q31 vector to Q7 vector. |
| Anna Bridge |
180:96ed750bd169 | 6650 | * @param[in] pSrc is input pointer |
| Anna Bridge |
180:96ed750bd169 | 6651 | * @param[out] pDst is output pointer |
| Anna Bridge |
180:96ed750bd169 | 6652 | * @param[in] blockSize is the number of samples to process |
| Anna Bridge |
180:96ed750bd169 | 6653 | */ |
| Anna Bridge |
180:96ed750bd169 | 6654 | void arm_q31_to_q7( |
| Anna Bridge |
180:96ed750bd169 | 6655 | q31_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 6656 | q7_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 6657 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 6658 | |
| Anna Bridge |
180:96ed750bd169 | 6659 | |
| Anna Bridge |
180:96ed750bd169 | 6660 | /** |
| Anna Bridge |
180:96ed750bd169 | 6661 | * @brief Converts the elements of the Q15 vector to floating-point vector. |
| Anna Bridge |
180:96ed750bd169 | 6662 | * @param[in] pSrc is input pointer |
| Anna Bridge |
180:96ed750bd169 | 6663 | * @param[out] pDst is output pointer |
| Anna Bridge |
180:96ed750bd169 | 6664 | * @param[in] blockSize is the number of samples to process |
| Anna Bridge |
180:96ed750bd169 | 6665 | */ |
| Anna Bridge |
180:96ed750bd169 | 6666 | void arm_q15_to_float( |
| Anna Bridge |
180:96ed750bd169 | 6667 | q15_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 6668 | float32_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 6669 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 6670 | |
| Anna Bridge |
180:96ed750bd169 | 6671 | |
| Anna Bridge |
180:96ed750bd169 | 6672 | /** |
| Anna Bridge |
180:96ed750bd169 | 6673 | * @brief Converts the elements of the Q15 vector to Q31 vector. |
| Anna Bridge |
180:96ed750bd169 | 6674 | * @param[in] pSrc is input pointer |
| Anna Bridge |
180:96ed750bd169 | 6675 | * @param[out] pDst is output pointer |
| Anna Bridge |
180:96ed750bd169 | 6676 | * @param[in] blockSize is the number of samples to process |
| Anna Bridge |
180:96ed750bd169 | 6677 | */ |
| Anna Bridge |
180:96ed750bd169 | 6678 | void arm_q15_to_q31( |
| Anna Bridge |
180:96ed750bd169 | 6679 | q15_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 6680 | q31_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 6681 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 6682 | |
| Anna Bridge |
180:96ed750bd169 | 6683 | |
| Anna Bridge |
180:96ed750bd169 | 6684 | /** |
| Anna Bridge |
180:96ed750bd169 | 6685 | * @brief Converts the elements of the Q15 vector to Q7 vector. |
| Anna Bridge |
180:96ed750bd169 | 6686 | * @param[in] pSrc is input pointer |
| Anna Bridge |
180:96ed750bd169 | 6687 | * @param[out] pDst is output pointer |
| Anna Bridge |
180:96ed750bd169 | 6688 | * @param[in] blockSize is the number of samples to process |
| Anna Bridge |
180:96ed750bd169 | 6689 | */ |
| Anna Bridge |
180:96ed750bd169 | 6690 | void arm_q15_to_q7( |
| Anna Bridge |
180:96ed750bd169 | 6691 | q15_t * pSrc, |
| Anna Bridge |
180:96ed750bd169 | 6692 | q7_t * pDst, |
| Anna Bridge |
180:96ed750bd169 | 6693 | uint32_t blockSize); |
| Anna Bridge |
180:96ed750bd169 | 6694 | |
| Anna Bridge |
180:96ed750bd169 | 6695 | |
| Anna Bridge |
180:96ed750bd169 | 6696 | /** |
| Anna Bridge |
180:96ed750bd169 | 6697 | * @ingroup groupInterpolation |
| Anna Bridge |
180:96ed750bd169 | 6698 | */ |
| Anna Bridge |
180:96ed750bd169 | 6699 | |
| Anna Bridge |
180:96ed750bd169 | 6700 | /** |
| Anna Bridge |
180:96ed750bd169 | 6701 | * @defgroup BilinearInterpolate Bilinear Interpolation |
| Anna Bridge |
180:96ed750bd169 | 6702 | * |
| Anna Bridge |
180:96ed750bd169 | 6703 | * Bilinear interpolation is an extension of linear interpolation applied to a two dimensional grid. |
| Anna Bridge |
180:96ed750bd169 | 6704 | * The underlying function <code>f(x, y)</code> is sampled on a regular grid and the interpolation process |
| Anna Bridge |
180:96ed750bd169 | 6705 | * determines values between the grid points. |
| Anna Bridge |
180:96ed750bd169 | 6706 | * Bilinear interpolation is equivalent to two step linear interpolation, first in the x-dimension and then in the y-dimension. |
| Anna Bridge |
180:96ed750bd169 | 6707 | * Bilinear interpolation is often used in image processing to rescale images. |
| Anna Bridge |
180:96ed750bd169 | 6708 | * The CMSIS DSP library provides bilinear interpolation functions for Q7, Q15, Q31, and floating-point data types. |
| Anna Bridge |
180:96ed750bd169 | 6709 | * |
| Anna Bridge |
180:96ed750bd169 | 6710 | * <b>Algorithm</b> |
| Anna Bridge |
180:96ed750bd169 | 6711 | * \par |
| Anna Bridge |
180:96ed750bd169 | 6712 | * The instance structure used by the bilinear interpolation functions describes a two dimensional data table. |
| Anna Bridge |
180:96ed750bd169 | 6713 | * For floating-point, the instance structure is defined as: |
| Anna Bridge |
180:96ed750bd169 | 6714 | * <pre> |
| Anna Bridge |
180:96ed750bd169 | 6715 | * typedef struct |
| Anna Bridge |
180:96ed750bd169 | 6716 | * { |
| Anna Bridge |
180:96ed750bd169 | 6717 | * uint16_t numRows; |
| Anna Bridge |
180:96ed750bd169 | 6718 | * uint16_t numCols; |
| Anna Bridge |
180:96ed750bd169 | 6719 | * float32_t *pData; |
| Anna Bridge |
180:96ed750bd169 | 6720 | * } arm_bilinear_interp_instance_f32; |
| Anna Bridge |
180:96ed750bd169 | 6721 | * </pre> |
| Anna Bridge |
180:96ed750bd169 | 6722 | * |
| Anna Bridge |
180:96ed750bd169 | 6723 | * \par |
| Anna Bridge |
180:96ed750bd169 | 6724 | * where <code>numRows</code> specifies the number of rows in the table; |
| Anna Bridge |
180:96ed750bd169 | 6725 | * <code>numCols</code> specifies the number of columns in the table; |
| Anna Bridge |
180:96ed750bd169 | 6726 | * and <code>pData</code> points to an array of size <code>numRows*numCols</code> values. |
| Anna Bridge |
180:96ed750bd169 | 6727 | * The data table <code>pTable</code> is organized in row order and the supplied data values fall on integer indexes. |
| Anna Bridge |
180:96ed750bd169 | 6728 | * That is, table element (x,y) is located at <code>pTable[x + y*numCols]</code> where x and y are integers. |
| Anna Bridge |
180:96ed750bd169 | 6729 | * |
| Anna Bridge |
180:96ed750bd169 | 6730 | * \par |
| Anna Bridge |
180:96ed750bd169 | 6731 | * Let <code>(x, y)</code> specify the desired interpolation point. Then define: |
| Anna Bridge |
180:96ed750bd169 | 6732 | * <pre> |
| Anna Bridge |
180:96ed750bd169 | 6733 | * XF = floor(x) |
| Anna Bridge |
180:96ed750bd169 | 6734 | * YF = floor(y) |
| Anna Bridge |
180:96ed750bd169 | 6735 | * </pre> |
| Anna Bridge |
180:96ed750bd169 | 6736 | * \par |
| Anna Bridge |
180:96ed750bd169 | 6737 | * The interpolated output point is computed as: |
| Anna Bridge |
180:96ed750bd169 | 6738 | * <pre> |
| Anna Bridge |
180:96ed750bd169 | 6739 | * f(x, y) = f(XF, YF) * (1-(x-XF)) * (1-(y-YF)) |
| Anna Bridge |
180:96ed750bd169 | 6740 | * + f(XF+1, YF) * (x-XF)*(1-(y-YF)) |
| Anna Bridge |
180:96ed750bd169 | 6741 | * + f(XF, YF+1) * (1-(x-XF))*(y-YF) |
| Anna Bridge |
180:96ed750bd169 | 6742 | * + f(XF+1, YF+1) * (x-XF)*(y-YF) |
| Anna Bridge |
180:96ed750bd169 | 6743 | * </pre> |
| Anna Bridge |
180:96ed750bd169 | 6744 | * Note that the coordinates (x, y) contain integer and fractional components. |
| Anna Bridge |
180:96ed750bd169 | 6745 | * The integer components specify which portion of the table to use while the |
| Anna Bridge |
180:96ed750bd169 | 6746 | * fractional components control the interpolation processor. |
| Anna Bridge |
180:96ed750bd169 | 6747 | * |
| Anna Bridge |
180:96ed750bd169 | 6748 | * \par |
| Anna Bridge |
180:96ed750bd169 | 6749 | * if (x,y) are outside of the table boundary, Bilinear interpolation returns zero output. |
| Anna Bridge |
180:96ed750bd169 | 6750 | */ |
| Anna Bridge |
180:96ed750bd169 | 6751 | |
| Anna Bridge |
180:96ed750bd169 | 6752 | /** |
| Anna Bridge |
180:96ed750bd169 | 6753 | * @addtogroup BilinearInterpolate |
| Anna Bridge |
180:96ed750bd169 | 6754 | * @{ |
| Anna Bridge |
180:96ed750bd169 | 6755 | */ |
| Anna Bridge |
180:96ed750bd169 | 6756 | |
| Anna Bridge |
180:96ed750bd169 | 6757 | |
| Anna Bridge |
180:96ed750bd169 | 6758 | /** |
| Anna Bridge |
180:96ed750bd169 | 6759 | * |
| Anna Bridge |
180:96ed750bd169 | 6760 | * @brief Floating-point bilinear interpolation. |
| Anna Bridge |
180:96ed750bd169 | 6761 | * @param[in,out] S points to an instance of the interpolation structure. |
| Anna Bridge |
180:96ed750bd169 | 6762 | * @param[in] X interpolation coordinate. |
| Anna Bridge |
180:96ed750bd169 | 6763 | * @param[in] Y interpolation coordinate. |
| Anna Bridge |
180:96ed750bd169 | 6764 | * @return out interpolated value. |
| Anna Bridge |
180:96ed750bd169 | 6765 | */ |
| Anna Bridge |
180:96ed750bd169 | 6766 | CMSIS_INLINE __STATIC_INLINE float32_t arm_bilinear_interp_f32( |
| Anna Bridge |
180:96ed750bd169 | 6767 | const arm_bilinear_interp_instance_f32 * S, |
| Anna Bridge |
180:96ed750bd169 | 6768 | float32_t X, |
| Anna Bridge |
180:96ed750bd169 | 6769 | float32_t Y) |
| Anna Bridge |
180:96ed750bd169 | 6770 | { |
| Anna Bridge |
180:96ed750bd169 | 6771 | float32_t out; |
| Anna Bridge |
180:96ed750bd169 | 6772 | float32_t f00, f01, f10, f11; |
| Anna Bridge |
180:96ed750bd169 | 6773 | float32_t *pData = S->pData; |
| Anna Bridge |
180:96ed750bd169 | 6774 | int32_t xIndex, yIndex, index; |
| Anna Bridge |
180:96ed750bd169 | 6775 | float32_t xdiff, ydiff; |
| Anna Bridge |
180:96ed750bd169 | 6776 | float32_t b1, b2, b3, b4; |
| Anna Bridge |
180:96ed750bd169 | 6777 | |
| Anna Bridge |
180:96ed750bd169 | 6778 | xIndex = (int32_t) X; |
| Anna Bridge |
180:96ed750bd169 | 6779 | yIndex = (int32_t) Y; |
| Anna Bridge |
180:96ed750bd169 | 6780 | |
| Anna Bridge |
180:96ed750bd169 | 6781 | /* Care taken for table outside boundary */ |
| Anna Bridge |
180:96ed750bd169 | 6782 | /* Returns zero output when values are outside table boundary */ |
| Anna Bridge |
180:96ed750bd169 | 6783 | if (xIndex < 0 || xIndex > (S->numRows - 1) || yIndex < 0 || yIndex > (S->numCols - 1)) |
| Anna Bridge |
180:96ed750bd169 | 6784 | { |
| Anna Bridge |
180:96ed750bd169 | 6785 | return (0); |
| Anna Bridge |
180:96ed750bd169 | 6786 | } |
| Anna Bridge |
180:96ed750bd169 | 6787 | |
| Anna Bridge |
180:96ed750bd169 | 6788 | /* Calculation of index for two nearest points in X-direction */ |
| Anna Bridge |
180:96ed750bd169 | 6789 | index = (xIndex - 1) + (yIndex - 1) * S->numCols; |
| Anna Bridge |
180:96ed750bd169 | 6790 | |
| Anna Bridge |
180:96ed750bd169 | 6791 | |
| Anna Bridge |
180:96ed750bd169 | 6792 | /* Read two nearest points in X-direction */ |
| Anna Bridge |
180:96ed750bd169 | 6793 | f00 = pData[index]; |
| Anna Bridge |
180:96ed750bd169 | 6794 | f01 = pData[index + 1]; |
| Anna Bridge |
180:96ed750bd169 | 6795 | |
| Anna Bridge |
180:96ed750bd169 | 6796 | /* Calculation of index for two nearest points in Y-direction */ |
| Anna Bridge |
180:96ed750bd169 | 6797 | index = (xIndex - 1) + (yIndex) * S->numCols; |
| Anna Bridge |
180:96ed750bd169 | 6798 | |
| Anna Bridge |
180:96ed750bd169 | 6799 | |
| Anna Bridge |
180:96ed750bd169 | 6800 | /* Read two nearest points in Y-direction */ |
| Anna Bridge |
180:96ed750bd169 | 6801 | f10 = pData[index]; |
| Anna Bridge |
180:96ed750bd169 | 6802 | f11 = pData[index + 1]; |
| Anna Bridge |
180:96ed750bd169 | 6803 | |
| Anna Bridge |
180:96ed750bd169 | 6804 | /* Calculation of intermediate values */ |
| Anna Bridge |
180:96ed750bd169 | 6805 | b1 = f00; |
| Anna Bridge |
180:96ed750bd169 | 6806 | b2 = f01 - f00; |
| Anna Bridge |
180:96ed750bd169 | 6807 | b3 = f10 - f00; |
| Anna Bridge |
180:96ed750bd169 | 6808 | b4 = f00 - f01 - f10 + f11; |
| Anna Bridge |
180:96ed750bd169 | 6809 | |
| Anna Bridge |
180:96ed750bd169 | 6810 | /* Calculation of fractional part in X */ |
| Anna Bridge |
180:96ed750bd169 | 6811 | xdiff = X - xIndex; |
| Anna Bridge |
180:96ed750bd169 | 6812 | |
| Anna Bridge |
180:96ed750bd169 | 6813 | /* Calculation of fractional part in Y */ |
| Anna Bridge |
180:96ed750bd169 | 6814 | ydiff = Y - yIndex; |
| Anna Bridge |
180:96ed750bd169 | 6815 | |
| Anna Bridge |
180:96ed750bd169 | 6816 | /* Calculation of bi-linear interpolated output */ |
| Anna Bridge |
180:96ed750bd169 | 6817 | out = b1 + b2 * xdiff + b3 * ydiff + b4 * xdiff * ydiff; |
| Anna Bridge |
180:96ed750bd169 | 6818 | |
| Anna Bridge |
180:96ed750bd169 | 6819 | /* return to application */ |
| Anna Bridge |
180:96ed750bd169 | 6820 | return (out); |
| Anna Bridge |
180:96ed750bd169 | 6821 | } |
| Anna Bridge |
180:96ed750bd169 | 6822 | |
| Anna Bridge |
180:96ed750bd169 | 6823 | |
| Anna Bridge |
180:96ed750bd169 | 6824 | /** |
| Anna Bridge |
180:96ed750bd169 | 6825 | * |
| Anna Bridge |
180:96ed750bd169 | 6826 | * @brief Q31 bilinear interpolation. |
| Anna Bridge |
180:96ed750bd169 | 6827 | * @param[in,out] S points to an instance of the interpolation structure. |
| Anna Bridge |
180:96ed750bd169 | 6828 | * @param[in] X interpolation coordinate in 12.20 format. |
| Anna Bridge |
180:96ed750bd169 | 6829 | * @param[in] Y interpolation coordinate in 12.20 format. |
| Anna Bridge |
180:96ed750bd169 | 6830 | * @return out interpolated value. |
| Anna Bridge |
180:96ed750bd169 | 6831 | */ |
| Anna Bridge |
180:96ed750bd169 | 6832 | CMSIS_INLINE __STATIC_INLINE q31_t arm_bilinear_interp_q31( |
| Anna Bridge |
180:96ed750bd169 | 6833 | arm_bilinear_interp_instance_q31 * S, |
| Anna Bridge |
180:96ed750bd169 | 6834 | q31_t X, |
| Anna Bridge |
180:96ed750bd169 | 6835 | q31_t Y) |
| Anna Bridge |
180:96ed750bd169 | 6836 | { |
| Anna Bridge |
180:96ed750bd169 | 6837 | q31_t out; /* Temporary output */ |
| Anna Bridge |
180:96ed750bd169 | 6838 | q31_t acc = 0; /* output */ |
| Anna Bridge |
180:96ed750bd169 | 6839 | q31_t xfract, yfract; /* X, Y fractional parts */ |
| Anna Bridge |
180:96ed750bd169 | 6840 | q31_t x1, x2, y1, y2; /* Nearest output values */ |
| Anna Bridge |
180:96ed750bd169 | 6841 | int32_t rI, cI; /* Row and column indices */ |
| Anna Bridge |
180:96ed750bd169 | 6842 | q31_t *pYData = S->pData; /* pointer to output table values */ |
| Anna Bridge |
180:96ed750bd169 | 6843 | uint32_t nCols = S->numCols; /* num of rows */ |
| Anna Bridge |
180:96ed750bd169 | 6844 | |
| Anna Bridge |
180:96ed750bd169 | 6845 | /* Input is in 12.20 format */ |
| Anna Bridge |
180:96ed750bd169 | 6846 | /* 12 bits for the table index */ |
| Anna Bridge |
180:96ed750bd169 | 6847 | /* Index value calculation */ |
| Anna Bridge |
180:96ed750bd169 | 6848 | rI = ((X & (q31_t)0xFFF00000) >> 20); |
| Anna Bridge |
180:96ed750bd169 | 6849 | |
| Anna Bridge |
180:96ed750bd169 | 6850 | /* Input is in 12.20 format */ |
| Anna Bridge |
180:96ed750bd169 | 6851 | /* 12 bits for the table index */ |
| Anna Bridge |
180:96ed750bd169 | 6852 | /* Index value calculation */ |
| Anna Bridge |
180:96ed750bd169 | 6853 | cI = ((Y & (q31_t)0xFFF00000) >> 20); |
| Anna Bridge |
180:96ed750bd169 | 6854 | |
| Anna Bridge |
180:96ed750bd169 | 6855 | /* Care taken for table outside boundary */ |
| Anna Bridge |
180:96ed750bd169 | 6856 | /* Returns zero output when values are outside table boundary */ |
| Anna Bridge |
180:96ed750bd169 | 6857 | if (rI < 0 || rI > (S->numRows - 1) || cI < 0 || cI > (S->numCols - 1)) |
| Anna Bridge |
180:96ed750bd169 | 6858 | { |
| Anna Bridge |
180:96ed750bd169 | 6859 | return (0); |
| Anna Bridge |
180:96ed750bd169 | 6860 | } |
| Anna Bridge |
180:96ed750bd169 | 6861 | |
| Anna Bridge |
180:96ed750bd169 | 6862 | /* 20 bits for the fractional part */ |
| Anna Bridge |
180:96ed750bd169 | 6863 | /* shift left xfract by 11 to keep 1.31 format */ |
| Anna Bridge |
180:96ed750bd169 | 6864 | xfract = (X & 0x000FFFFF) << 11u; |
| Anna Bridge |
180:96ed750bd169 | 6865 | |
| Anna Bridge |
180:96ed750bd169 | 6866 | /* Read two nearest output values from the index */ |
| Anna Bridge |
180:96ed750bd169 | 6867 | x1 = pYData[(rI) + (int32_t)nCols * (cI) ]; |
| Anna Bridge |
180:96ed750bd169 | 6868 | x2 = pYData[(rI) + (int32_t)nCols * (cI) + 1]; |
| Anna Bridge |
180:96ed750bd169 | 6869 | |
| Anna Bridge |
180:96ed750bd169 | 6870 | /* 20 bits for the fractional part */ |
| Anna Bridge |
180:96ed750bd169 | 6871 | /* shift left yfract by 11 to keep 1.31 format */ |
| Anna Bridge |
180:96ed750bd169 | 6872 | yfract = (Y & 0x000FFFFF) << 11u; |
| Anna Bridge |
180:96ed750bd169 | 6873 | |
| Anna Bridge |
180:96ed750bd169 | 6874 | /* Read two nearest output values from the index */ |
| Anna Bridge |
180:96ed750bd169 | 6875 | y1 = pYData[(rI) + (int32_t)nCols * (cI + 1) ]; |
| Anna Bridge |
180:96ed750bd169 | 6876 | y2 = pYData[(rI) + (int32_t)nCols * (cI + 1) + 1]; |
| Anna Bridge |
180:96ed750bd169 | 6877 | |
| Anna Bridge |
180:96ed750bd169 | 6878 | /* Calculation of x1 * (1-xfract ) * (1-yfract) and acc is in 3.29(q29) format */ |
| Anna Bridge |
180:96ed750bd169 | 6879 | out = ((q31_t) (((q63_t) x1 * (0x7FFFFFFF - xfract)) >> 32)); |
| Anna Bridge |
180:96ed750bd169 | 6880 | acc = ((q31_t) (((q63_t) out * (0x7FFFFFFF - yfract)) >> 32)); |
| Anna Bridge |
180:96ed750bd169 | 6881 | |
| Anna Bridge |
180:96ed750bd169 | 6882 | /* x2 * (xfract) * (1-yfract) in 3.29(q29) and adding to acc */ |
| Anna Bridge |
180:96ed750bd169 | 6883 | out = ((q31_t) ((q63_t) x2 * (0x7FFFFFFF - yfract) >> 32)); |
| Anna Bridge |
180:96ed750bd169 | 6884 | acc += ((q31_t) ((q63_t) out * (xfract) >> 32)); |
| Anna Bridge |
180:96ed750bd169 | 6885 | |
| Anna Bridge |
180:96ed750bd169 | 6886 | /* y1 * (1 - xfract) * (yfract) in 3.29(q29) and adding to acc */ |
| Anna Bridge |
180:96ed750bd169 | 6887 | out = ((q31_t) ((q63_t) y1 * (0x7FFFFFFF - xfract) >> 32)); |
| Anna Bridge |
180:96ed750bd169 | 6888 | acc += ((q31_t) ((q63_t) out * (yfract) >> 32)); |
| Anna Bridge |
180:96ed750bd169 | 6889 | |
| Anna Bridge |
180:96ed750bd169 | 6890 | /* y2 * (xfract) * (yfract) in 3.29(q29) and adding to acc */ |
| Anna Bridge |
180:96ed750bd169 | 6891 | out = ((q31_t) ((q63_t) y2 * (xfract) >> 32)); |
| Anna Bridge |
180:96ed750bd169 | 6892 | acc += ((q31_t) ((q63_t) out * (yfract) >> 32)); |
| Anna Bridge |
180:96ed750bd169 | 6893 | |
| Anna Bridge |
180:96ed750bd169 | 6894 | /* Convert acc to 1.31(q31) format */ |
| Anna Bridge |
180:96ed750bd169 | 6895 | return ((q31_t)(acc << 2)); |
| Anna Bridge |
180:96ed750bd169 | 6896 | } |
| Anna Bridge |
180:96ed750bd169 | 6897 | |
| Anna Bridge |
180:96ed750bd169 | 6898 | |
| Anna Bridge |
180:96ed750bd169 | 6899 | /** |
| Anna Bridge |
180:96ed750bd169 | 6900 | * @brief Q15 bilinear interpolation. |
| Anna Bridge |
180:96ed750bd169 | 6901 | * @param[in,out] S points to an instance of the interpolation structure. |
| Anna Bridge |
180:96ed750bd169 | 6902 | * @param[in] X interpolation coordinate in 12.20 format. |
| Anna Bridge |
180:96ed750bd169 | 6903 | * @param[in] Y interpolation coordinate in 12.20 format. |
| Anna Bridge |
180:96ed750bd169 | 6904 | * @return out interpolated value. |
| Anna Bridge |
180:96ed750bd169 | 6905 | */ |
| Anna Bridge |
180:96ed750bd169 | 6906 | CMSIS_INLINE __STATIC_INLINE q15_t arm_bilinear_interp_q15( |
| Anna Bridge |
180:96ed750bd169 | 6907 | arm_bilinear_interp_instance_q15 * S, |
| Anna Bridge |
180:96ed750bd169 | 6908 | q31_t X, |
| Anna Bridge |
180:96ed750bd169 | 6909 | q31_t Y) |
| Anna Bridge |
180:96ed750bd169 | 6910 | { |
| Anna Bridge |
180:96ed750bd169 | 6911 | q63_t acc = 0; /* output */ |
| Anna Bridge |
180:96ed750bd169 | 6912 | q31_t out; /* Temporary output */ |
| Anna Bridge |
180:96ed750bd169 | 6913 | q15_t x1, x2, y1, y2; /* Nearest output values */ |
| Anna Bridge |
180:96ed750bd169 | 6914 | q31_t xfract, yfract; /* X, Y fractional parts */ |
| Anna Bridge |
180:96ed750bd169 | 6915 | int32_t rI, cI; /* Row and column indices */ |
| Anna Bridge |
180:96ed750bd169 | 6916 | q15_t *pYData = S->pData; /* pointer to output table values */ |
| Anna Bridge |
180:96ed750bd169 | 6917 | uint32_t nCols = S->numCols; /* num of rows */ |
| Anna Bridge |
180:96ed750bd169 | 6918 | |
| Anna Bridge |
180:96ed750bd169 | 6919 | /* Input is in 12.20 format */ |
| Anna Bridge |
180:96ed750bd169 | 6920 | /* 12 bits for the table index */ |
| Anna Bridge |
180:96ed750bd169 | 6921 | /* Index value calculation */ |
| Anna Bridge |
180:96ed750bd169 | 6922 | rI = ((X & (q31_t)0xFFF00000) >> 20); |
| Anna Bridge |
180:96ed750bd169 | 6923 | |
| Anna Bridge |
180:96ed750bd169 | 6924 | /* Input is in 12.20 format */ |
| Anna Bridge |
180:96ed750bd169 | 6925 | /* 12 bits for the table index */ |
| Anna Bridge |
180:96ed750bd169 | 6926 | /* Index value calculation */ |
| Anna Bridge |
180:96ed750bd169 | 6927 | cI = ((Y & (q31_t)0xFFF00000) >> 20); |
| Anna Bridge |
180:96ed750bd169 | 6928 | |
| Anna Bridge |
180:96ed750bd169 | 6929 | /* Care taken for table outside boundary */ |
| Anna Bridge |
180:96ed750bd169 | 6930 | /* Returns zero output when values are outside table boundary */ |
| Anna Bridge |
180:96ed750bd169 | 6931 | if (rI < 0 || rI > (S->numRows - 1) || cI < 0 || cI > (S->numCols - 1)) |
| Anna Bridge |
180:96ed750bd169 | 6932 | { |
| Anna Bridge |
180:96ed750bd169 | 6933 | return (0); |
| Anna Bridge |
180:96ed750bd169 | 6934 | } |
| Anna Bridge |
180:96ed750bd169 | 6935 | |
| Anna Bridge |
180:96ed750bd169 | 6936 | /* 20 bits for the fractional part */ |
| Anna Bridge |
180:96ed750bd169 | 6937 | /* xfract should be in 12.20 format */ |
| Anna Bridge |
180:96ed750bd169 | 6938 | xfract = (X & 0x000FFFFF); |
| Anna Bridge |
180:96ed750bd169 | 6939 | |
| Anna Bridge |
180:96ed750bd169 | 6940 | /* Read two nearest output values from the index */ |
| Anna Bridge |
180:96ed750bd169 | 6941 | x1 = pYData[((uint32_t)rI) + nCols * ((uint32_t)cI) ]; |
| Anna Bridge |
180:96ed750bd169 | 6942 | x2 = pYData[((uint32_t)rI) + nCols * ((uint32_t)cI) + 1]; |
| Anna Bridge |
180:96ed750bd169 | 6943 | |
| Anna Bridge |
180:96ed750bd169 | 6944 | /* 20 bits for the fractional part */ |
| Anna Bridge |
180:96ed750bd169 | 6945 | /* yfract should be in 12.20 format */ |
| Anna Bridge |
180:96ed750bd169 | 6946 | yfract = (Y & 0x000FFFFF); |
| Anna Bridge |
180:96ed750bd169 | 6947 | |
| Anna Bridge |
180:96ed750bd169 | 6948 | /* Read two nearest output values from the index */ |
| Anna Bridge |
180:96ed750bd169 | 6949 | y1 = pYData[((uint32_t)rI) + nCols * ((uint32_t)cI + 1) ]; |
| Anna Bridge |
180:96ed750bd169 | 6950 | y2 = pYData[((uint32_t)rI) + nCols * ((uint32_t)cI + 1) + 1]; |
| Anna Bridge |
180:96ed750bd169 | 6951 | |
| Anna Bridge |
180:96ed750bd169 | 6952 | /* Calculation of x1 * (1-xfract ) * (1-yfract) and acc is in 13.51 format */ |
| Anna Bridge |
180:96ed750bd169 | 6953 | |
| Anna Bridge |
180:96ed750bd169 | 6954 | /* x1 is in 1.15(q15), xfract in 12.20 format and out is in 13.35 format */ |
| Anna Bridge |
180:96ed750bd169 | 6955 | /* convert 13.35 to 13.31 by right shifting and out is in 1.31 */ |
| Anna Bridge |
180:96ed750bd169 | 6956 | out = (q31_t) (((q63_t) x1 * (0xFFFFF - xfract)) >> 4u); |
| Anna Bridge |
180:96ed750bd169 | 6957 | acc = ((q63_t) out * (0xFFFFF - yfract)); |
| Anna Bridge |
180:96ed750bd169 | 6958 | |
| Anna Bridge |
180:96ed750bd169 | 6959 | /* x2 * (xfract) * (1-yfract) in 1.51 and adding to acc */ |
| Anna Bridge |
180:96ed750bd169 | 6960 | out = (q31_t) (((q63_t) x2 * (0xFFFFF - yfract)) >> 4u); |
| Anna Bridge |
180:96ed750bd169 | 6961 | acc += ((q63_t) out * (xfract)); |
| Anna Bridge |
180:96ed750bd169 | 6962 | |
| Anna Bridge |
180:96ed750bd169 | 6963 | /* y1 * (1 - xfract) * (yfract) in 1.51 and adding to acc */ |
| Anna Bridge |
180:96ed750bd169 | 6964 | out = (q31_t) (((q63_t) y1 * (0xFFFFF - xfract)) >> 4u); |
| Anna Bridge |
180:96ed750bd169 | 6965 | acc += ((q63_t) out * (yfract)); |
| Anna Bridge |
180:96ed750bd169 | 6966 | |
| Anna Bridge |
180:96ed750bd169 | 6967 | /* y2 * (xfract) * (yfract) in 1.51 and adding to acc */ |
| Anna Bridge |
180:96ed750bd169 | 6968 | out = (q31_t) (((q63_t) y2 * (xfract)) >> 4u); |
| Anna Bridge |
180:96ed750bd169 | 6969 | acc += ((q63_t) out * (yfract)); |
| Anna Bridge |
180:96ed750bd169 | 6970 | |
| Anna Bridge |
180:96ed750bd169 | 6971 | /* acc is in 13.51 format and down shift acc by 36 times */ |
| Anna Bridge |
180:96ed750bd169 | 6972 | /* Convert out to 1.15 format */ |
| Anna Bridge |
180:96ed750bd169 | 6973 | return ((q15_t)(acc >> 36)); |
| Anna Bridge |
180:96ed750bd169 | 6974 | } |
| Anna Bridge |
180:96ed750bd169 | 6975 | |
| Anna Bridge |
180:96ed750bd169 | 6976 | |
| Anna Bridge |
180:96ed750bd169 | 6977 | /** |
| Anna Bridge |
180:96ed750bd169 | 6978 | * @brief Q7 bilinear interpolation. |
| Anna Bridge |
180:96ed750bd169 | 6979 | * @param[in,out] S points to an instance of the interpolation structure. |
| Anna Bridge |
180:96ed750bd169 | 6980 | * @param[in] X interpolation coordinate in 12.20 format. |
| Anna Bridge |
180:96ed750bd169 | 6981 | * @param[in] Y interpolation coordinate in 12.20 format. |
| Anna Bridge |
180:96ed750bd169 | 6982 | * @return out interpolated value. |
| Anna Bridge |
180:96ed750bd169 | 6983 | */ |
| Anna Bridge |
180:96ed750bd169 | 6984 | CMSIS_INLINE __STATIC_INLINE q7_t arm_bilinear_interp_q7( |
| Anna Bridge |
180:96ed750bd169 | 6985 | arm_bilinear_interp_instance_q7 * S, |
| Anna Bridge |
180:96ed750bd169 | 6986 | q31_t X, |
| Anna Bridge |
180:96ed750bd169 | 6987 | q31_t Y) |
| Anna Bridge |
180:96ed750bd169 | 6988 | { |
| Anna Bridge |
180:96ed750bd169 | 6989 | q63_t acc = 0; /* output */ |
| Anna Bridge |
180:96ed750bd169 | 6990 | q31_t out; /* Temporary output */ |
| Anna Bridge |
180:96ed750bd169 | 6991 | q31_t xfract, yfract; /* X, Y fractional parts */ |
| Anna Bridge |
180:96ed750bd169 | 6992 | q7_t x1, x2, y1, y2; /* Nearest output values */ |
| Anna Bridge |
180:96ed750bd169 | 6993 | int32_t rI, cI; /* Row and column indices */ |
| Anna Bridge |
180:96ed750bd169 | 6994 | q7_t *pYData = S->pData; /* pointer to output table values */ |
| Anna Bridge |
180:96ed750bd169 | 6995 | uint32_t nCols = S->numCols; /* num of rows */ |
| Anna Bridge |
180:96ed750bd169 | 6996 | |
| Anna Bridge |
180:96ed750bd169 | 6997 | /* Input is in 12.20 format */ |
| Anna Bridge |
180:96ed750bd169 | 6998 | /* 12 bits for the table index */ |
| Anna Bridge |
180:96ed750bd169 | 6999 | /* Index value calculation */ |
| Anna Bridge |
180:96ed750bd169 | 7000 | rI = ((X & (q31_t)0xFFF00000) >> 20); |
| Anna Bridge |
180:96ed750bd169 | 7001 | |
| Anna Bridge |
180:96ed750bd169 | 7002 | /* Input is in 12.20 format */ |
| Anna Bridge |
180:96ed750bd169 | 7003 | /* 12 bits for the table index */ |
| Anna Bridge |
180:96ed750bd169 | 7004 | /* Index value calculation */ |
| Anna Bridge |
180:96ed750bd169 | 7005 | cI = ((Y & (q31_t)0xFFF00000) >> 20); |
| Anna Bridge |
180:96ed750bd169 | 7006 | |
| Anna Bridge |
180:96ed750bd169 | 7007 | /* Care taken for table outside boundary */ |
| Anna Bridge |
180:96ed750bd169 | 7008 | /* Returns zero output when values are outside table boundary */ |
| Anna Bridge |
180:96ed750bd169 | 7009 | if (rI < 0 || rI > (S->numRows - 1) || cI < 0 || cI > (S->numCols - 1)) |
| Anna Bridge |
180:96ed750bd169 | 7010 | { |
| Anna Bridge |
180:96ed750bd169 | 7011 | return (0); |
| Anna Bridge |
180:96ed750bd169 | 7012 | } |
| Anna Bridge |
180:96ed750bd169 | 7013 | |
| Anna Bridge |
180:96ed750bd169 | 7014 | /* 20 bits for the fractional part */ |
| Anna Bridge |
180:96ed750bd169 | 7015 | /* xfract should be in 12.20 format */ |
| Anna Bridge |
180:96ed750bd169 | 7016 | xfract = (X & (q31_t)0x000FFFFF); |
| Anna Bridge |
180:96ed750bd169 | 7017 | |
| Anna Bridge |
180:96ed750bd169 | 7018 | /* Read two nearest output values from the index */ |
| Anna Bridge |
180:96ed750bd169 | 7019 | x1 = pYData[((uint32_t)rI) + nCols * ((uint32_t)cI) ]; |
| Anna Bridge |
180:96ed750bd169 | 7020 | x2 = pYData[((uint32_t)rI) + nCols * ((uint32_t)cI) + 1]; |
| Anna Bridge |
180:96ed750bd169 | 7021 | |
| Anna Bridge |
180:96ed750bd169 | 7022 | /* 20 bits for the fractional part */ |
| Anna Bridge |
180:96ed750bd169 | 7023 | /* yfract should be in 12.20 format */ |
| Anna Bridge |
180:96ed750bd169 | 7024 | yfract = (Y & (q31_t)0x000FFFFF); |
| Anna Bridge |
180:96ed750bd169 | 7025 | |
| Anna Bridge |
180:96ed750bd169 | 7026 | /* Read two nearest output values from the index */ |
| Anna Bridge |
180:96ed750bd169 | 7027 | y1 = pYData[((uint32_t)rI) + nCols * ((uint32_t)cI + 1) ]; |
| Anna Bridge |
180:96ed750bd169 | 7028 | y2 = pYData[((uint32_t)rI) + nCols * ((uint32_t)cI + 1) + 1]; |
| Anna Bridge |
180:96ed750bd169 | 7029 | |
| Anna Bridge |
180:96ed750bd169 | 7030 | /* Calculation of x1 * (1-xfract ) * (1-yfract) and acc is in 16.47 format */ |
| Anna Bridge |
180:96ed750bd169 | 7031 | out = ((x1 * (0xFFFFF - xfract))); |
| Anna Bridge |
180:96ed750bd169 | 7032 | acc = (((q63_t) out * (0xFFFFF - yfract))); |
| Anna Bridge |
180:96ed750bd169 | 7033 | |
| Anna Bridge |
180:96ed750bd169 | 7034 | /* x2 * (xfract) * (1-yfract) in 2.22 and adding to acc */ |
| Anna Bridge |
180:96ed750bd169 | 7035 | out = ((x2 * (0xFFFFF - yfract))); |
| Anna Bridge |
180:96ed750bd169 | 7036 | acc += (((q63_t) out * (xfract))); |
| Anna Bridge |
180:96ed750bd169 | 7037 | |
| Anna Bridge |
180:96ed750bd169 | 7038 | /* y1 * (1 - xfract) * (yfract) in 2.22 and adding to acc */ |
| Anna Bridge |
180:96ed750bd169 | 7039 | out = ((y1 * (0xFFFFF - xfract))); |
| Anna Bridge |
180:96ed750bd169 | 7040 | acc += (((q63_t) out * (yfract))); |
| Anna Bridge |
180:96ed750bd169 | 7041 | |
| Anna Bridge |
180:96ed750bd169 | 7042 | /* y2 * (xfract) * (yfract) in 2.22 and adding to acc */ |
| Anna Bridge |
180:96ed750bd169 | 7043 | out = ((y2 * (yfract))); |
| Anna Bridge |
180:96ed750bd169 | 7044 | acc += (((q63_t) out * (xfract))); |
| Anna Bridge |
180:96ed750bd169 | 7045 | |
| Anna Bridge |
180:96ed750bd169 | 7046 | /* acc in 16.47 format and down shift by 40 to convert to 1.7 format */ |
| Anna Bridge |
180:96ed750bd169 | 7047 | return ((q7_t)(acc >> 40)); |
| Anna Bridge |
180:96ed750bd169 | 7048 | } |
| Anna Bridge |
180:96ed750bd169 | 7049 | |
| Anna Bridge |
180:96ed750bd169 | 7050 | /** |
| Anna Bridge |
180:96ed750bd169 | 7051 | * @} end of BilinearInterpolate group |
| Anna Bridge |
180:96ed750bd169 | 7052 | */ |
| Anna Bridge |
180:96ed750bd169 | 7053 | |
| Anna Bridge |
180:96ed750bd169 | 7054 | |
| Anna Bridge |
180:96ed750bd169 | 7055 | /* SMMLAR */ |
| Anna Bridge |
180:96ed750bd169 | 7056 | #define multAcc_32x32_keep32_R(a, x, y) \ |
| Anna Bridge |
180:96ed750bd169 | 7057 | a = (q31_t) (((((q63_t) a) << 32) + ((q63_t) x * y) + 0x80000000LL ) >> 32) |
| Anna Bridge |
180:96ed750bd169 | 7058 | |
| Anna Bridge |
180:96ed750bd169 | 7059 | /* SMMLSR */ |
| Anna Bridge |
180:96ed750bd169 | 7060 | #define multSub_32x32_keep32_R(a, x, y) \ |
| Anna Bridge |
180:96ed750bd169 | 7061 | a = (q31_t) (((((q63_t) a) << 32) - ((q63_t) x * y) + 0x80000000LL ) >> 32) |
| Anna Bridge |
180:96ed750bd169 | 7062 | |
| Anna Bridge |
180:96ed750bd169 | 7063 | /* SMMULR */ |
| Anna Bridge |
180:96ed750bd169 | 7064 | #define mult_32x32_keep32_R(a, x, y) \ |
| Anna Bridge |
180:96ed750bd169 | 7065 | a = (q31_t) (((q63_t) x * y + 0x80000000LL ) >> 32) |
| Anna Bridge |
180:96ed750bd169 | 7066 | |
| Anna Bridge |
180:96ed750bd169 | 7067 | /* SMMLA */ |
| Anna Bridge |
180:96ed750bd169 | 7068 | #define multAcc_32x32_keep32(a, x, y) \ |
| Anna Bridge |
180:96ed750bd169 | 7069 | a += (q31_t) (((q63_t) x * y) >> 32) |
| Anna Bridge |
180:96ed750bd169 | 7070 | |
| Anna Bridge |
180:96ed750bd169 | 7071 | /* SMMLS */ |
| Anna Bridge |
180:96ed750bd169 | 7072 | #define multSub_32x32_keep32(a, x, y) \ |
| Anna Bridge |
180:96ed750bd169 | 7073 | a -= (q31_t) (((q63_t) x * y) >> 32) |
| Anna Bridge |
180:96ed750bd169 | 7074 | |
| Anna Bridge |
180:96ed750bd169 | 7075 | /* SMMUL */ |
| Anna Bridge |
180:96ed750bd169 | 7076 | #define mult_32x32_keep32(a, x, y) \ |
| Anna Bridge |
180:96ed750bd169 | 7077 | a = (q31_t) (((q63_t) x * y ) >> 32) |
| Anna Bridge |
180:96ed750bd169 | 7078 | |
| Anna Bridge |
180:96ed750bd169 | 7079 | |
| Anna Bridge |
180:96ed750bd169 | 7080 | #if defined ( __CC_ARM ) |
| Anna Bridge |
180:96ed750bd169 | 7081 | /* Enter low optimization region - place directly above function definition */ |
| Anna Bridge |
180:96ed750bd169 | 7082 | #if defined( ARM_MATH_CM4 ) || defined( ARM_MATH_CM7) |
| Anna Bridge |
180:96ed750bd169 | 7083 | #define LOW_OPTIMIZATION_ENTER \ |
| Anna Bridge |
180:96ed750bd169 | 7084 | _Pragma ("push") \ |
| Anna Bridge |
180:96ed750bd169 | 7085 | _Pragma ("O1") |
| Anna Bridge |
180:96ed750bd169 | 7086 | #else |
| Anna Bridge |
180:96ed750bd169 | 7087 | #define LOW_OPTIMIZATION_ENTER |
| Anna Bridge |
180:96ed750bd169 | 7088 | #endif |
| Anna Bridge |
180:96ed750bd169 | 7089 | |
| Anna Bridge |
180:96ed750bd169 | 7090 | /* Exit low optimization region - place directly after end of function definition */ |
| Anna Bridge |
180:96ed750bd169 | 7091 | #if defined ( ARM_MATH_CM4 ) || defined ( ARM_MATH_CM7 ) |
| Anna Bridge |
180:96ed750bd169 | 7092 | #define LOW_OPTIMIZATION_EXIT \ |
| Anna Bridge |
180:96ed750bd169 | 7093 | _Pragma ("pop") |
| Anna Bridge |
180:96ed750bd169 | 7094 | #else |
| Anna Bridge |
180:96ed750bd169 | 7095 | #define LOW_OPTIMIZATION_EXIT |
| Anna Bridge |
180:96ed750bd169 | 7096 | #endif |
| Anna Bridge |
180:96ed750bd169 | 7097 | |
| Anna Bridge |
180:96ed750bd169 | 7098 | /* Enter low optimization region - place directly above function definition */ |
| Anna Bridge |
180:96ed750bd169 | 7099 | #define IAR_ONLY_LOW_OPTIMIZATION_ENTER |
| Anna Bridge |
180:96ed750bd169 | 7100 | |
| Anna Bridge |
180:96ed750bd169 | 7101 | /* Exit low optimization region - place directly after end of function definition */ |
| Anna Bridge |
180:96ed750bd169 | 7102 | #define IAR_ONLY_LOW_OPTIMIZATION_EXIT |
| Anna Bridge |
180:96ed750bd169 | 7103 | |
| Anna Bridge |
180:96ed750bd169 | 7104 | #elif defined (__ARMCC_VERSION ) && ( __ARMCC_VERSION >= 6010050 ) |
| Anna Bridge |
180:96ed750bd169 | 7105 | #define LOW_OPTIMIZATION_ENTER |
| Anna Bridge |
180:96ed750bd169 | 7106 | #define LOW_OPTIMIZATION_EXIT |
| Anna Bridge |
180:96ed750bd169 | 7107 | #define IAR_ONLY_LOW_OPTIMIZATION_ENTER |
| Anna Bridge |
180:96ed750bd169 | 7108 | #define IAR_ONLY_LOW_OPTIMIZATION_EXIT |
| Anna Bridge |
180:96ed750bd169 | 7109 | |
| Anna Bridge |
180:96ed750bd169 | 7110 | #elif defined ( __GNUC__ ) |
| Anna Bridge |
180:96ed750bd169 | 7111 | #define LOW_OPTIMIZATION_ENTER \ |
| Anna Bridge |
180:96ed750bd169 | 7112 | __attribute__(( optimize("-O1") )) |
| Anna Bridge |
180:96ed750bd169 | 7113 | #define LOW_OPTIMIZATION_EXIT |
| Anna Bridge |
180:96ed750bd169 | 7114 | #define IAR_ONLY_LOW_OPTIMIZATION_ENTER |
| Anna Bridge |
180:96ed750bd169 | 7115 | #define IAR_ONLY_LOW_OPTIMIZATION_EXIT |
| Anna Bridge |
180:96ed750bd169 | 7116 | |
| Anna Bridge |
180:96ed750bd169 | 7117 | #elif defined ( __ICCARM__ ) |
| Anna Bridge |
180:96ed750bd169 | 7118 | /* Enter low optimization region - place directly above function definition */ |
| Anna Bridge |
180:96ed750bd169 | 7119 | #if defined ( ARM_MATH_CM4 ) || defined ( ARM_MATH_CM7 ) |
| Anna Bridge |
180:96ed750bd169 | 7120 | #define LOW_OPTIMIZATION_ENTER \ |
| Anna Bridge |
180:96ed750bd169 | 7121 | _Pragma ("optimize=low") |
| Anna Bridge |
180:96ed750bd169 | 7122 | #else |
| Anna Bridge |
180:96ed750bd169 | 7123 | #define LOW_OPTIMIZATION_ENTER |
| Anna Bridge |
180:96ed750bd169 | 7124 | #endif |
| Anna Bridge |
180:96ed750bd169 | 7125 | |
| Anna Bridge |
180:96ed750bd169 | 7126 | /* Exit low optimization region - place directly after end of function definition */ |
| Anna Bridge |
180:96ed750bd169 | 7127 | #define LOW_OPTIMIZATION_EXIT |
| Anna Bridge |
180:96ed750bd169 | 7128 | |
| Anna Bridge |
180:96ed750bd169 | 7129 | /* Enter low optimization region - place directly above function definition */ |
| Anna Bridge |
180:96ed750bd169 | 7130 | #if defined ( ARM_MATH_CM4 ) || defined ( ARM_MATH_CM7 ) |
| Anna Bridge |
180:96ed750bd169 | 7131 | #define IAR_ONLY_LOW_OPTIMIZATION_ENTER \ |
| Anna Bridge |
180:96ed750bd169 | 7132 | _Pragma ("optimize=low") |
| Anna Bridge |
180:96ed750bd169 | 7133 | #else |
| Anna Bridge |
180:96ed750bd169 | 7134 | #define IAR_ONLY_LOW_OPTIMIZATION_ENTER |
| Anna Bridge |
180:96ed750bd169 | 7135 | #endif |
| Anna Bridge |
180:96ed750bd169 | 7136 | |
| Anna Bridge |
180:96ed750bd169 | 7137 | /* Exit low optimization region - place directly after end of function definition */ |
| Anna Bridge |
180:96ed750bd169 | 7138 | #define IAR_ONLY_LOW_OPTIMIZATION_EXIT |
| Anna Bridge |
180:96ed750bd169 | 7139 | |
| Anna Bridge |
180:96ed750bd169 | 7140 | #elif defined ( __TI_ARM__ ) |
| Anna Bridge |
180:96ed750bd169 | 7141 | #define LOW_OPTIMIZATION_ENTER |
| Anna Bridge |
180:96ed750bd169 | 7142 | #define LOW_OPTIMIZATION_EXIT |
| Anna Bridge |
180:96ed750bd169 | 7143 | #define IAR_ONLY_LOW_OPTIMIZATION_ENTER |
| Anna Bridge |
180:96ed750bd169 | 7144 | #define IAR_ONLY_LOW_OPTIMIZATION_EXIT |
| Anna Bridge |
180:96ed750bd169 | 7145 | |
| Anna Bridge |
180:96ed750bd169 | 7146 | #elif defined ( __CSMC__ ) |
| Anna Bridge |
180:96ed750bd169 | 7147 | #define LOW_OPTIMIZATION_ENTER |
| Anna Bridge |
180:96ed750bd169 | 7148 | #define LOW_OPTIMIZATION_EXIT |
| Anna Bridge |
180:96ed750bd169 | 7149 | #define IAR_ONLY_LOW_OPTIMIZATION_ENTER |
| Anna Bridge |
180:96ed750bd169 | 7150 | #define IAR_ONLY_LOW_OPTIMIZATION_EXIT |
| Anna Bridge |
180:96ed750bd169 | 7151 | |
| Anna Bridge |
180:96ed750bd169 | 7152 | #elif defined ( __TASKING__ ) |
| Anna Bridge |
180:96ed750bd169 | 7153 | #define LOW_OPTIMIZATION_ENTER |
| Anna Bridge |
180:96ed750bd169 | 7154 | #define LOW_OPTIMIZATION_EXIT |
| Anna Bridge |
180:96ed750bd169 | 7155 | #define IAR_ONLY_LOW_OPTIMIZATION_ENTER |
| Anna Bridge |
180:96ed750bd169 | 7156 | #define IAR_ONLY_LOW_OPTIMIZATION_EXIT |
| Anna Bridge |
180:96ed750bd169 | 7157 | |
| Anna Bridge |
180:96ed750bd169 | 7158 | #endif |
| Anna Bridge |
180:96ed750bd169 | 7159 | |
| Anna Bridge |
180:96ed750bd169 | 7160 | |
| Anna Bridge |
180:96ed750bd169 | 7161 | #ifdef __cplusplus |
| Anna Bridge |
180:96ed750bd169 | 7162 | } |
| Anna Bridge |
180:96ed750bd169 | 7163 | #endif |
| Anna Bridge |
180:96ed750bd169 | 7164 | |
| Anna Bridge |
180:96ed750bd169 | 7165 | /* Compiler specific diagnostic adjustment */ |
| Anna Bridge |
180:96ed750bd169 | 7166 | #if defined ( __CC_ARM ) |
| Anna Bridge |
180:96ed750bd169 | 7167 | |
| Anna Bridge |
180:96ed750bd169 | 7168 | #elif defined ( __ARMCC_VERSION ) && ( __ARMCC_VERSION >= 6010050 ) |
| Anna Bridge |
180:96ed750bd169 | 7169 | |
| Anna Bridge |
180:96ed750bd169 | 7170 | #elif defined ( __GNUC__ ) |
| Anna Bridge |
180:96ed750bd169 | 7171 | #pragma GCC diagnostic pop |
| Anna Bridge |
180:96ed750bd169 | 7172 | |
| Anna Bridge |
180:96ed750bd169 | 7173 | #elif defined ( __ICCARM__ ) |
| Anna Bridge |
180:96ed750bd169 | 7174 | |
| Anna Bridge |
180:96ed750bd169 | 7175 | #elif defined ( __TI_ARM__ ) |
| Anna Bridge |
180:96ed750bd169 | 7176 | |
| Anna Bridge |
180:96ed750bd169 | 7177 | #elif defined ( __CSMC__ ) |
| Anna Bridge |
180:96ed750bd169 | 7178 | |
| Anna Bridge |
180:96ed750bd169 | 7179 | #elif defined ( __TASKING__ ) |
| Anna Bridge |
180:96ed750bd169 | 7180 | |
| Anna Bridge |
180:96ed750bd169 | 7181 | #else |
| Anna Bridge |
180:96ed750bd169 | 7182 | #error Unknown compiler |
| Anna Bridge |
180:96ed750bd169 | 7183 | #endif |
| Anna Bridge |
180:96ed750bd169 | 7184 | |
| Anna Bridge |
180:96ed750bd169 | 7185 | #endif /* _ARM_MATH_H */ |
| Anna Bridge |
180:96ed750bd169 | 7186 | |
| Anna Bridge |
180:96ed750bd169 | 7187 | /** |
| Anna Bridge |
180:96ed750bd169 | 7188 | * |
| Anna Bridge |
180:96ed750bd169 | 7189 | * End of file. |
| Anna Bridge |
180:96ed750bd169 | 7190 | */ |
