Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ne10 FFTs for Neon #219

Merged
merged 43 commits into from
Dec 9, 2024
Merged
Changes from 1 commit
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
19531d5
Fixes for testing Neon
christophe0606 Oct 1, 2024
f570d6d
Integrated CFFT F32 of Ne10 for Neon version of the CFFT.
christophe0606 Oct 3, 2024
e2ed162
Some cleaning to Ne10 header used in Neon CFFT.
christophe0606 Oct 3, 2024
f5f5061
Added Neon RFFT - initialization not yet implemented
christophe0606 Oct 8, 2024
078ac55
First working version of RFFT Neon (tested on RFFT 32 only so far)
christophe0606 Oct 9, 2024
69ce3dd
Added other lengths for RFFT Neon.
christophe0606 Oct 9, 2024
b07470f
Added RIFFT Neon F32
christophe0606 Oct 10, 2024
0db81f6
Added documentation for Neon API of CFFT and RFFT F32 that are differ…
christophe0606 Oct 10, 2024
7241cda
Updated MFCC F32 Neon version.
christophe0606 Oct 11, 2024
4f59953
Improved doxygen documentation for new Neon API (RFFT, CFFT, MFCC F32)
christophe0606 Oct 11, 2024
e92a5d7
Added CFTT Q31 Neon
christophe0606 Oct 15, 2024
e9316ac
Added RFFT Q31 Neon.
christophe0606 Oct 17, 2024
30098a4
Updated tests for RFTT, CFFT, MFCC Q31 Neon
christophe0606 Oct 17, 2024
8a105b4
Added Q15 Neon implementations for CFFT, RFFT, MFCC.
christophe0606 Oct 25, 2024
e7b3396
Changed API for Neon CFFT and RFFT F32. Input buffer is const and not…
christophe0606 Oct 25, 2024
1cc49ec
Improved doxygen documentation
christophe0606 Oct 25, 2024
47d568d
Update doxygen for Neon version of transforms.
christophe0606 Oct 25, 2024
dae08f4
Doxygen update for Neon version of cfft q31 and q15
christophe0606 Oct 25, 2024
76e6c32
Corrected doxygen
christophe0606 Oct 25, 2024
7d04f56
Added CFFT, RFFT, MFCC Neon for f16.
christophe0606 Oct 30, 2024
f3cc725
Corrected RFFT F16 neon
christophe0606 Oct 31, 2024
dd8ec7d
Corrected f16 tests
christophe0606 Oct 31, 2024
ea8723a
Don't build RFFT F16 neon when HW not supporting it
christophe0606 Nov 7, 2024
c041a25
Corrected F16 tests for Neon and Cortex-A
christophe0606 Nov 7, 2024
2fdbbbf
Added dynamic init for CFFT F32 Neon version
christophe0606 Nov 13, 2024
2ecb108
Added dynamic init for CFFT Q31 Neon
christophe0606 Nov 13, 2024
67f1b52
Added dynamic CFFT Q15 and F16 for Neon
christophe0606 Nov 13, 2024
b9db487
Improved doxygen for Neon init functions
christophe0606 Nov 13, 2024
44ecc31
Correct doxygen issues with init functions for Neon CFFT
christophe0606 Nov 13, 2024
95ba6e6
Added dynamic RFFT F32 for Neon
christophe0606 Nov 14, 2024
1775adb
Added dynamic Neon RFFT Q31 and Q15
christophe0606 Nov 15, 2024
128ace2
Added dynamic RFFT F16 for Neon
christophe0606 Nov 15, 2024
213c815
For cmake build of tests, added option to disable autovectorization
christophe0606 Nov 18, 2024
d001e1d
Improved perf of CFFT F16 Neon
christophe0606 Nov 19, 2024
a1441c6
Added some support for complex Neon instructions for tests.
christophe0606 Dec 2, 2024
9eec50a
Added radix 3 and 5 for Neon implementation of CFFT F32 and F16.
christophe0606 Dec 3, 2024
f9e98ab
Added radix 3 and 5 for Neon CFFT Q31
christophe0606 Dec 4, 2024
9b8e3ef
Added tests for Neon specific implementations of the FFTs
christophe0606 Dec 5, 2024
d24c98f
Corrected test thresholds for Neon.
christophe0606 Dec 5, 2024
c045007
Tuned test thresholds
christophe0606 Dec 6, 2024
4d3e915
Corrected tests causing problems when building with gcc.
christophe0606 Dec 6, 2024
f91cb53
Improved doxygen for FFTs
christophe0606 Dec 6, 2024
e49e650
Improved doxygen documentation for FFTs.
christophe0606 Dec 9, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Improved doxygen for FFTs
christophe0606 committed Dec 6, 2024

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
commit f91cb535c0eeac183679a73f66b7cbd4e1f7b554
35 changes: 35 additions & 0 deletions Include/dsp/transform_functions.h
Original file line number Diff line number Diff line change
@@ -51,6 +51,41 @@ extern "C"

