问题描述
12bit输入数据位宽时,FFT运算结果异常。
现象及波形
分析过程
1、 与输入数据的处理方式有关系。
2、 与输出数据的处理方式有关系。
3、 与旋转因子的位数选择有关系。
4、 输入数据和输出数据padding方式的区别,输入数据用0来Padding,输出数据时sign padding。
5、 旋转因子位数太低,导致精度计算精度很低。
6、 输入数据位宽和输入数据位宽相同,FFT运算后输出数据溢出。
验证
1、 将FFT核的输入数据位宽和旋转因子设置成相同的值,均设为12bit。
2、输入数据位宽低时,旋转因子的精度被自动降低。
解决方案
1、若旋转因子的位数大于数据数据的位数,自动将旋转因子位数与输入数据保持一致,因为需要将输入数据宽度和旋转因子宽度设置成相同的值。
2、采用默认的Scale_Schedule时,输入满幅度信号,会导致FFT运算结果溢出。在FFT运算完毕后要对溢出进行检测,此外,要保证数据不溢出,把输入数据位数提高或者配置FFT的Scale_Schedule。
附图
不同位数下FFT运算结果精度比较
采用12bit输入位宽、12bit旋转因子宽度时的转换结果。
采用13bit输入位宽、13bit旋转因子宽度时的转换结果。
采用14bit输入位宽、14bit旋转因子宽度时的转换结果。
采用15bit输入位宽、15bit旋转因子宽度时的转换结果
采用16bit输入位宽、16bit旋转因子宽度时的转换结果。
输入数据位宽和旋转因子位宽不一致时的表现
采用12bit输入位宽、16bit旋转因子宽度时的转换结果。
采用默认Scale_sch时,输入数据大小对FFT结果的影响。
输入数据降到11bit满幅度,FFT运算结果正常。