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 20 08:45:18 2015 +0000
Revision:
5:3762170b6d4d
Parent:
3:7a284390b0ce
Synchronized with git revision 2eb940b9a73af188d3004a2575fdfbb05febe62b

Full URL: https://github.com/mbedmicro/mbed/commit/2eb940b9a73af188d3004a2575fdfbb05febe62b/

Added option to build rpc library. closes #1426

Who changed what in which revision?

UserRevisionLine numberNew contents of line
emilmont 1:fdd22bb7aa52 1 /* ----------------------------------------------------------------------
mbed_official 5:3762170b6d4d 2 * Copyright (C) 2010-2014 ARM Limited. All rights reserved.
emilmont 1:fdd22bb7aa52 3 *
mbed_official 5:3762170b6d4d 4 * $Date: 19. March 2015
mbed_official 5:3762170b6d4d 5 * $Revision: V.1.4.5
emilmont 1:fdd22bb7aa52 6 *
emilmont 2:da51fb522205 7 * Project: CMSIS DSP Library
emilmont 2:da51fb522205 8 * Title: arm_rfft_q31.c
emilmont 1:fdd22bb7aa52 9 *
emilmont 2:da51fb522205 10 * Description: RFFT & RIFFT Q31 process 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 /*--------------------------------------------------------------------
emilmont 2:da51fb522205 45 * Internal functions prototypes
emilmont 1:fdd22bb7aa52 46 --------------------------------------------------------------------*/
emilmont 1:fdd22bb7aa52 47
emilmont 1:fdd22bb7aa52 48 void arm_split_rfft_q31(
mbed_official 5:3762170b6d4d 49 q31_t * pSrc,
mbed_official 5:3762170b6d4d 50 uint32_t fftLen,
mbed_official 5:3762170b6d4d 51 q31_t * pATable,
mbed_official 5:3762170b6d4d 52 q31_t * pBTable,
mbed_official 5:3762170b6d4d 53 q31_t * pDst,
mbed_official 5:3762170b6d4d 54 uint32_t modifier);
emilmont 1:fdd22bb7aa52 55
emilmont 1:fdd22bb7aa52 56 void arm_split_rifft_q31(
mbed_official 5:3762170b6d4d 57 q31_t * pSrc,
mbed_official 5:3762170b6d4d 58 uint32_t fftLen,
mbed_official 5:3762170b6d4d 59 q31_t * pATable,
mbed_official 5:3762170b6d4d 60 q31_t * pBTable,
mbed_official 5:3762170b6d4d 61 q31_t * pDst,
mbed_official 5:3762170b6d4d 62 uint32_t modifier);
emilmont 1:fdd22bb7aa52 63
emilmont 1:fdd22bb7aa52 64 /**
mbed_official 5:3762170b6d4d 65 * @addtogroup RealFFT
mbed_official 5:3762170b6d4d 66 * @{
mbed_official 5:3762170b6d4d 67 */
emilmont 1:fdd22bb7aa52 68
emilmont 1:fdd22bb7aa52 69 /**
mbed_official 5:3762170b6d4d 70 * @brief Processing function for the Q31 RFFT/RIFFT.
mbed_official 5:3762170b6d4d 71 * @param[in] *S points to an instance of the Q31 RFFT/RIFFT structure.
mbed_official 5:3762170b6d4d 72 * @param[in] *pSrc points to the input buffer.
mbed_official 5:3762170b6d4d 73 * @param[out] *pDst points to the output buffer.
mbed_official 5:3762170b6d4d 74 * @return none.
mbed_official 5:3762170b6d4d 75 *
mbed_official 5:3762170b6d4d 76 * \par Input an output formats:
mbed_official 5:3762170b6d4d 77 * \par
mbed_official 5:3762170b6d4d 78 * Internally input is downscaled by 2 for every stage to avoid saturations inside CFFT/CIFFT process.
mbed_official 5:3762170b6d4d 79 * Hence the output format is different for different RFFT sizes.
mbed_official 5:3762170b6d4d 80 * The input and output formats for different RFFT sizes and number of bits to upscale are mentioned in the tables below for RFFT and RIFFT:
mbed_official 5:3762170b6d4d 81 * \par
mbed_official 5:3762170b6d4d 82 * \image html RFFTQ31.gif "Input and Output Formats for Q31 RFFT"
mbed_official 5:3762170b6d4d 83 *
mbed_official 5:3762170b6d4d 84 * \par
mbed_official 5:3762170b6d4d 85 * \image html RIFFTQ31.gif "Input and Output Formats for Q31 RIFFT"
mbed_official 5:3762170b6d4d 86 */
emilmont 1:fdd22bb7aa52 87 void arm_rfft_q31(
mbed_official 5:3762170b6d4d 88 const arm_rfft_instance_q31 * S,
mbed_official 5:3762170b6d4d 89 q31_t * pSrc,
mbed_official 5:3762170b6d4d 90 q31_t * pDst)
emilmont 1:fdd22bb7aa52 91 {
mbed_official 5:3762170b6d4d 92 const arm_cfft_instance_q31 *S_CFFT = S->pCfft;
mbed_official 5:3762170b6d4d 93 uint32_t i;
mbed_official 5:3762170b6d4d 94 uint32_t L2 = S->fftLenReal >> 1;
emilmont 1:fdd22bb7aa52 95
mbed_official 5:3762170b6d4d 96 /* Calculation of RIFFT of input */
mbed_official 5:3762170b6d4d 97 if(S->ifftFlagR == 1u)
emilmont 1:fdd22bb7aa52 98 {
mbed_official 5:3762170b6d4d 99 /* Real IFFT core process */
mbed_official 5:3762170b6d4d 100 arm_split_rifft_q31(pSrc, L2, S->pTwiddleAReal,
mbed_official 5:3762170b6d4d 101 S->pTwiddleBReal, pDst, S->twidCoefRModifier);
mbed_official 5:3762170b6d4d 102
mbed_official 5:3762170b6d4d 103 /* Complex IFFT process */
mbed_official 5:3762170b6d4d 104 arm_cfft_q31(S_CFFT, pDst, S->ifftFlagR, S->bitReverseFlagR);
mbed_official 5:3762170b6d4d 105
mbed_official 5:3762170b6d4d 106 for(i=0;i<S->fftLenReal;i++)
mbed_official 5:3762170b6d4d 107 {
mbed_official 5:3762170b6d4d 108 pDst[i] = pDst[i] << 1;
mbed_official 5:3762170b6d4d 109 }
emilmont 1:fdd22bb7aa52 110 }
mbed_official 5:3762170b6d4d 111 else
mbed_official 5:3762170b6d4d 112 {
mbed_official 5:3762170b6d4d 113 /* Calculation of RFFT of input */
mbed_official 5:3762170b6d4d 114
mbed_official 5:3762170b6d4d 115 /* Complex FFT process */
mbed_official 5:3762170b6d4d 116 arm_cfft_q31(S_CFFT, pSrc, S->ifftFlagR, S->bitReverseFlagR);
emilmont 1:fdd22bb7aa52 117
mbed_official 5:3762170b6d4d 118 /* Real FFT core process */
mbed_official 5:3762170b6d4d 119 arm_split_rfft_q31(pSrc, L2, S->pTwiddleAReal,
mbed_official 5:3762170b6d4d 120 S->pTwiddleBReal, pDst, S->twidCoefRModifier);
emilmont 1:fdd22bb7aa52 121 }
emilmont 1:fdd22bb7aa52 122 }
emilmont 1:fdd22bb7aa52 123
mbed_official 5:3762170b6d4d 124 /**
mbed_official 5:3762170b6d4d 125 * @} end of RealFFT group
mbed_official 5:3762170b6d4d 126 */
emilmont 1:fdd22bb7aa52 127
emilmont 1:fdd22bb7aa52 128 /**
mbed_official 5:3762170b6d4d 129 * @brief Core Real FFT process
mbed_official 5:3762170b6d4d 130 * @param[in] *pSrc points to the input buffer.
mbed_official 5:3762170b6d4d 131 * @param[in] fftLen length of FFT.
mbed_official 5:3762170b6d4d 132 * @param[in] *pATable points to the twiddle Coef A buffer.
mbed_official 5:3762170b6d4d 133 * @param[in] *pBTable points to the twiddle Coef B buffer.
mbed_official 5:3762170b6d4d 134 * @param[out] *pDst points to the output buffer.
mbed_official 5:3762170b6d4d 135 * @param[in] modifier twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table.
mbed_official 5:3762170b6d4d 136 * @return none.
mbed_official 5:3762170b6d4d 137 */
emilmont 1:fdd22bb7aa52 138 void arm_split_rfft_q31(
mbed_official 5:3762170b6d4d 139 q31_t * pSrc,
mbed_official 5:3762170b6d4d 140 uint32_t fftLen,
mbed_official 5:3762170b6d4d 141 q31_t * pATable,
mbed_official 5:3762170b6d4d 142 q31_t * pBTable,
mbed_official 5:3762170b6d4d 143 q31_t * pDst,
mbed_official 5:3762170b6d4d 144 uint32_t modifier)
emilmont 1:fdd22bb7aa52 145 {
mbed_official 5:3762170b6d4d 146 uint32_t i; /* Loop Counter */
mbed_official 5:3762170b6d4d 147 q31_t outR, outI; /* Temporary variables for output */
mbed_official 5:3762170b6d4d 148 q31_t *pCoefA, *pCoefB; /* Temporary pointers for twiddle factors */
mbed_official 5:3762170b6d4d 149 q31_t CoefA1, CoefA2, CoefB1; /* Temporary variables for twiddle coefficients */
mbed_official 5:3762170b6d4d 150 q31_t *pOut1 = &pDst[2], *pOut2 = &pDst[(4u * fftLen) - 1u];
mbed_official 5:3762170b6d4d 151 q31_t *pIn1 = &pSrc[2], *pIn2 = &pSrc[(2u * fftLen) - 1u];
emilmont 1:fdd22bb7aa52 152
mbed_official 5:3762170b6d4d 153 /* Init coefficient pointers */
mbed_official 5:3762170b6d4d 154 pCoefA = &pATable[modifier * 2u];
mbed_official 5:3762170b6d4d 155 pCoefB = &pBTable[modifier * 2u];
emilmont 1:fdd22bb7aa52 156
mbed_official 5:3762170b6d4d 157 i = fftLen - 1u;
emilmont 1:fdd22bb7aa52 158
mbed_official 5:3762170b6d4d 159 while(i > 0u)
mbed_official 5:3762170b6d4d 160 {
mbed_official 5:3762170b6d4d 161 /*
mbed_official 5:3762170b6d4d 162 outR = (pSrc[2 * i] * pATable[2 * i] - pSrc[2 * i + 1] * pATable[2 * i + 1]
mbed_official 5:3762170b6d4d 163 + pSrc[2 * n - 2 * i] * pBTable[2 * i] +
mbed_official 5:3762170b6d4d 164 pSrc[2 * n - 2 * i + 1] * pBTable[2 * i + 1]);
mbed_official 5:3762170b6d4d 165 */
emilmont 1:fdd22bb7aa52 166
mbed_official 5:3762170b6d4d 167 /* outI = (pIn[2 * i + 1] * pATable[2 * i] + pIn[2 * i] * pATable[2 * i + 1] +
mbed_official 5:3762170b6d4d 168 pIn[2 * n - 2 * i] * pBTable[2 * i + 1] -
mbed_official 5:3762170b6d4d 169 pIn[2 * n - 2 * i + 1] * pBTable[2 * i]); */
emilmont 1:fdd22bb7aa52 170
mbed_official 5:3762170b6d4d 171 CoefA1 = *pCoefA++;
mbed_official 5:3762170b6d4d 172 CoefA2 = *pCoefA;
emilmont 1:fdd22bb7aa52 173
mbed_official 5:3762170b6d4d 174 /* outR = (pSrc[2 * i] * pATable[2 * i] */
mbed_official 5:3762170b6d4d 175 mult_32x32_keep32_R(outR, *pIn1, CoefA1);
emilmont 1:fdd22bb7aa52 176
mbed_official 5:3762170b6d4d 177 /* outI = pIn[2 * i] * pATable[2 * i + 1] */
mbed_official 5:3762170b6d4d 178 mult_32x32_keep32_R(outI, *pIn1++, CoefA2);
emilmont 1:fdd22bb7aa52 179
mbed_official 5:3762170b6d4d 180 /* - pSrc[2 * i + 1] * pATable[2 * i + 1] */
mbed_official 5:3762170b6d4d 181 multSub_32x32_keep32_R(outR, *pIn1, CoefA2);
emilmont 1:fdd22bb7aa52 182
mbed_official 5:3762170b6d4d 183 /* (pIn[2 * i + 1] * pATable[2 * i] */
mbed_official 5:3762170b6d4d 184 multAcc_32x32_keep32_R(outI, *pIn1++, CoefA1);
emilmont 1:fdd22bb7aa52 185
mbed_official 5:3762170b6d4d 186 /* pSrc[2 * n - 2 * i] * pBTable[2 * i] */
mbed_official 5:3762170b6d4d 187 multSub_32x32_keep32_R(outR, *pIn2, CoefA2);
mbed_official 5:3762170b6d4d 188 CoefB1 = *pCoefB;
emilmont 1:fdd22bb7aa52 189
mbed_official 5:3762170b6d4d 190 /* pIn[2 * n - 2 * i] * pBTable[2 * i + 1] */
mbed_official 5:3762170b6d4d 191 multSub_32x32_keep32_R(outI, *pIn2--, CoefB1);
mbed_official 5:3762170b6d4d 192
mbed_official 5:3762170b6d4d 193 /* pSrc[2 * n - 2 * i + 1] * pBTable[2 * i + 1] */
mbed_official 5:3762170b6d4d 194 multAcc_32x32_keep32_R(outR, *pIn2, CoefB1);
emilmont 1:fdd22bb7aa52 195
mbed_official 5:3762170b6d4d 196 /* pIn[2 * n - 2 * i + 1] * pBTable[2 * i] */
mbed_official 5:3762170b6d4d 197 multSub_32x32_keep32_R(outI, *pIn2--, CoefA2);
emilmont 1:fdd22bb7aa52 198
mbed_official 5:3762170b6d4d 199 /* write output */
mbed_official 5:3762170b6d4d 200 *pOut1++ = outR;
mbed_official 5:3762170b6d4d 201 *pOut1++ = outI;
emilmont 1:fdd22bb7aa52 202
mbed_official 5:3762170b6d4d 203 /* write complex conjugate output */
mbed_official 5:3762170b6d4d 204 *pOut2-- = -outI;
mbed_official 5:3762170b6d4d 205 *pOut2-- = outR;
emilmont 1:fdd22bb7aa52 206
mbed_official 5:3762170b6d4d 207 /* update coefficient pointer */
mbed_official 5:3762170b6d4d 208 pCoefB = pCoefB + (modifier * 2u);
mbed_official 5:3762170b6d4d 209 pCoefA = pCoefA + ((modifier * 2u) - 1u);
emilmont 1:fdd22bb7aa52 210
mbed_official 5:3762170b6d4d 211 i--;
mbed_official 5:3762170b6d4d 212 }
mbed_official 5:3762170b6d4d 213 pDst[2u * fftLen] = (pSrc[0] - pSrc[1]) >> 1;
mbed_official 5:3762170b6d4d 214 pDst[(2u * fftLen) + 1u] = 0;
emilmont 1:fdd22bb7aa52 215
mbed_official 5:3762170b6d4d 216 pDst[0] = (pSrc[0] + pSrc[1]) >> 1;
mbed_official 5:3762170b6d4d 217 pDst[1] = 0;
emilmont 1:fdd22bb7aa52 218 }
emilmont 1:fdd22bb7aa52 219
emilmont 1:fdd22bb7aa52 220 /**
mbed_official 5:3762170b6d4d 221 * @brief Core Real IFFT process
mbed_official 5:3762170b6d4d 222 * @param[in] *pSrc points to the input buffer.
mbed_official 5:3762170b6d4d 223 * @param[in] fftLen length of FFT.
mbed_official 5:3762170b6d4d 224 * @param[in] *pATable points to the twiddle Coef A buffer.
mbed_official 5:3762170b6d4d 225 * @param[in] *pBTable points to the twiddle Coef B buffer.
mbed_official 5:3762170b6d4d 226 * @param[out] *pDst points to the output buffer.
mbed_official 5:3762170b6d4d 227 * @param[in] modifier twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table.
mbed_official 5:3762170b6d4d 228 * @return none.
mbed_official 5:3762170b6d4d 229 */
emilmont 1:fdd22bb7aa52 230 void arm_split_rifft_q31(
mbed_official 5:3762170b6d4d 231 q31_t * pSrc,
mbed_official 5:3762170b6d4d 232 uint32_t fftLen,
mbed_official 5:3762170b6d4d 233 q31_t * pATable,
mbed_official 5:3762170b6d4d 234 q31_t * pBTable,
mbed_official 5:3762170b6d4d 235 q31_t * pDst,
mbed_official 5:3762170b6d4d 236 uint32_t modifier)
emilmont 1:fdd22bb7aa52 237 {
mbed_official 5:3762170b6d4d 238 q31_t outR, outI; /* Temporary variables for output */
mbed_official 5:3762170b6d4d 239 q31_t *pCoefA, *pCoefB; /* Temporary pointers for twiddle factors */
mbed_official 5:3762170b6d4d 240 q31_t CoefA1, CoefA2, CoefB1; /* Temporary variables for twiddle coefficients */
mbed_official 5:3762170b6d4d 241 q31_t *pIn1 = &pSrc[0], *pIn2 = &pSrc[(2u * fftLen) + 1u];
emilmont 1:fdd22bb7aa52 242
mbed_official 5:3762170b6d4d 243 pCoefA = &pATable[0];
mbed_official 5:3762170b6d4d 244 pCoefB = &pBTable[0];
emilmont 1:fdd22bb7aa52 245
mbed_official 5:3762170b6d4d 246 while(fftLen > 0u)
mbed_official 5:3762170b6d4d 247 {
mbed_official 5:3762170b6d4d 248 /*
mbed_official 5:3762170b6d4d 249 outR = (pIn[2 * i] * pATable[2 * i] + pIn[2 * i + 1] * pATable[2 * i + 1] +
mbed_official 5:3762170b6d4d 250 pIn[2 * n - 2 * i] * pBTable[2 * i] -
mbed_official 5:3762170b6d4d 251 pIn[2 * n - 2 * i + 1] * pBTable[2 * i + 1]);
emilmont 1:fdd22bb7aa52 252
mbed_official 5:3762170b6d4d 253 outI = (pIn[2 * i + 1] * pATable[2 * i] - pIn[2 * i] * pATable[2 * i + 1] -
mbed_official 5:3762170b6d4d 254 pIn[2 * n - 2 * i] * pBTable[2 * i + 1] -
mbed_official 5:3762170b6d4d 255 pIn[2 * n - 2 * i + 1] * pBTable[2 * i]);
mbed_official 5:3762170b6d4d 256 */
mbed_official 5:3762170b6d4d 257 CoefA1 = *pCoefA++;
mbed_official 5:3762170b6d4d 258 CoefA2 = *pCoefA;
emilmont 1:fdd22bb7aa52 259
mbed_official 5:3762170b6d4d 260 /* outR = (pIn[2 * i] * pATable[2 * i] */
mbed_official 5:3762170b6d4d 261 mult_32x32_keep32_R(outR, *pIn1, CoefA1);
emilmont 1:fdd22bb7aa52 262
mbed_official 5:3762170b6d4d 263 /* - pIn[2 * i] * pATable[2 * i + 1] */
mbed_official 5:3762170b6d4d 264 mult_32x32_keep32_R(outI, *pIn1++, -CoefA2);
mbed_official 5:3762170b6d4d 265
mbed_official 5:3762170b6d4d 266 /* pIn[2 * i + 1] * pATable[2 * i + 1] */
mbed_official 5:3762170b6d4d 267 multAcc_32x32_keep32_R(outR, *pIn1, CoefA2);
emilmont 1:fdd22bb7aa52 268
mbed_official 5:3762170b6d4d 269 /* pIn[2 * i + 1] * pATable[2 * i] */
mbed_official 5:3762170b6d4d 270 multAcc_32x32_keep32_R(outI, *pIn1++, CoefA1);
emilmont 1:fdd22bb7aa52 271
mbed_official 5:3762170b6d4d 272 /* pIn[2 * n - 2 * i] * pBTable[2 * i] */
mbed_official 5:3762170b6d4d 273 multAcc_32x32_keep32_R(outR, *pIn2, CoefA2);
mbed_official 5:3762170b6d4d 274 CoefB1 = *pCoefB;
emilmont 1:fdd22bb7aa52 275
mbed_official 5:3762170b6d4d 276 /* pIn[2 * n - 2 * i] * pBTable[2 * i + 1] */
mbed_official 5:3762170b6d4d 277 multSub_32x32_keep32_R(outI, *pIn2--, CoefB1);
emilmont 1:fdd22bb7aa52 278
mbed_official 5:3762170b6d4d 279 /* pIn[2 * n - 2 * i + 1] * pBTable[2 * i + 1] */
mbed_official 5:3762170b6d4d 280 multAcc_32x32_keep32_R(outR, *pIn2, CoefB1);
mbed_official 5:3762170b6d4d 281
mbed_official 5:3762170b6d4d 282 /* pIn[2 * n - 2 * i + 1] * pBTable[2 * i] */
mbed_official 5:3762170b6d4d 283 multAcc_32x32_keep32_R(outI, *pIn2--, CoefA2);
emilmont 1:fdd22bb7aa52 284
mbed_official 5:3762170b6d4d 285 /* write output */
mbed_official 5:3762170b6d4d 286 *pDst++ = outR;
mbed_official 5:3762170b6d4d 287 *pDst++ = outI;
emilmont 1:fdd22bb7aa52 288
mbed_official 5:3762170b6d4d 289 /* update coefficient pointer */
mbed_official 5:3762170b6d4d 290 pCoefB = pCoefB + (modifier * 2u);
mbed_official 5:3762170b6d4d 291 pCoefA = pCoefA + ((modifier * 2u) - 1u);
emilmont 1:fdd22bb7aa52 292
mbed_official 5:3762170b6d4d 293 /* Decrement loop count */
mbed_official 5:3762170b6d4d 294 fftLen--;
mbed_official 5:3762170b6d4d 295 }
emilmont 1:fdd22bb7aa52 296 }