你好,
计算FFT的时候,FFTC模块将输入数据进行分块处理,例子采用80个样本,分成5块,每块16个数据,我现在要采样2048个数据,怎么进行分块?一直不理解这里的分块是什么意思?FFTC有个group_x的寄存器,有26个group,前面25个group,每个有5个寄存器,最后一个有3个,一共就有128个,这些寄存器要怎么配置,混合块的时候好像才要用到,但是非混合块怎么配呢?
Andy Yin1:
多个block送到FFT,如果FFT点数是一样,则配置与1个block一样,不需要配置group寄存器,只需要配置单个block FFT点数,FFT会自动均分,需要软件保证输入的总点数是可以均分。
Wei Jingwen:
回复 Andy Yin1:
哦,谢谢
还有,这个分块的意义是什么?例子里面采样点是16,分了5块,那采样点是16还是5*16=80?还有一个测试是2048个点,分成1块。这个分块的依据是什么?
FFTC engine进行运算之前会进行频偏,shift,scaling等运算,scaling分动态和静态,问下这个scaling的机制是什么?说详细些。因为FFTC手册里面感觉写的不是很清楚,反正我是不太理解
Andy Yin1:
回复 Wei Jingwen:
在某些应用场景,如果需要同时做多个等点数的FFT时,可以将多个block合为一个packet送到FFTC完成,而不需要配置输入多个packet;
静态scaling是根据配置的factor对每一级输出进行缩小,动态scaling是根据每一级的输出数据计算出一个factor进行缩小,保证输入到下一级进行FFT时不会有溢出。
Wei Jingwen:
回复 Andy Yin1:
谢谢。还有一个是FFT的精度问题,文档说FFTC支持22位的数据精度,处理的时候取低19位的的有效位,接着又变成16位,算出FFT之后,乘以0x80的scaling value,这个过程我理解的没问题吧。问题是这之间数据位数的变换是硬件实现的?而不需要我们关心吗?这部分原理还没看懂。另外,为了提高FFT计算精度,对输入有什么好的处理建议,或者什么方法?因为我现在用的FFT采样值是浮点型的,不可能转换为整型去计算,目前我为了测试,对数据进行10000倍的扩充,舍弃小数位,这样精度肯定不行,根据FFTC介绍,好像也不支持浮点数的输入。所以请教一下,谢谢。。。
Andy Yin1:
回复 Wei Jingwen:
不支持浮点,输入数据必须是定点数,静态scaling时硬件根据scaling配置进行调整每一级输入数据幅度,动态scaling时硬件会对每级输出计算出一个scaling factor,然后进行调整输入到下一级。
Wei Jingwen:
回复 Andy Yin1:
通常FFT计算都是浮点输入,要是现在想测试MATLAB里面的数据,是浮点的,要怎么输入到FFTC里面去验证?有什么办法保证精确度不丢失呢?