1 /******************************************************************************
2  * @file     transform_functions_f16.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-2020 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 #ifndef _TRANSFORM_FUNCTIONS_F16_H_
28 #define _TRANSFORM_FUNCTIONS_F16_H_
29 
30 #include "arm_math_types_f16.h"
31 #include "arm_math_memory.h"
32 
33 #include "dsp/none.h"
34 #include "dsp/utils.h"
35 
36 #ifdef   __cplusplus
37 extern "C"
38 {
39 #endif
40 
41 
42 
43 #if defined(ARM_FLOAT16_SUPPORTED)
44 
45 
46   /**
47    * @brief Instance structure for the floating-point CFFT/CIFFT function.
48    */
49   typedef struct
50   {
51           uint16_t fftLen;                   /**< length of the FFT. */
52           uint8_t ifftFlag;                  /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */
53           uint8_t bitReverseFlag;            /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */
54     const float16_t *pTwiddle;               /**< points to the Twiddle factor table. */
55     const uint16_t *pBitRevTable;            /**< points to the bit reversal table. */
56           uint16_t twidCoefModifier;         /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */
57           uint16_t bitRevFactor;             /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */
58           float16_t onebyfftLen;             /**< value of 1/fftLen. */
59   } arm_cfft_radix2_instance_f16;
60 
61   /**
62    * @brief Instance structure for the floating-point CFFT/CIFFT function.
63    */
64   typedef struct
65   {
66           uint16_t fftLen;                   /**< length of the FFT. */
67           uint8_t ifftFlag;                  /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */
68           uint8_t bitReverseFlag;            /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */
69     const float16_t *pTwiddle;               /**< points to the Twiddle factor table. */
70     const uint16_t *pBitRevTable;            /**< points to the bit reversal table. */
71           uint16_t twidCoefModifier;         /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */
72           uint16_t bitRevFactor;             /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */
73           float16_t onebyfftLen;             /**< value of 1/fftLen. */
74   } arm_cfft_radix4_instance_f16;
75 
76   /**
77    * @brief Instance structure for the floating-point CFFT/CIFFT function.
78    */
79   typedef struct
80   {
81           uint16_t fftLen;                   /**< length of the FFT. */
82     const float16_t *pTwiddle;         /**< points to the Twiddle factor table. */
83     const uint16_t *pBitRevTable;      /**< points to the bit reversal table. */
84           uint16_t bitRevLength;             /**< bit reversal table length. */
85 #if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE)
86    const uint32_t *rearranged_twiddle_tab_stride1_arr;        /**< Per stage reordered twiddle pointer (offset 1) */                                                       \
87    const uint32_t *rearranged_twiddle_tab_stride2_arr;        /**< Per stage reordered twiddle pointer (offset 2) */                                                       \
88    const uint32_t *rearranged_twiddle_tab_stride3_arr;        /**< Per stage reordered twiddle pointer (offset 3) */                                                       \
89    const float16_t *rearranged_twiddle_stride1; /**< reordered twiddle offset 1 storage */                                                                   \
90    const float16_t *rearranged_twiddle_stride2; /**< reordered twiddle offset 2 storage */                                                                   \
91    const float16_t *rearranged_twiddle_stride3;
92 #endif
93   } arm_cfft_instance_f16;
94 
95 
96   arm_status arm_cfft_init_f16(
97   arm_cfft_instance_f16 * S,
98   uint16_t fftLen);
99 
100   void arm_cfft_f16(
101   const arm_cfft_instance_f16 * S,
102         float16_t * p1,
103         uint8_t ifftFlag,
104         uint8_t bitReverseFlag);
105 
106   /**
107    * @brief Instance structure for the floating-point RFFT/RIFFT function.
108    */
109 typedef struct
110   {
111           arm_cfft_instance_f16 Sint;      /**< Internal CFFT structure. */
112           uint16_t fftLenRFFT;             /**< length of the real sequence */
113     const float16_t * pTwiddleRFFT;        /**< Twiddle factors real stage  */
114   } arm_rfft_fast_instance_f16 ;
115 
116 arm_status arm_rfft_fast_init_f16 (
117          arm_rfft_fast_instance_f16 * S,
118          uint16_t fftLen);
119 
120 
121   void arm_rfft_fast_f16(
122         const arm_rfft_fast_instance_f16 * S,
123         float16_t * p, float16_t * pOut,
124         uint8_t ifftFlag);
125 
126 /* Deprecated */
127   arm_status arm_cfft_radix4_init_f16(
128         arm_cfft_radix4_instance_f16 * S,
129         uint16_t fftLen,
130         uint8_t ifftFlag,
131         uint8_t bitReverseFlag);
132 
133 /* Deprecated */
134   void arm_cfft_radix4_f16(
135   const arm_cfft_radix4_instance_f16 * S,
136         float16_t * pSrc);
137 
138 
139 /* Deprecated */
140   arm_status arm_cfft_radix2_init_f16(
141         arm_cfft_radix2_instance_f16 * S,
142         uint16_t fftLen,
143         uint8_t ifftFlag,
144         uint8_t bitReverseFlag);
145 
146 /* Deprecated */
147   void arm_cfft_radix2_f16(
148   const arm_cfft_radix2_instance_f16 * S,
149         float16_t * pSrc);
150 
151 #endif /* defined(ARM_FLOAT16_SUPPORTED)*/
152 
153 #ifdef   __cplusplus
154 }
155 #endif
156 
157 #endif /* ifndef _TRANSFORM_FUNCTIONS_F16_H_ */
158