CMSIS-DSP: CMSIS DSP Software Library

| CMSIS-DSP Version 1.10.0 CMSIS DSP Software Library

- Main Page
- Usage and Description
- Reference

All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
CMSIS DSP Software Library

# Introduction

This user manual describes the CMSIS DSP software library, a suite of common signal processing functions for use on Cortex-M and Cortex-A processor based devices.

The library is divided into a number of functions each covering a specific category:

- Basic math functions
- Fast math functions
- Complex math functions
- Filtering functions
- Matrix functions
- Transform functions
- Motor control functions
- Statistical functions
- Support functions
- Interpolation functions
- Support Vector Machine functions (SVM)
- Bayes classifier functions
- Distance functions
- Quaternion functions

The library has generally separate functions for operating on 8-bit integers, 16-bit integers, 32-bit integer and 32-bit floating-point values.

The library is providing vectorized versions of most algorthms for Helium and of most f32 algorithms for Neon.

When using a vectorized version, provide a little bit of padding after the end of a buffer (3 words) because the vectorized code may read a little bit after the end of a buffer. You don't have to modify your buffers but just ensure that the end of buffer + padding is not outside of a memory region.

# Using the Library

The library is released in source form. It is strongly advised to compile the library using -Ofast to have the best performances.

The library functions are declared in the public file `arm_math.h` which is placed in the `Include` folder. Simply include this file. If you don't want to include everything, you can also rely on headers in Include/dsp folder and use only what you need.

# Examples

The library ships with a number of examples which demonstrate how to use the library functions.

# Toolchain Support

The library is now tested on Fast Models building with cmake. Core M0, M4, M7, M33, M55, A32 are tested.

# Preprocessor Macros

Each library project have different preprocessor macros.

- ARM_MATH_BIG_ENDIAN:

Define macro ARM_MATH_BIG_ENDIAN to build the library for big endian targets. By default library builds for little endian targets.

- ARM_MATH_MATRIX_CHECK:

Define macro ARM_MATH_MATRIX_CHECK for checking on the input and output sizes of matrices

- ARM_MATH_ROUNDING:

Define macro ARM_MATH_ROUNDING for rounding on support functions

- ARM_MATH_LOOPUNROLL:

Define macro ARM_MATH_LOOPUNROLL to enable manual loop unrolling in DSP functions

- ARM_MATH_NEON:

Define macro ARM_MATH_NEON to enable Neon versions of the DSP functions. It is not enabled by default when Neon is available because performances are dependent on the compiler and target architecture.

- ARM_MATH_NEON_EXPERIMENTAL:

Define macro ARM_MATH_NEON_EXPERIMENTAL to enable experimental Neon versions of of some DSP functions. Experimental Neon versions currently do not have better performances than the scalar versions.

- ARM_MATH_HELIUM:

It implies the flags ARM_MATH_MVEF and ARM_MATH_MVEI and ARM_MATH_MVE_FLOAT16.

- ARM_MATH_HELIUM_EXPERIMENTAL:

Only taken into account when ARM_MATH_MVEF, ARM_MATH_MVEI or ARM_MATH_MVE_FLOAT16 are defined. Enable some vector versions which may have worse performance than scalar depending on the core / compiler configuration.

- ARM_MATH_MVEF:

Select Helium versions of the f32 algorithms. It implies ARM_MATH_FLOAT16 and ARM_MATH_MVEI.

- ARM_MATH_MVEI:

Select Helium versions of the int and fixed point algorithms.

- ARM_MATH_MVE_FLOAT16:

MVE Float16 implementations of some algorithms (Requires MVE extension).

- DISABLEFLOAT16:

Disable float16 algorithms when __fp16 is not supported for a specific compiler / core configuration. This is only valid for scalar. When vector architecture is supporting f16 then it can't be disabled.

- ARM_MATH_AUTOVECTORIZE:

With Helium or Neon, disable the use of vectorized code with C intrinsics and use pure C instead. The vectorization is then done by the compiler.

# CMSIS-DSP in ARM::CMSIS Pack

The following files relevant to CMSIS-DSP are present in the ARM::CMSIS Pack directories:

File/Folder | Content
--- | ---
CMSIS\Documentation\DSP | This documentation
CMSIS\DSP\Examples | Example projects demonstrating the usage of the library functions
CMSIS\DSP\Include | DSP_Lib include files for using and building the lib
CMSIS\DSP\PrivateInclude | DSP_Lib private include files for building the lib
CMSIS\DSP\Lib | DSP_Lib binaries
CMSIS\DSP\Source | DSP_Lib source files

# Revision History of CMSIS-DSP

Please refer to Revision History of CMSIS-DSP.