Dear Sir/Madam,
I am studying the fixed point FFT algorithm and have installed the package "c64plus-dsplib_2_02_00_00".
There is a function named DSP_fft16x16_cn.c, which is writen in natural C and locates at .\src\DSP_fft16x16.
My question is How does DSP_fft16x16_cn.c prevent overflow?
I browsed the doc on C2x, C3x, C5x and knew that the overflow in FFT can be averted by scaling 2 at each stage.
In TI's "sprueb8b.pdf", it is clearly stated that, for most FFT function, "the input data must be scaled by 2(log2(nx)) because no scaling
is done by the functions".
In summary, my questions are:
1) "How does DSP_fft16x16_cn.c prevent overflow? ", I could not find the scaling operation in this natural C program, but the program works very well and no overflow was observed (I use large numbers as the input), and the precision is very good (compared with MATLAB FFT float point function). I don't know how this program achieve good precision and prevent overflow at the same time.
2) If I call intrinsic function "DSP_fft16x16.c", how can I improve the precision? In order to evaluate the precision, I wrote a fixed point FFT algorithm in natural C , and found that precision is affected significantly by scaling by two the stage output data (compared with MATLAB FFT float point function). I think, if the input is scaled by 2(log2(nx)) before the first stage according to "sprueb8b.pdf", , the precision will be further reduced.
3) In TI's "sprueb8b.pdf", it is clearly stated that "All stages are radix-4 except the last one, which can be radix-2 or radix-4,depending on the size of the FFT. All stages except the last one scale by two the stage output data."(page 4-6) . I wonder if it is enough to "scale by two the stage output data" when radix-4 is adopted. Some literature say, the maximum bit-growth of each stage for radix-4 is 3.
With my warmest regards,
Cheng Wang