使用硬件加速器计算128点fft,开始时数据不对,经过多次尝试,终于在main()下做成功了,但是将main()下做fft代码复制粘贴到所需的地方后,又出错了,经过查看,hwafft_br()函数的结果是正确的,但是hwafft_128pts(data, scratch, fft_flag, scale_flag)函数中第一个变量的值竟然一点变化都没有,第二个变量的值有变化,让我知道hwafft_128pts调用成功了,但是,问什么同样的代码,换了一个地方,hwafft_128pts这个函数就不正常工作了。 Uint16 out_sel;
Int32 *result;
hwafft_br(data,data_br, 128);
out_sel = hwafft_128pts(data_br, scratch, FFT_FLAG, SCALE_FLAG);
if (out_sel == OUT_SEL_DATA)
{
result = data_br;
}else
{
result = scratch;
} 还有一个尝试,在代码所需的地方,首先测试了ifft的使用,结果正确了,在fft,结果也正确了,然后将ifft删除后,使用自己的数据,直接做fft就有失败了,错误和上面大概也一样(因为图像画出来差不多)。 long *in4;
in4 = INPUT4;
/*int i;
for(i=0;i<128;i++)
{
*in4++ = 0;
}
INPUT4[3]=32767;
INPUT4[3]=INPUT4[3]<<16;
result = ifft128(INPUT4);*/
result = fft128(INPUT); 就是这个代码,去掉注释,结果正确,加上注释,结果错误,能解释下这是什么原因导致的吗?
HWAFFT源码有个bug,需要放在0x10000 64KW以内的memory,看一下你放的另外一个地方,有没有超出这个范围。具体请参考下面的errata。
Advisory 2.0.4 HWAFFT: Data and Scratch Buffers Must Reside at Data Locations Less Than Word Address 0x10000 http://www.ti.com/lit/er/sprz383b/sprz383b.pdf 这个放在0x10000以内也不稳定,还是out_sel = hwafft_128pts(INPUTW, OUTPUT,OUTPUT, INPUTW, FFT_FLAG, SCALE_FLAG);这样使用更稳定。
|