累了的时候看看这个 |
@ericsbear 长度大幅增长,IP时延和资源不满足需求
@woyouzui 懂信号处理最好
@sckndonv0218
如果长度大幅增加,真是不好搞,因为FFT是离散傅里叶计算的快速形式或者说化简形式,但是本质上还是两个数列在卷积,也是反向相乘相加;其时间复杂度是一个N的平方状态,当N增长时,这个变化非常大;
FPGA在解决这个问题上,其实也只是起一个空间换时间的作用;我不知道你这个增长有多大的增长,比如长度是是1024或者1024*8? 这个时候有寄存器能存得下这么多bit的数吗? 因为乘法是移位相与再相或(忽略进位),加法是相或,每一个时钟周期只能做一步,中间过程的数据必须存下来,如果远超寄存器的位数,你这个移位缓存,会做非常的费劲;
不建议大幅提升单次FFT的数组长度;
反而可以参考CUDA方案,其本身就是应对超大的FFT而设计的,用简单单元实现较短的FFT,然后将这一部分进行阵列化,提交这个基本单元的数量,这里只需要处理好总线、内存、调度的问题,效率应该是最优的;
(很多年没有搞FPGA了,搬门弄斧了,如有不对,请指正)
@ericsbear 感谢回复和建议,说的很对,其实就是以空间换时间,进行并行计算,每路进行128点FFT,相当于做长度16384点的FFT
过早客微信公众号:guozaoke • 过早客新浪微博:@过早客 • 广告投放合作微信:fullygroup50 鄂ICP备2021016276号-2 • 鄂公网安备42018502001446号