TI中文支持网
TI专业的中文技术问题搜集分享网站

dsplib_c66x_3_1_0_0中fft_example运行,三个fft函数结果与示例中给定的结果不符

使用CCSV5.3版本,对dsplib_c66x_3_1_0_0中FFT_Example_66_LE_COFF进行仿真,保持例程源代码不变,运行结果为

但是文件夹中给定的refOutput.jpg中显示的结果是

1、两个结果相差太大了,refOutput.jpg中显示结果是小数,但是实际上DSP_fft16x16、DSP_fft16x32、DSP_fft32x32输出结果都是整型。我想问一下,输出是有做其他处理吗?

2、从图1中可以看到DSP_fft16x16结果和DSP_fft16x32、DSP_fft32x32不同,请问可能原因是什么?为什么相同的工程运行refOutput.jpg中三个函数输出结果大致相同,但是我运行例程的结果完全不一样,没有对例程做任何更改。

3、使用相同的输入数据,数值在0~1000之间,分别使用DSP_fft16x16、DSP_fft16x32、DSP_fft32x32对其做FFT,最终结果显示DSP_fft16x32、DSP_fft32x32结果相同且与matlab计算的fft结果相同,但是DSP_fft16x16输出结果不同,请问在DSP_fft16x16函数使用的时候需要做特殊归一化什么的吗?

麻烦帮我解答一下,谢谢!!

Shine:

DSP_fft16x16函数对参数的要求如下,请看一下是否都满足要求。
Assumptions:
In-place computation is not allowed.
Size of FFT, nx, must be power of 2 and 16<=nx<=65536.
The arrays for the complex input data x[], complex output data y[] and twiddle factor w[] must be double word aligned.
The input and output data are complex, with the real/imaginary components stored in adjacent locations in the array. The real components are stored at even array indices, and the imaginary components are stored at odd array indices.
All data are in short precision or Q.15 format. Allowed maximum absolute value of input is 2^(16 – (log2(nx)-ceil[log4(nx)-1])).

,

user6315392:

你好,谢谢您的解答,我还有问题没有解决。 1、主题中图1是使用FFT_Example_66_LE_COFF例程仿真的结果,源码没有任何修改,但是DSP_fft16x16的结果和DSP_fft16x32、DSP_fft32x32输出不同,请问为什么? 2、图1是例程未经任何修改得到的结果,为什么和例程中的refOutput.jpg结果不一致? 3、使用的所有输入输出都在L2存储区且8字节对齐,SAMPLEN = 32,使用输入数据,int16_t givfftin_16和int32_t givfftin_32,int32_t givfftIn,三者数值完全相同,只是存储格式不同  以下是我使用的代码 gen_twiddle_fft16x16((int16_t *)givTwiddle16, SAMPLEN); gen_twiddle_fft16x32((int16_t *)givTwiddle16x32, SAMPLEN); gen_twiddle_fft32x32((int32_t *)givTwiddle32, SAMPLEN, 2147483647.5); memcpy((void *)givfftIn,(void *)givfftin_32,sizeof(givfftin_32)); DSP_fft16x16( (int16_t *)givTwiddle16, SAMPLEN, (int16_t *)givfftin_16, (int16_t *)givEchoIn); DSP_fft16x32( (int16_t *)givTwiddle16x32, SAMPLEN, (int32_t *)givfftIn, (int32_t *)SimDataBuf); DSP_fft32x32( (int32_t *)givTwiddle32, SAMPLEN, (int32_t *)givfftin_32, (int32_t *)givFFT2DOut); 运行结果,DSP_fft16x32DSP_fft32x32输出结果相同,但是DSP_fft16x16与另外两个函数不相同,

将三个输出导出,用matlab画图为  图中能够看出,输出形状是相似的,但是并不是比例的关系。请问使用的方法有什么不对吗?为什么三个函数结果不一样?

,

Shine:

看了一下readme.txt说明文档- Needed scaling to get correct output
fft_example.c源码里也有说明。
/* Scale need to be applied (1/2^SCALE) to input data for 16×32 and 32x32FFT for their output to match 16×16. This is due to the inherentscaling present in 16×16 kernel
*/
www.ti.com/…/spracn4.pdf

,

user6315392:

谢谢您的解答,fft_example.c里面设置SCALE=3,实际上我对仿真程序做了多次尝试之后发现,如果DSP_fft16x16输入数值是A,那么DSP_fft16x32和DSP_fft32x32输入是A/4的时候是正确的,这时候三个函数可以得到一致的结果。

,

Shine:

感谢分享!

赞(0)
未经允许不得转载:TI中文支持网 » dsplib_c66x_3_1_0_0中fft_example运行,三个fft函数结果与示例中给定的结果不符
分享到: 更多 (0)