beautypg.com

Texas Instruments TMS320C64X User Manual

Page 56

background image

DSP_fft32x32s

4-28

Complex Forward Mixed Radix 32 x 32-bit FFT With Scaling

DSP_fft32x32s

Function

void DSP_fft32x32s(const int * restrict w, int nx, int * restrict x, int * restrict y)

Arguments

w[2*nx]

Pointer to complex 32-bit 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 32-bit data input.

y[2*nx]

Pointer to complex 32-bit data output.

Description

This routine computes an extended precision complex forward mixed radix
FFT with scaling, rounding and digit reversal. Input data x[ ], output data y[ ],
and coefficients w[ ] are 32-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 FFT coefficients (also
called twiddle factors) and memory accesses to improve performance in the
presence of cache. The C code to generate the twiddle factors is the same one
used for the DSP_fft32x32 routine.

Scaling by 2 (i.e., >>1) takes place at each radix-4 stage except for the last
one. A radix-4 stage can add a maximum of 2 bits, which would require scaling
by 4 to completely prevent overflow. Thus, the input data must be scaled by
2

log2(nx)−ceil[log4(nx)−1])

.

Algorithm

The C equivalent of the assembly code without restrictions is similar to the one
shown for the fft16x16t routine. For further details, see the source code of the
C version of this function, which is provided with this library. Note that the
assembly code is hand optimized and restrictions may apply.

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.