# FFT测试说明文档 ## FFT简介 kl3的fft采用主动访问模式通过dma从指定地址读取数据到内部memory,计算完成之后,再将内部计算结果通过dma搬移到指定地址。数据搬运过程和计算过程完全自动化,用户只需要在将数据准备好之后,触发sw_trig_in寄存器,然后等待sw_fft_done信号拉高,从指定地址读取结果即可。 kl3 fft支持实数和复数输入,实数fft输入为实数,输出为共轭对称的复数,实数ifft输入为共轭对称的复数,输出为实数。复数fft、ifft的输入为复数,输出也为复数。 ### FFT特性 * 支持64、128、256、512、1024、2048点实数fft、ifft计算,支持32、64、128、256、512、1024点复数fft、ifft计算。 * 支持16、18、20、24、28、32位定点输入,支持32位浮点输入。 * 支持输入数据的左移位操作(最大7位),支持输出数据的右移位操作(最大7位)。 * 支持浮点数指数偏移调整。 * 支持有符号和无符号输入。 * 支持浮点数和定点数转换状态查询。 * 支持fft输出硬件加窗(hanning窗,hamming窗和blackman窗)。 ### FFT配置流程 1. 将数据放到至指定的内存地址空间。 2. 配置源数据所在地址和计算输出数据所在地址(目的地址)寄存器,源数据地址和目的地址可重复,重复情况下输出覆盖掉输入。 3. 配置fft_en,fft_size,is_fft,is_complex等寄存器。 4. 把寄存器sw_trig_in拉高,触发硬件启动fft计算。 5. 硬件根据源数据地址,自动读取源数据,根据寄存器配置情况,进行相应的fft计算,并将计算结果搬移到目的地址,并肩sw_fft_done信号拉高。 6. 原件根据sw_fft_done信号输出或者中断信号指示,从目的地址读取数据。 7. 软件将sw_fft_done信号拉低。 ### FFT工作模式 fft工作模式主要由sw_is_complex、sw_is_fft、sw_fft_size[2:0]三个寄存器控制。 * sw_is_complex:为0表示实数模式,为1表示复数模式。 * sw_is_fft:为0表示fft计算,为1表示ifft计算。 * sw_fft_size: 1. 实数模式下:0~5分别表示计算点数为256、512、1024、2048、64、128 2. 复数模式下:0~5分别表示计算点数为128、256、512、1024、32、64 ### 输入输出顺序 * 时域数据顺序为时间顺序,频域数据的顺序按照频率有低到高依次输出,**实部在前,虚部在后**。 * 对于实数fft和ifft,**频域第一个复数点**的实部对应频率最低点频谱信号(直流分量,即X(0)),频域第一个复数的虚部对应频率最高点频谱信号(即X(N/2))。 ### 数据模式 fft采用32位定点数计算,为了适应不同输入数据位宽的要求,硬件支持不同有效位的输入和输出,为了节省总线资源,硬件支持两个16位定点数拼接在一起输入,输出也是2个16位的定点数拼成32位输出,若数据有效位宽超过16位,不足32位,则硬件自动截取低N位(16