Thread 中讨论的其他器件: OMAPL138
工具/软件:Starterware
您好!
DSPLIB 中的 FFT 函数 DSPF_sp_fftSPxSP 产生错误的结果。 我使用以下硬件和软件:
- TMDSLCDK6748
- CCS 版本:7.2.0.00013
- PROCESSOR_SDK_RTOS_Omapl138_4_00_00_04 (RTOS 4)
- DSPLIB_C674x_3_4_0_0
我正在使用提供的 FFT 示例: RTOS 4附带的 Benchmark FFT_lcdkOMAPL138_c674ExampleProject、并进行了以下更改:
/*------------------------------------ * /*暂时初始化输入矢量。 * /*------------------------------------ * 对于(I = 0;I < N;I++) { // X_CN[焊盘+ 2 * I] = sin (2 * 3.1415 * 50 * i /(double) N);//old // X_CN[PAD + 2 * I + 1]= sin (2 * 3.1415 * 100 * I /(double) N);//old X_CN[焊盘+ 2 * I] = sin (2.0 * pi *(double)(i))/(double)(8));//新建 X_CN[PAD + 2 * I + 1]= 0; //new #if defined (_TMS320C6600) X_SA[焊盘+ 2 * I] = x_CN[PAD + 2 * I]; X_SA[PAD + 2 * I + 1]= x_CN[PAD + 2 * I + 1]; #endif X_I [PAD + 2 * I] = x_CN[PAD + 2 * I]; X_I [PAD + 2 * I + 1]= x_CN[PAD + 2 * I + 1]; }
和
如果(N <= 16) //新建
{ //新建
audio_log ("\n\nDSPF_sp_fftSPxSP、N=%d、基数=%d\n"、//new
N、rad); //新建
对于(I = 0;I <(2 * N);I++) //新建
{ //新建
AUDIO_LOG ("输入 x_i[%3D]=%14.6f\n"、 //新建
i、ptR_x_i[i]); //新建
} //新建
} //新建
DSPF_sp_fftSPxSP (N、&PTR_x_i[0]、&PTR_w[0]、PTR_y_I_I、Brev、 rad、0、N);
如果(N <= 16) //新建
{ //新建
对于(I = 0;I <(2 * N);I++) //新建
{ //新建
audio_log ("输出 y_i[%3D]=%14.6f\n"、 //新建
i、ptR_y_i[i]); //新建
} //新建
} //新建
现在、N=8的程序输出为:
[C674x_0]/*---------------------------------------- 针对 N 个样本的*//*单精度 FFT 基准 */ ///*-------------------------------------------------------------------------------------------- // DSPF_sp_fftSPxSPIter#:1 DSPF_sp_fftSPxSP、N=8、基数=2 输入 x_i[0] 0.000000 输入 x_i[1]= 0.000000 输入 x_i[2]= 0.707107 输入 x_i[3]= 0.000000 输入 x_i[4]= 1.000000 输入 x_i[5]= 0.000000 输入 x_i[6]= 0.707107 输入 x_i[7]= 0.000000 输入 x_i[8]= 0.000000 输入 x_i[9]= 0.000000 输入 x_i[10]= -0.707107 输入 x_i[11]= 0.000000 输入 x_i[12]= -1.000000 输入 x_i[13]= 0.000000 输入 x_i[14]= -0.707107 输入 x_i[15]= 0.000000 输出 y_i[0]= 0.000000 输出 y_i[1]= 0.000000 输出 y_i[2]= -2.000000 输出 y_i[3]= -2.000000 输出 y_i[4]= 0.000000 输出 y_i[5]= -0.000000 输出 y_i[6]= 2.000000 输出 y_i[7]= 2.000000 输出 y_i[8]= 0.000000 输出 y_i[9]= 0.000000 输出 y_i[10]= -2.000000 输出 y_i[11]= 2.000000 输出 y_i[12]= 0.000000 输出 y_i[13]= -0.000000 输出 y_i[14]= 2.000000 输出 y_i[15]= -2.000000 内在函数成功N = 8、基数= 2、natc:310optC:199465 DSPF_sp_fftSPxSPIter#:2.
输入为实数信号:频率= f_sample/8的正弦信号。 频率的选择方式应确保我们获得准确的结果:在频率 f_sample/8和 7 * f_sample/8处、我们应得到大于0的值、所有其他频率应为0。 这意味着、如果 N=8且具有复数输出数组、则索引2和3以及14和15的值应大于0、所有其他索引应为0。 但情况并非如此:索引6和7以及10和11也有值(频率3 * f_sample / 8和5 * f_sample / 8)。
出什么问题了?
我意识到在真实信号上有更有效的 FFT 方法、但是、复杂信号的 FFT 也应该适用于真实信号。
备注:还有另一个问题,当添加的 print 语句使程序变慢时,就会发生这种情况。 需要在 main 的开头添加以下指令:
/*
*清除 CSR 和 IER 寄存器。 这是禁止中断所必需的
*无法启用中断、无法为中断提供服务。
*
_asm ("\t zero\t\t B0");
_asm ("\t mvc\t\t b0、IER);
_asm ("\t mvc\t\t b0、csr");
有关更多详细信息、请参阅文章"TMDSLCDK6748:从新 CCS 工程挂起中进行程序"。
此致、
广告