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.

RFFT_f32 not producing expected results on f28069

Other Parts Discussed in Thread: CONTROLSUITE

Hey all,

I'm using the F28069M development board.  I would like to run an FFT (fixed point or floating point; not picky although I've had problems with both).  I try to run the function RFFT_f32 and do not get expected results (would expect a sinc output).  Plot of input and output (matlab and DSP board):

www.dropbox.com/.../f28069_fft_badness.jpg

The relevant code snippets are pasted below.  The code is based off of the controlSuite examples. 

// THIS SECTION IS GLOBAL VARIABLES

#ifndef __cplusplus
#pragma DATA_SECTION(FFTInputBuff, "FFTInputBuff_sec");
#else
#pragma DATA_SECTION("FFTInputBuff_sec");
#endif
float FFTInputBuff[RFFT_SIZE]; //Calculated FFT result

#ifndef __cplusplus
#pragma DATA_SECTION(RFFToutBuff, "RFFToutBuff_sec");
#else
#pragma DATA_SECTION("RFFToutBuff_sec");
#endif
float RFFToutBuff[RFFT_SIZE]; //Calculated FFT result

#ifndef __cplusplus
#pragma DATA_SECTION(RFFTF32Coef, "RFFTF32Coef_sec");
#else
#pragma DATA_SECTION("RFFTF32Coef_sec");
#endif
float RFFTF32Coef[RFFT_SIZE]; //Calculated FFT result

#ifndef __cplusplus
#pragma DATA_SECTION(RFFTmagBuff, "RFFTmagBuff_sec");
#else
#pragma DATA_SECTION("RFFTmagBuff_sec");
#endif
float RFFTmagBuff[RFFT_SIZE/2+1]; //Calculated FFT result

//THIS SECTION IN MAIN FUNCTION

rfft.FFTSize = RFFT_SIZE; //Real FFT size
rfft.FFTStages = RFFT_STAGES; //Real FFT stages
//rfft_adc.InBuf = &FFTInputBuff[0]; //Input buffer
rfft.InBuf = &FFTInputBuff[0]; //Input buffer
rfft.OutBuf = &RFFToutBuff[0]; //Output buffer
rfft.CosSinBuf = &RFFTF32Coef[0]; //Twiddle factor
rfft.MagBuf = &RFFTmagBuff[0]; //Magnitude output buffer

RFFT_f32_sincostable(&rfft); //Calculate twiddle factor

//Clean up output buffer
for (i=0; i < RFFT_SIZE; i++)
{
RFFToutBuff[i] = 0;
}

//Clean up magnitude buffer
for (i=0; i < RFFT_SIZE/2; i++)
{
RFFTmagBuff[i] = 0;
}

for(i=0; i < 32; i++){
//ipcbsrc[i] = (long)(2147483648/512*i); //Q31
FFTInputBuff[i]=3;
}
for(i=32; i < 512; i++){
//ipcbsrc[i] = (long)(2147483648/512*i); //Q31
FFTInputBuff[i]=0;
}

RFFT_f32(&rfft); //Calculate real FFT
RFFT_f32_mag(&rfft); //Calculate magnitude

//THIS IN .cmd FILE

RFFToutBuff_sec ALIGN(2048) : { } > RAML5, PAGE 1
RFFTF32Coef_sec ALIGN(2048) : { } > RAML5, PAGE 1
RFFTmagBuff_sec ALIGN(2048) : { } > RAML6, PAGE 1
FFTInputBuff_sec ALIGN(2048) : { } > RAML7, PAGE 1

//END OF CODE PASTES

Thank you in advance!