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:
mbed_official
Date:
Fri Nov 08 13:45:10 2013 +0000
Revision:
3:7a284390b0ce
Parent:
2:da51fb522205
Child:
5:3762170b6d4d
Synchronized with git revision e69956aba2f68a2a26ac26b051f8d349deaa1ce8

Who changed what in which revision?

UserRevisionLine numberNew contents of line
emilmont 1:fdd22bb7aa52 1 /* ----------------------------------------------------------------------
mbed_official 3:7a284390b0ce 2 * Copyright (C) 2010-2013 ARM Limited. All rights reserved.
emilmont 1:fdd22bb7aa52 3 *
mbed_official 3:7a284390b0ce 4 * $Date: 17. January 2013
mbed_official 3:7a284390b0ce 5 * $Revision: V1.4.1
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 *
mbed_official 3:7a284390b0ce 15 * Redistribution and use in source and binary forms, with or without
mbed_official 3:7a284390b0ce 16 * modification, are permitted provided that the following conditions
mbed_official 3:7a284390b0ce 17 * are met:
mbed_official 3:7a284390b0ce 18 * - Redistributions of source code must retain the above copyright
mbed_official 3:7a284390b0ce 19 * notice, this list of conditions and the following disclaimer.
mbed_official 3:7a284390b0ce 20 * - Redistributions in binary form must reproduce the above copyright
mbed_official 3:7a284390b0ce 21 * notice, this list of conditions and the following disclaimer in
mbed_official 3:7a284390b0ce 22 * the documentation and/or other materials provided with the
mbed_official 3:7a284390b0ce 23 * distribution.
mbed_official 3:7a284390b0ce 24 * - Neither the name of ARM LIMITED nor the names of its contributors
mbed_official 3:7a284390b0ce 25 * may be used to endorse or promote products derived from this
mbed_official 3:7a284390b0ce 26 * software without specific prior written permission.
mbed_official 3:7a284390b0ce 27 *
mbed_official 3:7a284390b0ce 28 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
mbed_official 3:7a284390b0ce 29 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
mbed_official 3:7a284390b0ce 30 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
mbed_official 3:7a284390b0ce 31 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
mbed_official 3:7a284390b0ce 32 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
mbed_official 3:7a284390b0ce 33 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
mbed_official 3:7a284390b0ce 34 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
mbed_official 3:7a284390b0ce 35 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
mbed_official 3:7a284390b0ce 36 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
mbed_official 3:7a284390b0ce 37 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
mbed_official 3:7a284390b0ce 38 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
mbed_official 3:7a284390b0ce 39 * POSSIBILITY OF SUCH DAMAGE.
emilmont 1:fdd22bb7aa52 40 * -------------------------------------------------------------------- */
emilmont 1:fdd22bb7aa52 41
emilmont 1:fdd22bb7aa52 42 #include "arm_math.h"
emilmont 1:fdd22bb7aa52 43
emilmont 1:fdd22bb7aa52 44 void arm_radix2_butterfly_q31(
emilmont 1:fdd22bb7aa52 45 q31_t * pSrc,
emilmont 1:fdd22bb7aa52 46 uint32_t fftLen,
emilmont 1:fdd22bb7aa52 47 q31_t * pCoef,
mbed_official 3:7a284390b0ce 48 uint16_t twidCoefModifier);
mbed_official 3:7a284390b0ce 49
mbed_official 3:7a284390b0ce 50 void arm_radix2_butterfly_inverse_q31(
mbed_official 3:7a284390b0ce 51 q31_t * pSrc,
mbed_official 3:7a284390b0ce 52 uint32_t fftLen,
mbed_official 3:7a284390b0ce 53 q31_t * pCoef,
mbed_official 3:7a284390b0ce 54 uint16_t twidCoefModifier);
mbed_official 3:7a284390b0ce 55
mbed_official 3:7a284390b0ce 56 void arm_bitreversal_q31(
mbed_official 3:7a284390b0ce 57 q31_t * pSrc,
mbed_official 3:7a284390b0ce 58 uint32_t fftLen,
mbed_official 3:7a284390b0ce 59 uint16_t bitRevFactor,
mbed_official 3:7a284390b0ce 60 uint16_t * pBitRevTab);
mbed_official 3:7a284390b0ce 61
mbed_official 3:7a284390b0ce 62 /**
mbed_official 3:7a284390b0ce 63 * @ingroup groupTransforms
mbed_official 3:7a284390b0ce 64 */
mbed_official 3:7a284390b0ce 65
mbed_official 3:7a284390b0ce 66 /**
mbed_official 3:7a284390b0ce 67 * @addtogroup ComplexFFT
mbed_official 3:7a284390b0ce 68 * @{
mbed_official 3:7a284390b0ce 69 */
mbed_official 3:7a284390b0ce 70
mbed_official 3:7a284390b0ce 71 /**
mbed_official 3:7a284390b0ce 72 * @details
mbed_official 3:7a284390b0ce 73 * @brief Processing function for the fixed-point CFFT/CIFFT.
mbed_official 3:7a284390b0ce 74 * @param[in] *S points to an instance of the fixed-point CFFT/CIFFT structure.
mbed_official 3:7a284390b0ce 75 * @param[in, out] *pSrc points to the complex data buffer of size <code>2*fftLen</code>. Processing occurs in-place.
mbed_official 3:7a284390b0ce 76 * @return none.
mbed_official 3:7a284390b0ce 77 */
mbed_official 3:7a284390b0ce 78
mbed_official 3:7a284390b0ce 79 void arm_cfft_radix2_q31(
mbed_official 3:7a284390b0ce 80 const arm_cfft_radix2_instance_q31 * S,
mbed_official 3:7a284390b0ce 81 q31_t * pSrc)
emilmont 1:fdd22bb7aa52 82 {
emilmont 1:fdd22bb7aa52 83
mbed_official 3:7a284390b0ce 84 if(S->ifftFlag == 1u)
mbed_official 3:7a284390b0ce 85 {
mbed_official 3:7a284390b0ce 86 arm_radix2_butterfly_inverse_q31(pSrc, S->fftLen,
mbed_official 3:7a284390b0ce 87 S->pTwiddle, S->twidCoefModifier);
mbed_official 3:7a284390b0ce 88 }
mbed_official 3:7a284390b0ce 89 else
mbed_official 3:7a284390b0ce 90 {
mbed_official 3:7a284390b0ce 91 arm_radix2_butterfly_q31(pSrc, S->fftLen,
mbed_official 3:7a284390b0ce 92 S->pTwiddle, S->twidCoefModifier);
mbed_official 3:7a284390b0ce 93 }
emilmont 1:fdd22bb7aa52 94
mbed_official 3:7a284390b0ce 95 arm_bitreversal_q31(pSrc, S->fftLen, S->bitRevFactor, S->pBitRevTable);
mbed_official 3:7a284390b0ce 96 }
emilmont 1:fdd22bb7aa52 97
mbed_official 3:7a284390b0ce 98 /**
mbed_official 3:7a284390b0ce 99 * @} end of ComplexFFT group
mbed_official 3:7a284390b0ce 100 */
emilmont 1:fdd22bb7aa52 101
mbed_official 3:7a284390b0ce 102 void arm_radix2_butterfly_q31(
mbed_official 3:7a284390b0ce 103 q31_t * pSrc,
mbed_official 3:7a284390b0ce 104 uint32_t fftLen,
mbed_official 3:7a284390b0ce 105 q31_t * pCoef,
mbed_official 3:7a284390b0ce 106 uint16_t twidCoefModifier)
mbed_official 3:7a284390b0ce 107 {
emilmont 1:fdd22bb7aa52 108
mbed_official 3:7a284390b0ce 109 unsigned i, j, k, l, m;
mbed_official 3:7a284390b0ce 110 unsigned n1, n2, ia;
mbed_official 3:7a284390b0ce 111 q31_t xt, yt, cosVal, sinVal;
mbed_official 3:7a284390b0ce 112 q31_t p0, p1;
mbed_official 3:7a284390b0ce 113
mbed_official 3:7a284390b0ce 114 //N = fftLen;
mbed_official 3:7a284390b0ce 115 n2 = fftLen;
emilmont 1:fdd22bb7aa52 116
mbed_official 3:7a284390b0ce 117 n1 = n2;
mbed_official 3:7a284390b0ce 118 n2 = n2 >> 1;
mbed_official 3:7a284390b0ce 119 ia = 0;
emilmont 1:fdd22bb7aa52 120
mbed_official 3:7a284390b0ce 121 // loop for groups
mbed_official 3:7a284390b0ce 122 for (i = 0; i < n2; i++)
mbed_official 3:7a284390b0ce 123 {
emilmont 1:fdd22bb7aa52 124 cosVal = pCoef[ia * 2];
emilmont 1:fdd22bb7aa52 125 sinVal = pCoef[(ia * 2) + 1];
emilmont 1:fdd22bb7aa52 126 ia = ia + twidCoefModifier;
emilmont 1:fdd22bb7aa52 127
mbed_official 3:7a284390b0ce 128 l = i + n2;
mbed_official 3:7a284390b0ce 129 xt = (pSrc[2 * i] >> 2u) - (pSrc[2 * l] >> 2u);
mbed_official 3:7a284390b0ce 130 pSrc[2 * i] = ((pSrc[2 * i] >> 2u) + (pSrc[2 * l] >> 2u)) >> 1u;
mbed_official 3:7a284390b0ce 131
mbed_official 3:7a284390b0ce 132 yt = (pSrc[2 * i + 1] >> 2u) - (pSrc[2 * l + 1] >> 2u);
mbed_official 3:7a284390b0ce 133 pSrc[2 * i + 1] =
mbed_official 3:7a284390b0ce 134 ((pSrc[2 * l + 1] >> 2u) + (pSrc[2 * i + 1] >> 2u)) >> 1u;
emilmont 1:fdd22bb7aa52 135
mbed_official 3:7a284390b0ce 136 mult_32x32_keep32_R(p0, xt, cosVal);
mbed_official 3:7a284390b0ce 137 mult_32x32_keep32_R(p1, yt, cosVal);
mbed_official 3:7a284390b0ce 138 multAcc_32x32_keep32_R(p0, yt, sinVal);
mbed_official 3:7a284390b0ce 139 multSub_32x32_keep32_R(p1, xt, sinVal);
mbed_official 3:7a284390b0ce 140
mbed_official 3:7a284390b0ce 141 pSrc[2u * l] = p0;
mbed_official 3:7a284390b0ce 142 pSrc[2u * l + 1u] = p1;
emilmont 1:fdd22bb7aa52 143
mbed_official 3:7a284390b0ce 144 } // groups loop end
mbed_official 3:7a284390b0ce 145
mbed_official 3:7a284390b0ce 146 twidCoefModifier <<= 1u;
emilmont 1:fdd22bb7aa52 147
mbed_official 3:7a284390b0ce 148 // loop for stage
mbed_official 3:7a284390b0ce 149 for (k = fftLen / 2; k > 2; k = k >> 1)
mbed_official 3:7a284390b0ce 150 {
mbed_official 3:7a284390b0ce 151 n1 = n2;
mbed_official 3:7a284390b0ce 152 n2 = n2 >> 1;
mbed_official 3:7a284390b0ce 153 ia = 0;
emilmont 1:fdd22bb7aa52 154
mbed_official 3:7a284390b0ce 155 // loop for groups
mbed_official 3:7a284390b0ce 156 for (j = 0; j < n2; j++)
mbed_official 3:7a284390b0ce 157 {
mbed_official 3:7a284390b0ce 158 cosVal = pCoef[ia * 2];
mbed_official 3:7a284390b0ce 159 sinVal = pCoef[(ia * 2) + 1];
mbed_official 3:7a284390b0ce 160 ia = ia + twidCoefModifier;
emilmont 1:fdd22bb7aa52 161
mbed_official 3:7a284390b0ce 162 // loop for butterfly
mbed_official 3:7a284390b0ce 163 i = j;
mbed_official 3:7a284390b0ce 164 m = fftLen / n1;
mbed_official 3:7a284390b0ce 165 do
mbed_official 3:7a284390b0ce 166 {
mbed_official 3:7a284390b0ce 167 l = i + n2;
mbed_official 3:7a284390b0ce 168 xt = pSrc[2 * i] - pSrc[2 * l];
mbed_official 3:7a284390b0ce 169 pSrc[2 * i] = (pSrc[2 * i] + pSrc[2 * l]) >> 1u;
mbed_official 3:7a284390b0ce 170
mbed_official 3:7a284390b0ce 171 yt = pSrc[2 * i + 1] - pSrc[2 * l + 1];
mbed_official 3:7a284390b0ce 172 pSrc[2 * i + 1] = (pSrc[2 * l + 1] + pSrc[2 * i + 1]) >> 1u;
emilmont 1:fdd22bb7aa52 173
mbed_official 3:7a284390b0ce 174 mult_32x32_keep32_R(p0, xt, cosVal);
mbed_official 3:7a284390b0ce 175 mult_32x32_keep32_R(p1, yt, cosVal);
mbed_official 3:7a284390b0ce 176 multAcc_32x32_keep32_R(p0, yt, sinVal);
mbed_official 3:7a284390b0ce 177 multSub_32x32_keep32_R(p1, xt, sinVal);
mbed_official 3:7a284390b0ce 178
mbed_official 3:7a284390b0ce 179 pSrc[2u * l] = p0;
mbed_official 3:7a284390b0ce 180 pSrc[2u * l + 1u] = p1;
mbed_official 3:7a284390b0ce 181 i += n1;
mbed_official 3:7a284390b0ce 182 m--;
mbed_official 3:7a284390b0ce 183 } while( m > 0); // butterfly loop end
emilmont 1:fdd22bb7aa52 184
mbed_official 3:7a284390b0ce 185 } // groups loop end
mbed_official 3:7a284390b0ce 186
mbed_official 3:7a284390b0ce 187 twidCoefModifier <<= 1u;
mbed_official 3:7a284390b0ce 188 } // stages loop end
emilmont 1:fdd22bb7aa52 189
mbed_official 3:7a284390b0ce 190 n1 = n2;
mbed_official 3:7a284390b0ce 191 n2 = n2 >> 1;
mbed_official 3:7a284390b0ce 192 ia = 0;
emilmont 1:fdd22bb7aa52 193
mbed_official 3:7a284390b0ce 194 cosVal = pCoef[ia * 2];
mbed_official 3:7a284390b0ce 195 sinVal = pCoef[(ia * 2) + 1];
mbed_official 3:7a284390b0ce 196 ia = ia + twidCoefModifier;
emilmont 1:fdd22bb7aa52 197
mbed_official 3:7a284390b0ce 198 // loop for butterfly
mbed_official 3:7a284390b0ce 199 for (i = 0; i < fftLen; i += n1)
mbed_official 3:7a284390b0ce 200 {
mbed_official 3:7a284390b0ce 201 l = i + n2;
mbed_official 3:7a284390b0ce 202 xt = pSrc[2 * i] - pSrc[2 * l];
mbed_official 3:7a284390b0ce 203 pSrc[2 * i] = (pSrc[2 * i] + pSrc[2 * l]);
emilmont 1:fdd22bb7aa52 204
mbed_official 3:7a284390b0ce 205 yt = pSrc[2 * i + 1] - pSrc[2 * l + 1];
mbed_official 3:7a284390b0ce 206 pSrc[2 * i + 1] = (pSrc[2 * l + 1] + pSrc[2 * i + 1]);
emilmont 1:fdd22bb7aa52 207
mbed_official 3:7a284390b0ce 208 pSrc[2u * l] = xt;
mbed_official 3:7a284390b0ce 209
mbed_official 3:7a284390b0ce 210 pSrc[2u * l + 1u] = yt;
emilmont 1:fdd22bb7aa52 211
mbed_official 3:7a284390b0ce 212 i += n1;
mbed_official 3:7a284390b0ce 213 l = i + n2;
mbed_official 3:7a284390b0ce 214
mbed_official 3:7a284390b0ce 215 xt = pSrc[2 * i] - pSrc[2 * l];
mbed_official 3:7a284390b0ce 216 pSrc[2 * i] = (pSrc[2 * i] + pSrc[2 * l]);
emilmont 1:fdd22bb7aa52 217
mbed_official 3:7a284390b0ce 218 yt = pSrc[2 * i + 1] - pSrc[2 * l + 1];
mbed_official 3:7a284390b0ce 219 pSrc[2 * i + 1] = (pSrc[2 * l + 1] + pSrc[2 * i + 1]);
emilmont 1:fdd22bb7aa52 220
mbed_official 3:7a284390b0ce 221 pSrc[2u * l] = xt;
emilmont 1:fdd22bb7aa52 222
mbed_official 3:7a284390b0ce 223 pSrc[2u * l + 1u] = yt;
mbed_official 3:7a284390b0ce 224
mbed_official 3:7a284390b0ce 225 } // butterfly loop end
emilmont 1:fdd22bb7aa52 226
emilmont 1:fdd22bb7aa52 227 }
emilmont 1:fdd22bb7aa52 228
emilmont 1:fdd22bb7aa52 229
emilmont 1:fdd22bb7aa52 230 void arm_radix2_butterfly_inverse_q31(
mbed_official 3:7a284390b0ce 231 q31_t * pSrc,
mbed_official 3:7a284390b0ce 232 uint32_t fftLen,
mbed_official 3:7a284390b0ce 233 q31_t * pCoef,
mbed_official 3:7a284390b0ce 234 uint16_t twidCoefModifier)
emilmont 1:fdd22bb7aa52 235 {
emilmont 1:fdd22bb7aa52 236
mbed_official 3:7a284390b0ce 237 unsigned i, j, k, l;
mbed_official 3:7a284390b0ce 238 unsigned n1, n2, ia;
mbed_official 3:7a284390b0ce 239 q31_t xt, yt, cosVal, sinVal;
mbed_official 3:7a284390b0ce 240 q31_t p0, p1;
emilmont 1:fdd22bb7aa52 241
mbed_official 3:7a284390b0ce 242 //N = fftLen;
mbed_official 3:7a284390b0ce 243 n2 = fftLen;
emilmont 1:fdd22bb7aa52 244
mbed_official 3:7a284390b0ce 245 n1 = n2;
mbed_official 3:7a284390b0ce 246 n2 = n2 >> 1;
mbed_official 3:7a284390b0ce 247 ia = 0;
emilmont 1:fdd22bb7aa52 248
mbed_official 3:7a284390b0ce 249 // loop for groups
mbed_official 3:7a284390b0ce 250 for (i = 0; i < n2; i++)
mbed_official 3:7a284390b0ce 251 {
emilmont 1:fdd22bb7aa52 252 cosVal = pCoef[ia * 2];
emilmont 1:fdd22bb7aa52 253 sinVal = pCoef[(ia * 2) + 1];
emilmont 1:fdd22bb7aa52 254 ia = ia + twidCoefModifier;
emilmont 1:fdd22bb7aa52 255
mbed_official 3:7a284390b0ce 256 l = i + n2;
mbed_official 3:7a284390b0ce 257 xt = (pSrc[2 * i] >> 2u) - (pSrc[2 * l] >> 2u);
mbed_official 3:7a284390b0ce 258 pSrc[2 * i] = ((pSrc[2 * i] >> 2u) + (pSrc[2 * l] >> 2u)) >> 1u;
mbed_official 3:7a284390b0ce 259
mbed_official 3:7a284390b0ce 260 yt = (pSrc[2 * i + 1] >> 2u) - (pSrc[2 * l + 1] >> 2u);
mbed_official 3:7a284390b0ce 261 pSrc[2 * i + 1] =
mbed_official 3:7a284390b0ce 262 ((pSrc[2 * l + 1] >> 2u) + (pSrc[2 * i + 1] >> 2u)) >> 1u;
emilmont 1:fdd22bb7aa52 263
mbed_official 3:7a284390b0ce 264 mult_32x32_keep32_R(p0, xt, cosVal);
mbed_official 3:7a284390b0ce 265 mult_32x32_keep32_R(p1, yt, cosVal);
mbed_official 3:7a284390b0ce 266 multSub_32x32_keep32_R(p0, yt, sinVal);
mbed_official 3:7a284390b0ce 267 multAcc_32x32_keep32_R(p1, xt, sinVal);
mbed_official 3:7a284390b0ce 268
mbed_official 3:7a284390b0ce 269 pSrc[2u * l] = p0;
mbed_official 3:7a284390b0ce 270 pSrc[2u * l + 1u] = p1;
mbed_official 3:7a284390b0ce 271 } // groups loop end
emilmont 1:fdd22bb7aa52 272
mbed_official 3:7a284390b0ce 273 twidCoefModifier = twidCoefModifier << 1u;
emilmont 1:fdd22bb7aa52 274
mbed_official 3:7a284390b0ce 275 // loop for stage
mbed_official 3:7a284390b0ce 276 for (k = fftLen / 2; k > 2; k = k >> 1)
mbed_official 3:7a284390b0ce 277 {
mbed_official 3:7a284390b0ce 278 n1 = n2;
mbed_official 3:7a284390b0ce 279 n2 = n2 >> 1;
mbed_official 3:7a284390b0ce 280 ia = 0;
emilmont 1:fdd22bb7aa52 281
mbed_official 3:7a284390b0ce 282 // loop for groups
mbed_official 3:7a284390b0ce 283 for (j = 0; j < n2; j++)
mbed_official 3:7a284390b0ce 284 {
mbed_official 3:7a284390b0ce 285 cosVal = pCoef[ia * 2];
mbed_official 3:7a284390b0ce 286 sinVal = pCoef[(ia * 2) + 1];
mbed_official 3:7a284390b0ce 287 ia = ia + twidCoefModifier;
emilmont 1:fdd22bb7aa52 288
mbed_official 3:7a284390b0ce 289 // loop for butterfly
mbed_official 3:7a284390b0ce 290 for (i = j; i < fftLen; i += n1)
mbed_official 3:7a284390b0ce 291 {
mbed_official 3:7a284390b0ce 292 l = i + n2;
mbed_official 3:7a284390b0ce 293 xt = pSrc[2 * i] - pSrc[2 * l];
mbed_official 3:7a284390b0ce 294 pSrc[2 * i] = (pSrc[2 * i] + pSrc[2 * l]) >> 1u;
mbed_official 3:7a284390b0ce 295
mbed_official 3:7a284390b0ce 296 yt = pSrc[2 * i + 1] - pSrc[2 * l + 1];
mbed_official 3:7a284390b0ce 297 pSrc[2 * i + 1] = (pSrc[2 * l + 1] + pSrc[2 * i + 1]) >> 1u;
emilmont 1:fdd22bb7aa52 298
mbed_official 3:7a284390b0ce 299 mult_32x32_keep32_R(p0, xt, cosVal);
mbed_official 3:7a284390b0ce 300 mult_32x32_keep32_R(p1, yt, cosVal);
mbed_official 3:7a284390b0ce 301 multSub_32x32_keep32_R(p0, yt, sinVal);
mbed_official 3:7a284390b0ce 302 multAcc_32x32_keep32_R(p1, xt, sinVal);
mbed_official 3:7a284390b0ce 303
mbed_official 3:7a284390b0ce 304 pSrc[2u * l] = p0;
mbed_official 3:7a284390b0ce 305 pSrc[2u * l + 1u] = p1;
mbed_official 3:7a284390b0ce 306 } // butterfly loop end
mbed_official 3:7a284390b0ce 307
mbed_official 3:7a284390b0ce 308 } // groups loop end
emilmont 1:fdd22bb7aa52 309
mbed_official 3:7a284390b0ce 310 twidCoefModifier = twidCoefModifier << 1u;
mbed_official 3:7a284390b0ce 311 } // stages loop end
emilmont 1:fdd22bb7aa52 312
mbed_official 3:7a284390b0ce 313 n1 = n2;
mbed_official 3:7a284390b0ce 314 n2 = n2 >> 1;
mbed_official 3:7a284390b0ce 315 ia = 0;
emilmont 1:fdd22bb7aa52 316
mbed_official 3:7a284390b0ce 317 cosVal = pCoef[ia * 2];
mbed_official 3:7a284390b0ce 318 sinVal = pCoef[(ia * 2) + 1];
mbed_official 3:7a284390b0ce 319 ia = ia + twidCoefModifier;
emilmont 1:fdd22bb7aa52 320
mbed_official 3:7a284390b0ce 321 // loop for butterfly
mbed_official 3:7a284390b0ce 322 for (i = 0; i < fftLen; i += n1)
mbed_official 3:7a284390b0ce 323 {
mbed_official 3:7a284390b0ce 324 l = i + n2;
mbed_official 3:7a284390b0ce 325 xt = pSrc[2 * i] - pSrc[2 * l];
mbed_official 3:7a284390b0ce 326 pSrc[2 * i] = (pSrc[2 * i] + pSrc[2 * l]);
emilmont 1:fdd22bb7aa52 327
mbed_official 3:7a284390b0ce 328 yt = pSrc[2 * i + 1] - pSrc[2 * l + 1];
mbed_official 3:7a284390b0ce 329 pSrc[2 * i + 1] = (pSrc[2 * l + 1] + pSrc[2 * i + 1]);
emilmont 1:fdd22bb7aa52 330
mbed_official 3:7a284390b0ce 331 pSrc[2u * l] = xt;
mbed_official 3:7a284390b0ce 332
mbed_official 3:7a284390b0ce 333 pSrc[2u * l + 1u] = yt;
emilmont 1:fdd22bb7aa52 334
mbed_official 3:7a284390b0ce 335 i += n1;
mbed_official 3:7a284390b0ce 336 l = i + n2;
mbed_official 3:7a284390b0ce 337
mbed_official 3:7a284390b0ce 338 xt = pSrc[2 * i] - pSrc[2 * l];
mbed_official 3:7a284390b0ce 339 pSrc[2 * i] = (pSrc[2 * i] + pSrc[2 * l]);
emilmont 1:fdd22bb7aa52 340
mbed_official 3:7a284390b0ce 341 yt = pSrc[2 * i + 1] - pSrc[2 * l + 1];
mbed_official 3:7a284390b0ce 342 pSrc[2 * i + 1] = (pSrc[2 * l + 1] + pSrc[2 * i + 1]);
emilmont 1:fdd22bb7aa52 343
mbed_official 3:7a284390b0ce 344 pSrc[2u * l] = xt;
emilmont 1:fdd22bb7aa52 345
mbed_official 3:7a284390b0ce 346 pSrc[2u * l + 1u] = yt;
mbed_official 3:7a284390b0ce 347
mbed_official 3:7a284390b0ce 348 } // butterfly loop end
emilmont 1:fdd22bb7aa52 349
emilmont 1:fdd22bb7aa52 350 }