Texas Instruments TMS320C64X User Manual
Page 58
DSP_ifft16x16
4-30
Complex Inverse Mixed Radix 16 x 16-bit FFT With Rounding
DSP_ifft16x16
Function
void DSP_ifft16x16(const short * restrict w, int nx, short * restrict x, short *
restrict y)
Arguments
w[2*nx]
Pointer to complex Q.15 FFT coefficients.
nx
Length of FFT in complex samples. Must be power of 2 or 4,
and 16
≤
nx
≤
32768.
x[2*nx]
Pointer to complex 16-bit data input.
y[2*nx]
Pointer to complex 16-bit data output.
Description
This routine computes a complex inverse mixed radix IFFT with rounding and
digit reversal. Input data x[ ], output data y[ ], and coefficients w[ ] are 16-bit.
The output is returned in the separate array y[ ] in normal order. Each complex
value is stored with interleaved real and imaginary parts. The code uses a
special ordering of IFFT coefficients (also called twiddle factors) and memory
accesses to improve performance in the presence of cache.
The fft16x16 can be used to perform IFFT, by first conjugating the input,
performing the FFT, and conjugating again. This allows fft16x16 to perform the
IFFT as well. However, if the double conjugation needs to be avoided, then this
routine uses the same twiddle factors as the FFT and performs an IFFT. The
change in the sign of the twiddle factors is adjusted for in the routine. Hence,
this routine uses the same twiddle factors as the fft16x16 routine.
Algorithm
The C equivalent of the assembly code without restrictions is similar to the one
of the fft16x16 routine. For further details, see the source code of the C version
of this function which is provided with this library.
Special Requirements
-
In-place computation is not allowed.
-
The size of the FFT, nx, must be a power of 4 or 2 and greater than or equal
to 16 and less than 32768.
-
The arrays for the complex input data x[ ], complex output data y[ ], and
twiddle factors w[ ] must be double-word aligned.
-
The input and output data are complex, with the real/imaginary
components stored in adjacent locations in the array. The real
components are stored at even array indices, and the imaginary
components are stored at odd array indices.
-
Scaling by two is performed after each radix-4 stage except the last one.