cmsisdsp


Namecmsisdsp JSON
Version 1.9.9 PyPI version JSON
download
home_pagehttps://github.com/ARM-software/CMSIS-DSP
SummaryCMSIS-DSP Python API
upload_time2024-07-02 09:54:39
maintainerNone
docs_urlNone
authorCopyright (C) 2010-2024 ARM Limited or its affiliates. All rights reserved.
requires_python>=3.9
licenseLicense :: OSI Approved :: Apache Software License
keywords development dsp cmsis cmsis-dsp arm signal processing maths ml cortex-m cortex-a
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # README

This is a Python wrapper for the Arm open source [CMSIS-DSP](https://github.com/ARM-software/CMSIS-DSP) and it is compatible with `NumPy`.

The CMSIS-DSP is available on our [GitHub](https://github.com/ARM-software/CMSIS-DSP) or as a [CMSIS Pack](https://github.com/ARM-software/CMSIS-DSP/releases).

The idea is to follow as closely as possible the C [CMSIS-DSP](https://github.com/ARM-software/CMSIS-DSP) API to ease the migration to the final implementation on a board.

The signal processing chain can thus be tested and developed in a Python environment and then easily converted to a C implementation running on a Cortex-M or Cortex-A board.

A tutorial is also available but with less details than this README:
https://developer.arm.com/documentation/102463/latest/

An history of the changes to this wrapper is available at the end of the README.

# How to build and install

## Tested configurations

The building of this package has been tested on Windows with the Python install from python.org and Microsoft Visual Studio 2022 and on Ubuntu 22.04.

It has also been tested with `cygwin`. In that case, `python-devel` must be installed too. On Mac, it was tested with standard XCode installation.

To run the examples, `scipy` and `matplotlib` must also be installed.

Other configurations should work but the `setup.py` file would have to be improved. 

Python 3 must be used.

## Installing and Building

### Installing

It is advised to do it in a Python virtual environment. Then, in the virtual environment you can just do:

    pip install cmsisdsp

You must have a recent `pip` (to automatically install the dependencies like `NumPy`) and you should have a compiler which can be found by Python when building the package.

DSP examples are available in the [CMSIS-DSP PythonWrapper examples](https://github.com/ARM-software/CMSIS-DSP/tree/main/PythonWrapper/examples) folder.

You can also install and run it from [Google colab](https://colab.research.google.com/):

This [link](https://colab.research.google.com/github/ARM-software/CMSIS-DSP/blob/main/PythonWrapper/examples/cmsisdsp_tests.ipynb) will open a Jupyter notebook in [Google colab](https://colab.research.google.com/) for testing. This notebook is from the [examples](https://github.com/ARM-software/CMSIS-DSP/tree/main/PythonWrapper/examples) in the CMSIS-DSP GitHub repository.

### Building

It it is not working (because it is not possible for us to test all configurations), you can then try to build and install the wrapper manually.

It is advised to do this it into a virtualenv


Since the [CMSIS-DSP](https://github.com/ARM-software/CMSIS-DSP) wrapper is using `NumPy`, you must first install it in the virtual environment. 

    > pip install numpy

Once `NumPy` is installed, you can build the [CMSIS-DSP](https://github.com/ARM-software/CMSIS-DSP) python wrapper. Go to folder `CMSIS/DSP`.

Now, you can install the cmsisdsp package in editable mode:

    > pip install -e .

Before using this command, you need to rebuild the CMSIS-DSP library which is no more built by the `setup.py` script.

There is a `CMakeLists.txt` in the `PythonWrapper` folder for this. The `build` folders in `PythonWrapper` are giving some examples of the options to use with the `cmake` command to generate the `Makefile` and build the library.

This library is then used by the `setup.py` script to build the Python extension.

## Running the examples

Install some packages to be able to run the examples

    > pip install numpy
    > pip install scipy
    > pip install matplotlib

Depending on the example, you may have to install more packages.

The examples are in the  [CMSIS-DSP PythonWrapper examples](https://github.com/ARM-software/CMSIS-DSP/tree/main/PythonWrapper/examples) folder.

You can test the scripts `testdsp.py` and `example.py` and try to run them from this virtual environment. `example.py` is requiring a data file to be downloaded from the web. See below in this document for the link.

Note that due to the great number of possible configurations (OS, Compiler, Python), we can't give any support if you have problems compiling the `PythonWrapper` on your specific configuration. But, generally people manage to do it and solve all the problems.

# Usage

The idea is to follow as closely as possible the [CMSIS-DSP](https://github.com/ARM-software/CMSIS-DSP) API to ease the migration to the final implementation on a board.

First you need to import the module

    > import cmsisdsp as dsp

If you use numpy:

    > import numpy as np

If you use scipy signal processing functions:

    > from scipy import signal

## Functions with no instance arguments

You can use a [CMSIS-DSP](https://github.com/ARM-software/CMSIS-DSP) function with numpy arrays:

    > r = dsp.arm_add_f32(np.array([1.,2,3]),np.array([4.,5,7]))

The function can also be called more simply with

    > r = dsp.arm_add_f32([1.,2,3],[4.,5,7])

The result of a [CMSIS-DSP](https://github.com/ARM-software/CMSIS-DSP) function will always be a numpy array whatever the arguments were (numpy array or list).

## Functions with instance arguments 

When the [CMSIS-DSP](https://github.com/ARM-software/CMSIS-DSP) function is requiring an instance data structure, it is just a bit more complex to use it:

First you need to create this instance:

    > firf32 = dsp.arm_fir_instance_f32()

Then, you need to call an init function:

    > dsp.arm_fir_init_f32(firf32,3,[1.,2,3],[0,0,0,0,0,0,0])

The third argument in this function is the state. Since all arguments (except the instance ones) are read-only in this Python API, this state will never be changed ! It is just used to communicate the length of the state array which must be allocated by the init function. This argument is required because it is present in the [CMSIS-DSP](https://github.com/ARM-software/CMSIS-DSP) API and in the final C implementation you'll need to allocate a state array with the right dimension.

Since the goal is to be as close as possible to the C API, the API is forcing the use of this argument.

The only change compared to the C API is that the size variables (like blockSize for filter) are computed automatically from the other arguments. This choice was made to make it a bit easier the use of numpy array with the API.

Now, you can check that the instance was initialized correctly.

    > print(firf32.numTaps())

Then, you can filter with CMSIS-DSP:

    > print(dsp.arm_fir_f32(firf32,[1,2,3,4,5]))

The size of this signal should be `blockSize`. `blockSize` was inferred from the size of the state array : `numTaps + blockSize - 1` according to [CMSIS-DSP.](https://github.com/ARM-software/CMSIS-DSP) So here the signal must have 5 samples.

If you want to filter more than 5 samples, then you can just call the function again. The state variable inside firf32 will ensure that it works like in the [CMSIS-DSP](https://github.com/ARM-software/CMSIS-DSP) C code. 

    > print(dsp.arm_fir_f32(firf32,[6,7,8,9,10]))

If you want to compare with scipy it is easy but warning : coefficients for the filter are in opposite order in scipy :

    > filtered_x = signal.lfilter([3,2,1.], 1.0, [1,2,3,4,5,6,7,8,9,10])
    > print(filtered_x)

The principles are the same for all other APIs.

## FFT 

Here is an example for using FFT from the Python interface:

Let's define a signal you will use for the FFT.

    > nb = 16
    > signal = np.cos(2 * np.pi * np.arange(nb) / nb)

The [CMSIS-DSP](https://github.com/ARM-software/CMSIS-DSP) cfft is requiring complex signals with a specific layout in memory.

To remain as close as possible to the C API, we are not using complex numbers in the wrapper. So a complex signal must be converted into a real one. The function imToReal1D is defined in testdsp.py 

    > signalR = imToReal1D(signal)

Then, you create the FFT instance with:

    > cfftf32=dsp.arm_cfft_instance_f32()

You initialize the instance with the init function provided by the wrapper:

    > status=dsp.arm_cfft_init_f32(cfftf32, nb)
    > print(status)

You compute the FFT of the signal with:

    > resultR = dsp.arm_cfft_f32(cfftf32,signalR,0,1)

You convert back to a complex format to compare with scipy:

    > resultI = realToIm1D(resultR)
    > print(resultI)

## Matrix 

For matrix, the instance variables are masked by the Python API. We decided that for matrix only there was no use for having the [CMSIS-DSP](https://github.com/ARM-software/CMSIS-DSP) instance visibles since they contain the same information as the numpy array (samples and dimension).

So to use a [CMSIS-DSP](https://github.com/ARM-software/CMSIS-DSP) matrix function, it is very simple:

    > a=np.array([[1.,2,3,4],[5,6,7,8],[9,10,11,12]])
    > b=np.array([[1.,2,3],[5.1,6,7],[9.1,10,11],[5,8,4]])

`NumPy` result as reference:

    > print(np.dot(a , b))

[CMSIS-DSP](https://github.com/ARM-software/CMSIS-DSP) result:

    > v=dsp.arm_mat_mult_f32(a,b)
    > print(v)

In a real C code, a pointer to a data structure for the result `v` would have to be passed as argument of the function.

## example.py

This example depends on a data file which can be downloaded here:

https://archive.physionet.org/pn3/ecgiddb/Person_87/rec_2.dat

This signal was created for a master thesis:

Lugovaya T.S. Biometric human identification based on electrocardiogram. [Master's thesis] Faculty of Computing Technologies and Informatics, Electrotechnical University "LETI", Saint-Petersburg, Russian Federation; June 2005. 

and it is part of the PhysioNet database

Goldberger AL, Amaral LAN, Glass L, Hausdorff JM, Ivanov PCh, Mark RG, Mietus JE, Moody GB, Peng C-K, Stanley HE. PhysioBank, PhysioToolkit, and PhysioNet: Components of a New Research Resource for Complex Physiologic Signals. Circulation 101(23):e215-e220 [Circulation Electronic Pages; http://circ.ahajournals.org/cgi/content/full/101/23/e215]; 2000 (June 13). 

## Submodules

The Python wrapper is containing three submodules : `fixedpoint` , `mfcc` and `datatype`

`fixedpoint` is proving some tools to help generating the fixedpoint values expected
by [CMSIS-DSP](https://github.com/ARM-software/CMSIS-DSP).

`mfcc` is generating some tools to generate the MEL filters, DCT and window coefficients
expected by the [CMSIS-DSP](https://github.com/ARM-software/CMSIS-DSP) MFCC implementation.

MEL filters are represented as 3 arrays to encode a sparse array.

`datatype` is an API on top of `fixedpoint` to provide more reuse when converting between data formats.



# Change history

## Version 1.9.9:
* Supports Python 3.12
* Works with Numpy 2.0
* Corrections on Cholesky

## Version 1.9.8:
* Compute graph API has been removed
* Dependency on numpy 1.22 has been lifted, tested through numpy 1.26
* Inconsistencies in distance and window modules have been fixed.

## Version 1.9.7:

* Upgrade for compatibility with google colab 
* Change to compute graph API for structured datatype
* Corrected distance issues when using wrapper on aarch64

## Version 1.9.6:

* Corrections to the RFFTs APIs
* More flexibility in the compute graph to specify the additional arguments of the scheduler and nodes
* Possibility to set the FIFO scaling factor at FIFO level (in asynchronous mode)

## Version 1.9.5:

Same as 1.9.4 but will work in Google Colab.

## Version 1.9.4:

* Dynamic Time Warping API
* Window functions for FFT
* New asynchronous mode for the compute graph
(see [compute graph documentation](https://github.com/ARM-software/CMSIS-DSP/tree/main/ComputeGraph) for more details.

## Version 1.9.3:

* Corrected real FFTs in the wrapper
* Corrected arm_fir_decimate and arm_fir_interpolate
* Possibility to customize the FIFO class on a connection for the Python wrapper

## Version 1.9.2:

* New customization options for the compute graph:
  * CAPI
  * CMSISDSP
  * postCustomCName

## Version 1.9.1:

* Small fix to the compute graph generator. The `#ifdef` at beginning of the custom header should be different for different scheduler names
* Improve `addLiteralArg` and `addVariableArg` in compute graph to use variable number of arguments

## Version 1.9.0:

* New scheduling mode, in the compute graph generator, giving priority to sinks in the scheduling. The idea is to try to decrease the latency between sinks and sources.
* More customization options (Macros to be defined) in the C++ code generated by the compute graph generator

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/ARM-software/CMSIS-DSP",
    "name": "cmsisdsp",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": null,
    "keywords": "development, dsp, cmsis, cmsis-dsp, Arm, signal processing, maths, ml, cortex-m, cortex-a",
    "author": "Copyright (C) 2010-2024 ARM Limited or its affiliates. All rights reserved.",
    "author_email": "christophe.favergeon@arm.com",
    "download_url": null,
    "platform": "any",
    "description": "# README\n\nThis is a Python wrapper for the Arm open source [CMSIS-DSP](https://github.com/ARM-software/CMSIS-DSP) and it is compatible with `NumPy`.\n\nThe CMSIS-DSP is available on our [GitHub](https://github.com/ARM-software/CMSIS-DSP) or as a [CMSIS Pack](https://github.com/ARM-software/CMSIS-DSP/releases).\n\nThe idea is to follow as closely as possible the C [CMSIS-DSP](https://github.com/ARM-software/CMSIS-DSP) API to ease the migration to the final implementation on a board.\n\nThe signal processing chain can thus be tested and developed in a Python environment and then easily converted to a C implementation running on a Cortex-M or Cortex-A board.\n\nA tutorial is also available but with less details than this README:\nhttps://developer.arm.com/documentation/102463/latest/\n\nAn history of the changes to this wrapper is available at the end of the README.\n\n# How to build and install\n\n## Tested configurations\n\nThe building of this package has been tested on Windows with the Python install from python.org and Microsoft Visual Studio 2022 and on Ubuntu 22.04.\n\nIt has also been tested with `cygwin`. In that case, `python-devel` must be installed too. On Mac, it was tested with standard XCode installation.\n\nTo run the examples, `scipy` and `matplotlib` must also be installed.\n\nOther configurations should work but the `setup.py` file would have to be improved. \n\nPython 3 must be used.\n\n## Installing and Building\n\n### Installing\n\nIt is advised to do it in a Python virtual environment. Then, in the virtual environment you can just do:\n\n    pip install cmsisdsp\n\nYou must have a recent `pip` (to automatically install the dependencies like `NumPy`) and you should have a compiler which can be found by Python when building the package.\n\nDSP examples are available in the [CMSIS-DSP PythonWrapper examples](https://github.com/ARM-software/CMSIS-DSP/tree/main/PythonWrapper/examples) folder.\n\nYou can also install and run it from [Google colab](https://colab.research.google.com/):\n\nThis [link](https://colab.research.google.com/github/ARM-software/CMSIS-DSP/blob/main/PythonWrapper/examples/cmsisdsp_tests.ipynb) will open a Jupyter notebook in [Google colab](https://colab.research.google.com/) for testing. This notebook is from the [examples](https://github.com/ARM-software/CMSIS-DSP/tree/main/PythonWrapper/examples) in the CMSIS-DSP GitHub repository.\n\n### Building\n\nIt it is not working (because it is not possible for us to test all configurations), you can then try to build and install the wrapper manually.\n\nIt is advised to do this it into a virtualenv\n\n\nSince the [CMSIS-DSP](https://github.com/ARM-software/CMSIS-DSP) wrapper is using `NumPy`, you must first install it in the virtual environment. \n\n    > pip install numpy\n\nOnce `NumPy` is installed, you can build the [CMSIS-DSP](https://github.com/ARM-software/CMSIS-DSP) python wrapper. Go to folder `CMSIS/DSP`.\n\nNow, you can install the cmsisdsp package in editable mode:\n\n    > pip install -e .\n\nBefore using this command, you need to rebuild the CMSIS-DSP library which is no more built by the `setup.py` script.\n\nThere is a `CMakeLists.txt` in the `PythonWrapper` folder for this. The `build` folders in `PythonWrapper` are giving some examples of the options to use with the `cmake` command to generate the `Makefile` and build the library.\n\nThis library is then used by the `setup.py` script to build the Python extension.\n\n## Running the examples\n\nInstall some packages to be able to run the examples\n\n    > pip install numpy\n    > pip install scipy\n    > pip install matplotlib\n\nDepending on the example, you may have to install more packages.\n\nThe examples are in the  [CMSIS-DSP PythonWrapper examples](https://github.com/ARM-software/CMSIS-DSP/tree/main/PythonWrapper/examples) folder.\n\nYou can test the scripts `testdsp.py` and `example.py` and try to run them from this virtual environment. `example.py` is requiring a data file to be downloaded from the web. See below in this document for the link.\n\nNote that due to the great number of possible configurations (OS, Compiler, Python), we can't give any support if you have problems compiling the `PythonWrapper` on your specific configuration. But, generally people manage to do it and solve all the problems.\n\n# Usage\n\nThe idea is to follow as closely as possible the [CMSIS-DSP](https://github.com/ARM-software/CMSIS-DSP) API to ease the migration to the final implementation on a board.\n\nFirst you need to import the module\n\n    > import cmsisdsp as dsp\n\nIf you use numpy:\n\n    > import numpy as np\n\nIf you use scipy signal processing functions:\n\n    > from scipy import signal\n\n## Functions with no instance arguments\n\nYou can use a [CMSIS-DSP](https://github.com/ARM-software/CMSIS-DSP) function with numpy arrays:\n\n    > r = dsp.arm_add_f32(np.array([1.,2,3]),np.array([4.,5,7]))\n\nThe function can also be called more simply with\n\n    > r = dsp.arm_add_f32([1.,2,3],[4.,5,7])\n\nThe result of a [CMSIS-DSP](https://github.com/ARM-software/CMSIS-DSP) function will always be a numpy array whatever the arguments were (numpy array or list).\n\n## Functions with instance arguments \n\nWhen the [CMSIS-DSP](https://github.com/ARM-software/CMSIS-DSP) function is requiring an instance data structure, it is just a bit more complex to use it:\n\nFirst you need to create this instance:\n\n    > firf32 = dsp.arm_fir_instance_f32()\n\nThen, you need to call an init function:\n\n    > dsp.arm_fir_init_f32(firf32,3,[1.,2,3],[0,0,0,0,0,0,0])\n\nThe third argument in this function is the state. Since all arguments (except the instance ones) are read-only in this Python API, this state will never be changed ! It is just used to communicate the length of the state array which must be allocated by the init function. This argument is required because it is present in the [CMSIS-DSP](https://github.com/ARM-software/CMSIS-DSP) API and in the final C implementation you'll need to allocate a state array with the right dimension.\n\nSince the goal is to be as close as possible to the C API, the API is forcing the use of this argument.\n\nThe only change compared to the C API is that the size variables (like blockSize for filter) are computed automatically from the other arguments. This choice was made to make it a bit easier the use of numpy array with the API.\n\nNow, you can check that the instance was initialized correctly.\n\n    > print(firf32.numTaps())\n\nThen, you can filter with CMSIS-DSP:\n\n    > print(dsp.arm_fir_f32(firf32,[1,2,3,4,5]))\n\nThe size of this signal should be `blockSize`. `blockSize` was inferred from the size of the state array : `numTaps + blockSize - 1` according to [CMSIS-DSP.](https://github.com/ARM-software/CMSIS-DSP) So here the signal must have 5 samples.\n\nIf you want to filter more than 5 samples, then you can just call the function again. The state variable inside firf32 will ensure that it works like in the [CMSIS-DSP](https://github.com/ARM-software/CMSIS-DSP) C code. \n\n    > print(dsp.arm_fir_f32(firf32,[6,7,8,9,10]))\n\nIf you want to compare with scipy it is easy but warning : coefficients for the filter are in opposite order in scipy :\n\n    > filtered_x = signal.lfilter([3,2,1.], 1.0, [1,2,3,4,5,6,7,8,9,10])\n    > print(filtered_x)\n\nThe principles are the same for all other APIs.\n\n## FFT \n\nHere is an example for using FFT from the Python interface:\n\nLet's define a signal you will use for the FFT.\n\n    > nb = 16\n    > signal = np.cos(2 * np.pi * np.arange(nb) / nb)\n\nThe [CMSIS-DSP](https://github.com/ARM-software/CMSIS-DSP) cfft is requiring complex signals with a specific layout in memory.\n\nTo remain as close as possible to the C API, we are not using complex numbers in the wrapper. So a complex signal must be converted into a real one. The function imToReal1D is defined in testdsp.py \n\n    > signalR = imToReal1D(signal)\n\nThen, you create the FFT instance with:\n\n    > cfftf32=dsp.arm_cfft_instance_f32()\n\nYou initialize the instance with the init function provided by the wrapper:\n\n    > status=dsp.arm_cfft_init_f32(cfftf32, nb)\n    > print(status)\n\nYou compute the FFT of the signal with:\n\n    > resultR = dsp.arm_cfft_f32(cfftf32,signalR,0,1)\n\nYou convert back to a complex format to compare with scipy:\n\n    > resultI = realToIm1D(resultR)\n    > print(resultI)\n\n## Matrix \n\nFor matrix, the instance variables are masked by the Python API. We decided that for matrix only there was no use for having the [CMSIS-DSP](https://github.com/ARM-software/CMSIS-DSP) instance visibles since they contain the same information as the numpy array (samples and dimension).\n\nSo to use a [CMSIS-DSP](https://github.com/ARM-software/CMSIS-DSP) matrix function, it is very simple:\n\n    > a=np.array([[1.,2,3,4],[5,6,7,8],[9,10,11,12]])\n    > b=np.array([[1.,2,3],[5.1,6,7],[9.1,10,11],[5,8,4]])\n\n`NumPy` result as reference:\n\n    > print(np.dot(a , b))\n\n[CMSIS-DSP](https://github.com/ARM-software/CMSIS-DSP) result:\n\n    > v=dsp.arm_mat_mult_f32(a,b)\n    > print(v)\n\nIn a real C code, a pointer to a data structure for the result `v` would have to be passed as argument of the function.\n\n## example.py\n\nThis example depends on a data file which can be downloaded here:\n\nhttps://archive.physionet.org/pn3/ecgiddb/Person_87/rec_2.dat\n\nThis signal was created for a master thesis:\n\nLugovaya T.S. Biometric human identification based on electrocardiogram. [Master's thesis] Faculty of Computing Technologies and Informatics, Electrotechnical University \"LETI\", Saint-Petersburg, Russian Federation; June 2005. \n\nand it is part of the PhysioNet database\n\nGoldberger AL, Amaral LAN, Glass L, Hausdorff JM, Ivanov PCh, Mark RG, Mietus JE, Moody GB, Peng C-K, Stanley HE. PhysioBank, PhysioToolkit, and PhysioNet: Components of a New Research Resource for Complex Physiologic Signals. Circulation 101(23):e215-e220 [Circulation Electronic Pages; http://circ.ahajournals.org/cgi/content/full/101/23/e215]; 2000 (June 13). \n\n## Submodules\n\nThe Python wrapper is containing three submodules : `fixedpoint` , `mfcc` and `datatype`\n\n`fixedpoint` is proving some tools to help generating the fixedpoint values expected\nby [CMSIS-DSP](https://github.com/ARM-software/CMSIS-DSP).\n\n`mfcc` is generating some tools to generate the MEL filters, DCT and window coefficients\nexpected by the [CMSIS-DSP](https://github.com/ARM-software/CMSIS-DSP) MFCC implementation.\n\nMEL filters are represented as 3 arrays to encode a sparse array.\n\n`datatype` is an API on top of `fixedpoint` to provide more reuse when converting between data formats.\n\n\n\n# Change history\n\n## Version 1.9.9:\n* Supports Python 3.12\n* Works with Numpy 2.0\n* Corrections on Cholesky\n\n## Version 1.9.8:\n* Compute graph API has been removed\n* Dependency on numpy 1.22 has been lifted, tested through numpy 1.26\n* Inconsistencies in distance and window modules have been fixed.\n\n## Version 1.9.7:\n\n* Upgrade for compatibility with google colab \n* Change to compute graph API for structured datatype\n* Corrected distance issues when using wrapper on aarch64\n\n## Version 1.9.6:\n\n* Corrections to the RFFTs APIs\n* More flexibility in the compute graph to specify the additional arguments of the scheduler and nodes\n* Possibility to set the FIFO scaling factor at FIFO level (in asynchronous mode)\n\n## Version 1.9.5:\n\nSame as 1.9.4 but will work in Google Colab.\n\n## Version 1.9.4:\n\n* Dynamic Time Warping API\n* Window functions for FFT\n* New asynchronous mode for the compute graph\n(see [compute graph documentation](https://github.com/ARM-software/CMSIS-DSP/tree/main/ComputeGraph) for more details.\n\n## Version 1.9.3:\n\n* Corrected real FFTs in the wrapper\n* Corrected arm_fir_decimate and arm_fir_interpolate\n* Possibility to customize the FIFO class on a connection for the Python wrapper\n\n## Version 1.9.2:\n\n* New customization options for the compute graph:\n  * CAPI\n  * CMSISDSP\n  * postCustomCName\n\n## Version 1.9.1:\n\n* Small fix to the compute graph generator. The `#ifdef` at beginning of the custom header should be different for different scheduler names\n* Improve `addLiteralArg` and `addVariableArg` in compute graph to use variable number of arguments\n\n## Version 1.9.0:\n\n* New scheduling mode, in the compute graph generator, giving priority to sinks in the scheduling. The idea is to try to decrease the latency between sinks and sources.\n* More customization options (Macros to be defined) in the C++ code generated by the compute graph generator\n",
    "bugtrack_url": null,
    "license": "License :: OSI Approved :: Apache Software License",
    "summary": "CMSIS-DSP Python API",
    "version": "1.9.9",
    "project_urls": {
        "Bug Reports": "https://github.com/ARM-software/CMSIS-DSP/issues",
        "Homepage": "https://github.com/ARM-software/CMSIS-DSP",
        "Source": "https://github.com/ARM-software/CMSIS-DSP"
    },
    "split_keywords": [
        "development",
        " dsp",
        " cmsis",
        " cmsis-dsp",
        " arm",
        " signal processing",
        " maths",
        " ml",
        " cortex-m",
        " cortex-a"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "c46f3489fbf7032ea2178bb713fc401acdf71b9833a08986ecbda4124818d4eb",
                "md5": "a23fe7f5372f225bf0adda6c7ed404b3",
                "sha256": "13a6d764e4f56fc4c5b70850c219406489258950642c4100dbed8e7e51f334c8"
            },
            "downloads": -1,
            "filename": "cmsisdsp-1.9.9-cp310-cp310-macosx_10_9_universal2.whl",
            "has_sig": false,
            "md5_digest": "a23fe7f5372f225bf0adda6c7ed404b3",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 7857324,
            "upload_time": "2024-07-02T09:54:39",
            "upload_time_iso_8601": "2024-07-02T09:54:39.307471Z",
            "url": "https://files.pythonhosted.org/packages/c4/6f/3489fbf7032ea2178bb713fc401acdf71b9833a08986ecbda4124818d4eb/cmsisdsp-1.9.9-cp310-cp310-macosx_10_9_universal2.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "804a3af2d76f14b60dbbde587fdb41576bdef3d229db40cf4055a7f5be6ea6e5",
                "md5": "421338d973139368a0718d6d0f61e11d",
                "sha256": "d16430c0fbd60ca7f0473ce1c4597d101a8c7bc5ee1e15c89c8ee2e6c0536d4c"
            },
            "downloads": -1,
            "filename": "cmsisdsp-1.9.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "421338d973139368a0718d6d0f61e11d",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 4646048,
            "upload_time": "2024-07-02T09:57:06",
            "upload_time_iso_8601": "2024-07-02T09:57:06.290650Z",
            "url": "https://files.pythonhosted.org/packages/80/4a/3af2d76f14b60dbbde587fdb41576bdef3d229db40cf4055a7f5be6ea6e5/cmsisdsp-1.9.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "0f9cabfa4797cfb33aae99abbfcb8fc97839bcd53d08eb32d3ed4292bec94c64",
                "md5": "ae8c6df42acb0e068b6f805e5c4535ef",
                "sha256": "187729e1bbfcd4d5fa642dc535ff9870cee0fa76e559dd9870699ca85ae833db"
            },
            "downloads": -1,
            "filename": "cmsisdsp-1.9.9-cp310-cp310-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "ae8c6df42acb0e068b6f805e5c4535ef",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 3959145,
            "upload_time": "2024-07-02T09:57:44",
            "upload_time_iso_8601": "2024-07-02T09:57:44.803619Z",
            "url": "https://files.pythonhosted.org/packages/0f/9c/abfa4797cfb33aae99abbfcb8fc97839bcd53d08eb32d3ed4292bec94c64/cmsisdsp-1.9.9-cp310-cp310-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a3bf216e2d234d9cae01eabfaa62daa7a082525d1ef5105026dc6e6b6a1aa77d",
                "md5": "1f323a31ef17fecf2860eaac0d717b1b",
                "sha256": "f371c0394790824b835099f18d31a9340762f6856b965a927bc2743e9ae6e626"
            },
            "downloads": -1,
            "filename": "cmsisdsp-1.9.9-cp311-cp311-macosx_10_9_universal2.whl",
            "has_sig": false,
            "md5_digest": "1f323a31ef17fecf2860eaac0d717b1b",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 7857326,
            "upload_time": "2024-07-02T09:54:44",
            "upload_time_iso_8601": "2024-07-02T09:54:44.425103Z",
            "url": "https://files.pythonhosted.org/packages/a3/bf/216e2d234d9cae01eabfaa62daa7a082525d1ef5105026dc6e6b6a1aa77d/cmsisdsp-1.9.9-cp311-cp311-macosx_10_9_universal2.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "7cb48bb20d58cb1238ed3bef9bd93c12ab9a83d73a0939e4d251012952b51e4c",
                "md5": "27e79bc6d29e77f27a3410e129539416",
                "sha256": "70a92c7f6568d09f62d329d782671739973f133fd972b7a58eac0096e6c8dd16"
            },
            "downloads": -1,
            "filename": "cmsisdsp-1.9.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "27e79bc6d29e77f27a3410e129539416",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 4649444,
            "upload_time": "2024-07-02T09:58:31",
            "upload_time_iso_8601": "2024-07-02T09:58:31.338088Z",
            "url": "https://files.pythonhosted.org/packages/7c/b4/8bb20d58cb1238ed3bef9bd93c12ab9a83d73a0939e4d251012952b51e4c/cmsisdsp-1.9.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "4b7a7bb05abfa34a41b5adaf6c783c8309bbaef9cd4657652e4d64c536940e6a",
                "md5": "dccc27b806015b26a2f746e622b3d4f2",
                "sha256": "21807cd731c737e3209f926dcf7204c80f677855de21d8ee03c85a3063e9aec4"
            },
            "downloads": -1,
            "filename": "cmsisdsp-1.9.9-cp311-cp311-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "dccc27b806015b26a2f746e622b3d4f2",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 3959141,
            "upload_time": "2024-07-02T09:59:11",
            "upload_time_iso_8601": "2024-07-02T09:59:11.597573Z",
            "url": "https://files.pythonhosted.org/packages/4b/7a/7bb05abfa34a41b5adaf6c783c8309bbaef9cd4657652e4d64c536940e6a/cmsisdsp-1.9.9-cp311-cp311-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "76e79c812373e1c8d31d6d1378f96efeb59e7925bb3127d46be0c60e4706b1d4",
                "md5": "711f3f149ffd9d2dbbdddd512947d9c5",
                "sha256": "dd8fdb4f4e27fe57d4d3e4f9790e5f0344d24e942b62f713c4c2febf586e6e25"
            },
            "downloads": -1,
            "filename": "cmsisdsp-1.9.9-cp312-cp312-macosx_10_9_universal2.whl",
            "has_sig": false,
            "md5_digest": "711f3f149ffd9d2dbbdddd512947d9c5",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 7854478,
            "upload_time": "2024-07-02T09:54:48",
            "upload_time_iso_8601": "2024-07-02T09:54:48.814588Z",
            "url": "https://files.pythonhosted.org/packages/76/e7/9c812373e1c8d31d6d1378f96efeb59e7925bb3127d46be0c60e4706b1d4/cmsisdsp-1.9.9-cp312-cp312-macosx_10_9_universal2.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "e3acef2b6b9d25b1a182d9e4385e18fb6b233b11388351ddce7163c0996848ea",
                "md5": "5af85ad37d4bab98b5549c8eae9e1261",
                "sha256": "b87ee1f128a593657a3d3cefcd3ebaf30b932a44d1e2c4a1b6714a9fd621a67e"
            },
            "downloads": -1,
            "filename": "cmsisdsp-1.9.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "5af85ad37d4bab98b5549c8eae9e1261",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 4680952,
            "upload_time": "2024-07-02T09:59:57",
            "upload_time_iso_8601": "2024-07-02T09:59:57.609122Z",
            "url": "https://files.pythonhosted.org/packages/e3/ac/ef2b6b9d25b1a182d9e4385e18fb6b233b11388351ddce7163c0996848ea/cmsisdsp-1.9.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "4362755824a7f37437af86bf27a7d9ee7400d695882b4e5a003fe3da1f6fa2a9",
                "md5": "de8c2868629f31e9d0c942527db3c6b0",
                "sha256": "deee0ed5d34c95cebc83cc8ba06b6528614b9a73a4238133063a5b893f91a2c7"
            },
            "downloads": -1,
            "filename": "cmsisdsp-1.9.9-cp312-cp312-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "de8c2868629f31e9d0c942527db3c6b0",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 3960972,
            "upload_time": "2024-07-02T10:00:36",
            "upload_time_iso_8601": "2024-07-02T10:00:36.616983Z",
            "url": "https://files.pythonhosted.org/packages/43/62/755824a7f37437af86bf27a7d9ee7400d695882b4e5a003fe3da1f6fa2a9/cmsisdsp-1.9.9-cp312-cp312-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "b65f1e2302f4b1d9262845b32729918bc0761873500b1502a4da165e41aa1aa5",
                "md5": "618074c5a627ad1c3831f248447816a7",
                "sha256": "4a0ddc850cb8bb9f0a641260aac07fefa63fa9843f81d5e4b579978cc70bf9ec"
            },
            "downloads": -1,
            "filename": "cmsisdsp-1.9.9-cp39-cp39-macosx_10_9_universal2.whl",
            "has_sig": false,
            "md5_digest": "618074c5a627ad1c3831f248447816a7",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 7857603,
            "upload_time": "2024-07-02T09:54:53",
            "upload_time_iso_8601": "2024-07-02T09:54:53.965059Z",
            "url": "https://files.pythonhosted.org/packages/b6/5f/1e2302f4b1d9262845b32729918bc0761873500b1502a4da165e41aa1aa5/cmsisdsp-1.9.9-cp39-cp39-macosx_10_9_universal2.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "c03cca688584c3320965f999c8eaccbbf3f6bb6cd8e5b0bdc1796a963c3e5cd2",
                "md5": "2c427c63912d10e6e1663a2d878be5ea",
                "sha256": "7b56892409c1913e40229db086d50f400a87e3455a8f992ee56a613ddcbfa3be"
            },
            "downloads": -1,
            "filename": "cmsisdsp-1.9.9-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "2c427c63912d10e6e1663a2d878be5ea",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 4642160,
            "upload_time": "2024-07-02T10:01:23",
            "upload_time_iso_8601": "2024-07-02T10:01:23.640201Z",
            "url": "https://files.pythonhosted.org/packages/c0/3c/ca688584c3320965f999c8eaccbbf3f6bb6cd8e5b0bdc1796a963c3e5cd2/cmsisdsp-1.9.9-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "37d39f0a2be706b7671b90fc996e1466ed4b5574ca864d1200c742d761118ce9",
                "md5": "795604bb645a22da4cb88192d52e15c8",
                "sha256": "2c7e79b8dd8d7d84b86ef0ef2a06d72f19058b6d43da681f55667da215ebf6b7"
            },
            "downloads": -1,
            "filename": "cmsisdsp-1.9.9-cp39-cp39-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "795604bb645a22da4cb88192d52e15c8",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 3959542,
            "upload_time": "2024-07-02T10:02:02",
            "upload_time_iso_8601": "2024-07-02T10:02:02.018526Z",
            "url": "https://files.pythonhosted.org/packages/37/d3/9f0a2be706b7671b90fc996e1466ed4b5574ca864d1200c742d761118ce9/cmsisdsp-1.9.9-cp39-cp39-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-07-02 09:54:39",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "ARM-software",
    "github_project": "CMSIS-DSP",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "cmsisdsp"
}
        
Elapsed time: 3.92490s