论文部分内容阅读
快速傅里叶变换(Fast Fourier Transform,FFT)在涉及到数字信号处理的各个领域均有重要的应用,因此也面临着越来越多的挑战,促使研究者不断的对FFT处理器的算法和结构进行改进。本文研究一种通用的FFT处理器,主要从计算速度、数据精度、灵活性、复杂度、资源利用率等方面进行考虑,通过对比仿真得到最佳的设计方案,并基于FPGA实现。首先,以目前经典的FFT算法和FFT结构为基础,结合需要解决的问题选择合适的算法和处理器结构。考虑并行计算和级联结构的资源消耗较多,本次设计采用顺序处理结构,用一个蝶形运算单元完成FFT计算,而且顺序处理结构也可以牺牲资源扩展为级联结构,具有一定的扩展性。在算法选择方面,由于基-8或者更高基数算法实现困难,控制比较复杂且灵活性不好,因此本设计中选择基-4和基-2的混合算法。其次,算法实现方面,对于基-4算法的实现,采用四路并行的计算方式,提高计算速度。对于基-2算法的实现,依然采用四路并行的方式,即一个周期可以完成两次基-2的运算。设计实时计算结构时,使用乒乓的存储方式,一个存储器用于计算,另一个用于接收输入序列,通过互相切换的方式完成实时计算。设计可变点的复用结构,本文支持1k、2k、4k、8k四种点数的FFT计算,对处理器和旋转因子存储模块进行配置,使其适用于各种模式,同时用模式选择信号生成不同模式的控制信号,控制不同模式的地址和运算。最后,分析不同数据表示方法的精度和实现复杂度,浮点算法的实现过程过于复杂,定点算法的误差较大,因此本文提出了一种改进的定点算法,在Matlab中进行仿真,并以Matlab工具箱中的fft函数作为标准结果,计算信噪比,相比定点算法大约有5dB的精度提升。基于FPGA进行电路实现,使用quartus进行定点仿真,2k点的序列四路数据并行计算需要3072个时钟周期。采用最高40M的时钟进行计算在乘法模块进行时分复用,完成一次2k点的FFT运算需要153.6us;若不采用时分复用,40M时钟完成2k点的FFT运算需要76.8us。得到仿真结果后,将结果与Matlab定点算法进行对比,结果完全一致,最后下载程序至开发板进行调试,完成设计。