1 /****************************************************************************** 2 * @file arm_math.h 3 * @brief Public header file for CMSIS DSP Library 4 * @version V1.9.0 5 * @date 23 April 2021 6 * Target Processor: Cortex-M and Cortex-A cores 7 ******************************************************************************/ 8 /* 9 * Copyright (c) 2010-2021 Arm Limited or its affiliates. All rights reserved. 10 * 11 * SPDX-License-Identifier: Apache-2.0 12 * 13 * Licensed under the Apache License, Version 2.0 (the License); you may 14 * not use this file except in compliance with the License. 15 * You may obtain a copy of the License at 16 * 17 * www.apache.org/licenses/LICENSE-2.0 18 * 19 * Unless required by applicable law or agreed to in writing, software 20 * distributed under the License is distributed on an AS IS BASIS, WITHOUT 21 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 22 * See the License for the specific language governing permissions and 23 * limitations under the License. 24 */ 25 26 /** 27 \mainpage CMSIS DSP Software Library 28 * 29 * \section intro Introduction 30 * 31 * This user manual describes the CMSIS DSP software library, 32 * a suite of common signal processing functions for use on Cortex-M and Cortex-A processor 33 * based devices. 34 * 35 * The library is divided into a number of functions each covering a specific category: 36 * - Basic math functions 37 * - Fast math functions 38 * - Complex math functions 39 * - Filtering functions 40 * - Matrix functions 41 * - Transform functions 42 * - Motor control functions 43 * - Statistical functions 44 * - Support functions 45 * - Interpolation functions 46 * - Support Vector Machine functions (SVM) 47 * - Bayes classifier functions 48 * - Distance functions 49 * - Quaternion functions 50 * 51 * The library has generally separate functions for operating on 8-bit integers, 16-bit integers, 52 * 32-bit integer and 32-bit floating-point values. 53 * 54 * The library is providing vectorized versions of most algorthms for Helium 55 * and of most f32 algorithms for Neon. 56 * 57 * When using a vectorized version, provide a little bit of padding after the end of 58 * a buffer (3 words) because the vectorized code may read a little bit after the end 59 * of a buffer. You don't have to modify your buffers but just ensure that the 60 * end of buffer + padding is not outside of a memory region. 61 * 62 * \section using Using the Library 63 * 64 * The library is released in source form. It is strongly advised to compile the library using -Ofast to 65 * have the best performances. 66 * 67 * The library functions are declared in the public file <code>arm_math.h</code> which is placed in the <code>Include</code> folder. 68 * Simply include this file. If you don't want to include everything, you can also rely 69 * on headers in Include/dsp folder and use only what you need. 70 * 71 * \section example Examples 72 * 73 * The library ships with a number of examples which demonstrate how to use the library functions. 74 * 75 * \section toolchain Toolchain Support 76 * 77 * The library is now tested on Fast Models building with cmake. 78 * Core M0, M4, M7, M33, M55, A32 are tested. 79 * 80 * 81 * \section preprocessor Preprocessor Macros 82 * 83 * Each library project have different preprocessor macros. 84 * 85 * - ARM_MATH_BIG_ENDIAN: 86 * 87 * Define macro ARM_MATH_BIG_ENDIAN to build the library for big endian targets. By default library builds for little endian targets. 88 * 89 * - ARM_MATH_MATRIX_CHECK: 90 * 91 * Define macro ARM_MATH_MATRIX_CHECK for checking on the input and output sizes of matrices 92 * 93 * - ARM_MATH_ROUNDING: 94 * 95 * Define macro ARM_MATH_ROUNDING for rounding on support functions 96 * 97 * - ARM_MATH_LOOPUNROLL: 98 * 99 * Define macro ARM_MATH_LOOPUNROLL to enable manual loop unrolling in DSP functions 100 * 101 * - ARM_MATH_NEON: 102 * 103 * Define macro ARM_MATH_NEON to enable Neon versions of the DSP functions. 104 * It is not enabled by default when Neon is available because performances are 105 * dependent on the compiler and target architecture. 106 * 107 * - ARM_MATH_NEON_EXPERIMENTAL: 108 * 109 * Define macro ARM_MATH_NEON_EXPERIMENTAL to enable experimental Neon versions of 110 * of some DSP functions. Experimental Neon versions currently do not have better 111 * performances than the scalar versions. 112 * 113 * - ARM_MATH_HELIUM: 114 * 115 * It implies the flags ARM_MATH_MVEF and ARM_MATH_MVEI and ARM_MATH_MVE_FLOAT16. 116 * 117 * - ARM_MATH_HELIUM_EXPERIMENTAL: 118 * 119 * Only taken into account when ARM_MATH_MVEF, ARM_MATH_MVEI or ARM_MATH_MVE_FLOAT16 are defined. 120 * Enable some vector versions which may have worse performance than scalar 121 * depending on the core / compiler configuration. 122 * 123 * - ARM_MATH_MVEF: 124 * 125 * Select Helium versions of the f32 algorithms. 126 * It implies ARM_MATH_FLOAT16 and ARM_MATH_MVEI. 127 * 128 * - ARM_MATH_MVEI: 129 * 130 * Select Helium versions of the int and fixed point algorithms. 131 * 132 * - ARM_MATH_MVE_FLOAT16: 133 * 134 * MVE Float16 implementations of some algorithms (Requires MVE extension). 135 * 136 * - DISABLEFLOAT16: 137 * 138 * Disable float16 algorithms when __fp16 is not supported for a 139 * specific compiler / core configuration. 140 * This is only valid for scalar. When vector architecture is 141 * supporting f16 then it can't be disabled. 142 * 143 * - ARM_MATH_AUTOVECTORIZE: 144 * 145 * With Helium or Neon, disable the use of vectorized code with C intrinsics 146 * and use pure C instead. The vectorization is then done by the compiler. 147 * 148 * <hr> 149 * \section pack CMSIS-DSP in ARM::CMSIS Pack 150 * 151 * The following files relevant to CMSIS-DSP are present in the <b>ARM::CMSIS</b> Pack directories: 152 * |File/Folder |Content | 153 * |---------------------------------|------------------------------------------------------------------------| 154 * |\b CMSIS\\Documentation\\DSP | This documentation | 155 * |\b CMSIS\\DSP\\Examples | Example projects demonstrating the usage of the library functions | 156 * |\b CMSIS\\DSP\\Include | DSP_Lib include files for using and building the lib 157 * |\b CMSIS\\DSP\\PrivateInclude | DSP_Lib private include files for building the lib | 158 * |\b CMSIS\\DSP\\Lib | DSP_Lib binaries | 159 * |\b CMSIS\\DSP\\Source | DSP_Lib source files | 160 * 161 * <hr> 162 * \section rev Revision History of CMSIS-DSP 163 * Please refer to \ref ChangeLog_pg. 164 */ 165 166 167 168 169 170 171 172 173 174 175 176 /** 177 * @defgroup groupExamples Examples 178 */ 179 180 181 182 183 184 #ifndef _ARM_MATH_H 185 #define _ARM_MATH_H 186 187 188 #include "arm_math_types.h" 189 #include "arm_math_memory.h" 190 191 #include "dsp/none.h" 192 #include "dsp/utils.h" 193 194 #include "dsp/basic_math_functions.h" 195 #include "dsp/interpolation_functions.h" 196 #include "dsp/bayes_functions.h" 197 #include "dsp/matrix_functions.h" 198 #include "dsp/complex_math_functions.h" 199 #include "dsp/statistics_functions.h" 200 #include "dsp/controller_functions.h" 201 #include "dsp/support_functions.h" 202 #include "dsp/distance_functions.h" 203 #include "dsp/svm_functions.h" 204 #include "dsp/fast_math_functions.h" 205 #include "dsp/transform_functions.h" 206 #include "dsp/filtering_functions.h" 207 #include "dsp/quaternion_math_functions.h" 208 209 210 211 #ifdef __cplusplus 212 extern "C" 213 { 214 #endif 215 216 217 218 219 //#define TABLE_SPACING_Q31 0x400000 220 //#define TABLE_SPACING_Q15 0x80 221 222 223 224 225 226 #ifdef __cplusplus 227 } 228 #endif 229 230 231 #endif /* _ARM_MATH_H */ 232 233 /** 234 * 235 * End of file. 236 */ 237