CMSIS DSP library

Dependents:   performance_timer Surfboard_ gps2rtty Capstone ... more

Legacy Warning

This is an mbed 2 library. To learn more about mbed OS 5, visit the docs.

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?

UserRevisionLine numberNew 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_radix2_q31.c
emilmont 1:fdd22bb7aa52 9 *
emilmont 2:da51fb522205 10 * Description: Radix-2 Decimation in Frequency CFFT & CIFFT Fixed 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 0.0.3 2010/03/10
emilmont 1:fdd22bb7aa52 19 * Initial version
emilmont 1:fdd22bb7aa52 20 * -------------------------------------------------------------------- */
emilmont 1:fdd22bb7aa52 21
emilmont 1:fdd22bb7aa52 22 #include "arm_math.h"
emilmont 1:fdd22bb7aa52 23
emilmont 1:fdd22bb7aa52 24 /**
emilmont 1:fdd22bb7aa52 25 * @ingroup groupTransforms
emilmont 1:fdd22bb7aa52 26 */
emilmont 1:fdd22bb7aa52 27
emilmont 1:fdd22bb7aa52 28 /**
emilmont 1:fdd22bb7aa52 29 * @defgroup Radix2_CFFT_CIFFT Radix-2 Complex FFT Functions
emilmont 1:fdd22bb7aa52 30 *
emilmont 1:fdd22bb7aa52 31 * \par
emilmont 1:fdd22bb7aa52 32 * 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 33 * Computational complexity of CFFT reduces drastically when compared to DFT.
emilmont 1:fdd22bb7aa52 34 */
emilmont 1:fdd22bb7aa52 35
emilmont 1:fdd22bb7aa52 36
emilmont 1:fdd22bb7aa52 37 /**
emilmont 1:fdd22bb7aa52 38 * @addtogroup Radix2_CFFT_CIFFT
emilmont 1:fdd22bb7aa52 39 * @{
emilmont 1:fdd22bb7aa52 40 */
emilmont 1:fdd22bb7aa52 41
emilmont 1:fdd22bb7aa52 42 /**
emilmont 1:fdd22bb7aa52 43 * @details
emilmont 1:fdd22bb7aa52 44 * @brief Processing function for the fixed-point CFFT/CIFFT.
emilmont 1:fdd22bb7aa52 45 * @param[in] *S points to an instance of the fixed-point CFFT/CIFFT structure.
emilmont 1:fdd22bb7aa52 46 * @param[in, out] *pSrc points to the complex data buffer of size <code>2*fftLen</code>. Processing occurs in-place.
emilmont 1:fdd22bb7aa52 47 * @return none.
emilmont 1:fdd22bb7aa52 48 */
emilmont 1:fdd22bb7aa52 49
emilmont 1:fdd22bb7aa52 50 void arm_cfft_radix2_q31(
emilmont 1:fdd22bb7aa52 51 const arm_cfft_radix2_instance_q31 * S,
emilmont 1:fdd22bb7aa52 52 q31_t * pSrc)
emilmont 1:fdd22bb7aa52 53 {
emilmont 1:fdd22bb7aa52 54
emilmont 1:fdd22bb7aa52 55 if(S->ifftFlag == 1u)
emilmont 1:fdd22bb7aa52 56 {
emilmont 1:fdd22bb7aa52 57 arm_radix2_butterfly_inverse_q31(pSrc, S->fftLen,
emilmont 1:fdd22bb7aa52 58 S->pTwiddle, S->twidCoefModifier);
emilmont 1:fdd22bb7aa52 59 }
emilmont 1:fdd22bb7aa52 60 else
emilmont 1:fdd22bb7aa52 61 {
emilmont 1:fdd22bb7aa52 62 arm_radix2_butterfly_q31(pSrc, S->fftLen,
emilmont 1:fdd22bb7aa52 63 S->pTwiddle, S->twidCoefModifier);
emilmont 1:fdd22bb7aa52 64 }
emilmont 1:fdd22bb7aa52 65
emilmont 1:fdd22bb7aa52 66 arm_bitreversal_q31(pSrc, S->fftLen, S->bitRevFactor, S->pBitRevTable);
emilmont 1:fdd22bb7aa52 67 }
emilmont 1:fdd22bb7aa52 68
emilmont 1:fdd22bb7aa52 69 /**
emilmont 1:fdd22bb7aa52 70 * @} end of Radix2_CFFT_CIFFT group
emilmont 1:fdd22bb7aa52 71 */
emilmont 1:fdd22bb7aa52 72
emilmont 1:fdd22bb7aa52 73 void arm_radix2_butterfly_q31(
emilmont 1:fdd22bb7aa52 74 q31_t * pSrc,
emilmont 1:fdd22bb7aa52 75 uint32_t fftLen,
emilmont 1:fdd22bb7aa52 76 q31_t * pCoef,
emilmont 1:fdd22bb7aa52 77 uint16_t twidCoefModifier)
emilmont 1:fdd22bb7aa52 78 {
emilmont 1:fdd22bb7aa52 79
emilmont 1:fdd22bb7aa52 80 int i, j, k, l;
emilmont 1:fdd22bb7aa52 81 int n1, n2, ia;
emilmont 1:fdd22bb7aa52 82 q31_t xt, yt, cosVal, sinVal;
emilmont 1:fdd22bb7aa52 83
emilmont 1:fdd22bb7aa52 84 //N = fftLen;
emilmont 1:fdd22bb7aa52 85 n2 = fftLen;
emilmont 1:fdd22bb7aa52 86
emilmont 1:fdd22bb7aa52 87 n1 = n2;
emilmont 1:fdd22bb7aa52 88 n2 = n2 >> 1;
emilmont 1:fdd22bb7aa52 89 ia = 0;
emilmont 1:fdd22bb7aa52 90
emilmont 1:fdd22bb7aa52 91 // loop for groups
emilmont 1:fdd22bb7aa52 92 for (i = 0; i < n2; i++)
emilmont 1:fdd22bb7aa52 93 {
emilmont 1:fdd22bb7aa52 94 cosVal = pCoef[ia * 2];
emilmont 1:fdd22bb7aa52 95 sinVal = pCoef[(ia * 2) + 1];
emilmont 1:fdd22bb7aa52 96 ia = ia + twidCoefModifier;
emilmont 1:fdd22bb7aa52 97
emilmont 1:fdd22bb7aa52 98 l = i + n2;
emilmont 1:fdd22bb7aa52 99 xt = (pSrc[2 * i] >> 2u) - (pSrc[2 * l] >> 2u);
emilmont 1:fdd22bb7aa52 100 pSrc[2 * i] = ((pSrc[2 * i] >> 2u) + (pSrc[2 * l] >> 2u)) >> 1u;
emilmont 1:fdd22bb7aa52 101
emilmont 1:fdd22bb7aa52 102 yt = (pSrc[2 * i + 1] >> 2u) - (pSrc[2 * l + 1] >> 2u);
emilmont 1:fdd22bb7aa52 103 pSrc[2 * i + 1] =
emilmont 1:fdd22bb7aa52 104 ((pSrc[2 * l + 1] >> 2u) + (pSrc[2 * i + 1] >> 2u)) >> 1u;
emilmont 1:fdd22bb7aa52 105
emilmont 1:fdd22bb7aa52 106 pSrc[2u * l] = (((int32_t) (((q63_t) xt * cosVal) >> 32)) +
emilmont 1:fdd22bb7aa52 107 ((int32_t) (((q63_t) yt * sinVal) >> 32)));
emilmont 1:fdd22bb7aa52 108
emilmont 1:fdd22bb7aa52 109 pSrc[2u * l + 1u] = (((int32_t) (((q63_t) yt * cosVal) >> 32)) -
emilmont 1:fdd22bb7aa52 110 ((int32_t) (((q63_t) xt * sinVal) >> 32)));
emilmont 1:fdd22bb7aa52 111
emilmont 1:fdd22bb7aa52 112 } // groups loop end
emilmont 1:fdd22bb7aa52 113
emilmont 1:fdd22bb7aa52 114 twidCoefModifier = twidCoefModifier << 1u;
emilmont 1:fdd22bb7aa52 115
emilmont 1:fdd22bb7aa52 116 // loop for stage
emilmont 1:fdd22bb7aa52 117 for (k = fftLen / 2; k > 2; k = k >> 1)
emilmont 1:fdd22bb7aa52 118 {
emilmont 1:fdd22bb7aa52 119 n1 = n2;
emilmont 1:fdd22bb7aa52 120 n2 = n2 >> 1;
emilmont 1:fdd22bb7aa52 121 ia = 0;
emilmont 1:fdd22bb7aa52 122
emilmont 1:fdd22bb7aa52 123 // loop for groups
emilmont 1:fdd22bb7aa52 124 for (j = 0; j < n2; j++)
emilmont 1:fdd22bb7aa52 125 {
emilmont 1:fdd22bb7aa52 126 cosVal = pCoef[ia * 2];
emilmont 1:fdd22bb7aa52 127 sinVal = pCoef[(ia * 2) + 1];
emilmont 1:fdd22bb7aa52 128 ia = ia + twidCoefModifier;
emilmont 1:fdd22bb7aa52 129
emilmont 1:fdd22bb7aa52 130 // loop for butterfly
emilmont 1:fdd22bb7aa52 131 for (i = j; i < fftLen; i += n1)
emilmont 1:fdd22bb7aa52 132 {
emilmont 1:fdd22bb7aa52 133 l = i + n2;
emilmont 1:fdd22bb7aa52 134 xt = pSrc[2 * i] - pSrc[2 * l];
emilmont 1:fdd22bb7aa52 135 pSrc[2 * i] = (pSrc[2 * i] + pSrc[2 * l]) >> 1u;
emilmont 1:fdd22bb7aa52 136
emilmont 1:fdd22bb7aa52 137 yt = pSrc[2 * i + 1] - pSrc[2 * l + 1];
emilmont 1:fdd22bb7aa52 138 pSrc[2 * i + 1] = (pSrc[2 * l + 1] + pSrc[2 * i + 1]) >> 1u;
emilmont 1:fdd22bb7aa52 139
emilmont 1:fdd22bb7aa52 140 pSrc[2u * l] = (((int32_t) (((q63_t) xt * cosVal) >> 32)) +
emilmont 1:fdd22bb7aa52 141 ((int32_t) (((q63_t) yt * sinVal) >> 32)));
emilmont 1:fdd22bb7aa52 142
emilmont 1:fdd22bb7aa52 143 pSrc[2u * l + 1u] = (((int32_t) (((q63_t) yt * cosVal) >> 32)) -
emilmont 1:fdd22bb7aa52 144 ((int32_t) (((q63_t) xt * sinVal) >> 32)));
emilmont 1:fdd22bb7aa52 145
emilmont 1:fdd22bb7aa52 146 } // butterfly loop end
emilmont 1:fdd22bb7aa52 147
emilmont 1:fdd22bb7aa52 148 } // groups loop end
emilmont 1:fdd22bb7aa52 149
emilmont 1:fdd22bb7aa52 150 twidCoefModifier = twidCoefModifier << 1u;
emilmont 1:fdd22bb7aa52 151 } // stages loop end
emilmont 1:fdd22bb7aa52 152
emilmont 1:fdd22bb7aa52 153 n1 = n2;
emilmont 1:fdd22bb7aa52 154 n2 = n2 >> 1;
emilmont 1:fdd22bb7aa52 155 ia = 0;
emilmont 1:fdd22bb7aa52 156
emilmont 1:fdd22bb7aa52 157 cosVal = pCoef[ia * 2];
emilmont 1:fdd22bb7aa52 158 sinVal = pCoef[(ia * 2) + 1];
emilmont 1:fdd22bb7aa52 159 ia = ia + twidCoefModifier;
emilmont 1:fdd22bb7aa52 160
emilmont 1:fdd22bb7aa52 161 // loop for butterfly
emilmont 1:fdd22bb7aa52 162 for (i = 0; i < fftLen; i += n1)
emilmont 1:fdd22bb7aa52 163 {
emilmont 1:fdd22bb7aa52 164 l = i + n2;
emilmont 1:fdd22bb7aa52 165 xt = pSrc[2 * i] - pSrc[2 * l];
emilmont 1:fdd22bb7aa52 166 pSrc[2 * i] = (pSrc[2 * i] + pSrc[2 * l]);
emilmont 1:fdd22bb7aa52 167
emilmont 1:fdd22bb7aa52 168 yt = pSrc[2 * i + 1] - pSrc[2 * l + 1];
emilmont 1:fdd22bb7aa52 169 pSrc[2 * i + 1] = (pSrc[2 * l + 1] + pSrc[2 * i + 1]);
emilmont 1:fdd22bb7aa52 170
emilmont 1:fdd22bb7aa52 171 pSrc[2u * l] = xt;
emilmont 1:fdd22bb7aa52 172
emilmont 1:fdd22bb7aa52 173 pSrc[2u * l + 1u] = yt;
emilmont 1:fdd22bb7aa52 174
emilmont 1:fdd22bb7aa52 175 i += n1;
emilmont 1:fdd22bb7aa52 176 l = i + n2;
emilmont 1:fdd22bb7aa52 177
emilmont 1:fdd22bb7aa52 178 xt = pSrc[2 * i] - pSrc[2 * l];
emilmont 1:fdd22bb7aa52 179 pSrc[2 * i] = (pSrc[2 * i] + pSrc[2 * l]);
emilmont 1:fdd22bb7aa52 180
emilmont 1:fdd22bb7aa52 181 yt = pSrc[2 * i + 1] - pSrc[2 * l + 1];
emilmont 1:fdd22bb7aa52 182 pSrc[2 * i + 1] = (pSrc[2 * l + 1] + pSrc[2 * i + 1]);
emilmont 1:fdd22bb7aa52 183
emilmont 1:fdd22bb7aa52 184 pSrc[2u * l] = xt;
emilmont 1:fdd22bb7aa52 185
emilmont 1:fdd22bb7aa52 186 pSrc[2u * l + 1u] = yt;
emilmont 1:fdd22bb7aa52 187
emilmont 1:fdd22bb7aa52 188 } // butterfly loop end
emilmont 1:fdd22bb7aa52 189
emilmont 1:fdd22bb7aa52 190 }
emilmont 1:fdd22bb7aa52 191
emilmont 1:fdd22bb7aa52 192
emilmont 1:fdd22bb7aa52 193 void arm_radix2_butterfly_inverse_q31(
emilmont 1:fdd22bb7aa52 194 q31_t * pSrc,
emilmont 1:fdd22bb7aa52 195 uint32_t fftLen,
emilmont 1:fdd22bb7aa52 196 q31_t * pCoef,
emilmont 1:fdd22bb7aa52 197 uint16_t twidCoefModifier)
emilmont 1:fdd22bb7aa52 198 {
emilmont 1:fdd22bb7aa52 199
emilmont 1:fdd22bb7aa52 200 int i, j, k, l;
emilmont 1:fdd22bb7aa52 201 int n1, n2, ia;
emilmont 1:fdd22bb7aa52 202 q31_t xt, yt, cosVal, sinVal;
emilmont 1:fdd22bb7aa52 203
emilmont 1:fdd22bb7aa52 204 //N = fftLen;
emilmont 1:fdd22bb7aa52 205 n2 = fftLen;
emilmont 1:fdd22bb7aa52 206
emilmont 1:fdd22bb7aa52 207 n1 = n2;
emilmont 1:fdd22bb7aa52 208 n2 = n2 >> 1;
emilmont 1:fdd22bb7aa52 209 ia = 0;
emilmont 1:fdd22bb7aa52 210
emilmont 1:fdd22bb7aa52 211 // loop for groups
emilmont 1:fdd22bb7aa52 212 for (i = 0; i < n2; i++)
emilmont 1:fdd22bb7aa52 213 {
emilmont 1:fdd22bb7aa52 214 cosVal = pCoef[ia * 2];
emilmont 1:fdd22bb7aa52 215 sinVal = pCoef[(ia * 2) + 1];
emilmont 1:fdd22bb7aa52 216 ia = ia + twidCoefModifier;
emilmont 1:fdd22bb7aa52 217
emilmont 1:fdd22bb7aa52 218 l = i + n2;
emilmont 1:fdd22bb7aa52 219 xt = (pSrc[2 * i] >> 2u) - (pSrc[2 * l] >> 2u);
emilmont 1:fdd22bb7aa52 220 pSrc[2 * i] = ((pSrc[2 * i] >> 2u) + (pSrc[2 * l] >> 2u)) >> 1u;
emilmont 1:fdd22bb7aa52 221
emilmont 1:fdd22bb7aa52 222 yt = (pSrc[2 * i + 1] >> 2u) - (pSrc[2 * l + 1] >> 2u);
emilmont 1:fdd22bb7aa52 223 pSrc[2 * i + 1] =
emilmont 1:fdd22bb7aa52 224 ((pSrc[2 * l + 1] >> 2u) + (pSrc[2 * i + 1] >> 2u)) >> 1u;
emilmont 1:fdd22bb7aa52 225
emilmont 1:fdd22bb7aa52 226 pSrc[2u * l] = (((int32_t) (((q63_t) xt * cosVal) >> 32)) -
emilmont 1:fdd22bb7aa52 227 ((int32_t) (((q63_t) yt * sinVal) >> 32)));
emilmont 1:fdd22bb7aa52 228
emilmont 1:fdd22bb7aa52 229 pSrc[2u * l + 1u] = (((int32_t) (((q63_t) yt * cosVal) >> 32)) +
emilmont 1:fdd22bb7aa52 230 ((int32_t) (((q63_t) xt * sinVal) >> 32)));
emilmont 1:fdd22bb7aa52 231
emilmont 1:fdd22bb7aa52 232 } // groups loop end
emilmont 1:fdd22bb7aa52 233
emilmont 1:fdd22bb7aa52 234 twidCoefModifier = twidCoefModifier << 1u;
emilmont 1:fdd22bb7aa52 235
emilmont 1:fdd22bb7aa52 236 // loop for stage
emilmont 1:fdd22bb7aa52 237 for (k = fftLen / 2; k > 2; k = k >> 1)
emilmont 1:fdd22bb7aa52 238 {
emilmont 1:fdd22bb7aa52 239 n1 = n2;
emilmont 1:fdd22bb7aa52 240 n2 = n2 >> 1;
emilmont 1:fdd22bb7aa52 241 ia = 0;
emilmont 1:fdd22bb7aa52 242
emilmont 1:fdd22bb7aa52 243 // loop for groups
emilmont 1:fdd22bb7aa52 244 for (j = 0; j < n2; j++)
emilmont 1:fdd22bb7aa52 245 {
emilmont 1:fdd22bb7aa52 246 cosVal = pCoef[ia * 2];
emilmont 1:fdd22bb7aa52 247 sinVal = pCoef[(ia * 2) + 1];
emilmont 1:fdd22bb7aa52 248 ia = ia + twidCoefModifier;
emilmont 1:fdd22bb7aa52 249
emilmont 1:fdd22bb7aa52 250 // loop for butterfly
emilmont 1:fdd22bb7aa52 251 for (i = j; i < fftLen; i += n1)
emilmont 1:fdd22bb7aa52 252 {
emilmont 1:fdd22bb7aa52 253 l = i + n2;
emilmont 1:fdd22bb7aa52 254 xt = pSrc[2 * i] - pSrc[2 * l];
emilmont 1:fdd22bb7aa52 255 pSrc[2 * i] = (pSrc[2 * i] + pSrc[2 * l]) >> 1u;
emilmont 1:fdd22bb7aa52 256
emilmont 1:fdd22bb7aa52 257 yt = pSrc[2 * i + 1] - pSrc[2 * l + 1];
emilmont 1:fdd22bb7aa52 258 pSrc[2 * i + 1] = (pSrc[2 * l + 1] + pSrc[2 * i + 1]) >> 1u;
emilmont 1:fdd22bb7aa52 259
emilmont 1:fdd22bb7aa52 260 pSrc[2u * l] = (((int32_t) (((q63_t) xt * cosVal) >> 32)) -
emilmont 1:fdd22bb7aa52 261 ((int32_t) (((q63_t) yt * sinVal) >> 32)));
emilmont 1:fdd22bb7aa52 262
emilmont 1:fdd22bb7aa52 263 pSrc[2u * l + 1u] = (((int32_t) (((q63_t) yt * cosVal) >> 32)) +
emilmont 1:fdd22bb7aa52 264 ((int32_t) (((q63_t) xt * sinVal) >> 32)));
emilmont 1:fdd22bb7aa52 265
emilmont 1:fdd22bb7aa52 266 } // butterfly loop end
emilmont 1:fdd22bb7aa52 267
emilmont 1:fdd22bb7aa52 268 } // groups loop end
emilmont 1:fdd22bb7aa52 269
emilmont 1:fdd22bb7aa52 270 twidCoefModifier = twidCoefModifier << 1u;
emilmont 1:fdd22bb7aa52 271 } // stages loop end
emilmont 1:fdd22bb7aa52 272
emilmont 1:fdd22bb7aa52 273 n1 = n2;
emilmont 1:fdd22bb7aa52 274 n2 = n2 >> 1;
emilmont 1:fdd22bb7aa52 275 ia = 0;
emilmont 1:fdd22bb7aa52 276
emilmont 1:fdd22bb7aa52 277 cosVal = pCoef[ia * 2];
emilmont 1:fdd22bb7aa52 278 sinVal = pCoef[(ia * 2) + 1];
emilmont 1:fdd22bb7aa52 279 ia = ia + twidCoefModifier;
emilmont 1:fdd22bb7aa52 280
emilmont 1:fdd22bb7aa52 281 // loop for butterfly
emilmont 1:fdd22bb7aa52 282 for (i = 0; i < fftLen; i += n1)
emilmont 1:fdd22bb7aa52 283 {
emilmont 1:fdd22bb7aa52 284 l = i + n2;
emilmont 1:fdd22bb7aa52 285 xt = pSrc[2 * i] - pSrc[2 * l];
emilmont 1:fdd22bb7aa52 286 pSrc[2 * i] = (pSrc[2 * i] + pSrc[2 * l]);
emilmont 1:fdd22bb7aa52 287
emilmont 1:fdd22bb7aa52 288 yt = pSrc[2 * i + 1] - pSrc[2 * l + 1];
emilmont 1:fdd22bb7aa52 289 pSrc[2 * i + 1] = (pSrc[2 * l + 1] + pSrc[2 * i + 1]);
emilmont 1:fdd22bb7aa52 290
emilmont 1:fdd22bb7aa52 291 pSrc[2u * l] = xt;
emilmont 1:fdd22bb7aa52 292
emilmont 1:fdd22bb7aa52 293 pSrc[2u * l + 1u] = yt;
emilmont 1:fdd22bb7aa52 294
emilmont 1:fdd22bb7aa52 295 i += n1;
emilmont 1:fdd22bb7aa52 296 l = i + n2;
emilmont 1:fdd22bb7aa52 297
emilmont 1:fdd22bb7aa52 298 xt = pSrc[2 * i] - pSrc[2 * l];
emilmont 1:fdd22bb7aa52 299 pSrc[2 * i] = (pSrc[2 * i] + pSrc[2 * l]);
emilmont 1:fdd22bb7aa52 300
emilmont 1:fdd22bb7aa52 301 yt = pSrc[2 * i + 1] - pSrc[2 * l + 1];
emilmont 1:fdd22bb7aa52 302 pSrc[2 * i + 1] = (pSrc[2 * l + 1] + pSrc[2 * i + 1]);
emilmont 1:fdd22bb7aa52 303
emilmont 1:fdd22bb7aa52 304 pSrc[2u * l] = xt;
emilmont 1:fdd22bb7aa52 305
emilmont 1:fdd22bb7aa52 306 pSrc[2u * l + 1u] = yt;
emilmont 1:fdd22bb7aa52 307
emilmont 1:fdd22bb7aa52 308 } // butterfly loop end
emilmont 1:fdd22bb7aa52 309
emilmont 1:fdd22bb7aa52 310 }