This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Calculating a big N Real Sequence using a length N/2 Complex IFFT

I use this method http://processors.wiki.ti.com/index.php/Efficient_FFT_Computation_of_Real_Input

to computing a N/2 complex FFT from a N real input sequence. Additionally I use www.dsprelated.com/showarticle/63.php approach

to compute a FFT length not supported by DSPLIB( DSPF_sp_ifftSPxSP ) and everything works pretty ok.

I would like to make advantage of "Returning to a Length N Real Sequence Using a Length N/2 Complex IFFT"

(http://processors.wiki.ti.com/index.php/Efficient_FFT_Computation_of_Real_Input )

in case of computing a IFFT but I can't find how to make an one big IFFT from the smaller ones (DSPLIB supports IFFTs only up to 65K).

I would be really grateful for any help.

Regards,

Marek Stojecki

  • Hi,

    Thanks for your post.

    To my knowledge, the max. size of the FFT in complex samples, nx, must be a power of 4 or 2 and greater than or equal to 16 and less than 32768. For more details, please refer the DSP library references for IFFT routines "DSP_ifft32x32" and "DSP_ifft16x32" kernels and their detailed description and special requirements to be met from the spru565b doc. below:

    http://www.ti.com.cn/cn/lit/ug/spru565b/spru565b.pdf ( see pages 4-53 to 4-56 for IFFT routines)

    It would be recommended that you can re-use fft16x32 or ft32x32 kernel functions to obtain IFFT results from FFT routines. This can be done through first conjugating the input, performing the FFT and conjugating once again which allows fft16x32 or ft32x32 to perform the IFFT as well. Hence these IFFT routines uses the same twiddle factors as the fft32x32 or fft16x32  routine uses.

    To perform a simple radix 2 IFFT followed by an FFT, please refer spra884a guide below saying to conjugate the input before performing FFT function, perform FFT, conjugate the output FFT to obtain the result of IFFT

    http://www.ti.com/lit/an/spra884a/spra884a.pdf

    Thanks & regards,

    Sivaraj K

    -------------------------------------------------------------------------------------------------------

    Please click the Verify Answer button on this post if it answers your question.

    -------------------------------------------------------------------------------------------------------

  • Hello Sivaraj,

    Thanks for your answer.

    I found the information about ifft size up to 65k here: http://processors.wiki.ti.com/index.php/C674x_DSPLIB#DSPF_sp_ifftSPxSP_.28Mixed_Radix_Inverse_FFT_with_Bit_Reversal.29

    Currently I am performing a IFFT exactly like you said. The thing is I want to do this operation more efficient.

    I don't know how to apply a trick from http://processors.wiki.ti.com/index.php/Efficient_FFT_Computation_of_Real_Input when I'm using fft to calculate ifft. 

    The flow looks like this.

    x-Real input sequence (N size), therefore imaginary part =0

    I can use the trick to get N point complex output (X) by computing FFT for the N/2 size. 

    After that I perform some filtration in freq domain, and I want to get back to time domain. 

    Now situation looks different  because  my input sequence is not longer "real" so I can't do the same trick as for the forward fft. Can I? 

    Please tell if I'm correct.

    Best regards,

    Marek

  • Hi,

    Thanks for your update.

    I think, you can compute complex inverse FFT through the same twiddle factors used for FFT functions through scaling/rounding. Each complex number for twiddle factors (w), input data (x), and output data (y) should be represented in interleaved Q.31 format real and imaginary pairs. All arrays must be aligned to an 8-byte boundary.

    The C64x DSPLIB also provides two inverse FFT functions:

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

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

    Kindly check the above IFFT functions from "spra884a.pdf" doc. for more details on the same.

    Thanks & regards,

    Sivaraj K

    -------------------------------------------------------------------------------------------------------

    Please click the Verify Answer button on this post if it answers your question.

    -------------------------------------------------------------------------------------------------------