mbed-os 6.10 versione
cmsis_dsp/TransformFunctions/arm_cfft_radix4_f32.c@2:da51fb522205, 2013-05-30 (annotated)
- Committer:
- emilmont
- Date:
- Thu May 30 17:10:11 2013 +0100
- Revision:
- 2:da51fb522205
- Parent:
- 1:fdd22bb7aa52
- Child:
- 3:7a284390b0ce
Keep "cmsis-dsp" module in synch with its source
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
emilmont | 1:fdd22bb7aa52 | 1 | /* ---------------------------------------------------------------------- |
emilmont | 1:fdd22bb7aa52 | 2 | * Copyright (C) 2010 ARM Limited. All rights reserved. |
emilmont | 1:fdd22bb7aa52 | 3 | * |
emilmont | 1:fdd22bb7aa52 | 4 | * $Date: 15. February 2012 |
emilmont | 2:da51fb522205 | 5 | * $Revision: V1.1.0 |
emilmont | 1:fdd22bb7aa52 | 6 | * |
emilmont | 2:da51fb522205 | 7 | * Project: CMSIS DSP Library |
emilmont | 2:da51fb522205 | 8 | * Title: arm_cfft_radix4_f32.c |
emilmont | 1:fdd22bb7aa52 | 9 | * |
emilmont | 2:da51fb522205 | 10 | * Description: Radix-4 Decimation in Frequency CFFT & CIFFT Floating point processing function |
emilmont | 1:fdd22bb7aa52 | 11 | * |
emilmont | 1:fdd22bb7aa52 | 12 | * |
emilmont | 1:fdd22bb7aa52 | 13 | * Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 |
emilmont | 1:fdd22bb7aa52 | 14 | * |
emilmont | 1:fdd22bb7aa52 | 15 | * Version 1.1.0 2012/02/15 |
emilmont | 1:fdd22bb7aa52 | 16 | * Updated with more optimizations, bug fixes and minor API changes. |
emilmont | 1:fdd22bb7aa52 | 17 | * |
emilmont | 1:fdd22bb7aa52 | 18 | * Version 1.0.10 2011/7/15 |
emilmont | 1:fdd22bb7aa52 | 19 | * Big Endian support added and Merged M0 and M3/M4 Source code. |
emilmont | 1:fdd22bb7aa52 | 20 | * |
emilmont | 1:fdd22bb7aa52 | 21 | * Version 1.0.3 2010/11/29 |
emilmont | 1:fdd22bb7aa52 | 22 | * Re-organized the CMSIS folders and updated documentation. |
emilmont | 1:fdd22bb7aa52 | 23 | * |
emilmont | 1:fdd22bb7aa52 | 24 | * Version 1.0.2 2010/11/11 |
emilmont | 1:fdd22bb7aa52 | 25 | * Documentation updated. |
emilmont | 1:fdd22bb7aa52 | 26 | * |
emilmont | 1:fdd22bb7aa52 | 27 | * Version 1.0.1 2010/10/05 |
emilmont | 1:fdd22bb7aa52 | 28 | * Production release and review comments incorporated. |
emilmont | 1:fdd22bb7aa52 | 29 | * |
emilmont | 1:fdd22bb7aa52 | 30 | * Version 1.0.0 2010/09/20 |
emilmont | 1:fdd22bb7aa52 | 31 | * Production release and review comments incorporated. |
emilmont | 1:fdd22bb7aa52 | 32 | * |
emilmont | 1:fdd22bb7aa52 | 33 | * Version 0.0.5 2010/04/26 |
emilmont | 2:da51fb522205 | 34 | * incorporated review comments and updated with latest CMSIS layer |
emilmont | 1:fdd22bb7aa52 | 35 | * |
emilmont | 1:fdd22bb7aa52 | 36 | * Version 0.0.3 2010/03/10 |
emilmont | 1:fdd22bb7aa52 | 37 | * Initial version |
emilmont | 1:fdd22bb7aa52 | 38 | * -------------------------------------------------------------------- */ |
emilmont | 1:fdd22bb7aa52 | 39 | |
emilmont | 1:fdd22bb7aa52 | 40 | #include "arm_math.h" |
emilmont | 1:fdd22bb7aa52 | 41 | |
emilmont | 1:fdd22bb7aa52 | 42 | /** |
emilmont | 1:fdd22bb7aa52 | 43 | * @ingroup groupTransforms |
emilmont | 1:fdd22bb7aa52 | 44 | */ |
emilmont | 1:fdd22bb7aa52 | 45 | |
emilmont | 1:fdd22bb7aa52 | 46 | /** |
emilmont | 1:fdd22bb7aa52 | 47 | * @defgroup Radix4_CFFT_CIFFT Radix-4 Complex FFT Functions |
emilmont | 1:fdd22bb7aa52 | 48 | * |
emilmont | 1:fdd22bb7aa52 | 49 | * \par |
emilmont | 1:fdd22bb7aa52 | 50 | * Complex Fast Fourier Transform(CFFT) and Complex Inverse Fast Fourier Transform(CIFFT) is an efficient algorithm to compute Discrete Fourier Transform(DFT) and Inverse Discrete Fourier Transform(IDFT). |
emilmont | 1:fdd22bb7aa52 | 51 | * Computational complexity of CFFT reduces drastically when compared to DFT. |
emilmont | 1:fdd22bb7aa52 | 52 | * \par |
emilmont | 1:fdd22bb7aa52 | 53 | * This set of functions implements CFFT/CIFFT |
emilmont | 1:fdd22bb7aa52 | 54 | * for Q15, Q31, and floating-point data types. The functions operates on in-place buffer which uses same buffer for input and output. |
emilmont | 1:fdd22bb7aa52 | 55 | * Complex input is stored in input buffer in an interleaved fashion. |
emilmont | 1:fdd22bb7aa52 | 56 | * |
emilmont | 1:fdd22bb7aa52 | 57 | * \par |
emilmont | 1:fdd22bb7aa52 | 58 | * The functions operate on blocks of input and output data and each call to the function processes |
emilmont | 1:fdd22bb7aa52 | 59 | * <code>2*fftLen</code> samples through the transform. <code>pSrc</code> points to In-place arrays containing <code>2*fftLen</code> values. |
emilmont | 1:fdd22bb7aa52 | 60 | * \par |
emilmont | 1:fdd22bb7aa52 | 61 | * The <code>pSrc</code> points to the array of in-place buffer of size <code>2*fftLen</code> and inputs and outputs are stored in an interleaved fashion as shown below. |
emilmont | 1:fdd22bb7aa52 | 62 | * <pre> {real[0], imag[0], real[1], imag[1],..} </pre> |
emilmont | 1:fdd22bb7aa52 | 63 | * |
emilmont | 1:fdd22bb7aa52 | 64 | * \par Lengths supported by the transform: |
emilmont | 1:fdd22bb7aa52 | 65 | * \par |
emilmont | 1:fdd22bb7aa52 | 66 | * Internally, the function utilize a radix-4 decimation in frequency(DIF) algorithm |
emilmont | 1:fdd22bb7aa52 | 67 | * and the size of the FFT supported are of the lengths [16, 64, 256, 1024]. |
emilmont | 1:fdd22bb7aa52 | 68 | * |
emilmont | 1:fdd22bb7aa52 | 69 | * |
emilmont | 1:fdd22bb7aa52 | 70 | * \par Algorithm: |
emilmont | 1:fdd22bb7aa52 | 71 | * |
emilmont | 1:fdd22bb7aa52 | 72 | * <b>Complex Fast Fourier Transform:</b> |
emilmont | 1:fdd22bb7aa52 | 73 | * \par |
emilmont | 1:fdd22bb7aa52 | 74 | * Input real and imaginary data: |
emilmont | 1:fdd22bb7aa52 | 75 | * <pre> |
emilmont | 1:fdd22bb7aa52 | 76 | * x(n) = xa + j * ya |
emilmont | 1:fdd22bb7aa52 | 77 | * x(n+N/4 ) = xb + j * yb |
emilmont | 1:fdd22bb7aa52 | 78 | * x(n+N/2 ) = xc + j * yc |
emilmont | 1:fdd22bb7aa52 | 79 | * x(n+3N 4) = xd + j * yd |
emilmont | 1:fdd22bb7aa52 | 80 | * </pre> |
emilmont | 1:fdd22bb7aa52 | 81 | * where N is length of FFT |
emilmont | 1:fdd22bb7aa52 | 82 | * \par |
emilmont | 1:fdd22bb7aa52 | 83 | * Output real and imaginary data: |
emilmont | 1:fdd22bb7aa52 | 84 | * <pre> |
emilmont | 1:fdd22bb7aa52 | 85 | * X(4r) = xa'+ j * ya' |
emilmont | 1:fdd22bb7aa52 | 86 | * X(4r+1) = xb'+ j * yb' |
emilmont | 1:fdd22bb7aa52 | 87 | * X(4r+2) = xc'+ j * yc' |
emilmont | 1:fdd22bb7aa52 | 88 | * X(4r+3) = xd'+ j * yd' |
emilmont | 1:fdd22bb7aa52 | 89 | * </pre> |
emilmont | 1:fdd22bb7aa52 | 90 | * \par |
emilmont | 1:fdd22bb7aa52 | 91 | * Twiddle factors for radix-4 FFT: |
emilmont | 1:fdd22bb7aa52 | 92 | * <pre> |
emilmont | 1:fdd22bb7aa52 | 93 | * Wn = co1 + j * (- si1) |
emilmont | 1:fdd22bb7aa52 | 94 | * W2n = co2 + j * (- si2) |
emilmont | 1:fdd22bb7aa52 | 95 | * W3n = co3 + j * (- si3) |
emilmont | 1:fdd22bb7aa52 | 96 | * </pre> |
emilmont | 1:fdd22bb7aa52 | 97 | * |
emilmont | 1:fdd22bb7aa52 | 98 | * \par |
emilmont | 1:fdd22bb7aa52 | 99 | * \image html CFFT.gif "Radix-4 Decimation-in Frequency Complex Fast Fourier Transform" |
emilmont | 1:fdd22bb7aa52 | 100 | * |
emilmont | 1:fdd22bb7aa52 | 101 | * \par |
emilmont | 1:fdd22bb7aa52 | 102 | * Output from Radix-4 CFFT Results in Digit reversal order. Interchange middle two branches of every butterfly results in Bit reversed output. |
emilmont | 1:fdd22bb7aa52 | 103 | * \par |
emilmont | 1:fdd22bb7aa52 | 104 | * <b> Butterfly CFFT equations:</b> |
emilmont | 1:fdd22bb7aa52 | 105 | * <pre> |
emilmont | 1:fdd22bb7aa52 | 106 | * xa' = xa + xb + xc + xd |
emilmont | 1:fdd22bb7aa52 | 107 | * ya' = ya + yb + yc + yd |
emilmont | 1:fdd22bb7aa52 | 108 | * xc' = (xa+yb-xc-yd)* co1 + (ya-xb-yc+xd)* (si1) |
emilmont | 1:fdd22bb7aa52 | 109 | * yc' = (ya-xb-yc+xd)* co1 - (xa+yb-xc-yd)* (si1) |
emilmont | 1:fdd22bb7aa52 | 110 | * xb' = (xa-xb+xc-xd)* co2 + (ya-yb+yc-yd)* (si2) |
emilmont | 1:fdd22bb7aa52 | 111 | * yb' = (ya-yb+yc-yd)* co2 - (xa-xb+xc-xd)* (si2) |
emilmont | 1:fdd22bb7aa52 | 112 | * xd' = (xa-yb-xc+yd)* co3 + (ya+xb-yc-xd)* (si3) |
emilmont | 1:fdd22bb7aa52 | 113 | * yd' = (ya+xb-yc-xd)* co3 - (xa-yb-xc+yd)* (si3) |
emilmont | 1:fdd22bb7aa52 | 114 | * </pre> |
emilmont | 1:fdd22bb7aa52 | 115 | * |
emilmont | 1:fdd22bb7aa52 | 116 | * |
emilmont | 1:fdd22bb7aa52 | 117 | * <b>Complex Inverse Fast Fourier Transform:</b> |
emilmont | 1:fdd22bb7aa52 | 118 | * \par |
emilmont | 1:fdd22bb7aa52 | 119 | * CIFFT uses same twiddle factor table as CFFT with modifications in the design equation as shown below. |
emilmont | 1:fdd22bb7aa52 | 120 | * |
emilmont | 1:fdd22bb7aa52 | 121 | * \par |
emilmont | 1:fdd22bb7aa52 | 122 | * <b> Modified Butterfly CIFFT equations:</b> |
emilmont | 1:fdd22bb7aa52 | 123 | * <pre> |
emilmont | 1:fdd22bb7aa52 | 124 | * xa' = xa + xb + xc + xd |
emilmont | 1:fdd22bb7aa52 | 125 | * ya' = ya + yb + yc + yd |
emilmont | 1:fdd22bb7aa52 | 126 | * xc' = (xa-yb-xc+yd)* co1 - (ya+xb-yc-xd)* (si1) |
emilmont | 1:fdd22bb7aa52 | 127 | * yc' = (ya+xb-yc-xd)* co1 + (xa-yb-xc+yd)* (si1) |
emilmont | 1:fdd22bb7aa52 | 128 | * xb' = (xa-xb+xc-xd)* co2 - (ya-yb+yc-yd)* (si2) |
emilmont | 1:fdd22bb7aa52 | 129 | * yb' = (ya-yb+yc-yd)* co2 + (xa-xb+xc-xd)* (si2) |
emilmont | 1:fdd22bb7aa52 | 130 | * xd' = (xa+yb-xc-yd)* co3 - (ya-xb-yc+xd)* (si3) |
emilmont | 1:fdd22bb7aa52 | 131 | * yd' = (ya-xb-yc+xd)* co3 + (xa+yb-xc-yd)* (si3) |
emilmont | 1:fdd22bb7aa52 | 132 | * </pre> |
emilmont | 1:fdd22bb7aa52 | 133 | * |
emilmont | 1:fdd22bb7aa52 | 134 | * \par Instance Structure |
emilmont | 1:fdd22bb7aa52 | 135 | * A separate instance structure must be defined for each Instance but the twiddle factors and bit reversal tables can be reused. |
emilmont | 1:fdd22bb7aa52 | 136 | * There are separate instance structure declarations for each of the 3 supported data types. |
emilmont | 1:fdd22bb7aa52 | 137 | * |
emilmont | 1:fdd22bb7aa52 | 138 | * \par Initialization Functions |
emilmont | 1:fdd22bb7aa52 | 139 | * There is also an associated initialization function for each data type. |
emilmont | 1:fdd22bb7aa52 | 140 | * The initialization function performs the following operations: |
emilmont | 1:fdd22bb7aa52 | 141 | * - Sets the values of the internal structure fields. |
emilmont | 1:fdd22bb7aa52 | 142 | * - Initializes twiddle factor table and bit reversal table pointers |
emilmont | 1:fdd22bb7aa52 | 143 | * \par |
emilmont | 1:fdd22bb7aa52 | 144 | * Use of the initialization function is optional. |
emilmont | 1:fdd22bb7aa52 | 145 | * However, if the initialization function is used, then the instance structure cannot be placed into a const data section. |
emilmont | 1:fdd22bb7aa52 | 146 | * To place an instance structure into a const data section, the instance structure must be manually initialized. |
emilmont | 1:fdd22bb7aa52 | 147 | * Manually initialize the instance structure as follows: |
emilmont | 1:fdd22bb7aa52 | 148 | * <pre> |
emilmont | 1:fdd22bb7aa52 | 149 | *arm_cfft_radix4_instance_f32 S = {fftLen, ifftFlag, bitReverseFlag, pTwiddle, pBitRevTable, twidCoefModifier, bitRevFactor, onebyfftLen}; |
emilmont | 1:fdd22bb7aa52 | 150 | *arm_cfft_radix4_instance_q31 S = {fftLen, ifftFlag, bitReverseFlag, pTwiddle, pBitRevTable, twidCoefModifier, bitRevFactor}; |
emilmont | 1:fdd22bb7aa52 | 151 | *arm_cfft_radix4_instance_q15 S = {fftLen, ifftFlag, bitReverseFlag, pTwiddle, pBitRevTable, twidCoefModifier, bitRevFactor}; |
emilmont | 1:fdd22bb7aa52 | 152 | * </pre> |
emilmont | 1:fdd22bb7aa52 | 153 | * \par |
emilmont | 1:fdd22bb7aa52 | 154 | * where <code>fftLen</code> length of CFFT/CIFFT; <code>ifftFlag</code> Flag for selection of CFFT or CIFFT(Set ifftFlag to calculate CIFFT otherwise calculates CFFT); |
emilmont | 1:fdd22bb7aa52 | 155 | * <code>bitReverseFlag</code> Flag for selection of output order(Set bitReverseFlag to output in normal order otherwise output in bit reversed order); |
emilmont | 1:fdd22bb7aa52 | 156 | * <code>pTwiddle</code>points to array of twiddle coefficients; <code>pBitRevTable</code> points to the array of bit reversal table. |
emilmont | 1:fdd22bb7aa52 | 157 | * <code>twidCoefModifier</code> modifier for twiddle factor table which supports all FFT lengths with same table; |
emilmont | 1:fdd22bb7aa52 | 158 | * <code>pBitRevTable</code> modifier for bit reversal table which supports all FFT lengths with same table. |
emilmont | 1:fdd22bb7aa52 | 159 | * <code>onebyfftLen</code> value of 1/fftLen to calculate CIFFT; |
emilmont | 1:fdd22bb7aa52 | 160 | * |
emilmont | 1:fdd22bb7aa52 | 161 | * \par Fixed-Point Behavior |
emilmont | 1:fdd22bb7aa52 | 162 | * Care must be taken when using the fixed-point versions of the CFFT/CIFFT function. |
emilmont | 1:fdd22bb7aa52 | 163 | * Refer to the function specific documentation below for usage guidelines. |
emilmont | 1:fdd22bb7aa52 | 164 | */ |
emilmont | 1:fdd22bb7aa52 | 165 | |
emilmont | 1:fdd22bb7aa52 | 166 | |
emilmont | 1:fdd22bb7aa52 | 167 | /** |
emilmont | 1:fdd22bb7aa52 | 168 | * @addtogroup Radix4_CFFT_CIFFT |
emilmont | 1:fdd22bb7aa52 | 169 | * @{ |
emilmont | 1:fdd22bb7aa52 | 170 | */ |
emilmont | 1:fdd22bb7aa52 | 171 | |
emilmont | 1:fdd22bb7aa52 | 172 | /** |
emilmont | 1:fdd22bb7aa52 | 173 | * @details |
emilmont | 1:fdd22bb7aa52 | 174 | * @brief Processing function for the floating-point Radix-4 CFFT/CIFFT. |
emilmont | 1:fdd22bb7aa52 | 175 | * @param[in] *S points to an instance of the floating-point Radix-4 CFFT/CIFFT structure. |
emilmont | 1:fdd22bb7aa52 | 176 | * @param[in, out] *pSrc points to the complex data buffer of size <code>2*fftLen</code>. Processing occurs in-place. |
emilmont | 1:fdd22bb7aa52 | 177 | * @return none. |
emilmont | 1:fdd22bb7aa52 | 178 | */ |
emilmont | 1:fdd22bb7aa52 | 179 | |
emilmont | 1:fdd22bb7aa52 | 180 | void arm_cfft_radix4_f32( |
emilmont | 1:fdd22bb7aa52 | 181 | const arm_cfft_radix4_instance_f32 * S, |
emilmont | 1:fdd22bb7aa52 | 182 | float32_t * pSrc) |
emilmont | 1:fdd22bb7aa52 | 183 | { |
emilmont | 1:fdd22bb7aa52 | 184 | |
emilmont | 1:fdd22bb7aa52 | 185 | if(S->ifftFlag == 1u) |
emilmont | 1:fdd22bb7aa52 | 186 | { |
emilmont | 1:fdd22bb7aa52 | 187 | /* Complex IFFT radix-4 */ |
emilmont | 1:fdd22bb7aa52 | 188 | arm_radix4_butterfly_inverse_f32(pSrc, S->fftLen, S->pTwiddle, |
emilmont | 1:fdd22bb7aa52 | 189 | S->twidCoefModifier, S->onebyfftLen); |
emilmont | 1:fdd22bb7aa52 | 190 | } |
emilmont | 1:fdd22bb7aa52 | 191 | else |
emilmont | 1:fdd22bb7aa52 | 192 | { |
emilmont | 1:fdd22bb7aa52 | 193 | /* Complex FFT radix-4 */ |
emilmont | 1:fdd22bb7aa52 | 194 | arm_radix4_butterfly_f32(pSrc, S->fftLen, S->pTwiddle, |
emilmont | 1:fdd22bb7aa52 | 195 | S->twidCoefModifier); |
emilmont | 1:fdd22bb7aa52 | 196 | } |
emilmont | 1:fdd22bb7aa52 | 197 | |
emilmont | 1:fdd22bb7aa52 | 198 | if(S->bitReverseFlag == 1u) |
emilmont | 1:fdd22bb7aa52 | 199 | { |
emilmont | 1:fdd22bb7aa52 | 200 | /* Bit Reversal */ |
emilmont | 1:fdd22bb7aa52 | 201 | arm_bitreversal_f32(pSrc, S->fftLen, S->bitRevFactor, S->pBitRevTable); |
emilmont | 1:fdd22bb7aa52 | 202 | } |
emilmont | 1:fdd22bb7aa52 | 203 | |
emilmont | 1:fdd22bb7aa52 | 204 | } |
emilmont | 1:fdd22bb7aa52 | 205 | |
emilmont | 1:fdd22bb7aa52 | 206 | |
emilmont | 1:fdd22bb7aa52 | 207 | /** |
emilmont | 1:fdd22bb7aa52 | 208 | * @} end of Radix4_CFFT_CIFFT group |
emilmont | 1:fdd22bb7aa52 | 209 | */ |
emilmont | 1:fdd22bb7aa52 | 210 | |
emilmont | 1:fdd22bb7aa52 | 211 | |
emilmont | 1:fdd22bb7aa52 | 212 | /* ---------------------------------------------------------------------- |
emilmont | 1:fdd22bb7aa52 | 213 | ** Internal helper function used by the FFTs |
emilmont | 1:fdd22bb7aa52 | 214 | ** ------------------------------------------------------------------- */ |
emilmont | 1:fdd22bb7aa52 | 215 | |
emilmont | 1:fdd22bb7aa52 | 216 | /* |
emilmont | 1:fdd22bb7aa52 | 217 | * @brief Core function for the floating-point CFFT butterfly process. |
emilmont | 1:fdd22bb7aa52 | 218 | * @param[in, out] *pSrc points to the in-place buffer of floating-point data type. |
emilmont | 1:fdd22bb7aa52 | 219 | * @param[in] fftLen length of the FFT. |
emilmont | 1:fdd22bb7aa52 | 220 | * @param[in] *pCoef points to the twiddle coefficient buffer. |
emilmont | 1:fdd22bb7aa52 | 221 | * @param[in] twidCoefModifier twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. |
emilmont | 1:fdd22bb7aa52 | 222 | * @return none. |
emilmont | 1:fdd22bb7aa52 | 223 | */ |
emilmont | 1:fdd22bb7aa52 | 224 | |
emilmont | 1:fdd22bb7aa52 | 225 | void arm_radix4_butterfly_f32( |
emilmont | 1:fdd22bb7aa52 | 226 | float32_t * pSrc, |
emilmont | 1:fdd22bb7aa52 | 227 | uint16_t fftLen, |
emilmont | 1:fdd22bb7aa52 | 228 | float32_t * pCoef, |
emilmont | 1:fdd22bb7aa52 | 229 | uint16_t twidCoefModifier) |
emilmont | 1:fdd22bb7aa52 | 230 | { |
emilmont | 1:fdd22bb7aa52 | 231 | |
emilmont | 1:fdd22bb7aa52 | 232 | float32_t co1, co2, co3, si1, si2, si3; |
emilmont | 1:fdd22bb7aa52 | 233 | uint32_t ia1, ia2, ia3; |
emilmont | 1:fdd22bb7aa52 | 234 | uint32_t i0, i1, i2, i3; |
emilmont | 1:fdd22bb7aa52 | 235 | uint32_t n1, n2, j, k; |
emilmont | 1:fdd22bb7aa52 | 236 | |
emilmont | 1:fdd22bb7aa52 | 237 | #ifndef ARM_MATH_CM0 |
emilmont | 1:fdd22bb7aa52 | 238 | |
emilmont | 1:fdd22bb7aa52 | 239 | /* Run the below code for Cortex-M4 and Cortex-M3 */ |
emilmont | 1:fdd22bb7aa52 | 240 | |
emilmont | 1:fdd22bb7aa52 | 241 | float32_t xaIn, yaIn, xbIn, ybIn, xcIn, ycIn, xdIn, ydIn; |
emilmont | 1:fdd22bb7aa52 | 242 | float32_t Xaplusc, Xbplusd, Yaplusc, Ybplusd, Xaminusc, Xbminusd, Yaminusc, |
emilmont | 1:fdd22bb7aa52 | 243 | Ybminusd; |
emilmont | 1:fdd22bb7aa52 | 244 | float32_t Xb12C_out, Yb12C_out, Xc12C_out, Yc12C_out, Xd12C_out, Yd12C_out; |
emilmont | 1:fdd22bb7aa52 | 245 | float32_t Xb12_out, Yb12_out, Xc12_out, Yc12_out, Xd12_out, Yd12_out; |
emilmont | 1:fdd22bb7aa52 | 246 | float32_t *ptr1; |
emilmont | 1:fdd22bb7aa52 | 247 | |
emilmont | 1:fdd22bb7aa52 | 248 | /* Initializations for the first stage */ |
emilmont | 1:fdd22bb7aa52 | 249 | n2 = fftLen; |
emilmont | 1:fdd22bb7aa52 | 250 | n1 = n2; |
emilmont | 1:fdd22bb7aa52 | 251 | |
emilmont | 1:fdd22bb7aa52 | 252 | /* n2 = fftLen/4 */ |
emilmont | 1:fdd22bb7aa52 | 253 | n2 >>= 2u; |
emilmont | 1:fdd22bb7aa52 | 254 | i0 = 0u; |
emilmont | 1:fdd22bb7aa52 | 255 | ia1 = 0u; |
emilmont | 1:fdd22bb7aa52 | 256 | |
emilmont | 1:fdd22bb7aa52 | 257 | j = n2; |
emilmont | 1:fdd22bb7aa52 | 258 | |
emilmont | 1:fdd22bb7aa52 | 259 | /* Calculation of first stage */ |
emilmont | 1:fdd22bb7aa52 | 260 | do |
emilmont | 1:fdd22bb7aa52 | 261 | { |
emilmont | 1:fdd22bb7aa52 | 262 | /* index calculation for the input as, */ |
emilmont | 1:fdd22bb7aa52 | 263 | /* pSrc[i0 + 0], pSrc[i0 + fftLen/4], pSrc[i0 + fftLen/2], pSrc[i0 + 3fftLen/4] */ |
emilmont | 1:fdd22bb7aa52 | 264 | i1 = i0 + n2; |
emilmont | 1:fdd22bb7aa52 | 265 | i2 = i1 + n2; |
emilmont | 1:fdd22bb7aa52 | 266 | i3 = i2 + n2; |
emilmont | 1:fdd22bb7aa52 | 267 | |
emilmont | 1:fdd22bb7aa52 | 268 | xaIn = pSrc[(2u * i0)]; |
emilmont | 1:fdd22bb7aa52 | 269 | yaIn = pSrc[(2u * i0) + 1u]; |
emilmont | 1:fdd22bb7aa52 | 270 | |
emilmont | 1:fdd22bb7aa52 | 271 | xcIn = pSrc[(2u * i2)]; |
emilmont | 1:fdd22bb7aa52 | 272 | ycIn = pSrc[(2u * i2) + 1u]; |
emilmont | 1:fdd22bb7aa52 | 273 | |
emilmont | 1:fdd22bb7aa52 | 274 | xbIn = pSrc[(2u * i1)]; |
emilmont | 1:fdd22bb7aa52 | 275 | ybIn = pSrc[(2u * i1) + 1u]; |
emilmont | 1:fdd22bb7aa52 | 276 | |
emilmont | 1:fdd22bb7aa52 | 277 | xdIn = pSrc[(2u * i3)]; |
emilmont | 1:fdd22bb7aa52 | 278 | ydIn = pSrc[(2u * i3) + 1u]; |
emilmont | 1:fdd22bb7aa52 | 279 | |
emilmont | 1:fdd22bb7aa52 | 280 | /* xa + xc */ |
emilmont | 1:fdd22bb7aa52 | 281 | Xaplusc = xaIn + xcIn; |
emilmont | 1:fdd22bb7aa52 | 282 | /* xb + xd */ |
emilmont | 1:fdd22bb7aa52 | 283 | Xbplusd = xbIn + xdIn; |
emilmont | 1:fdd22bb7aa52 | 284 | /* ya + yc */ |
emilmont | 1:fdd22bb7aa52 | 285 | Yaplusc = yaIn + ycIn; |
emilmont | 1:fdd22bb7aa52 | 286 | /* yb + yd */ |
emilmont | 1:fdd22bb7aa52 | 287 | Ybplusd = ybIn + ydIn; |
emilmont | 1:fdd22bb7aa52 | 288 | |
emilmont | 1:fdd22bb7aa52 | 289 | /* index calculation for the coefficients */ |
emilmont | 1:fdd22bb7aa52 | 290 | ia2 = ia1 + ia1; |
emilmont | 1:fdd22bb7aa52 | 291 | co2 = pCoef[ia2 * 2u]; |
emilmont | 1:fdd22bb7aa52 | 292 | si2 = pCoef[(ia2 * 2u) + 1u]; |
emilmont | 1:fdd22bb7aa52 | 293 | |
emilmont | 1:fdd22bb7aa52 | 294 | /* xa - xc */ |
emilmont | 1:fdd22bb7aa52 | 295 | Xaminusc = xaIn - xcIn; |
emilmont | 1:fdd22bb7aa52 | 296 | /* xb - xd */ |
emilmont | 1:fdd22bb7aa52 | 297 | Xbminusd = xbIn - xdIn; |
emilmont | 1:fdd22bb7aa52 | 298 | /* ya - yc */ |
emilmont | 1:fdd22bb7aa52 | 299 | Yaminusc = yaIn - ycIn; |
emilmont | 1:fdd22bb7aa52 | 300 | /* yb + yd */ |
emilmont | 1:fdd22bb7aa52 | 301 | Ybminusd = ybIn - ydIn; |
emilmont | 1:fdd22bb7aa52 | 302 | |
emilmont | 1:fdd22bb7aa52 | 303 | /* xa' = xa + xb + xc + xd */ |
emilmont | 1:fdd22bb7aa52 | 304 | pSrc[(2u * i0)] = Xaplusc + Xbplusd; |
emilmont | 1:fdd22bb7aa52 | 305 | /* ya' = ya + yb + yc + yd */ |
emilmont | 1:fdd22bb7aa52 | 306 | pSrc[(2u * i0) + 1u] = Yaplusc + Ybplusd; |
emilmont | 1:fdd22bb7aa52 | 307 | |
emilmont | 1:fdd22bb7aa52 | 308 | /* (xa - xc) + (yb - yd) */ |
emilmont | 1:fdd22bb7aa52 | 309 | Xb12C_out = (Xaminusc + Ybminusd); |
emilmont | 1:fdd22bb7aa52 | 310 | /* (ya - yc) + (xb - xd) */ |
emilmont | 1:fdd22bb7aa52 | 311 | Yb12C_out = (Yaminusc - Xbminusd); |
emilmont | 1:fdd22bb7aa52 | 312 | /* (xa + xc) - (xb + xd) */ |
emilmont | 1:fdd22bb7aa52 | 313 | Xc12C_out = (Xaplusc - Xbplusd); |
emilmont | 1:fdd22bb7aa52 | 314 | /* (ya + yc) - (yb + yd) */ |
emilmont | 1:fdd22bb7aa52 | 315 | Yc12C_out = (Yaplusc - Ybplusd); |
emilmont | 1:fdd22bb7aa52 | 316 | /* (xa - xc) - (yb - yd) */ |
emilmont | 1:fdd22bb7aa52 | 317 | Xd12C_out = (Xaminusc - Ybminusd); |
emilmont | 1:fdd22bb7aa52 | 318 | /* (ya - yc) + (xb - xd) */ |
emilmont | 1:fdd22bb7aa52 | 319 | Yd12C_out = (Xbminusd + Yaminusc); |
emilmont | 1:fdd22bb7aa52 | 320 | |
emilmont | 1:fdd22bb7aa52 | 321 | co1 = pCoef[ia1 * 2u]; |
emilmont | 1:fdd22bb7aa52 | 322 | si1 = pCoef[(ia1 * 2u) + 1u]; |
emilmont | 1:fdd22bb7aa52 | 323 | |
emilmont | 1:fdd22bb7aa52 | 324 | /* index calculation for the coefficients */ |
emilmont | 1:fdd22bb7aa52 | 325 | ia3 = ia2 + ia1; |
emilmont | 1:fdd22bb7aa52 | 326 | co3 = pCoef[ia3 * 2u]; |
emilmont | 1:fdd22bb7aa52 | 327 | si3 = pCoef[(ia3 * 2u) + 1u]; |
emilmont | 1:fdd22bb7aa52 | 328 | |
emilmont | 1:fdd22bb7aa52 | 329 | Xb12_out = Xb12C_out * co1; |
emilmont | 1:fdd22bb7aa52 | 330 | Yb12_out = Yb12C_out * co1; |
emilmont | 1:fdd22bb7aa52 | 331 | Xc12_out = Xc12C_out * co2; |
emilmont | 1:fdd22bb7aa52 | 332 | Yc12_out = Yc12C_out * co2; |
emilmont | 1:fdd22bb7aa52 | 333 | Xd12_out = Xd12C_out * co3; |
emilmont | 1:fdd22bb7aa52 | 334 | Yd12_out = Yd12C_out * co3; |
emilmont | 1:fdd22bb7aa52 | 335 | |
emilmont | 1:fdd22bb7aa52 | 336 | /* xb' = (xa+yb-xc-yd)co1 + (ya-xb-yc+xd)(si1) */ |
emilmont | 1:fdd22bb7aa52 | 337 | Xb12_out += Yb12C_out * si1; |
emilmont | 1:fdd22bb7aa52 | 338 | /* yb' = (ya-xb-yc+xd)co1 - (xa+yb-xc-yd)(si1) */ |
emilmont | 1:fdd22bb7aa52 | 339 | Yb12_out -= Xb12C_out * si1; |
emilmont | 1:fdd22bb7aa52 | 340 | /* xc' = (xa-xb+xc-xd)co2 + (ya-yb+yc-yd)(si2) */ |
emilmont | 1:fdd22bb7aa52 | 341 | Xc12_out += Yc12C_out * si2; |
emilmont | 1:fdd22bb7aa52 | 342 | /* yc' = (ya-yb+yc-yd)co2 - (xa-xb+xc-xd)(si2) */ |
emilmont | 1:fdd22bb7aa52 | 343 | Yc12_out -= Xc12C_out * si2; |
emilmont | 1:fdd22bb7aa52 | 344 | /* xd' = (xa-yb-xc+yd)co3 + (ya+xb-yc-xd)(si3) */ |
emilmont | 1:fdd22bb7aa52 | 345 | Xd12_out += Yd12C_out * si3; |
emilmont | 1:fdd22bb7aa52 | 346 | /* yd' = (ya+xb-yc-xd)co3 - (xa-yb-xc+yd)(si3) */ |
emilmont | 1:fdd22bb7aa52 | 347 | Yd12_out -= Xd12C_out * si3; |
emilmont | 1:fdd22bb7aa52 | 348 | |
emilmont | 1:fdd22bb7aa52 | 349 | |
emilmont | 1:fdd22bb7aa52 | 350 | /* xc' = (xa-xb+xc-xd)co2 + (ya-yb+yc-yd)(si2) */ |
emilmont | 1:fdd22bb7aa52 | 351 | pSrc[2u * i1] = Xc12_out; |
emilmont | 1:fdd22bb7aa52 | 352 | |
emilmont | 1:fdd22bb7aa52 | 353 | /* yc' = (ya-yb+yc-yd)co2 - (xa-xb+xc-xd)(si2) */ |
emilmont | 1:fdd22bb7aa52 | 354 | pSrc[(2u * i1) + 1u] = Yc12_out; |
emilmont | 1:fdd22bb7aa52 | 355 | |
emilmont | 1:fdd22bb7aa52 | 356 | /* xb' = (xa+yb-xc-yd)co1 + (ya-xb-yc+xd)(si1) */ |
emilmont | 1:fdd22bb7aa52 | 357 | pSrc[2u * i2] = Xb12_out; |
emilmont | 1:fdd22bb7aa52 | 358 | |
emilmont | 1:fdd22bb7aa52 | 359 | /* yb' = (ya-xb-yc+xd)co1 - (xa+yb-xc-yd)(si1) */ |
emilmont | 1:fdd22bb7aa52 | 360 | pSrc[(2u * i2) + 1u] = Yb12_out; |
emilmont | 1:fdd22bb7aa52 | 361 | |
emilmont | 1:fdd22bb7aa52 | 362 | /* xd' = (xa-yb-xc+yd)co3 + (ya+xb-yc-xd)(si3) */ |
emilmont | 1:fdd22bb7aa52 | 363 | pSrc[2u * i3] = Xd12_out; |
emilmont | 1:fdd22bb7aa52 | 364 | |
emilmont | 1:fdd22bb7aa52 | 365 | /* yd' = (ya+xb-yc-xd)co3 - (xa-yb-xc+yd)(si3) */ |
emilmont | 1:fdd22bb7aa52 | 366 | pSrc[(2u * i3) + 1u] = Yd12_out; |
emilmont | 1:fdd22bb7aa52 | 367 | |
emilmont | 1:fdd22bb7aa52 | 368 | /* Twiddle coefficients index modifier */ |
emilmont | 1:fdd22bb7aa52 | 369 | ia1 = ia1 + twidCoefModifier; |
emilmont | 1:fdd22bb7aa52 | 370 | |
emilmont | 1:fdd22bb7aa52 | 371 | /* Updating input index */ |
emilmont | 1:fdd22bb7aa52 | 372 | i0 = i0 + 1u; |
emilmont | 1:fdd22bb7aa52 | 373 | |
emilmont | 1:fdd22bb7aa52 | 374 | } |
emilmont | 1:fdd22bb7aa52 | 375 | while(--j); |
emilmont | 1:fdd22bb7aa52 | 376 | |
emilmont | 1:fdd22bb7aa52 | 377 | twidCoefModifier <<= 2u; |
emilmont | 1:fdd22bb7aa52 | 378 | |
emilmont | 1:fdd22bb7aa52 | 379 | /* Calculation of second stage to excluding last stage */ |
emilmont | 1:fdd22bb7aa52 | 380 | for (k = fftLen / 4; k > 4u; k >>= 2u) |
emilmont | 1:fdd22bb7aa52 | 381 | { |
emilmont | 1:fdd22bb7aa52 | 382 | /* Initializations for the first stage */ |
emilmont | 1:fdd22bb7aa52 | 383 | n1 = n2; |
emilmont | 1:fdd22bb7aa52 | 384 | n2 >>= 2u; |
emilmont | 1:fdd22bb7aa52 | 385 | ia1 = 0u; |
emilmont | 1:fdd22bb7aa52 | 386 | |
emilmont | 1:fdd22bb7aa52 | 387 | /* Calculation of first stage */ |
emilmont | 1:fdd22bb7aa52 | 388 | for (j = 0u; j <= (n2 - 1u); j++) |
emilmont | 1:fdd22bb7aa52 | 389 | { |
emilmont | 1:fdd22bb7aa52 | 390 | /* index calculation for the coefficients */ |
emilmont | 1:fdd22bb7aa52 | 391 | ia2 = ia1 + ia1; |
emilmont | 1:fdd22bb7aa52 | 392 | ia3 = ia2 + ia1; |
emilmont | 1:fdd22bb7aa52 | 393 | co1 = pCoef[ia1 * 2u]; |
emilmont | 1:fdd22bb7aa52 | 394 | si1 = pCoef[(ia1 * 2u) + 1u]; |
emilmont | 1:fdd22bb7aa52 | 395 | co2 = pCoef[ia2 * 2u]; |
emilmont | 1:fdd22bb7aa52 | 396 | si2 = pCoef[(ia2 * 2u) + 1u]; |
emilmont | 1:fdd22bb7aa52 | 397 | co3 = pCoef[ia3 * 2u]; |
emilmont | 1:fdd22bb7aa52 | 398 | si3 = pCoef[(ia3 * 2u) + 1u]; |
emilmont | 1:fdd22bb7aa52 | 399 | |
emilmont | 1:fdd22bb7aa52 | 400 | /* Twiddle coefficients index modifier */ |
emilmont | 1:fdd22bb7aa52 | 401 | ia1 = ia1 + twidCoefModifier; |
emilmont | 1:fdd22bb7aa52 | 402 | |
emilmont | 1:fdd22bb7aa52 | 403 | for (i0 = j; i0 < fftLen; i0 += n1) |
emilmont | 1:fdd22bb7aa52 | 404 | { |
emilmont | 1:fdd22bb7aa52 | 405 | /* index calculation for the input as, */ |
emilmont | 1:fdd22bb7aa52 | 406 | /* pSrc[i0 + 0], pSrc[i0 + fftLen/4], pSrc[i0 + fftLen/2], pSrc[i0 + 3fftLen/4] */ |
emilmont | 1:fdd22bb7aa52 | 407 | i1 = i0 + n2; |
emilmont | 1:fdd22bb7aa52 | 408 | i2 = i1 + n2; |
emilmont | 1:fdd22bb7aa52 | 409 | i3 = i2 + n2; |
emilmont | 1:fdd22bb7aa52 | 410 | |
emilmont | 1:fdd22bb7aa52 | 411 | xaIn = pSrc[(2u * i0)]; |
emilmont | 1:fdd22bb7aa52 | 412 | yaIn = pSrc[(2u * i0) + 1u]; |
emilmont | 1:fdd22bb7aa52 | 413 | |
emilmont | 1:fdd22bb7aa52 | 414 | xbIn = pSrc[(2u * i1)]; |
emilmont | 1:fdd22bb7aa52 | 415 | ybIn = pSrc[(2u * i1) + 1u]; |
emilmont | 1:fdd22bb7aa52 | 416 | |
emilmont | 1:fdd22bb7aa52 | 417 | xcIn = pSrc[(2u * i2)]; |
emilmont | 1:fdd22bb7aa52 | 418 | ycIn = pSrc[(2u * i2) + 1u]; |
emilmont | 1:fdd22bb7aa52 | 419 | |
emilmont | 1:fdd22bb7aa52 | 420 | xdIn = pSrc[(2u * i3)]; |
emilmont | 1:fdd22bb7aa52 | 421 | ydIn = pSrc[(2u * i3) + 1u]; |
emilmont | 1:fdd22bb7aa52 | 422 | |
emilmont | 1:fdd22bb7aa52 | 423 | /* xa - xc */ |
emilmont | 1:fdd22bb7aa52 | 424 | Xaminusc = xaIn - xcIn; |
emilmont | 1:fdd22bb7aa52 | 425 | /* (xb - xd) */ |
emilmont | 1:fdd22bb7aa52 | 426 | Xbminusd = xbIn - xdIn; |
emilmont | 1:fdd22bb7aa52 | 427 | /* ya - yc */ |
emilmont | 1:fdd22bb7aa52 | 428 | Yaminusc = yaIn - ycIn; |
emilmont | 1:fdd22bb7aa52 | 429 | /* (yb - yd) */ |
emilmont | 1:fdd22bb7aa52 | 430 | Ybminusd = ybIn - ydIn; |
emilmont | 1:fdd22bb7aa52 | 431 | |
emilmont | 1:fdd22bb7aa52 | 432 | /* xa + xc */ |
emilmont | 1:fdd22bb7aa52 | 433 | Xaplusc = xaIn + xcIn; |
emilmont | 1:fdd22bb7aa52 | 434 | /* xb + xd */ |
emilmont | 1:fdd22bb7aa52 | 435 | Xbplusd = xbIn + xdIn; |
emilmont | 1:fdd22bb7aa52 | 436 | /* ya + yc */ |
emilmont | 1:fdd22bb7aa52 | 437 | Yaplusc = yaIn + ycIn; |
emilmont | 1:fdd22bb7aa52 | 438 | /* yb + yd */ |
emilmont | 1:fdd22bb7aa52 | 439 | Ybplusd = ybIn + ydIn; |
emilmont | 1:fdd22bb7aa52 | 440 | |
emilmont | 1:fdd22bb7aa52 | 441 | /* (xa - xc) + (yb - yd) */ |
emilmont | 1:fdd22bb7aa52 | 442 | Xb12C_out = (Xaminusc + Ybminusd); |
emilmont | 1:fdd22bb7aa52 | 443 | /* (ya - yc) - (xb - xd) */ |
emilmont | 1:fdd22bb7aa52 | 444 | Yb12C_out = (Yaminusc - Xbminusd); |
emilmont | 1:fdd22bb7aa52 | 445 | /* xa + xc -(xb + xd) */ |
emilmont | 1:fdd22bb7aa52 | 446 | Xc12C_out = (Xaplusc - Xbplusd); |
emilmont | 1:fdd22bb7aa52 | 447 | /* (ya + yc) - (yb + yd) */ |
emilmont | 1:fdd22bb7aa52 | 448 | Yc12C_out = (Yaplusc - Ybplusd); |
emilmont | 1:fdd22bb7aa52 | 449 | /* (xa - xc) - (yb - yd) */ |
emilmont | 1:fdd22bb7aa52 | 450 | Xd12C_out = (Xaminusc - Ybminusd); |
emilmont | 1:fdd22bb7aa52 | 451 | /* (ya - yc) + (xb - xd) */ |
emilmont | 1:fdd22bb7aa52 | 452 | Yd12C_out = (Xbminusd + Yaminusc); |
emilmont | 1:fdd22bb7aa52 | 453 | |
emilmont | 1:fdd22bb7aa52 | 454 | pSrc[(2u * i0)] = Xaplusc + Xbplusd; |
emilmont | 1:fdd22bb7aa52 | 455 | pSrc[(2u * i0) + 1u] = Yaplusc + Ybplusd; |
emilmont | 1:fdd22bb7aa52 | 456 | |
emilmont | 1:fdd22bb7aa52 | 457 | Xb12_out = Xb12C_out * co1; |
emilmont | 1:fdd22bb7aa52 | 458 | Yb12_out = Yb12C_out * co1; |
emilmont | 1:fdd22bb7aa52 | 459 | Xc12_out = Xc12C_out * co2; |
emilmont | 1:fdd22bb7aa52 | 460 | Yc12_out = Yc12C_out * co2; |
emilmont | 1:fdd22bb7aa52 | 461 | Xd12_out = Xd12C_out * co3; |
emilmont | 1:fdd22bb7aa52 | 462 | Yd12_out = Yd12C_out * co3; |
emilmont | 1:fdd22bb7aa52 | 463 | |
emilmont | 1:fdd22bb7aa52 | 464 | /* xb' = (xa+yb-xc-yd)co1 + (ya-xb-yc+xd)(si1) */ |
emilmont | 1:fdd22bb7aa52 | 465 | Xb12_out += Yb12C_out * si1; |
emilmont | 1:fdd22bb7aa52 | 466 | /* yb' = (ya-xb-yc+xd)co1 - (xa+yb-xc-yd)(si1) */ |
emilmont | 1:fdd22bb7aa52 | 467 | Yb12_out -= Xb12C_out * si1; |
emilmont | 1:fdd22bb7aa52 | 468 | /* xc' = (xa-xb+xc-xd)co2 + (ya-yb+yc-yd)(si2) */ |
emilmont | 1:fdd22bb7aa52 | 469 | Xc12_out += Yc12C_out * si2; |
emilmont | 1:fdd22bb7aa52 | 470 | /* yc' = (ya-yb+yc-yd)co2 - (xa-xb+xc-xd)(si2) */ |
emilmont | 1:fdd22bb7aa52 | 471 | Yc12_out -= Xc12C_out * si2; |
emilmont | 1:fdd22bb7aa52 | 472 | /* xd' = (xa-yb-xc+yd)co3 + (ya+xb-yc-xd)(si3) */ |
emilmont | 1:fdd22bb7aa52 | 473 | Xd12_out += Yd12C_out * si3; |
emilmont | 1:fdd22bb7aa52 | 474 | /* yd' = (ya+xb-yc-xd)co3 - (xa-yb-xc+yd)(si3) */ |
emilmont | 1:fdd22bb7aa52 | 475 | Yd12_out -= Xd12C_out * si3; |
emilmont | 1:fdd22bb7aa52 | 476 | |
emilmont | 1:fdd22bb7aa52 | 477 | /* xc' = (xa-xb+xc-xd)co2 + (ya-yb+yc-yd)(si2) */ |
emilmont | 1:fdd22bb7aa52 | 478 | pSrc[2u * i1] = Xc12_out; |
emilmont | 1:fdd22bb7aa52 | 479 | |
emilmont | 1:fdd22bb7aa52 | 480 | /* yc' = (ya-yb+yc-yd)co2 - (xa-xb+xc-xd)(si2) */ |
emilmont | 1:fdd22bb7aa52 | 481 | pSrc[(2u * i1) + 1u] = Yc12_out; |
emilmont | 1:fdd22bb7aa52 | 482 | |
emilmont | 1:fdd22bb7aa52 | 483 | /* xb' = (xa+yb-xc-yd)co1 + (ya-xb-yc+xd)(si1) */ |
emilmont | 1:fdd22bb7aa52 | 484 | pSrc[2u * i2] = Xb12_out; |
emilmont | 1:fdd22bb7aa52 | 485 | |
emilmont | 1:fdd22bb7aa52 | 486 | /* yb' = (ya-xb-yc+xd)co1 - (xa+yb-xc-yd)(si1) */ |
emilmont | 1:fdd22bb7aa52 | 487 | pSrc[(2u * i2) + 1u] = Yb12_out; |
emilmont | 1:fdd22bb7aa52 | 488 | |
emilmont | 1:fdd22bb7aa52 | 489 | /* xd' = (xa-yb-xc+yd)co3 + (ya+xb-yc-xd)(si3) */ |
emilmont | 1:fdd22bb7aa52 | 490 | pSrc[2u * i3] = Xd12_out; |
emilmont | 1:fdd22bb7aa52 | 491 | |
emilmont | 1:fdd22bb7aa52 | 492 | /* yd' = (ya+xb-yc-xd)co3 - (xa-yb-xc+yd)(si3) */ |
emilmont | 1:fdd22bb7aa52 | 493 | pSrc[(2u * i3) + 1u] = Yd12_out; |
emilmont | 1:fdd22bb7aa52 | 494 | |
emilmont | 1:fdd22bb7aa52 | 495 | } |
emilmont | 1:fdd22bb7aa52 | 496 | } |
emilmont | 1:fdd22bb7aa52 | 497 | twidCoefModifier <<= 2u; |
emilmont | 1:fdd22bb7aa52 | 498 | } |
emilmont | 1:fdd22bb7aa52 | 499 | |
emilmont | 1:fdd22bb7aa52 | 500 | j = fftLen >> 2; |
emilmont | 1:fdd22bb7aa52 | 501 | ptr1 = &pSrc[0]; |
emilmont | 1:fdd22bb7aa52 | 502 | |
emilmont | 1:fdd22bb7aa52 | 503 | /* Calculations of last stage */ |
emilmont | 1:fdd22bb7aa52 | 504 | do |
emilmont | 1:fdd22bb7aa52 | 505 | { |
emilmont | 1:fdd22bb7aa52 | 506 | |
emilmont | 1:fdd22bb7aa52 | 507 | xaIn = ptr1[0]; |
emilmont | 1:fdd22bb7aa52 | 508 | xcIn = ptr1[4]; |
emilmont | 1:fdd22bb7aa52 | 509 | yaIn = ptr1[1]; |
emilmont | 1:fdd22bb7aa52 | 510 | ycIn = ptr1[5]; |
emilmont | 1:fdd22bb7aa52 | 511 | |
emilmont | 1:fdd22bb7aa52 | 512 | /* xa + xc */ |
emilmont | 1:fdd22bb7aa52 | 513 | Xaplusc = xaIn + xcIn; |
emilmont | 1:fdd22bb7aa52 | 514 | |
emilmont | 1:fdd22bb7aa52 | 515 | xbIn = ptr1[2]; |
emilmont | 1:fdd22bb7aa52 | 516 | |
emilmont | 1:fdd22bb7aa52 | 517 | /* xa - xc */ |
emilmont | 1:fdd22bb7aa52 | 518 | Xaminusc = xaIn - xcIn; |
emilmont | 1:fdd22bb7aa52 | 519 | |
emilmont | 1:fdd22bb7aa52 | 520 | xdIn = ptr1[6]; |
emilmont | 1:fdd22bb7aa52 | 521 | |
emilmont | 1:fdd22bb7aa52 | 522 | /* ya + yc */ |
emilmont | 1:fdd22bb7aa52 | 523 | Yaplusc = yaIn + ycIn; |
emilmont | 1:fdd22bb7aa52 | 524 | |
emilmont | 1:fdd22bb7aa52 | 525 | ybIn = ptr1[3]; |
emilmont | 1:fdd22bb7aa52 | 526 | |
emilmont | 1:fdd22bb7aa52 | 527 | /* ya - yc */ |
emilmont | 1:fdd22bb7aa52 | 528 | Yaminusc = yaIn - ycIn; |
emilmont | 1:fdd22bb7aa52 | 529 | |
emilmont | 1:fdd22bb7aa52 | 530 | ydIn = ptr1[7]; |
emilmont | 1:fdd22bb7aa52 | 531 | |
emilmont | 1:fdd22bb7aa52 | 532 | /* xb + xd */ |
emilmont | 1:fdd22bb7aa52 | 533 | Xbplusd = xbIn + xdIn; |
emilmont | 1:fdd22bb7aa52 | 534 | |
emilmont | 1:fdd22bb7aa52 | 535 | /* yb + yd */ |
emilmont | 1:fdd22bb7aa52 | 536 | Ybplusd = ybIn + ydIn; |
emilmont | 1:fdd22bb7aa52 | 537 | |
emilmont | 1:fdd22bb7aa52 | 538 | /* xa' = xa + xb + xc + xd */ |
emilmont | 1:fdd22bb7aa52 | 539 | ptr1[0] = (Xaplusc + Xbplusd); |
emilmont | 1:fdd22bb7aa52 | 540 | |
emilmont | 1:fdd22bb7aa52 | 541 | /* (xb-xd) */ |
emilmont | 1:fdd22bb7aa52 | 542 | Xbminusd = xbIn - xdIn; |
emilmont | 1:fdd22bb7aa52 | 543 | |
emilmont | 1:fdd22bb7aa52 | 544 | /* ya' = ya + yb + yc + yd */ |
emilmont | 1:fdd22bb7aa52 | 545 | ptr1[1] = (Yaplusc + Ybplusd); |
emilmont | 1:fdd22bb7aa52 | 546 | |
emilmont | 1:fdd22bb7aa52 | 547 | /* (yb-yd) */ |
emilmont | 1:fdd22bb7aa52 | 548 | Ybminusd = ybIn - ydIn; |
emilmont | 1:fdd22bb7aa52 | 549 | |
emilmont | 1:fdd22bb7aa52 | 550 | /* xc' = (xa-xb+xc-xd) */ |
emilmont | 1:fdd22bb7aa52 | 551 | ptr1[2] = (Xaplusc - Xbplusd); |
emilmont | 1:fdd22bb7aa52 | 552 | /* yc' = (ya-yb+yc-yd) */ |
emilmont | 1:fdd22bb7aa52 | 553 | ptr1[3] = (Yaplusc - Ybplusd); |
emilmont | 1:fdd22bb7aa52 | 554 | /* xb' = (xa+yb-xc-yd) */ |
emilmont | 1:fdd22bb7aa52 | 555 | ptr1[4] = (Xaminusc + Ybminusd); |
emilmont | 1:fdd22bb7aa52 | 556 | /* yb' = (ya-xb-yc+xd) */ |
emilmont | 1:fdd22bb7aa52 | 557 | ptr1[5] = (Yaminusc - Xbminusd); |
emilmont | 1:fdd22bb7aa52 | 558 | /* xd' = (xa-yb-xc+yd)) */ |
emilmont | 1:fdd22bb7aa52 | 559 | ptr1[6] = (Xaminusc - Ybminusd); |
emilmont | 1:fdd22bb7aa52 | 560 | /* yd' = (ya+xb-yc-xd) */ |
emilmont | 1:fdd22bb7aa52 | 561 | ptr1[7] = (Xbminusd + Yaminusc); |
emilmont | 1:fdd22bb7aa52 | 562 | |
emilmont | 1:fdd22bb7aa52 | 563 | /* increment pointer by 8 */ |
emilmont | 1:fdd22bb7aa52 | 564 | ptr1 = ptr1 + 8u; |
emilmont | 1:fdd22bb7aa52 | 565 | |
emilmont | 1:fdd22bb7aa52 | 566 | } while(--j); |
emilmont | 1:fdd22bb7aa52 | 567 | |
emilmont | 1:fdd22bb7aa52 | 568 | #else |
emilmont | 1:fdd22bb7aa52 | 569 | |
emilmont | 1:fdd22bb7aa52 | 570 | float32_t t1, t2, r1, r2, s1, s2; |
emilmont | 1:fdd22bb7aa52 | 571 | |
emilmont | 1:fdd22bb7aa52 | 572 | /* Run the below code for Cortex-M0 */ |
emilmont | 1:fdd22bb7aa52 | 573 | |
emilmont | 1:fdd22bb7aa52 | 574 | /* Initializations for the fft calculation */ |
emilmont | 1:fdd22bb7aa52 | 575 | n2 = fftLen; |
emilmont | 1:fdd22bb7aa52 | 576 | n1 = n2; |
emilmont | 1:fdd22bb7aa52 | 577 | for (k = fftLen; k > 1u; k >>= 2u) |
emilmont | 1:fdd22bb7aa52 | 578 | { |
emilmont | 1:fdd22bb7aa52 | 579 | /* Initializations for the fft calculation */ |
emilmont | 1:fdd22bb7aa52 | 580 | n1 = n2; |
emilmont | 1:fdd22bb7aa52 | 581 | n2 >>= 2u; |
emilmont | 1:fdd22bb7aa52 | 582 | ia1 = 0u; |
emilmont | 1:fdd22bb7aa52 | 583 | |
emilmont | 1:fdd22bb7aa52 | 584 | /* FFT Calculation */ |
emilmont | 1:fdd22bb7aa52 | 585 | for (j = 0u; j <= (n2 - 1u); j++) |
emilmont | 1:fdd22bb7aa52 | 586 | { |
emilmont | 1:fdd22bb7aa52 | 587 | /* index calculation for the coefficients */ |
emilmont | 1:fdd22bb7aa52 | 588 | ia2 = ia1 + ia1; |
emilmont | 1:fdd22bb7aa52 | 589 | ia3 = ia2 + ia1; |
emilmont | 1:fdd22bb7aa52 | 590 | co1 = pCoef[ia1 * 2u]; |
emilmont | 1:fdd22bb7aa52 | 591 | si1 = pCoef[(ia1 * 2u) + 1u]; |
emilmont | 1:fdd22bb7aa52 | 592 | co2 = pCoef[ia2 * 2u]; |
emilmont | 1:fdd22bb7aa52 | 593 | si2 = pCoef[(ia2 * 2u) + 1u]; |
emilmont | 1:fdd22bb7aa52 | 594 | co3 = pCoef[ia3 * 2u]; |
emilmont | 1:fdd22bb7aa52 | 595 | si3 = pCoef[(ia3 * 2u) + 1u]; |
emilmont | 1:fdd22bb7aa52 | 596 | |
emilmont | 1:fdd22bb7aa52 | 597 | /* Twiddle coefficients index modifier */ |
emilmont | 1:fdd22bb7aa52 | 598 | ia1 = ia1 + twidCoefModifier; |
emilmont | 1:fdd22bb7aa52 | 599 | |
emilmont | 1:fdd22bb7aa52 | 600 | for (i0 = j; i0 < fftLen; i0 += n1) |
emilmont | 1:fdd22bb7aa52 | 601 | { |
emilmont | 1:fdd22bb7aa52 | 602 | /* index calculation for the input as, */ |
emilmont | 1:fdd22bb7aa52 | 603 | /* pSrc[i0 + 0], pSrc[i0 + fftLen/4], pSrc[i0 + fftLen/2], pSrc[i0 + 3fftLen/4] */ |
emilmont | 1:fdd22bb7aa52 | 604 | i1 = i0 + n2; |
emilmont | 1:fdd22bb7aa52 | 605 | i2 = i1 + n2; |
emilmont | 1:fdd22bb7aa52 | 606 | i3 = i2 + n2; |
emilmont | 1:fdd22bb7aa52 | 607 | |
emilmont | 1:fdd22bb7aa52 | 608 | /* xa + xc */ |
emilmont | 1:fdd22bb7aa52 | 609 | r1 = pSrc[(2u * i0)] + pSrc[(2u * i2)]; |
emilmont | 1:fdd22bb7aa52 | 610 | |
emilmont | 1:fdd22bb7aa52 | 611 | /* xa - xc */ |
emilmont | 1:fdd22bb7aa52 | 612 | r2 = pSrc[(2u * i0)] - pSrc[(2u * i2)]; |
emilmont | 1:fdd22bb7aa52 | 613 | |
emilmont | 1:fdd22bb7aa52 | 614 | /* ya + yc */ |
emilmont | 1:fdd22bb7aa52 | 615 | s1 = pSrc[(2u * i0) + 1u] + pSrc[(2u * i2) + 1u]; |
emilmont | 1:fdd22bb7aa52 | 616 | |
emilmont | 1:fdd22bb7aa52 | 617 | /* ya - yc */ |
emilmont | 1:fdd22bb7aa52 | 618 | s2 = pSrc[(2u * i0) + 1u] - pSrc[(2u * i2) + 1u]; |
emilmont | 1:fdd22bb7aa52 | 619 | |
emilmont | 1:fdd22bb7aa52 | 620 | /* xb + xd */ |
emilmont | 1:fdd22bb7aa52 | 621 | t1 = pSrc[2u * i1] + pSrc[2u * i3]; |
emilmont | 1:fdd22bb7aa52 | 622 | |
emilmont | 1:fdd22bb7aa52 | 623 | /* xa' = xa + xb + xc + xd */ |
emilmont | 1:fdd22bb7aa52 | 624 | pSrc[2u * i0] = r1 + t1; |
emilmont | 1:fdd22bb7aa52 | 625 | |
emilmont | 1:fdd22bb7aa52 | 626 | /* xa + xc -(xb + xd) */ |
emilmont | 1:fdd22bb7aa52 | 627 | r1 = r1 - t1; |
emilmont | 1:fdd22bb7aa52 | 628 | |
emilmont | 1:fdd22bb7aa52 | 629 | /* yb + yd */ |
emilmont | 1:fdd22bb7aa52 | 630 | t2 = pSrc[(2u * i1) + 1u] + pSrc[(2u * i3) + 1u]; |
emilmont | 1:fdd22bb7aa52 | 631 | |
emilmont | 1:fdd22bb7aa52 | 632 | /* ya' = ya + yb + yc + yd */ |
emilmont | 1:fdd22bb7aa52 | 633 | pSrc[(2u * i0) + 1u] = s1 + t2; |
emilmont | 1:fdd22bb7aa52 | 634 | |
emilmont | 1:fdd22bb7aa52 | 635 | /* (ya + yc) - (yb + yd) */ |
emilmont | 1:fdd22bb7aa52 | 636 | s1 = s1 - t2; |
emilmont | 1:fdd22bb7aa52 | 637 | |
emilmont | 1:fdd22bb7aa52 | 638 | /* (yb - yd) */ |
emilmont | 1:fdd22bb7aa52 | 639 | t1 = pSrc[(2u * i1) + 1u] - pSrc[(2u * i3) + 1u]; |
emilmont | 1:fdd22bb7aa52 | 640 | |
emilmont | 1:fdd22bb7aa52 | 641 | /* (xb - xd) */ |
emilmont | 1:fdd22bb7aa52 | 642 | t2 = pSrc[2u * i1] - pSrc[2u * i3]; |
emilmont | 1:fdd22bb7aa52 | 643 | |
emilmont | 1:fdd22bb7aa52 | 644 | /* xc' = (xa-xb+xc-xd)co2 + (ya-yb+yc-yd)(si2) */ |
emilmont | 1:fdd22bb7aa52 | 645 | pSrc[2u * i1] = (r1 * co2) + (s1 * si2); |
emilmont | 1:fdd22bb7aa52 | 646 | |
emilmont | 1:fdd22bb7aa52 | 647 | /* yc' = (ya-yb+yc-yd)co2 - (xa-xb+xc-xd)(si2) */ |
emilmont | 1:fdd22bb7aa52 | 648 | pSrc[(2u * i1) + 1u] = (s1 * co2) - (r1 * si2); |
emilmont | 1:fdd22bb7aa52 | 649 | |
emilmont | 1:fdd22bb7aa52 | 650 | /* (xa - xc) + (yb - yd) */ |
emilmont | 1:fdd22bb7aa52 | 651 | r1 = r2 + t1; |
emilmont | 1:fdd22bb7aa52 | 652 | |
emilmont | 1:fdd22bb7aa52 | 653 | /* (xa - xc) - (yb - yd) */ |
emilmont | 1:fdd22bb7aa52 | 654 | r2 = r2 - t1; |
emilmont | 1:fdd22bb7aa52 | 655 | |
emilmont | 1:fdd22bb7aa52 | 656 | /* (ya - yc) - (xb - xd) */ |
emilmont | 1:fdd22bb7aa52 | 657 | s1 = s2 - t2; |
emilmont | 1:fdd22bb7aa52 | 658 | |
emilmont | 1:fdd22bb7aa52 | 659 | /* (ya - yc) + (xb - xd) */ |
emilmont | 1:fdd22bb7aa52 | 660 | s2 = s2 + t2; |
emilmont | 1:fdd22bb7aa52 | 661 | |
emilmont | 1:fdd22bb7aa52 | 662 | /* xb' = (xa+yb-xc-yd)co1 + (ya-xb-yc+xd)(si1) */ |
emilmont | 1:fdd22bb7aa52 | 663 | pSrc[2u * i2] = (r1 * co1) + (s1 * si1); |
emilmont | 1:fdd22bb7aa52 | 664 | |
emilmont | 1:fdd22bb7aa52 | 665 | /* yb' = (ya-xb-yc+xd)co1 - (xa+yb-xc-yd)(si1) */ |
emilmont | 1:fdd22bb7aa52 | 666 | pSrc[(2u * i2) + 1u] = (s1 * co1) - (r1 * si1); |
emilmont | 1:fdd22bb7aa52 | 667 | |
emilmont | 1:fdd22bb7aa52 | 668 | /* xd' = (xa-yb-xc+yd)co3 + (ya+xb-yc-xd)(si3) */ |
emilmont | 1:fdd22bb7aa52 | 669 | pSrc[2u * i3] = (r2 * co3) + (s2 * si3); |
emilmont | 1:fdd22bb7aa52 | 670 | |
emilmont | 1:fdd22bb7aa52 | 671 | /* yd' = (ya+xb-yc-xd)co3 - (xa-yb-xc+yd)(si3) */ |
emilmont | 1:fdd22bb7aa52 | 672 | pSrc[(2u * i3) + 1u] = (s2 * co3) - (r2 * si3); |
emilmont | 1:fdd22bb7aa52 | 673 | } |
emilmont | 1:fdd22bb7aa52 | 674 | } |
emilmont | 1:fdd22bb7aa52 | 675 | twidCoefModifier <<= 2u; |
emilmont | 1:fdd22bb7aa52 | 676 | } |
emilmont | 1:fdd22bb7aa52 | 677 | |
emilmont | 1:fdd22bb7aa52 | 678 | #endif /* #ifndef ARM_MATH_CM0 */ |
emilmont | 1:fdd22bb7aa52 | 679 | |
emilmont | 1:fdd22bb7aa52 | 680 | } |
emilmont | 1:fdd22bb7aa52 | 681 | |
emilmont | 1:fdd22bb7aa52 | 682 | /* |
emilmont | 1:fdd22bb7aa52 | 683 | * @brief Core function for the floating-point CIFFT butterfly process. |
emilmont | 1:fdd22bb7aa52 | 684 | * @param[in, out] *pSrc points to the in-place buffer of floating-point data type. |
emilmont | 1:fdd22bb7aa52 | 685 | * @param[in] fftLen length of the FFT. |
emilmont | 1:fdd22bb7aa52 | 686 | * @param[in] *pCoef points to twiddle coefficient buffer. |
emilmont | 1:fdd22bb7aa52 | 687 | * @param[in] twidCoefModifier twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. |
emilmont | 1:fdd22bb7aa52 | 688 | * @param[in] onebyfftLen value of 1/fftLen. |
emilmont | 1:fdd22bb7aa52 | 689 | * @return none. |
emilmont | 1:fdd22bb7aa52 | 690 | */ |
emilmont | 1:fdd22bb7aa52 | 691 | |
emilmont | 1:fdd22bb7aa52 | 692 | void arm_radix4_butterfly_inverse_f32( |
emilmont | 1:fdd22bb7aa52 | 693 | float32_t * pSrc, |
emilmont | 1:fdd22bb7aa52 | 694 | uint16_t fftLen, |
emilmont | 1:fdd22bb7aa52 | 695 | float32_t * pCoef, |
emilmont | 1:fdd22bb7aa52 | 696 | uint16_t twidCoefModifier, |
emilmont | 1:fdd22bb7aa52 | 697 | float32_t onebyfftLen) |
emilmont | 1:fdd22bb7aa52 | 698 | { |
emilmont | 1:fdd22bb7aa52 | 699 | float32_t co1, co2, co3, si1, si2, si3; |
emilmont | 1:fdd22bb7aa52 | 700 | uint32_t ia1, ia2, ia3; |
emilmont | 1:fdd22bb7aa52 | 701 | uint32_t i0, i1, i2, i3; |
emilmont | 1:fdd22bb7aa52 | 702 | uint32_t n1, n2, j, k; |
emilmont | 1:fdd22bb7aa52 | 703 | |
emilmont | 1:fdd22bb7aa52 | 704 | #ifndef ARM_MATH_CM0 |
emilmont | 1:fdd22bb7aa52 | 705 | |
emilmont | 1:fdd22bb7aa52 | 706 | float32_t xaIn, yaIn, xbIn, ybIn, xcIn, ycIn, xdIn, ydIn; |
emilmont | 1:fdd22bb7aa52 | 707 | float32_t Xaplusc, Xbplusd, Yaplusc, Ybplusd, Xaminusc, Xbminusd, Yaminusc, |
emilmont | 1:fdd22bb7aa52 | 708 | Ybminusd; |
emilmont | 1:fdd22bb7aa52 | 709 | float32_t Xb12C_out, Yb12C_out, Xc12C_out, Yc12C_out, Xd12C_out, Yd12C_out; |
emilmont | 1:fdd22bb7aa52 | 710 | float32_t Xb12_out, Yb12_out, Xc12_out, Yc12_out, Xd12_out, Yd12_out; |
emilmont | 1:fdd22bb7aa52 | 711 | float32_t *ptr1; |
emilmont | 1:fdd22bb7aa52 | 712 | |
emilmont | 1:fdd22bb7aa52 | 713 | |
emilmont | 1:fdd22bb7aa52 | 714 | /* Initializations for the first stage */ |
emilmont | 1:fdd22bb7aa52 | 715 | n2 = fftLen; |
emilmont | 1:fdd22bb7aa52 | 716 | n1 = n2; |
emilmont | 1:fdd22bb7aa52 | 717 | |
emilmont | 1:fdd22bb7aa52 | 718 | /* n2 = fftLen/4 */ |
emilmont | 1:fdd22bb7aa52 | 719 | n2 >>= 2u; |
emilmont | 1:fdd22bb7aa52 | 720 | i0 = 0u; |
emilmont | 1:fdd22bb7aa52 | 721 | ia1 = 0u; |
emilmont | 1:fdd22bb7aa52 | 722 | |
emilmont | 1:fdd22bb7aa52 | 723 | j = n2; |
emilmont | 1:fdd22bb7aa52 | 724 | |
emilmont | 1:fdd22bb7aa52 | 725 | /* Calculation of first stage */ |
emilmont | 1:fdd22bb7aa52 | 726 | do |
emilmont | 1:fdd22bb7aa52 | 727 | { |
emilmont | 1:fdd22bb7aa52 | 728 | /* index calculation for the input as, */ |
emilmont | 1:fdd22bb7aa52 | 729 | /* pSrc[i0 + 0], pSrc[i0 + fftLen/4], pSrc[i0 + fftLen/2], pSrc[i0 + 3fftLen/4] */ |
emilmont | 1:fdd22bb7aa52 | 730 | i1 = i0 + n2; |
emilmont | 1:fdd22bb7aa52 | 731 | i2 = i1 + n2; |
emilmont | 1:fdd22bb7aa52 | 732 | i3 = i2 + n2; |
emilmont | 1:fdd22bb7aa52 | 733 | |
emilmont | 1:fdd22bb7aa52 | 734 | /* Butterfly implementation */ |
emilmont | 1:fdd22bb7aa52 | 735 | xaIn = pSrc[(2u * i0)]; |
emilmont | 1:fdd22bb7aa52 | 736 | yaIn = pSrc[(2u * i0) + 1u]; |
emilmont | 1:fdd22bb7aa52 | 737 | |
emilmont | 1:fdd22bb7aa52 | 738 | xcIn = pSrc[(2u * i2)]; |
emilmont | 1:fdd22bb7aa52 | 739 | ycIn = pSrc[(2u * i2) + 1u]; |
emilmont | 1:fdd22bb7aa52 | 740 | |
emilmont | 1:fdd22bb7aa52 | 741 | xbIn = pSrc[(2u * i1)]; |
emilmont | 1:fdd22bb7aa52 | 742 | ybIn = pSrc[(2u * i1) + 1u]; |
emilmont | 1:fdd22bb7aa52 | 743 | |
emilmont | 1:fdd22bb7aa52 | 744 | xdIn = pSrc[(2u * i3)]; |
emilmont | 1:fdd22bb7aa52 | 745 | ydIn = pSrc[(2u * i3) + 1u]; |
emilmont | 1:fdd22bb7aa52 | 746 | |
emilmont | 1:fdd22bb7aa52 | 747 | /* xa + xc */ |
emilmont | 1:fdd22bb7aa52 | 748 | Xaplusc = xaIn + xcIn; |
emilmont | 1:fdd22bb7aa52 | 749 | /* xb + xd */ |
emilmont | 1:fdd22bb7aa52 | 750 | Xbplusd = xbIn + xdIn; |
emilmont | 1:fdd22bb7aa52 | 751 | /* ya + yc */ |
emilmont | 1:fdd22bb7aa52 | 752 | Yaplusc = yaIn + ycIn; |
emilmont | 1:fdd22bb7aa52 | 753 | /* yb + yd */ |
emilmont | 1:fdd22bb7aa52 | 754 | Ybplusd = ybIn + ydIn; |
emilmont | 1:fdd22bb7aa52 | 755 | |
emilmont | 1:fdd22bb7aa52 | 756 | /* index calculation for the coefficients */ |
emilmont | 1:fdd22bb7aa52 | 757 | ia2 = ia1 + ia1; |
emilmont | 1:fdd22bb7aa52 | 758 | co2 = pCoef[ia2 * 2u]; |
emilmont | 1:fdd22bb7aa52 | 759 | si2 = pCoef[(ia2 * 2u) + 1u]; |
emilmont | 1:fdd22bb7aa52 | 760 | |
emilmont | 1:fdd22bb7aa52 | 761 | /* xa - xc */ |
emilmont | 1:fdd22bb7aa52 | 762 | Xaminusc = xaIn - xcIn; |
emilmont | 1:fdd22bb7aa52 | 763 | /* xb - xd */ |
emilmont | 1:fdd22bb7aa52 | 764 | Xbminusd = xbIn - xdIn; |
emilmont | 1:fdd22bb7aa52 | 765 | /* ya - yc */ |
emilmont | 1:fdd22bb7aa52 | 766 | Yaminusc = yaIn - ycIn; |
emilmont | 1:fdd22bb7aa52 | 767 | /* yb - yd */ |
emilmont | 1:fdd22bb7aa52 | 768 | Ybminusd = ybIn - ydIn; |
emilmont | 1:fdd22bb7aa52 | 769 | |
emilmont | 1:fdd22bb7aa52 | 770 | /* xa' = xa + xb + xc + xd */ |
emilmont | 1:fdd22bb7aa52 | 771 | pSrc[(2u * i0)] = Xaplusc + Xbplusd; |
emilmont | 1:fdd22bb7aa52 | 772 | |
emilmont | 1:fdd22bb7aa52 | 773 | /* ya' = ya + yb + yc + yd */ |
emilmont | 1:fdd22bb7aa52 | 774 | pSrc[(2u * i0) + 1u] = Yaplusc + Ybplusd; |
emilmont | 1:fdd22bb7aa52 | 775 | |
emilmont | 1:fdd22bb7aa52 | 776 | /* (xa - xc) - (yb - yd) */ |
emilmont | 1:fdd22bb7aa52 | 777 | Xb12C_out = (Xaminusc - Ybminusd); |
emilmont | 1:fdd22bb7aa52 | 778 | /* (ya - yc) + (xb - xd) */ |
emilmont | 1:fdd22bb7aa52 | 779 | Yb12C_out = (Yaminusc + Xbminusd); |
emilmont | 1:fdd22bb7aa52 | 780 | /* (xa + xc) - (xb + xd) */ |
emilmont | 1:fdd22bb7aa52 | 781 | Xc12C_out = (Xaplusc - Xbplusd); |
emilmont | 1:fdd22bb7aa52 | 782 | /* (ya + yc) - (yb + yd) */ |
emilmont | 1:fdd22bb7aa52 | 783 | Yc12C_out = (Yaplusc - Ybplusd); |
emilmont | 1:fdd22bb7aa52 | 784 | /* (xa - xc) + (yb - yd) */ |
emilmont | 1:fdd22bb7aa52 | 785 | Xd12C_out = (Xaminusc + Ybminusd); |
emilmont | 1:fdd22bb7aa52 | 786 | /* (ya - yc) - (xb - xd) */ |
emilmont | 1:fdd22bb7aa52 | 787 | Yd12C_out = (Yaminusc - Xbminusd); |
emilmont | 1:fdd22bb7aa52 | 788 | |
emilmont | 1:fdd22bb7aa52 | 789 | co1 = pCoef[ia1 * 2u]; |
emilmont | 1:fdd22bb7aa52 | 790 | si1 = pCoef[(ia1 * 2u) + 1u]; |
emilmont | 1:fdd22bb7aa52 | 791 | |
emilmont | 1:fdd22bb7aa52 | 792 | /* index calculation for the coefficients */ |
emilmont | 1:fdd22bb7aa52 | 793 | ia3 = ia2 + ia1; |
emilmont | 1:fdd22bb7aa52 | 794 | co3 = pCoef[ia3 * 2u]; |
emilmont | 1:fdd22bb7aa52 | 795 | si3 = pCoef[(ia3 * 2u) + 1u]; |
emilmont | 1:fdd22bb7aa52 | 796 | |
emilmont | 1:fdd22bb7aa52 | 797 | Xb12_out = Xb12C_out * co1; |
emilmont | 1:fdd22bb7aa52 | 798 | Yb12_out = Yb12C_out * co1; |
emilmont | 1:fdd22bb7aa52 | 799 | Xc12_out = Xc12C_out * co2; |
emilmont | 1:fdd22bb7aa52 | 800 | Yc12_out = Yc12C_out * co2; |
emilmont | 1:fdd22bb7aa52 | 801 | Xd12_out = Xd12C_out * co3; |
emilmont | 1:fdd22bb7aa52 | 802 | Yd12_out = Yd12C_out * co3; |
emilmont | 1:fdd22bb7aa52 | 803 | |
emilmont | 1:fdd22bb7aa52 | 804 | /* xb' = (xa+yb-xc-yd)co1 - (ya-xb-yc+xd)(si1) */ |
emilmont | 1:fdd22bb7aa52 | 805 | Xb12_out -= Yb12C_out * si1; |
emilmont | 1:fdd22bb7aa52 | 806 | /* yb' = (ya-xb-yc+xd)co1 + (xa+yb-xc-yd)(si1) */ |
emilmont | 1:fdd22bb7aa52 | 807 | Yb12_out += Xb12C_out * si1; |
emilmont | 1:fdd22bb7aa52 | 808 | /* xc' = (xa-xb+xc-xd)co2 - (ya-yb+yc-yd)(si2) */ |
emilmont | 1:fdd22bb7aa52 | 809 | Xc12_out -= Yc12C_out * si2; |
emilmont | 1:fdd22bb7aa52 | 810 | /* yc' = (ya-yb+yc-yd)co2 + (xa-xb+xc-xd)(si2) */ |
emilmont | 1:fdd22bb7aa52 | 811 | Yc12_out += Xc12C_out * si2; |
emilmont | 1:fdd22bb7aa52 | 812 | /* xd' = (xa-yb-xc+yd)co3 - (ya+xb-yc-xd)(si3) */ |
emilmont | 1:fdd22bb7aa52 | 813 | Xd12_out -= Yd12C_out * si3; |
emilmont | 1:fdd22bb7aa52 | 814 | /* yd' = (ya+xb-yc-xd)co3 + (xa-yb-xc+yd)(si3) */ |
emilmont | 1:fdd22bb7aa52 | 815 | Yd12_out += Xd12C_out * si3; |
emilmont | 1:fdd22bb7aa52 | 816 | |
emilmont | 1:fdd22bb7aa52 | 817 | /* xc' = (xa-xb+xc-xd)co2 - (ya-yb+yc-yd)(si2) */ |
emilmont | 1:fdd22bb7aa52 | 818 | pSrc[2u * i1] = Xc12_out; |
emilmont | 1:fdd22bb7aa52 | 819 | |
emilmont | 1:fdd22bb7aa52 | 820 | /* yc' = (ya-yb+yc-yd)co2 + (xa-xb+xc-xd)(si2) */ |
emilmont | 1:fdd22bb7aa52 | 821 | pSrc[(2u * i1) + 1u] = Yc12_out; |
emilmont | 1:fdd22bb7aa52 | 822 | |
emilmont | 1:fdd22bb7aa52 | 823 | /* xb' = (xa+yb-xc-yd)co1 - (ya-xb-yc+xd)(si1) */ |
emilmont | 1:fdd22bb7aa52 | 824 | pSrc[2u * i2] = Xb12_out; |
emilmont | 1:fdd22bb7aa52 | 825 | |
emilmont | 1:fdd22bb7aa52 | 826 | /* yb' = (ya-xb-yc+xd)co1 + (xa+yb-xc-yd)(si1) */ |
emilmont | 1:fdd22bb7aa52 | 827 | pSrc[(2u * i2) + 1u] = Yb12_out; |
emilmont | 1:fdd22bb7aa52 | 828 | |
emilmont | 1:fdd22bb7aa52 | 829 | /* xd' = (xa-yb-xc+yd)co3 - (ya+xb-yc-xd)(si3) */ |
emilmont | 1:fdd22bb7aa52 | 830 | pSrc[2u * i3] = Xd12_out; |
emilmont | 1:fdd22bb7aa52 | 831 | |
emilmont | 1:fdd22bb7aa52 | 832 | /* yd' = (ya+xb-yc-xd)co3 + (xa-yb-xc+yd)(si3) */ |
emilmont | 1:fdd22bb7aa52 | 833 | pSrc[(2u * i3) + 1u] = Yd12_out; |
emilmont | 1:fdd22bb7aa52 | 834 | |
emilmont | 1:fdd22bb7aa52 | 835 | /* Twiddle coefficients index modifier */ |
emilmont | 1:fdd22bb7aa52 | 836 | ia1 = ia1 + twidCoefModifier; |
emilmont | 1:fdd22bb7aa52 | 837 | |
emilmont | 1:fdd22bb7aa52 | 838 | /* Updating input index */ |
emilmont | 1:fdd22bb7aa52 | 839 | i0 = i0 + 1u; |
emilmont | 1:fdd22bb7aa52 | 840 | |
emilmont | 1:fdd22bb7aa52 | 841 | } while(--j); |
emilmont | 1:fdd22bb7aa52 | 842 | |
emilmont | 1:fdd22bb7aa52 | 843 | twidCoefModifier <<= 2u; |
emilmont | 1:fdd22bb7aa52 | 844 | |
emilmont | 1:fdd22bb7aa52 | 845 | /* Calculation of second stage to excluding last stage */ |
emilmont | 1:fdd22bb7aa52 | 846 | for (k = fftLen / 4; k > 4u; k >>= 2u) |
emilmont | 1:fdd22bb7aa52 | 847 | { |
emilmont | 1:fdd22bb7aa52 | 848 | /* Initializations for the first stage */ |
emilmont | 1:fdd22bb7aa52 | 849 | n1 = n2; |
emilmont | 1:fdd22bb7aa52 | 850 | n2 >>= 2u; |
emilmont | 1:fdd22bb7aa52 | 851 | ia1 = 0u; |
emilmont | 1:fdd22bb7aa52 | 852 | |
emilmont | 1:fdd22bb7aa52 | 853 | /* Calculation of first stage */ |
emilmont | 1:fdd22bb7aa52 | 854 | for (j = 0u; j <= (n2 - 1u); j++) |
emilmont | 1:fdd22bb7aa52 | 855 | { |
emilmont | 1:fdd22bb7aa52 | 856 | /* index calculation for the coefficients */ |
emilmont | 1:fdd22bb7aa52 | 857 | ia2 = ia1 + ia1; |
emilmont | 1:fdd22bb7aa52 | 858 | ia3 = ia2 + ia1; |
emilmont | 1:fdd22bb7aa52 | 859 | co1 = pCoef[ia1 * 2u]; |
emilmont | 1:fdd22bb7aa52 | 860 | si1 = pCoef[(ia1 * 2u) + 1u]; |
emilmont | 1:fdd22bb7aa52 | 861 | co2 = pCoef[ia2 * 2u]; |
emilmont | 1:fdd22bb7aa52 | 862 | si2 = pCoef[(ia2 * 2u) + 1u]; |
emilmont | 1:fdd22bb7aa52 | 863 | co3 = pCoef[ia3 * 2u]; |
emilmont | 1:fdd22bb7aa52 | 864 | si3 = pCoef[(ia3 * 2u) + 1u]; |
emilmont | 1:fdd22bb7aa52 | 865 | |
emilmont | 1:fdd22bb7aa52 | 866 | /* Twiddle coefficients index modifier */ |
emilmont | 1:fdd22bb7aa52 | 867 | ia1 = ia1 + twidCoefModifier; |
emilmont | 1:fdd22bb7aa52 | 868 | |
emilmont | 1:fdd22bb7aa52 | 869 | for (i0 = j; i0 < fftLen; i0 += n1) |
emilmont | 1:fdd22bb7aa52 | 870 | { |
emilmont | 1:fdd22bb7aa52 | 871 | /* index calculation for the input as, */ |
emilmont | 1:fdd22bb7aa52 | 872 | /* pSrc[i0 + 0], pSrc[i0 + fftLen/4], pSrc[i0 + fftLen/2], pSrc[i0 + 3fftLen/4] */ |
emilmont | 1:fdd22bb7aa52 | 873 | i1 = i0 + n2; |
emilmont | 1:fdd22bb7aa52 | 874 | i2 = i1 + n2; |
emilmont | 1:fdd22bb7aa52 | 875 | i3 = i2 + n2; |
emilmont | 1:fdd22bb7aa52 | 876 | |
emilmont | 1:fdd22bb7aa52 | 877 | xaIn = pSrc[(2u * i0)]; |
emilmont | 1:fdd22bb7aa52 | 878 | yaIn = pSrc[(2u * i0) + 1u]; |
emilmont | 1:fdd22bb7aa52 | 879 | |
emilmont | 1:fdd22bb7aa52 | 880 | xbIn = pSrc[(2u * i1)]; |
emilmont | 1:fdd22bb7aa52 | 881 | ybIn = pSrc[(2u * i1) + 1u]; |
emilmont | 1:fdd22bb7aa52 | 882 | |
emilmont | 1:fdd22bb7aa52 | 883 | xcIn = pSrc[(2u * i2)]; |
emilmont | 1:fdd22bb7aa52 | 884 | ycIn = pSrc[(2u * i2) + 1u]; |
emilmont | 1:fdd22bb7aa52 | 885 | |
emilmont | 1:fdd22bb7aa52 | 886 | xdIn = pSrc[(2u * i3)]; |
emilmont | 1:fdd22bb7aa52 | 887 | ydIn = pSrc[(2u * i3) + 1u]; |
emilmont | 1:fdd22bb7aa52 | 888 | |
emilmont | 1:fdd22bb7aa52 | 889 | /* xa - xc */ |
emilmont | 1:fdd22bb7aa52 | 890 | Xaminusc = xaIn - xcIn; |
emilmont | 1:fdd22bb7aa52 | 891 | /* (xb - xd) */ |
emilmont | 1:fdd22bb7aa52 | 892 | Xbminusd = xbIn - xdIn; |
emilmont | 1:fdd22bb7aa52 | 893 | /* ya - yc */ |
emilmont | 1:fdd22bb7aa52 | 894 | Yaminusc = yaIn - ycIn; |
emilmont | 1:fdd22bb7aa52 | 895 | /* (yb - yd) */ |
emilmont | 1:fdd22bb7aa52 | 896 | Ybminusd = ybIn - ydIn; |
emilmont | 1:fdd22bb7aa52 | 897 | |
emilmont | 1:fdd22bb7aa52 | 898 | /* xa + xc */ |
emilmont | 1:fdd22bb7aa52 | 899 | Xaplusc = xaIn + xcIn; |
emilmont | 1:fdd22bb7aa52 | 900 | /* xb + xd */ |
emilmont | 1:fdd22bb7aa52 | 901 | Xbplusd = xbIn + xdIn; |
emilmont | 1:fdd22bb7aa52 | 902 | /* ya + yc */ |
emilmont | 1:fdd22bb7aa52 | 903 | Yaplusc = yaIn + ycIn; |
emilmont | 1:fdd22bb7aa52 | 904 | /* yb + yd */ |
emilmont | 1:fdd22bb7aa52 | 905 | Ybplusd = ybIn + ydIn; |
emilmont | 1:fdd22bb7aa52 | 906 | |
emilmont | 1:fdd22bb7aa52 | 907 | /* (xa - xc) - (yb - yd) */ |
emilmont | 1:fdd22bb7aa52 | 908 | Xb12C_out = (Xaminusc - Ybminusd); |
emilmont | 1:fdd22bb7aa52 | 909 | /* (ya - yc) + (xb - xd) */ |
emilmont | 1:fdd22bb7aa52 | 910 | Yb12C_out = (Yaminusc + Xbminusd); |
emilmont | 1:fdd22bb7aa52 | 911 | /* xa + xc -(xb + xd) */ |
emilmont | 1:fdd22bb7aa52 | 912 | Xc12C_out = (Xaplusc - Xbplusd); |
emilmont | 1:fdd22bb7aa52 | 913 | /* (ya + yc) - (yb + yd) */ |
emilmont | 1:fdd22bb7aa52 | 914 | Yc12C_out = (Yaplusc - Ybplusd); |
emilmont | 1:fdd22bb7aa52 | 915 | /* (xa - xc) + (yb - yd) */ |
emilmont | 1:fdd22bb7aa52 | 916 | Xd12C_out = (Xaminusc + Ybminusd); |
emilmont | 1:fdd22bb7aa52 | 917 | /* (ya - yc) - (xb - xd) */ |
emilmont | 1:fdd22bb7aa52 | 918 | Yd12C_out = (Yaminusc - Xbminusd); |
emilmont | 1:fdd22bb7aa52 | 919 | |
emilmont | 1:fdd22bb7aa52 | 920 | pSrc[(2u * i0)] = Xaplusc + Xbplusd; |
emilmont | 1:fdd22bb7aa52 | 921 | pSrc[(2u * i0) + 1u] = Yaplusc + Ybplusd; |
emilmont | 1:fdd22bb7aa52 | 922 | |
emilmont | 1:fdd22bb7aa52 | 923 | Xb12_out = Xb12C_out * co1; |
emilmont | 1:fdd22bb7aa52 | 924 | Yb12_out = Yb12C_out * co1; |
emilmont | 1:fdd22bb7aa52 | 925 | Xc12_out = Xc12C_out * co2; |
emilmont | 1:fdd22bb7aa52 | 926 | Yc12_out = Yc12C_out * co2; |
emilmont | 1:fdd22bb7aa52 | 927 | Xd12_out = Xd12C_out * co3; |
emilmont | 1:fdd22bb7aa52 | 928 | Yd12_out = Yd12C_out * co3; |
emilmont | 1:fdd22bb7aa52 | 929 | |
emilmont | 1:fdd22bb7aa52 | 930 | /* xb' = (xa+yb-xc-yd)co1 - (ya-xb-yc+xd)(si1) */ |
emilmont | 1:fdd22bb7aa52 | 931 | Xb12_out -= Yb12C_out * si1; |
emilmont | 1:fdd22bb7aa52 | 932 | /* yb' = (ya-xb-yc+xd)co1 + (xa+yb-xc-yd)(si1) */ |
emilmont | 1:fdd22bb7aa52 | 933 | Yb12_out += Xb12C_out * si1; |
emilmont | 1:fdd22bb7aa52 | 934 | /* xc' = (xa-xb+xc-xd)co2 - (ya-yb+yc-yd)(si2) */ |
emilmont | 1:fdd22bb7aa52 | 935 | Xc12_out -= Yc12C_out * si2; |
emilmont | 1:fdd22bb7aa52 | 936 | /* yc' = (ya-yb+yc-yd)co2 + (xa-xb+xc-xd)(si2) */ |
emilmont | 1:fdd22bb7aa52 | 937 | Yc12_out += Xc12C_out * si2; |
emilmont | 1:fdd22bb7aa52 | 938 | /* xd' = (xa-yb-xc+yd)co3 - (ya+xb-yc-xd)(si3) */ |
emilmont | 1:fdd22bb7aa52 | 939 | Xd12_out -= Yd12C_out * si3; |
emilmont | 1:fdd22bb7aa52 | 940 | /* yd' = (ya+xb-yc-xd)co3 + (xa-yb-xc+yd)(si3) */ |
emilmont | 1:fdd22bb7aa52 | 941 | Yd12_out += Xd12C_out * si3; |
emilmont | 1:fdd22bb7aa52 | 942 | |
emilmont | 1:fdd22bb7aa52 | 943 | /* xc' = (xa-xb+xc-xd)co2 - (ya-yb+yc-yd)(si2) */ |
emilmont | 1:fdd22bb7aa52 | 944 | pSrc[2u * i1] = Xc12_out; |
emilmont | 1:fdd22bb7aa52 | 945 | |
emilmont | 1:fdd22bb7aa52 | 946 | /* yc' = (ya-yb+yc-yd)co2 + (xa-xb+xc-xd)(si2) */ |
emilmont | 1:fdd22bb7aa52 | 947 | pSrc[(2u * i1) + 1u] = Yc12_out; |
emilmont | 1:fdd22bb7aa52 | 948 | |
emilmont | 1:fdd22bb7aa52 | 949 | /* xb' = (xa+yb-xc-yd)co1 - (ya-xb-yc+xd)(si1) */ |
emilmont | 1:fdd22bb7aa52 | 950 | pSrc[2u * i2] = Xb12_out; |
emilmont | 1:fdd22bb7aa52 | 951 | |
emilmont | 1:fdd22bb7aa52 | 952 | /* yb' = (ya-xb-yc+xd)co1 + (xa+yb-xc-yd)(si1) */ |
emilmont | 1:fdd22bb7aa52 | 953 | pSrc[(2u * i2) + 1u] = Yb12_out; |
emilmont | 1:fdd22bb7aa52 | 954 | |
emilmont | 1:fdd22bb7aa52 | 955 | /* xd' = (xa-yb-xc+yd)co3 - (ya+xb-yc-xd)(si3) */ |
emilmont | 1:fdd22bb7aa52 | 956 | pSrc[2u * i3] = Xd12_out; |
emilmont | 1:fdd22bb7aa52 | 957 | |
emilmont | 1:fdd22bb7aa52 | 958 | /* yd' = (ya+xb-yc-xd)co3 + (xa-yb-xc+yd)(si3) */ |
emilmont | 1:fdd22bb7aa52 | 959 | pSrc[(2u * i3) + 1u] = Yd12_out; |
emilmont | 1:fdd22bb7aa52 | 960 | |
emilmont | 1:fdd22bb7aa52 | 961 | } |
emilmont | 1:fdd22bb7aa52 | 962 | } |
emilmont | 1:fdd22bb7aa52 | 963 | twidCoefModifier <<= 2u; |
emilmont | 1:fdd22bb7aa52 | 964 | } |
emilmont | 1:fdd22bb7aa52 | 965 | /* Initializations of last stage */ |
emilmont | 1:fdd22bb7aa52 | 966 | |
emilmont | 1:fdd22bb7aa52 | 967 | j = fftLen >> 2; |
emilmont | 1:fdd22bb7aa52 | 968 | ptr1 = &pSrc[0]; |
emilmont | 1:fdd22bb7aa52 | 969 | |
emilmont | 1:fdd22bb7aa52 | 970 | /* Calculations of last stage */ |
emilmont | 1:fdd22bb7aa52 | 971 | do |
emilmont | 1:fdd22bb7aa52 | 972 | { |
emilmont | 1:fdd22bb7aa52 | 973 | |
emilmont | 1:fdd22bb7aa52 | 974 | xaIn = ptr1[0]; |
emilmont | 1:fdd22bb7aa52 | 975 | xcIn = ptr1[4]; |
emilmont | 1:fdd22bb7aa52 | 976 | yaIn = ptr1[1]; |
emilmont | 1:fdd22bb7aa52 | 977 | ycIn = ptr1[5]; |
emilmont | 1:fdd22bb7aa52 | 978 | |
emilmont | 1:fdd22bb7aa52 | 979 | /* Butterfly implementation */ |
emilmont | 1:fdd22bb7aa52 | 980 | /* xa + xc */ |
emilmont | 1:fdd22bb7aa52 | 981 | Xaplusc = xaIn + xcIn; |
emilmont | 1:fdd22bb7aa52 | 982 | |
emilmont | 1:fdd22bb7aa52 | 983 | xbIn = ptr1[2]; |
emilmont | 1:fdd22bb7aa52 | 984 | |
emilmont | 1:fdd22bb7aa52 | 985 | /* xa - xc */ |
emilmont | 1:fdd22bb7aa52 | 986 | Xaminusc = xaIn - xcIn; |
emilmont | 1:fdd22bb7aa52 | 987 | |
emilmont | 1:fdd22bb7aa52 | 988 | xdIn = ptr1[6]; |
emilmont | 1:fdd22bb7aa52 | 989 | |
emilmont | 1:fdd22bb7aa52 | 990 | /* ya + yc */ |
emilmont | 1:fdd22bb7aa52 | 991 | Yaplusc = yaIn + ycIn; |
emilmont | 1:fdd22bb7aa52 | 992 | |
emilmont | 1:fdd22bb7aa52 | 993 | ybIn = ptr1[3]; |
emilmont | 1:fdd22bb7aa52 | 994 | |
emilmont | 1:fdd22bb7aa52 | 995 | /* ya - yc */ |
emilmont | 1:fdd22bb7aa52 | 996 | Yaminusc = yaIn - ycIn; |
emilmont | 1:fdd22bb7aa52 | 997 | |
emilmont | 1:fdd22bb7aa52 | 998 | ydIn = ptr1[7]; |
emilmont | 1:fdd22bb7aa52 | 999 | |
emilmont | 1:fdd22bb7aa52 | 1000 | /* xc + xd */ |
emilmont | 1:fdd22bb7aa52 | 1001 | Xbplusd = xbIn + xdIn; |
emilmont | 1:fdd22bb7aa52 | 1002 | |
emilmont | 1:fdd22bb7aa52 | 1003 | /* yb + yd */ |
emilmont | 1:fdd22bb7aa52 | 1004 | Ybplusd = ybIn + ydIn; |
emilmont | 1:fdd22bb7aa52 | 1005 | |
emilmont | 1:fdd22bb7aa52 | 1006 | /* xa' = xa + xb + xc + xd */ |
emilmont | 1:fdd22bb7aa52 | 1007 | ptr1[0] = (Xaplusc + Xbplusd) * onebyfftLen; |
emilmont | 1:fdd22bb7aa52 | 1008 | |
emilmont | 1:fdd22bb7aa52 | 1009 | /* (xb-xd) */ |
emilmont | 1:fdd22bb7aa52 | 1010 | Xbminusd = xbIn - xdIn; |
emilmont | 1:fdd22bb7aa52 | 1011 | |
emilmont | 1:fdd22bb7aa52 | 1012 | /* ya' = ya + yb + yc + yd */ |
emilmont | 1:fdd22bb7aa52 | 1013 | ptr1[1] = (Yaplusc + Ybplusd) * onebyfftLen; |
emilmont | 1:fdd22bb7aa52 | 1014 | |
emilmont | 1:fdd22bb7aa52 | 1015 | /* (yb-yd) */ |
emilmont | 1:fdd22bb7aa52 | 1016 | Ybminusd = ybIn - ydIn; |
emilmont | 1:fdd22bb7aa52 | 1017 | |
emilmont | 1:fdd22bb7aa52 | 1018 | /* xc' = (xa-xb+xc-xd) * onebyfftLen */ |
emilmont | 1:fdd22bb7aa52 | 1019 | ptr1[2] = (Xaplusc - Xbplusd) * onebyfftLen; |
emilmont | 1:fdd22bb7aa52 | 1020 | |
emilmont | 1:fdd22bb7aa52 | 1021 | /* yc' = (ya-yb+yc-yd) * onebyfftLen */ |
emilmont | 1:fdd22bb7aa52 | 1022 | ptr1[3] = (Yaplusc - Ybplusd) * onebyfftLen; |
emilmont | 1:fdd22bb7aa52 | 1023 | |
emilmont | 1:fdd22bb7aa52 | 1024 | /* xb' = (xa-yb-xc+yd) * onebyfftLen */ |
emilmont | 1:fdd22bb7aa52 | 1025 | ptr1[4] = (Xaminusc - Ybminusd) * onebyfftLen; |
emilmont | 1:fdd22bb7aa52 | 1026 | |
emilmont | 1:fdd22bb7aa52 | 1027 | /* yb' = (ya+xb-yc-xd) * onebyfftLen */ |
emilmont | 1:fdd22bb7aa52 | 1028 | ptr1[5] = (Yaminusc + Xbminusd) * onebyfftLen; |
emilmont | 1:fdd22bb7aa52 | 1029 | |
emilmont | 1:fdd22bb7aa52 | 1030 | /* xd' = (xa-yb-xc+yd) * onebyfftLen */ |
emilmont | 1:fdd22bb7aa52 | 1031 | ptr1[6] = (Xaminusc + Ybminusd) * onebyfftLen; |
emilmont | 1:fdd22bb7aa52 | 1032 | |
emilmont | 1:fdd22bb7aa52 | 1033 | /* yd' = (ya-xb-yc+xd) * onebyfftLen */ |
emilmont | 1:fdd22bb7aa52 | 1034 | ptr1[7] = (Yaminusc - Xbminusd) * onebyfftLen; |
emilmont | 1:fdd22bb7aa52 | 1035 | |
emilmont | 1:fdd22bb7aa52 | 1036 | /* increment source pointer by 8 for next calculations */ |
emilmont | 1:fdd22bb7aa52 | 1037 | ptr1 = ptr1 + 8u; |
emilmont | 1:fdd22bb7aa52 | 1038 | |
emilmont | 1:fdd22bb7aa52 | 1039 | } while(--j); |
emilmont | 1:fdd22bb7aa52 | 1040 | |
emilmont | 1:fdd22bb7aa52 | 1041 | #else |
emilmont | 1:fdd22bb7aa52 | 1042 | |
emilmont | 1:fdd22bb7aa52 | 1043 | float32_t t1, t2, r1, r2, s1, s2; |
emilmont | 1:fdd22bb7aa52 | 1044 | |
emilmont | 1:fdd22bb7aa52 | 1045 | /* Run the below code for Cortex-M0 */ |
emilmont | 1:fdd22bb7aa52 | 1046 | |
emilmont | 1:fdd22bb7aa52 | 1047 | /* Initializations for the first stage */ |
emilmont | 1:fdd22bb7aa52 | 1048 | n2 = fftLen; |
emilmont | 1:fdd22bb7aa52 | 1049 | n1 = n2; |
emilmont | 1:fdd22bb7aa52 | 1050 | |
emilmont | 1:fdd22bb7aa52 | 1051 | /* Calculation of first stage */ |
emilmont | 1:fdd22bb7aa52 | 1052 | for (k = fftLen; k > 4u; k >>= 2u) |
emilmont | 1:fdd22bb7aa52 | 1053 | { |
emilmont | 1:fdd22bb7aa52 | 1054 | /* Initializations for the first stage */ |
emilmont | 1:fdd22bb7aa52 | 1055 | n1 = n2; |
emilmont | 1:fdd22bb7aa52 | 1056 | n2 >>= 2u; |
emilmont | 1:fdd22bb7aa52 | 1057 | ia1 = 0u; |
emilmont | 1:fdd22bb7aa52 | 1058 | |
emilmont | 1:fdd22bb7aa52 | 1059 | /* Calculation of first stage */ |
emilmont | 1:fdd22bb7aa52 | 1060 | for (j = 0u; j <= (n2 - 1u); j++) |
emilmont | 1:fdd22bb7aa52 | 1061 | { |
emilmont | 1:fdd22bb7aa52 | 1062 | /* index calculation for the coefficients */ |
emilmont | 1:fdd22bb7aa52 | 1063 | ia2 = ia1 + ia1; |
emilmont | 1:fdd22bb7aa52 | 1064 | ia3 = ia2 + ia1; |
emilmont | 1:fdd22bb7aa52 | 1065 | co1 = pCoef[ia1 * 2u]; |
emilmont | 1:fdd22bb7aa52 | 1066 | si1 = pCoef[(ia1 * 2u) + 1u]; |
emilmont | 1:fdd22bb7aa52 | 1067 | co2 = pCoef[ia2 * 2u]; |
emilmont | 1:fdd22bb7aa52 | 1068 | si2 = pCoef[(ia2 * 2u) + 1u]; |
emilmont | 1:fdd22bb7aa52 | 1069 | co3 = pCoef[ia3 * 2u]; |
emilmont | 1:fdd22bb7aa52 | 1070 | si3 = pCoef[(ia3 * 2u) + 1u]; |
emilmont | 1:fdd22bb7aa52 | 1071 | |
emilmont | 1:fdd22bb7aa52 | 1072 | /* Twiddle coefficients index modifier */ |
emilmont | 1:fdd22bb7aa52 | 1073 | ia1 = ia1 + twidCoefModifier; |
emilmont | 1:fdd22bb7aa52 | 1074 | |
emilmont | 1:fdd22bb7aa52 | 1075 | for (i0 = j; i0 < fftLen; i0 += n1) |
emilmont | 1:fdd22bb7aa52 | 1076 | { |
emilmont | 1:fdd22bb7aa52 | 1077 | /* index calculation for the input as, */ |
emilmont | 1:fdd22bb7aa52 | 1078 | /* pSrc[i0 + 0], pSrc[i0 + fftLen/4], pSrc[i0 + fftLen/2], pSrc[i0 + 3fftLen/4] */ |
emilmont | 1:fdd22bb7aa52 | 1079 | i1 = i0 + n2; |
emilmont | 1:fdd22bb7aa52 | 1080 | i2 = i1 + n2; |
emilmont | 1:fdd22bb7aa52 | 1081 | i3 = i2 + n2; |
emilmont | 1:fdd22bb7aa52 | 1082 | |
emilmont | 1:fdd22bb7aa52 | 1083 | /* xa + xc */ |
emilmont | 1:fdd22bb7aa52 | 1084 | r1 = pSrc[(2u * i0)] + pSrc[(2u * i2)]; |
emilmont | 1:fdd22bb7aa52 | 1085 | |
emilmont | 1:fdd22bb7aa52 | 1086 | /* xa - xc */ |
emilmont | 1:fdd22bb7aa52 | 1087 | r2 = pSrc[(2u * i0)] - pSrc[(2u * i2)]; |
emilmont | 1:fdd22bb7aa52 | 1088 | |
emilmont | 1:fdd22bb7aa52 | 1089 | /* ya + yc */ |
emilmont | 1:fdd22bb7aa52 | 1090 | s1 = pSrc[(2u * i0) + 1u] + pSrc[(2u * i2) + 1u]; |
emilmont | 1:fdd22bb7aa52 | 1091 | |
emilmont | 1:fdd22bb7aa52 | 1092 | /* ya - yc */ |
emilmont | 1:fdd22bb7aa52 | 1093 | s2 = pSrc[(2u * i0) + 1u] - pSrc[(2u * i2) + 1u]; |
emilmont | 1:fdd22bb7aa52 | 1094 | |
emilmont | 1:fdd22bb7aa52 | 1095 | /* xb + xd */ |
emilmont | 1:fdd22bb7aa52 | 1096 | t1 = pSrc[2u * i1] + pSrc[2u * i3]; |
emilmont | 1:fdd22bb7aa52 | 1097 | |
emilmont | 1:fdd22bb7aa52 | 1098 | /* xa' = xa + xb + xc + xd */ |
emilmont | 1:fdd22bb7aa52 | 1099 | pSrc[2u * i0] = r1 + t1; |
emilmont | 1:fdd22bb7aa52 | 1100 | |
emilmont | 1:fdd22bb7aa52 | 1101 | /* xa + xc -(xb + xd) */ |
emilmont | 1:fdd22bb7aa52 | 1102 | r1 = r1 - t1; |
emilmont | 1:fdd22bb7aa52 | 1103 | |
emilmont | 1:fdd22bb7aa52 | 1104 | /* yb + yd */ |
emilmont | 1:fdd22bb7aa52 | 1105 | t2 = pSrc[(2u * i1) + 1u] + pSrc[(2u * i3) + 1u]; |
emilmont | 1:fdd22bb7aa52 | 1106 | |
emilmont | 1:fdd22bb7aa52 | 1107 | /* ya' = ya + yb + yc + yd */ |
emilmont | 1:fdd22bb7aa52 | 1108 | pSrc[(2u * i0) + 1u] = s1 + t2; |
emilmont | 1:fdd22bb7aa52 | 1109 | |
emilmont | 1:fdd22bb7aa52 | 1110 | /* (ya + yc) - (yb + yd) */ |
emilmont | 1:fdd22bb7aa52 | 1111 | s1 = s1 - t2; |
emilmont | 1:fdd22bb7aa52 | 1112 | |
emilmont | 1:fdd22bb7aa52 | 1113 | /* (yb - yd) */ |
emilmont | 1:fdd22bb7aa52 | 1114 | t1 = pSrc[(2u * i1) + 1u] - pSrc[(2u * i3) + 1u]; |
emilmont | 1:fdd22bb7aa52 | 1115 | |
emilmont | 1:fdd22bb7aa52 | 1116 | /* (xb - xd) */ |
emilmont | 1:fdd22bb7aa52 | 1117 | t2 = pSrc[2u * i1] - pSrc[2u * i3]; |
emilmont | 1:fdd22bb7aa52 | 1118 | |
emilmont | 1:fdd22bb7aa52 | 1119 | /* xc' = (xa-xb+xc-xd)co2 - (ya-yb+yc-yd)(si2) */ |
emilmont | 1:fdd22bb7aa52 | 1120 | pSrc[2u * i1] = (r1 * co2) - (s1 * si2); |
emilmont | 1:fdd22bb7aa52 | 1121 | |
emilmont | 1:fdd22bb7aa52 | 1122 | /* yc' = (ya-yb+yc-yd)co2 + (xa-xb+xc-xd)(si2) */ |
emilmont | 1:fdd22bb7aa52 | 1123 | pSrc[(2u * i1) + 1u] = (s1 * co2) + (r1 * si2); |
emilmont | 1:fdd22bb7aa52 | 1124 | |
emilmont | 1:fdd22bb7aa52 | 1125 | /* (xa - xc) - (yb - yd) */ |
emilmont | 1:fdd22bb7aa52 | 1126 | r1 = r2 - t1; |
emilmont | 1:fdd22bb7aa52 | 1127 | |
emilmont | 1:fdd22bb7aa52 | 1128 | /* (xa - xc) + (yb - yd) */ |
emilmont | 1:fdd22bb7aa52 | 1129 | r2 = r2 + t1; |
emilmont | 1:fdd22bb7aa52 | 1130 | |
emilmont | 1:fdd22bb7aa52 | 1131 | /* (ya - yc) + (xb - xd) */ |
emilmont | 1:fdd22bb7aa52 | 1132 | s1 = s2 + t2; |
emilmont | 1:fdd22bb7aa52 | 1133 | |
emilmont | 1:fdd22bb7aa52 | 1134 | /* (ya - yc) - (xb - xd) */ |
emilmont | 1:fdd22bb7aa52 | 1135 | s2 = s2 - t2; |
emilmont | 1:fdd22bb7aa52 | 1136 | |
emilmont | 1:fdd22bb7aa52 | 1137 | /* xb' = (xa+yb-xc-yd)co1 - (ya-xb-yc+xd)(si1) */ |
emilmont | 1:fdd22bb7aa52 | 1138 | pSrc[2u * i2] = (r1 * co1) - (s1 * si1); |
emilmont | 1:fdd22bb7aa52 | 1139 | |
emilmont | 1:fdd22bb7aa52 | 1140 | /* yb' = (ya-xb-yc+xd)co1 + (xa+yb-xc-yd)(si1) */ |
emilmont | 1:fdd22bb7aa52 | 1141 | pSrc[(2u * i2) + 1u] = (s1 * co1) + (r1 * si1); |
emilmont | 1:fdd22bb7aa52 | 1142 | |
emilmont | 1:fdd22bb7aa52 | 1143 | /* xd' = (xa-yb-xc+yd)co3 - (ya+xb-yc-xd)(si3) */ |
emilmont | 1:fdd22bb7aa52 | 1144 | pSrc[2u * i3] = (r2 * co3) - (s2 * si3); |
emilmont | 1:fdd22bb7aa52 | 1145 | |
emilmont | 1:fdd22bb7aa52 | 1146 | /* yd' = (ya+xb-yc-xd)co3 + (xa-yb-xc+yd)(si3) */ |
emilmont | 1:fdd22bb7aa52 | 1147 | pSrc[(2u * i3) + 1u] = (s2 * co3) + (r2 * si3); |
emilmont | 1:fdd22bb7aa52 | 1148 | } |
emilmont | 1:fdd22bb7aa52 | 1149 | } |
emilmont | 1:fdd22bb7aa52 | 1150 | twidCoefModifier <<= 2u; |
emilmont | 1:fdd22bb7aa52 | 1151 | } |
emilmont | 1:fdd22bb7aa52 | 1152 | /* Initializations of last stage */ |
emilmont | 1:fdd22bb7aa52 | 1153 | n1 = n2; |
emilmont | 1:fdd22bb7aa52 | 1154 | n2 >>= 2u; |
emilmont | 1:fdd22bb7aa52 | 1155 | |
emilmont | 1:fdd22bb7aa52 | 1156 | /* Calculations of last stage */ |
emilmont | 1:fdd22bb7aa52 | 1157 | for (i0 = 0u; i0 <= (fftLen - n1); i0 += n1) |
emilmont | 1:fdd22bb7aa52 | 1158 | { |
emilmont | 1:fdd22bb7aa52 | 1159 | /* index calculation for the input as, */ |
emilmont | 1:fdd22bb7aa52 | 1160 | /* pSrc[i0 + 0], pSrc[i0 + fftLen/4], pSrc[i0 + fftLen/2], pSrc[i0 + 3fftLen/4] */ |
emilmont | 1:fdd22bb7aa52 | 1161 | i1 = i0 + n2; |
emilmont | 1:fdd22bb7aa52 | 1162 | i2 = i1 + n2; |
emilmont | 1:fdd22bb7aa52 | 1163 | i3 = i2 + n2; |
emilmont | 1:fdd22bb7aa52 | 1164 | |
emilmont | 1:fdd22bb7aa52 | 1165 | /* Butterfly implementation */ |
emilmont | 1:fdd22bb7aa52 | 1166 | /* xa + xc */ |
emilmont | 1:fdd22bb7aa52 | 1167 | r1 = pSrc[2u * i0] + pSrc[2u * i2]; |
emilmont | 1:fdd22bb7aa52 | 1168 | |
emilmont | 1:fdd22bb7aa52 | 1169 | /* xa - xc */ |
emilmont | 1:fdd22bb7aa52 | 1170 | r2 = pSrc[2u * i0] - pSrc[2u * i2]; |
emilmont | 1:fdd22bb7aa52 | 1171 | |
emilmont | 1:fdd22bb7aa52 | 1172 | /* ya + yc */ |
emilmont | 1:fdd22bb7aa52 | 1173 | s1 = pSrc[(2u * i0) + 1u] + pSrc[(2u * i2) + 1u]; |
emilmont | 1:fdd22bb7aa52 | 1174 | |
emilmont | 1:fdd22bb7aa52 | 1175 | /* ya - yc */ |
emilmont | 1:fdd22bb7aa52 | 1176 | s2 = pSrc[(2u * i0) + 1u] - pSrc[(2u * i2) + 1u]; |
emilmont | 1:fdd22bb7aa52 | 1177 | |
emilmont | 1:fdd22bb7aa52 | 1178 | /* xc + xd */ |
emilmont | 1:fdd22bb7aa52 | 1179 | t1 = pSrc[2u * i1] + pSrc[2u * i3]; |
emilmont | 1:fdd22bb7aa52 | 1180 | |
emilmont | 1:fdd22bb7aa52 | 1181 | /* xa' = xa + xb + xc + xd */ |
emilmont | 1:fdd22bb7aa52 | 1182 | pSrc[2u * i0] = (r1 + t1) * onebyfftLen; |
emilmont | 1:fdd22bb7aa52 | 1183 | |
emilmont | 1:fdd22bb7aa52 | 1184 | /* (xa + xb) - (xc + xd) */ |
emilmont | 1:fdd22bb7aa52 | 1185 | r1 = r1 - t1; |
emilmont | 1:fdd22bb7aa52 | 1186 | |
emilmont | 1:fdd22bb7aa52 | 1187 | /* yb + yd */ |
emilmont | 1:fdd22bb7aa52 | 1188 | t2 = pSrc[(2u * i1) + 1u] + pSrc[(2u * i3) + 1u]; |
emilmont | 1:fdd22bb7aa52 | 1189 | |
emilmont | 1:fdd22bb7aa52 | 1190 | /* ya' = ya + yb + yc + yd */ |
emilmont | 1:fdd22bb7aa52 | 1191 | pSrc[(2u * i0) + 1u] = (s1 + t2) * onebyfftLen; |
emilmont | 1:fdd22bb7aa52 | 1192 | |
emilmont | 1:fdd22bb7aa52 | 1193 | /* (ya + yc) - (yb + yd) */ |
emilmont | 1:fdd22bb7aa52 | 1194 | s1 = s1 - t2; |
emilmont | 1:fdd22bb7aa52 | 1195 | |
emilmont | 1:fdd22bb7aa52 | 1196 | /* (yb-yd) */ |
emilmont | 1:fdd22bb7aa52 | 1197 | t1 = pSrc[(2u * i1) + 1u] - pSrc[(2u * i3) + 1u]; |
emilmont | 1:fdd22bb7aa52 | 1198 | |
emilmont | 1:fdd22bb7aa52 | 1199 | /* (xb-xd) */ |
emilmont | 1:fdd22bb7aa52 | 1200 | t2 = pSrc[2u * i1] - pSrc[2u * i3]; |
emilmont | 1:fdd22bb7aa52 | 1201 | |
emilmont | 1:fdd22bb7aa52 | 1202 | /* xc' = (xa-xb+xc-xd)co2 - (ya-yb+yc-yd)(si2) */ |
emilmont | 1:fdd22bb7aa52 | 1203 | pSrc[2u * i1] = r1 * onebyfftLen; |
emilmont | 1:fdd22bb7aa52 | 1204 | |
emilmont | 1:fdd22bb7aa52 | 1205 | /* yc' = (ya-yb+yc-yd)co2 + (xa-xb+xc-xd)(si2) */ |
emilmont | 1:fdd22bb7aa52 | 1206 | pSrc[(2u * i1) + 1u] = s1 * onebyfftLen; |
emilmont | 1:fdd22bb7aa52 | 1207 | |
emilmont | 1:fdd22bb7aa52 | 1208 | |
emilmont | 1:fdd22bb7aa52 | 1209 | /* (xa - xc) - (yb-yd) */ |
emilmont | 1:fdd22bb7aa52 | 1210 | r1 = r2 - t1; |
emilmont | 1:fdd22bb7aa52 | 1211 | |
emilmont | 1:fdd22bb7aa52 | 1212 | /* (xa - xc) + (yb-yd) */ |
emilmont | 1:fdd22bb7aa52 | 1213 | r2 = r2 + t1; |
emilmont | 1:fdd22bb7aa52 | 1214 | |
emilmont | 1:fdd22bb7aa52 | 1215 | /* (ya - yc) + (xb-xd) */ |
emilmont | 1:fdd22bb7aa52 | 1216 | s1 = s2 + t2; |
emilmont | 1:fdd22bb7aa52 | 1217 | |
emilmont | 1:fdd22bb7aa52 | 1218 | /* (ya - yc) - (xb-xd) */ |
emilmont | 1:fdd22bb7aa52 | 1219 | s2 = s2 - t2; |
emilmont | 1:fdd22bb7aa52 | 1220 | |
emilmont | 1:fdd22bb7aa52 | 1221 | /* xb' = (xa+yb-xc-yd)co1 - (ya-xb-yc+xd)(si1) */ |
emilmont | 1:fdd22bb7aa52 | 1222 | pSrc[2u * i2] = r1 * onebyfftLen; |
emilmont | 1:fdd22bb7aa52 | 1223 | |
emilmont | 1:fdd22bb7aa52 | 1224 | /* yb' = (ya-xb-yc+xd)co1 + (xa+yb-xc-yd)(si1) */ |
emilmont | 1:fdd22bb7aa52 | 1225 | pSrc[(2u * i2) + 1u] = s1 * onebyfftLen; |
emilmont | 1:fdd22bb7aa52 | 1226 | |
emilmont | 1:fdd22bb7aa52 | 1227 | /* xd' = (xa-yb-xc+yd)co3 - (ya+xb-yc-xd)(si3) */ |
emilmont | 1:fdd22bb7aa52 | 1228 | pSrc[2u * i3] = r2 * onebyfftLen; |
emilmont | 1:fdd22bb7aa52 | 1229 | |
emilmont | 1:fdd22bb7aa52 | 1230 | /* yd' = (ya+xb-yc-xd)co3 + (xa-yb-xc+yd)(si3) */ |
emilmont | 1:fdd22bb7aa52 | 1231 | pSrc[(2u * i3) + 1u] = s2 * onebyfftLen; |
emilmont | 1:fdd22bb7aa52 | 1232 | } |
emilmont | 1:fdd22bb7aa52 | 1233 | |
emilmont | 1:fdd22bb7aa52 | 1234 | #endif /* #ifndef ARM_MATH_CM0 */ |
emilmont | 1:fdd22bb7aa52 | 1235 | |
emilmont | 1:fdd22bb7aa52 | 1236 | } |