Technical discussions about the TI C6000 DSPs (including the c62x, c64x and c67x DSPs).
Hello, I am using 54x to implement frequency domain block filtered-x LMS . I am required to evaluate 32 -pt FFTs. When I call the cfft function and set the parameter 'nx' as 32, the resulting FFT is haphazard. But nx=8 seems to be working fine. Please help. ___________________________________________________________________
You've not described how you are calling the function. Are you aligning
the
data? Code examples of what works and what fails would be helpful in getting
correct answers.
Here's some info on how I'm using the FFT functions on the 6713.
#ifdef _TMS320C6X // Support for compiling on the DSP
#pragma DATA_SECTION(".iram:FFTData")
#pragma DATA_ALIGN(8);
#endif // _TMS320C6X // Support for compiling on the DSP
float FFTData[2*NSAMPLES]; // This is declared with global scope because
I need it to be properly aligned so the FFT routine can use it.
DSPF_sp_bitrev_cplx(FFTData, bitrev_i2048, NSAMPLES); // bitreversal
DSPF_sp_icfftr2_dif(FFTData, w2048, NSAMPLES); // complex
single precision FFT from dsp67x.lib
On Tue, Jul 28, 2009 at 1:44 AM, <k...@yahoo.com> wrote:
> Hello,
> I am using 54x to implement frequency domain block filtered-x LMS . I am
> required to evaluate 32 -pt FFTs. When I call the cfft function and set
the
> parameter 'nx' as 32, the resulting FFT is haphazard. But nx=8 seems to be
> working fine. Please help.
>
>
Hello, >I am using 54x to implement frequency domain block filtered-x LMS . I am required to evaluate 32 -pt FFTs. When I call the cfft function and set the parameter 'nx' as 32, the resulting FFT is haphazard. But nx=8 seems to be working fine. Please help. > >_____________________________________ Sorry for not being descriptive. I have'nt used pragma as I am just trying out a raw implementation. I have initialized the pointer argument to a location with 8 LSBs as zero. From what I understand, for 32-point complex FFT, it should suffice if the lower 6 LSBs are 0. This is how I've done it. fltoq15(secondary_path, q15_secondary_path, 32); cbrev(q15_secondary_path,fft_secondary,16); cfft(fft_secondary,nx,noscale); where, nx=8 for 8-pt FFT and 32 for 32-pt FFT. secondary_path=(float*)0xA200; q15_secondary_path=(DATA*)0xA400; fft_secondary=(DATA*)0xA600; I have included the required library files but only 8-pt seems to be working fine. For 32-pt, the output is zero for most of the values. ___________________________________________________________________
Kaushik-
>>I am using 54x to implement frequency domain block filtered-x LMS .
>> I am required to evaluate 32 -pt FFTs. When I
>> call the cfft function and set the parameter 'nx' as 32, the
>> resulting FFT is haphazard. But nx=8 seems to be working
>
> Sorry for not being descriptive. I have'nt used pragma as I am just
> trying out a raw implementation. I have
> initialized the pointer argument to a location with 8 LSBs as zero.
> From what I understand, for 32-point complex FFT,
> it should suffice if the lower 6 LSBs are 0. This is how I've done it.
>
> fltoq15(secondary_path, q15_secondary_path, 32);
> cbrev(q15_secondary_path,fft_secondary,16);
> cfft(fft_secondary,nx,noscale);
> where, nx=8 for 8-pt FFT and 32 for 32-pt FFT.
> secondary_path=(float*)0xA200;
> q15_secondary_path=(DATA*)0xA400;
> fft_secondary=(DATA*)0xA600;
>
> I have included the required library files but only 8-pt seems to be
> working fine. For 32-pt, the output is zero for most of the values.
When you say "working fine", how are you testing it? Maybe 8-pt is
close but not working exactly either, causing you
to debug the wrong path. If you call only cbrev() and cfft(), and put in the
following time sequence:
Index: 0, 1, ... N-1
-------------
Real: 1, 0, ... 0
Imag: 0, 0, ... 0
What do you get for 8-pt? For 32-pt? This output is something that is
concretely testable; if you calculate
magnitude you should get all 1's (or some constant, depending on size of the
FFT).
-Jeff
_____________________________________
______________________________