/**
* @defgroup groupTransforms Transform Functions
*
* CMSIS-DSP provides CFFT and RFFT for different architectures.
* The implementation of those transforms may be different for the
* different architectures : different algorithms, different capabilities
* of the instruction set.
*
* All those variants are not giving exactly the same results but they
* are passing the same tests with same SNR checks and same threshold for
* the sample errors.
*
* The APIs for the Neon variants are different : some additional
* temporary buffers are required.
*
* Float16 versions are provided but they are not very accurate and
* should only be used for small FFTs.
*
* @par Transform initializations
*
* There are several ways to initialize the transform functions.
* Below explanations are using q15 as example but the same explanations
* apply to other datatypes.
*
* Before Helium and Neon, you can just use a pre-initialized
* constant data structure and use it in the arm_cfft_... function.
* For instance, &arm_cfft_sR_q15_len256 for a 256 Q15 CFFT.
*
* On Helium and Neon, you *must* use an initialization function. If you know the size of your FFT (or other transform) you can use a specific initialization function for this size only : like arm_cfft_init_256_q15 for a 256 Q15 complex FFT.
*
* By using a specific initialization function, you give an hint to the linker and it will be able to remove all unused initialization tables (some compilation and link flags must be used for the linker to be able to do this optimization. It is compiler dependent).
*
* If you don't know the size you'll need at runtime, you need to use a function like arm_cfft_init_q15. If you use such a function, all the tables for all FFT sizes (up to the CMSIS-DSP maximum of 4096) will be included in the build !
*
* On Neon, there is another possibility. You can use arm_cfft_init_dynamic_q15. This function will allocate a buffer at runtime and compute at runtime all the tables that are required for a specific FFT size. This initialization is also supported by RFFT.
* The computation to initialize all the tables can take lot of cycles
* (since several cos and sin must be computed)
*/


