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!
