赞
踩
FFT是许多数字信号处理算法中的基本运算单元,我们经常会用到FFT对采集到的信号做频谱分析。在这个设计实例中,我们使用并行ADC采集外部信号,经过FFT处理,将计算结果通过串口发送至PC。由于FFT处理速度与串口通信速度之间存在差异,中间还需要加入一个跨时钟域处理单元。
这是一些完成本文设计的参考文章:
1.ADC采集设计参考“FPGA基础设计(五):并行ADC与DAC” https://blog.csdn.net/FPGADesigner/article/details/80672231
2.FFT设计参考“FPGA数字信号处理(八)Quartus FFT IP核实现” https://blog.csdn.net/FPGADesigner/article/details/80690345
3.串口通信设计参考“FPGA基础设计(三):UART串口通信”https://blog.csdn.net/FPGADesigner/article/details/75201194
4.跨时钟域处理设计参考“FPGA综合系统设计(一):1.2/50μs冲击电压测量与显示” https://blog.csdn.net/FPGADesigner/article/details/73825097
在上述4篇文章的基础上,完成本设计非常简单。设计的RTL视图如下:
PLL用于产生65MHz的ADC采样时钟。这里跨时钟域处理选用了双口RAM,是因为FFT的计算结果很适合RAM存储,而不适合FIFO。FFT计算结果的每一个点都对应了一个频率分量,如果把FFT计算结果按照顺序依次存入到对应地址的RAM中,我们很容易可以从RAM中读取出任意一个频率点的值(即频谱结果恰好与RAM地址一一映射)。
下载到开发板中,ADC采集方波信号,FFT计算之后将幅度谱发送至PC上,用MATLAB接收串口数据,并计算出对应的功率谱如下:
将清楚可见方波信号为一系列谐波的叠加。对代码稍作修改,将串口发送格式改为与HMI屏相匹配(即串口屏,只需要通过串口配置即可完成GUI界面的设计显示)。采集正弦波信号,FFT计算之后将幅度谱发送至HMI串口屏上显示,可以看到单频信号在幅度谱中对应一个频率点。:
串口数据发送至PC上的Quartus工程(由于FFT IP核使用的是集成在qsys中的,老版本Quartus无法直接使用此工程,需要另外配置一下FFT)可以在这里下载:https://download.csdn.net/download/fpgadesigner/10479416 。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。