31 changes: 29 additions & 2 deletions Ne10/CMSIS_NE10_fft_init.c
Original file line number Diff line number Diff line change
@@ -953,7 +953,7 @@ arm_cfft_instance_f16 *arm_cfft_init_dynamic_f16(uint32_t fftLen)
/**
* @brief Initialize data structure for a RFFT
*
* @param[in] fftLen The rfft length
* @param[in] nfft The rfft length
*
* @return Pointer to the new structure
*
@@ -1131,7 +1131,7 @@ arm_rfft_fast_instance_f16 *arm_rfft_fast_init_dynamic_f16 (uint32_t nfft)
/**
* @brief Initialize data structure for a RFFT
*
* @param[in] fftLen The rfft length
* @param[in] nfft The rfft length
*
* @return Pointer to the new structure
*
@@ -1305,6 +1305,19 @@ arm_rfft_fast_instance_f32 *arm_rfft_fast_init_dynamic_f32 (uint32_t nfft)
@addtogroup RealFFTQ31
@{
*/
/**
* @brief Initialize RFFT Q31 with memory allocation
*
* @param[in] nfft The nfft
*
* @return Pointer to RFFT instance Q31
*
* @par This function is only available for Neon
* This function is allocating memory. The
* memory must be released when no more used.
* This function can be used with RFFT lengths
* longer than the ones supported on Cortex-M
*/
arm_rfft_instance_q31 *arm_rfft_init_dynamic_q31(uint32_t nfft)
{
arm_rfft_instance_q31 *st = NULL;
@@ -1402,6 +1415,20 @@ arm_rfft_fast_instance_f32 *arm_rfft_fast_init_dynamic_f32 (uint32_t nfft)
@addtogroup RealFFTQ15
@{
*/

/**
* @brief Initialize RFFT Q15 with memory allocation
*
* @param[in] nfft The nfft
*
* @return Pointer to an RFFT Instance Q15
*
* @par This function is only available for Neon
* This function is allocating memory. The
* memory must be released when no more used.
* This function can be used with RFFT lengths
* longer than the ones supported on Cortex-M
*/
arm_rfft_instance_q15 *arm_rfft_init_dynamic_q15(uint32_t nfft)
{
arm_rfft_instance_q15* st = NULL;
19 changes: 19 additions & 0 deletions Source/TransformFunctions/arm_cfft_f16.c
Original file line number Diff line number Diff line change
@@ -521,6 +521,25 @@ static void arm_cfft_radix4by2_inverse_f16_mve(const arm_cfft_instance_f16 * S,f
@param[in] bitReverseFlag flag that enables / disables bit reversal of output
- value = 0: disables bit reversal of output
- value = 1: enables bit reversal of output

@par Neon version
The neon version has a different API.
The input and output buffers must be
different.
There is a temporary buffer.
The temporary buffer has same size as
input or output buffer.
The bit reverse flag is not more
available in Neon version.

@code
void arm_cfft_f16(
const arm_cfft_instance_f16 * S,
const float16_t * pIn,
float16_t * pOut,
float16_t * pBuffer,
uint8_t ifftFlag);
@endcode
*/


4 changes: 2 additions & 2 deletions Source/TransformFunctions/arm_cfft_f32.c
Original file line number Diff line number Diff line change
@@ -702,7 +702,7 @@ extern void arm_bitreversal_32(
needed FFTs.</b> Other FFT versions can continue to be initialized as
explained below.
@par
For not MVE versions, pre-initialized data structures containing twiddle factors
For versions not targetting Helium or Neon, pre-initialized data structures containing twiddle factors
and bit reversal tables are provided and defined in <code>arm_const_structs.h</code>. Include
this header in your function and then pass one of the constant structures as
an argument to arm_cfft_f32. For example:
@@ -770,7 +770,7 @@ extern void arm_bitreversal_32(
Pre-initialized data structures containing twiddle factors and bit reversal
tables are provided and defined in <code>arm_const_structs.h</code>. Include
this header in your function and then pass one of the constant structures as
an argument to arm_cfft_q31. For example:
an argument to arm_cfft_q31 (except if you are targetting Helium or Neon). For example:
@par
<code>arm_cfft_q31(arm_cfft_sR_q31_len64, pSrc, 1, 1)</code>
@par
20 changes: 10 additions & 10 deletions Source/TransformFunctions/arm_cfft_init_f16.c
Original file line number Diff line number Diff line change
@@ -155,7 +155,7 @@ arm_status arm_cfft_init_##LEN##_f16(arm_cfft_instance_f16 * S)
- \ref ARM_MATH_SUCCESS : Operation successful
- \ref ARM_MATH_ARGUMENT_ERROR : an error is detected

@par Use of this function is mandatory only for the MVE version of the FFT.
@par Use of this function is mandatory only for the Helium and Neon versions of the FFT.
Other versions can still initialize directly the data structure using
variables declared in arm_const_structs.h
*/
@@ -168,7 +168,7 @@ CFFTINIT_F16(4096,4096)
- \ref ARM_MATH_SUCCESS : Operation successful
- \ref ARM_MATH_ARGUMENT_ERROR : an error is detected

@par Use of this function is mandatory only for the MVE version of the FFT.
@par Use of this function is mandatory only for the Helium and Neon versions of the FFT.
Other versions can still initialize directly the data structure using
variables declared in arm_const_structs.h
*/
@@ -182,7 +182,7 @@ CFFTINIT_F16(2048,1024)
- \ref ARM_MATH_SUCCESS : Operation successful
- \ref ARM_MATH_ARGUMENT_ERROR : an error is detected

@par Use of this function is mandatory only for the MVE version of the FFT.
@par Use of this function is mandatory only for the Helium and Neon versions of the FFT.
Other versions can still initialize directly the data structure using
variables declared in arm_const_structs.h
*/
@@ -196,7 +196,7 @@ CFFTINIT_F16(1024,1024)
- \ref ARM_MATH_SUCCESS : Operation successful
- \ref ARM_MATH_ARGUMENT_ERROR : an error is detected

@par Use of this function is mandatory only for the MVE version of the FFT.
@par Use of this function is mandatory only for the Helium and Neon versions of the FFT.
Other versions can still initialize directly the data structure using
variables declared in arm_const_structs.h
*/
@@ -210,7 +210,7 @@ CFFTINIT_F16(512,256)
- \ref ARM_MATH_SUCCESS : Operation successful
- \ref ARM_MATH_ARGUMENT_ERROR : an error is detected

@par Use of this function is mandatory only for the MVE version of the FFT.
@par Use of this function is mandatory only for the Helium and Neon versions of the FFT.
Other versions can still initialize directly the data structure using
variables declared in arm_const_structs.h
*/
@@ -224,7 +224,7 @@ CFFTINIT_F16(256,256)
- \ref ARM_MATH_SUCCESS : Operation successful
- \ref ARM_MATH_ARGUMENT_ERROR : an error is detected

@par Use of this function is mandatory only for the MVE version of the FFT.
@par Use of this function is mandatory only for the Helium and Neon versions of the FFT.
Other versions can still initialize directly the data structure using
variables declared in arm_const_structs.h
*/
@@ -238,7 +238,7 @@ CFFTINIT_F16(128,64)
- \ref ARM_MATH_SUCCESS : Operation successful
- \ref ARM_MATH_ARGUMENT_ERROR : an error is detected

@par Use of this function is mandatory only for the MVE version of the FFT.
@par Use of this function is mandatory only for the Helium and Neon versions of the FFT.
Other versions can still initialize directly the data structure using
variables declared in arm_const_structs.h
*/
@@ -252,7 +252,7 @@ CFFTINIT_F16(64,64)
- \ref ARM_MATH_SUCCESS : Operation successful
- \ref ARM_MATH_ARGUMENT_ERROR : an error is detected

@par Use of this function is mandatory only for the MVE version of the FFT.
@par Use of this function is mandatory only for the Helium and Neon versions of the FFT.
Other versions can still initialize directly the data structure using
variables declared in arm_const_structs.h
*/
@@ -266,7 +266,7 @@ CFFTINIT_F16(32,16)
- \ref ARM_MATH_SUCCESS : Operation successful
- \ref ARM_MATH_ARGUMENT_ERROR : an error is detected

@par Use of this function is mandatory only for the MVE version of the FFT.
@par Use of this function is mandatory only for the Helium and Neon versions of the FFT.
Other versions can still initialize directly the data structure using
variables declared in arm_const_structs.h
*/
@@ -281,7 +281,7 @@ CFFTINIT_F16(16,16)
- \ref ARM_MATH_SUCCESS : Operation successful
- \ref ARM_MATH_ARGUMENT_ERROR : an error is detected

@par Use of this function is mandatory only for the MVE version of the FFT.
@par Use of this function is mandatory only for the Helium and Neon versions of the FFT.
Other versions can still initialize directly the data structure using
variables declared in arm_const_structs.h

20 changes: 10 additions & 10 deletions Source/TransformFunctions/arm_cfft_init_f32.c
Original file line number Diff line number Diff line change
@@ -145,7 +145,7 @@ ARM_DSP_ATTRIBUTE arm_status arm_cfft_init_##LEN##_f32(arm_cfft_instance_f32 * S
- \ref ARM_MATH_SUCCESS : Operation successful
- \ref ARM_MATH_ARGUMENT_ERROR : an error is detected

@par Use of this function is mandatory only for the MVE version of the FFT.
@par Use of this function is mandatory only for the Helium and Neon versions of the FFT.
Other versions can still initialize directly the data structure using
variables declared in arm_const_structs.h
*/
@@ -159,7 +159,7 @@ CFFTINIT_F32(4096,4096)
- \ref ARM_MATH_SUCCESS : Operation successful
- \ref ARM_MATH_ARGUMENT_ERROR : an error is detected

@par Use of this function is mandatory only for the MVE version of the FFT.
@par Use of this function is mandatory only for the Helium and Neon versions of the FFT.
Other versions can still initialize directly the data structure using
variables declared in arm_const_structs.h
*/
@@ -173,7 +173,7 @@ CFFTINIT_F32(2048,1024)
- \ref ARM_MATH_SUCCESS : Operation successful
- \ref ARM_MATH_ARGUMENT_ERROR : an error is detected

@par Use of this function is mandatory only for the MVE version of the FFT.
@par Use of this function is mandatory only for the Helium and Neon versions of the FFT.
Other versions can still initialize directly the data structure using
variables declared in arm_const_structs.h
*/
@@ -187,7 +187,7 @@ CFFTINIT_F32(1024,1024)
- \ref ARM_MATH_SUCCESS : Operation successful
- \ref ARM_MATH_ARGUMENT_ERROR : an error is detected

@par Use of this function is mandatory only for the MVE version of the FFT.
@par Use of this function is mandatory only for the Helium and Neon versions of the FFT.
Other versions can still initialize directly the data structure using
variables declared in arm_const_structs.h
*/
@@ -201,7 +201,7 @@ CFFTINIT_F32(512,256)
- \ref ARM_MATH_SUCCESS : Operation successful
- \ref ARM_MATH_ARGUMENT_ERROR : an error is detected

@par Use of this function is mandatory only for the MVE version of the FFT.
@par Use of this function is mandatory only for the Helium and Neon versions of the FFT.
Other versions can still initialize directly the data structure using
variables declared in arm_const_structs.h
*/
@@ -215,7 +215,7 @@ CFFTINIT_F32(256,256)
- \ref ARM_MATH_SUCCESS : Operation successful
- \ref ARM_MATH_ARGUMENT_ERROR : an error is detected

@par Use of this function is mandatory only for the MVE version of the FFT.
@par Use of this function is mandatory only for the Helium and Neon versions of the FFT.
Other versions can still initialize directly the data structure using
variables declared in arm_const_structs.h
*/
@@ -229,7 +229,7 @@ CFFTINIT_F32(128,64)
- \ref ARM_MATH_SUCCESS : Operation successful
- \ref ARM_MATH_ARGUMENT_ERROR : an error is detected

@par Use of this function is mandatory only for the MVE version of the FFT.
@par Use of this function is mandatory only for the Helium and Neon versions of the FFT.
Other versions can still initialize directly the data structure using
variables declared in arm_const_structs.h
*/
@@ -243,7 +243,7 @@ CFFTINIT_F32(64,64)
- \ref ARM_MATH_SUCCESS : Operation successful
- \ref ARM_MATH_ARGUMENT_ERROR : an error is detected

@par Use of this function is mandatory only for the MVE version of the FFT.
@par Use of this function is mandatory only for the Helium and Neon versions of the FFT.
Other versions can still initialize directly the data structure using
variables declared in arm_const_structs.h
*/
@@ -257,7 +257,7 @@ CFFTINIT_F32(32,16)
- \ref ARM_MATH_SUCCESS : Operation successful
- \ref ARM_MATH_ARGUMENT_ERROR : an error is detected

@par Use of this function is mandatory only for the MVE version of the FFT.
@par Use of this function is mandatory only for the Helium and Neon versions of the FFT.
Other versions can still initialize directly the data structure using
variables declared in arm_const_structs.h
*/
@@ -273,7 +273,7 @@ CFFTINIT_F32(16,16)
- \ref ARM_MATH_ARGUMENT_ERROR : an error is detected

@par
Use of this function is mandatory only for the MVE version of the FFT.
Use of this function is mandatory only for the Helium and Neon versions of the FFT.
Other versions can still initialize directly the data structure using
variables declared in arm_const_structs.h

20 changes: 10 additions & 10 deletions Source/TransformFunctions/arm_cfft_init_f64.c
Original file line number Diff line number Diff line change
@@ -79,7 +79,7 @@ arm_status arm_cfft_init_##LEN##_f64(arm_cfft_instance_f64 * S)\
- \ref ARM_MATH_SUCCESS : Operation successful
- \ref ARM_MATH_ARGUMENT_ERROR : an error is detected
@par Use of this function is mandatory only for the MVE version of the FFT.
@par Use of this function is mandatory only for the Helium and Neon versions of the FFT.
Other versions can still initialize directly the data structure using
variables declared in arm_const_structs.h
*/
@@ -92,7 +92,7 @@ CFFTINIT_F64(4096)
- \ref ARM_MATH_SUCCESS : Operation successful
- \ref ARM_MATH_ARGUMENT_ERROR : an error is detected
@par Use of this function is mandatory only for the MVE version of the FFT.
@par Use of this function is mandatory only for the Helium and Neon versions of the FFT.
Other versions can still initialize directly the data structure using
variables declared in arm_const_structs.h
*/
@@ -106,7 +106,7 @@ CFFTINIT_F64(2048)
- \ref ARM_MATH_SUCCESS : Operation successful
- \ref ARM_MATH_ARGUMENT_ERROR : an error is detected
@par Use of this function is mandatory only for the MVE version of the FFT.
@par Use of this function is mandatory only for the Helium and Neon versions of the FFT.
Other versions can still initialize directly the data structure using
variables declared in arm_const_structs.h
*/
@@ -119,7 +119,7 @@ CFFTINIT_F64(1024)
- \ref ARM_MATH_SUCCESS : Operation successful
- \ref ARM_MATH_ARGUMENT_ERROR : an error is detected
@par Use of this function is mandatory only for the MVE version of the FFT.
@par Use of this function is mandatory only for the Helium and Neon versions of the FFT.
Other versions can still initialize directly the data structure using
variables declared in arm_const_structs.h
*/
@@ -132,7 +132,7 @@ CFFTINIT_F64(512)
- \ref ARM_MATH_SUCCESS : Operation successful
- \ref ARM_MATH_ARGUMENT_ERROR : an error is detected
@par Use of this function is mandatory only for the MVE version of the FFT.
@par Use of this function is mandatory only for the Helium and Neon versions of the FFT.
Other versions can still initialize directly the data structure using
variables declared in arm_const_structs.h
*/
@@ -145,7 +145,7 @@ CFFTINIT_F64(256)
- \ref ARM_MATH_SUCCESS : Operation successful
- \ref ARM_MATH_ARGUMENT_ERROR : an error is detected
@par Use of this function is mandatory only for the MVE version of the FFT.
@par Use of this function is mandatory only for the Helium and Neon versions of the FFT.
Other versions can still initialize directly the data structure using
variables declared in arm_const_structs.h
*/
@@ -158,7 +158,7 @@ CFFTINIT_F64(128)
- \ref ARM_MATH_SUCCESS : Operation successful
- \ref ARM_MATH_ARGUMENT_ERROR : an error is detected
@par Use of this function is mandatory only for the MVE version of the FFT.
@par Use of this function is mandatory only for the Helium and Neon versions of the FFT.
Other versions can still initialize directly the data structure using
variables declared in arm_const_structs.h
*/
@@ -171,7 +171,7 @@ CFFTINIT_F64(64)
- \ref ARM_MATH_SUCCESS : Operation successful
- \ref ARM_MATH_ARGUMENT_ERROR : an error is detected
@par Use of this function is mandatory only for the MVE version of the FFT.
@par Use of this function is mandatory only for the Helium and Neon versions of the FFT.
Other versions can still initialize directly the data structure using
variables declared in arm_const_structs.h
*/
@@ -184,7 +184,7 @@ CFFTINIT_F64(32)
- \ref ARM_MATH_SUCCESS : Operation successful
- \ref ARM_MATH_ARGUMENT_ERROR : an error is detected
@par Use of this function is mandatory only for the MVE version of the FFT.
@par Use of this function is mandatory only for the Helium and Neon versions of the FFT.
Other versions can still initialize directly the data structure using
variables declared in arm_const_structs.h
*/
@@ -198,7 +198,7 @@ CFFTINIT_F64(16)
- \ref ARM_MATH_SUCCESS : Operation successful
- \ref ARM_MATH_ARGUMENT_ERROR : an error is detected
@par Use of this function is mandatory only for the MVE version of the FFT.
@par Use of this function is mandatory only for the Helium and Neon versions of the FFT.
Other versions can still initialize directly the data structure using
variables declared in arm_const_structs.h
20 changes: 10 additions & 10 deletions Source/TransformFunctions/arm_cfft_init_q15.c
Original file line number Diff line number Diff line change
@@ -147,7 +147,7 @@ ARM_DSP_ATTRIBUTE arm_status arm_cfft_init_##LEN##_q15(arm_cfft_instance_q15 * S
- \ref ARM_MATH_SUCCESS : Operation successful
- \ref ARM_MATH_ARGUMENT_ERROR : an error is detected
@par Use of this function is mandatory only for the MVE version of the FFT.
@par Use of this function is mandatory only for the Helium and Neon versions of the FFT.
Other versions can still initialize directly the data structure using
variables declared in arm_const_structs.h
*/
@@ -160,7 +160,7 @@ CFFTINIT_Q15(4096,4096)
- \ref ARM_MATH_SUCCESS : Operation successful
- \ref ARM_MATH_ARGUMENT_ERROR : an error is detected
@par Use of this function is mandatory only for the MVE version of the FFT.
@par Use of this function is mandatory only for the Helium and Neon versions of the FFT.
Other versions can still initialize directly the data structure using
variables declared in arm_const_structs.h
*/
@@ -173,7 +173,7 @@ CFFTINIT_Q15(2048,1024)
- \ref ARM_MATH_SUCCESS : Operation successful
- \ref ARM_MATH_ARGUMENT_ERROR : an error is detected
@par Use of this function is mandatory only for the MVE version of the FFT.
@par Use of this function is mandatory only for the Helium and Neon versions of the FFT.
Other versions can still initialize directly the data structure using
variables declared in arm_const_structs.h
*/
@@ -186,7 +186,7 @@ CFFTINIT_Q15(1024,1024)
- \ref ARM_MATH_SUCCESS : Operation successful
- \ref ARM_MATH_ARGUMENT_ERROR : an error is detected
@par Use of this function is mandatory only for the MVE version of the FFT.
@par Use of this function is mandatory only for the Helium and Neon versions of the FFT.
Other versions can still initialize directly the data structure using
variables declared in arm_const_structs.h
*/
@@ -199,7 +199,7 @@ CFFTINIT_Q15(512,256)
- \ref ARM_MATH_SUCCESS : Operation successful
- \ref ARM_MATH_ARGUMENT_ERROR : an error is detected
@par Use of this function is mandatory only for the MVE version of the FFT.
@par Use of this function is mandatory only for the Helium and Neon versions of the FFT.
Other versions can still initialize directly the data structure using
variables declared in arm_const_structs.h
*/
@@ -212,7 +212,7 @@ CFFTINIT_Q15(256,256)
- \ref ARM_MATH_SUCCESS : Operation successful
- \ref ARM_MATH_ARGUMENT_ERROR : an error is detected
@par Use of this function is mandatory only for the MVE version of the FFT.
@par Use of this function is mandatory only for the Helium and Neon versions of the FFT.
Other versions can still initialize directly the data structure using
variables declared in arm_const_structs.h
*/
@@ -225,7 +225,7 @@ CFFTINIT_Q15(128,64)
- \ref ARM_MATH_SUCCESS : Operation successful
- \ref ARM_MATH_ARGUMENT_ERROR : an error is detected
@par Use of this function is mandatory only for the MVE version of the FFT.
@par Use of this function is mandatory only for the Helium and Neon versions of the FFT.
Other versions can still initialize directly the data structure using
variables declared in arm_const_structs.h
*/
@@ -238,7 +238,7 @@ CFFTINIT_Q15(64,64)
- \ref ARM_MATH_SUCCESS : Operation successful
- \ref ARM_MATH_ARGUMENT_ERROR : an error is detected
@par Use of this function is mandatory only for the MVE version of the FFT.
@par Use of this function is mandatory only for the Helium and Neon versions of the FFT.
Other versions can still initialize directly the data structure using
variables declared in arm_const_structs.h
*/
@@ -251,7 +251,7 @@ CFFTINIT_Q15(32,16)
- \ref ARM_MATH_SUCCESS : Operation successful
- \ref ARM_MATH_ARGUMENT_ERROR : an error is detected
@par Use of this function is mandatory only for the MVE version of the FFT.
@par Use of this function is mandatory only for the Helium and Neon versions of the FFT.
Other versions can still initialize directly the data structure using
variables declared in arm_const_structs.h
*/
@@ -265,7 +265,7 @@ CFFTINIT_Q15(16,16)
- \ref ARM_MATH_SUCCESS : Operation successful
- \ref ARM_MATH_ARGUMENT_ERROR : an error is detected
@par Use of this function is mandatory only for the MVE version of the FFT.
@par Use of this function is mandatory only for the Helium and Neon versions of the FFT.
Other versions can still initialize directly the data structure using
variables declared in arm_const_structs.h
20 changes: 10 additions & 10 deletions Source/TransformFunctions/arm_cfft_init_q31.c
Original file line number Diff line number Diff line change
@@ -148,7 +148,7 @@ ARM_DSP_ATTRIBUTE arm_status arm_cfft_init_##LEN##_q31(arm_cfft_instance_q31 * S
- \ref ARM_MATH_SUCCESS : Operation successful
- \ref ARM_MATH_ARGUMENT_ERROR : an error is detected
@par Use of this function is mandatory only for the MVE version of the FFT.
@par Use of this function is mandatory only for the Helium and Neon versions of the FFT.
Other versions can still initialize directly the data structure using
variables declared in arm_const_structs.h
*/
@@ -161,7 +161,7 @@ CFFTINIT_Q31(4096,4096)
- \ref ARM_MATH_SUCCESS : Operation successful
- \ref ARM_MATH_ARGUMENT_ERROR : an error is detected
@par Use of this function is mandatory only for the MVE version of the FFT.
@par Use of this function is mandatory only for the Helium and Neon versions of the FFT.
Other versions can still initialize directly the data structure using
variables declared in arm_const_structs.h
*/
@@ -174,7 +174,7 @@ CFFTINIT_Q31(2048,1024)
- \ref ARM_MATH_SUCCESS : Operation successful
- \ref ARM_MATH_ARGUMENT_ERROR : an error is detected
@par Use of this function is mandatory only for the MVE version of the FFT.
@par Use of this function is mandatory only for the Helium and Neon versions of the FFT.
Other versions can still initialize directly the data structure using
variables declared in arm_const_structs.h
*/
@@ -187,7 +187,7 @@ CFFTINIT_Q31(1024,1024)
- \ref ARM_MATH_SUCCESS : Operation successful
- \ref ARM_MATH_ARGUMENT_ERROR : an error is detected
@par Use of this function is mandatory only for the MVE version of the FFT.
@par Use of this function is mandatory only for the Helium and Neon versions of the FFT.
Other versions can still initialize directly the data structure using
variables declared in arm_const_structs.h
*/
@@ -200,7 +200,7 @@ CFFTINIT_Q31(512,256)
- \ref ARM_MATH_SUCCESS : Operation successful
- \ref ARM_MATH_ARGUMENT_ERROR : an error is detected
@par Use of this function is mandatory only for the MVE version of the FFT.
@par Use of this function is mandatory only for the Helium and Neon versions of the FFT.
Other versions can still initialize directly the data structure using
variables declared in arm_const_structs.h
*/
@@ -213,7 +213,7 @@ CFFTINIT_Q31(256,256)
- \ref ARM_MATH_SUCCESS : Operation successful
- \ref ARM_MATH_ARGUMENT_ERROR : an error is detected
@par Use of this function is mandatory only for the MVE version of the FFT.
@par Use of this function is mandatory only for the Helium and Neon versions of the FFT.
Other versions can still initialize directly the data structure using
variables declared in arm_const_structs.h
*/
@@ -226,7 +226,7 @@ CFFTINIT_Q31(128,64)
- \ref ARM_MATH_SUCCESS : Operation successful
- \ref ARM_MATH_ARGUMENT_ERROR : an error is detected
@par Use of this function is mandatory only for the MVE version of the FFT.
@par Use of this function is mandatory only for the Helium and Neon versions of the FFT.
Other versions can still initialize directly the data structure using
variables declared in arm_const_structs.h
*/
@@ -239,7 +239,7 @@ CFFTINIT_Q31(64,64)
- \ref ARM_MATH_SUCCESS : Operation successful
- \ref ARM_MATH_ARGUMENT_ERROR : an error is detected
@par Use of this function is mandatory only for the MVE version of the FFT.
@par Use of this function is mandatory only for the Helium and Neon versions of the FFT.
Other versions can still initialize directly the data structure using
variables declared in arm_const_structs.h
*/
@@ -252,7 +252,7 @@ CFFTINIT_Q31(32,16)
- \ref ARM_MATH_SUCCESS : Operation successful
- \ref ARM_MATH_ARGUMENT_ERROR : an error is detected
@par Use of this function is mandatory only for the MVE version of the FFT.
@par Use of this function is mandatory only for the Helium and Neon versions of the FFT.
Other versions can still initialize directly the data structure using
variables declared in arm_const_structs.h
*/
@@ -266,7 +266,7 @@ CFFTINIT_Q31(16,16)
- \ref ARM_MATH_SUCCESS : Operation successful
- \ref ARM_MATH_ARGUMENT_ERROR : an error is detected
@par Use of this function is mandatory only for the MVE version of the FFT.
@par Use of this function is mandatory only for the Helium and Neon versions of the FFT.
Other versions can still initialize directly the data structure using
variables declared in arm_const_structs.h
24 changes: 21 additions & 3 deletions Source/TransformFunctions/arm_cfft_q15.c
Original file line number Diff line number Diff line change
@@ -613,7 +613,25 @@ ARM_DSP_ATTRIBUTE void arm_cfft_radix4by2_inverse_q15(
- value = 0: disables bit reversal of output
- value = 1: enables bit reversal of output
@par Neon version
@par Input and Output formats for CFFT Q15
| CFFT Size | Input Format | Output Format | Number of bits to upscale |
| ---------: | ------------: | -------------: | ------------------------: |
| 16 | 1.15 | 5.11 | 4
| 64 | 1.15 | 7.9 | 6
| 256 | 1.15 | 9.7 | 8
| 1024 | 1.15 | 11.5 | 10
@par Input and Output formats for CIFFT Q15
| CIFFT Size | Input Format | Output Format | Number of bits to upscale |
| ----------: | ------------: | -------------: | ------------------------: |
| 16 | 1.15 | 5.11 | 0
| 64 | 1.15 | 7.9 | 0
| 256 | 1.15 | 9.7 | 0
| 1024 | 1.15 | 11.5 | 0
@par Neon version
The neon version has a different API.
The input and output buffers must be
different.
@@ -628,8 +646,8 @@ ARM_DSP_ATTRIBUTE void arm_cfft_radix4by2_inverse_q15(
const arm_cfft_instance_q15 * S,
const q15_t * src,
q15_t * dst,
uint8_t ifftFlag,
q15_t *buffer)
q15_t *buffer,
uint8_t ifftFlag)
@endcode
*/
24 changes: 22 additions & 2 deletions Source/TransformFunctions/arm_cfft_q31.c
Original file line number Diff line number Diff line change
@@ -644,6 +644,25 @@ ARM_DSP_ATTRIBUTE void arm_cfft_radix4by2_inverse_q31(
- value = 0: disables bit reversal of output
- value = 1: enables bit reversal of output
@par Input and Output formats for CFFT Q31
| CFFT Size | Input Format | Output Format | Number of bits to upscale |
| ---------: | ------------: | -------------: | ------------------------: |
| 16 | 1.31 | 5.27 | 4
| 64 | 1.31 | 7.25 | 6
| 256 | 1.31 | 9.23 | 8
| 1024 | 1.31 | 11.21 | 10
@par Input and Output formats for CIFFT Q31
| CIFFT Size | Input Format | Output Format | Number of bits to upscale |
| ----------: | ------------: | -------------: | ------------------------: |
| 16 | 1.31 | 5.27 | 0
| 64 | 1.31 | 7.25 | 0
| 256 | 1.31 | 9.23 | 0
| 1024 | 1.31 | 11.21 | 0
@par Neon version
The neon version has a different API.
The input and output buffers must be
@@ -659,8 +678,9 @@ ARM_DSP_ATTRIBUTE void arm_cfft_radix4by2_inverse_q31(
const arm_cfft_instance_q31 * S,
const q31_t * src,
q31_t * dst,
uint8_t ifftFlag,
q31_t *buffer)
q31_t *buffer,
uint8_t ifftFlag
)
@endcode
*/