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.

[参考译文] CCS/MSP430FR5994:如何执行1024点 FFT

Guru**** 1626620 points
Other Parts Discussed in Thread: BOOSTXL-AUDIO, MSP430FR5994
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/846676/ccs-msp430fr5994-how-to-do-1024-point-fft

器件型号:MSP430FR5994
主题中讨论的其他器件:BOOSTXL-AUDIO

工具/软件:Code Composer Studio

您好!  

我正在学习 BOOSTXL-AUDIO_430BOOST-SHARPLCD_FFT_FIR_LEA_MSP430FR5994中的项目代码以了解 FFT。 示例代码显示了如何执行256点 FFT。 但我需要实现512或1024点 FFT。 如何更改代码? 我在下面复制粘贴 FFT 函数。 我目前的理解是、更改此 runFftWithLea 中调用的某些库函数应该可以完成该工作。 谢谢。  

void runFftWithLea (void)
{
MSP_STATUS 状态;
uint16_t i;
int16_t * currentAdcBuffer;

//初始化刷新显示的次数
refreshDisp = 2;

//首先清除屏幕
graphics_clearDisplay (&g_sContext);

//绘制基本结构
GrStringDraw (&g_sContext、"0"、
AUTO_STRING_LENGTH、1、LCD_Vertical _MAX-10、
Transparent_text);
GrStringDraw (&g_sContext、"FS 2"、
AUTO_STRING_LENGTH、70、LCD_Vertical _MAX-10、
Transparent_text);
GrLineDrawH (&g_sContext、0、LCD_Horizontale_MAX、LCD_Vertical _MAX-12);

//画标题一次
GrStringDraw (&g_sContext、"FFT w/LEA"、
AUTO_STRING_LENGTH、0、0、
图形不透明文本);

//将缓冲器刷新到 LCD
graphics_flushBuffer (&g_sContext);

//初始化 LEA 模块
initFft();

keepAppRunning = true;

while (keepAppRunning)
{
_bis_SR_register (LPM3_bits + GIE);

//获取要复制的最新缓冲区指针
currentAdcBuffer = Audio_getActiveBuffer (&gAudioConfig);

//将记录的 ADC 数据复制到 LEA RAM 缓冲器以进行 FFT 处理
for (i = 0;i <(vector_size);i++)
{
(((int32_t *) leaMemoryStartAdd.fftDataParam.fftInputOutput)[i]=
currentAdcBuffer[i]& 0x0000FFFF;
}

resetBenchmark();
startBenchmark();

//调用固定缩放 FFT 函数。
状态= MSP_cmplx_FFT_fixed_q15 (&sqFftParams、
leaMemoryStartAdd.fftDataParam.fftInputOutput);

//检查状态标志。
if (status!= MSP_SUCCESS)
{
//错误!
__no_operation();
}

stopBenchmark();

//计算正频域的幅度
for (i = 0;i <(vector_size / 2);i++)
{
Real = leaMemoryStartAdd.fftDataParam.fftInputOutput[2 * i];
Imag = leaMemoryStartAdd.fftDataParam.fftInputOutput[2 * I + 1];
if (实数< 0)
{
Real_Abs =~Real + 1;
}
其他
{
Real_Abs = Real;
}
if (imag < 0)
{
Imag_abs =~μ s imag + 1;
}
其他
{
Imag_abs = imag;
}
if (REAL_ABS >= imag_abs)
{
MAX = REAL_ABS;
最小值= imag_abs;
}
其他
{
Max = imag_abs;
最小值= REALL_ABS;
}
MAG =最大值+ 3 *(最小值>> 3);
FFT_DATA[i]= MAG;
}