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.

C5517 FFT硬件加速器做计算时好时不好

今天使用硬件加速器计算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);这样使用更稳定。

  • 您好,我是一名在校学生,正在学习5535的硬件FFT计算,看到您成功的实现了该计算,想问问您能否方便将你该例程发给我参考一下,我看userguide 感觉有好多地方没说明白,十分感谢您的帮助!

  • 学生,那个学校的,我也是学生:)
    例程,什么例程?主要代码不是上面已经贴出来了吗?
    你还需要什么?
    我这有两种使用方式,一种是使用ROM自带的,一种是从官方下载的源代码,都是自己手工做的一个测试工程。
    你需要的话,给我一个邮件吧。我发给你。
    我的邮件fenghualong1@126.com
  • 我是西瓜大的,我使用ROM的那个方法,结果不知道怎的的一会儿有,一会儿没有,CMD文件改了好像也没用,我的邮箱是742720432@qq.com,感谢您帮忙发下两种方法的例程,谢谢!