页面加载中,请稍候
来源:现代电子技术发布时间:2011-03-06108浏览
询问 AI摘要:在火车车轮的振动式擦伤检测系统中,经常需要对振动信号进行频谱分析,为实现振动频谱信号的及时输出,在此根据FFT算法中的一种变形运算流图,提出一种基于FPGA的FFT流水线结构,总结了利用流水线结构实现这种FFT运算流图的数据存取规律,并按此结构利用Verilog语言设计了64点数据的6级流水线运算结构。利用振动信号测试数据进行仿真实验,结果表明该设计方法的正确可靠。
关键词:FFT算法;FPGA;流水线结构;蝶形运算;流图
在火车车轮的振动式擦伤检测系统中,根据车轮与钢轨接触时产生的振动信号可以对车轮状态进行检测。有擦伤的车轮与钢轨接触时产生的振动信号具有特定的频谱特征,因此若将检测设备采集到的信号变换到频域进行分析,将有助于判断车轮是否有擦伤。为实现信号的快速变换,采用FPGA实现的FFT处理器对信号进行变换。
FFT是离散傅里叶变换(DFT)的一种快速算法,当DFT的计算点数N很大时,FFT算法相对于直接计算DFT时的运算量会显著减少,因此其在数字信号处理领域有着广泛的应用,大大推动了数字信号处理技术的发展。FFT算法可以通过计算机软件、DSP处理器、FPGA器件和ASIC等方式来实现,目前对各种方式的分析和比较,相关文献已有介绍。在此提出的FFT算法,其FPGA结构具有模块化、流水线、可扩展的特点,因此用它可以提高计算速度,在芯片容量允许的情况下进行多点数、多级流水线结构的FFT运算。
1 算法原理及分析
1.1 FFT算法原理
由DFT的定义可知,如果信号为x(n),则对x(n)做N点DFT的计算表达式为:
[!--empirenews.page--]
1.2 运算流图分析
对于N点的DFT,采用FFT算法可以显著减小计算量,当N越大,采用FFT算法的优势越明显。通过计算可得直接计算DFT的复数乘法次数为N2,而采用FFT计算时其次数仅为(N/2)log2N。在此,采用的流图为图2的形式,通过分析图2可得以下几点重要结论,而这些结论正是进行FPGA结构设计的依据。
(1)输入数据为顺序输入,输出为倒序输出;
(2)对于N点数据,可分为M=log2N级蝶形运算;
(3)在第L级,共有2L-1组蝶形,且每组蝶形的旋转因子相同,各组旋转因子的上标k的顺序及取值为数0,1,2,…,N/2-1倒序排列后的前2L-1个;
(4)在流水线工作方式下,在第L级的计算中,共N/2个蝶形需要计算,蝶形内数据间隔为2M-L,蝶形间数据间隔为2M-L+1;也即蝶形的两输入数据间隔为2M-L,计算下一个蝶形时需要跳跃2M-L+1个数据,但跳跃超出数据总数时需要特殊处理,这将在FPGA结构设计中阐述;
(5)在流水线工作方式下,每级蝶形输出需要用RAM存储一半数据后再计算。在第L级的存储中,其存储寻址方式与第L-1级计算寻址方式相同(即原位计算);也即每次需要存储一组上级输出的两个数据,其数据组间间隔为2M-L+2。组内数据间隔为2M-L+1。
2 FPGA结构设计
2.1 总体结构设计
这里,FPGA结构设计采用了如图2所示的流图结构。分析图可以发现,对M级的运算可设计成流水线处理方式,但需要注意的是对于第L级和第L+1级之间的数据连接问题,即第L级的处理结果到第L+1级时,并不能立即处理,而需要将第L级的结果缓存一半后,第L+1级才能按一定的寻址方式开始处理数据,其寻址方式如1.2节中(4),(5)所述。
[!--empirenews.page--]
3 仿真实验
完成了FFT处理器结构设计后,需要对其正确性进行测试。本实验采用Verilog语言完成了FFT处理器的FPGA设计,仿真工具是ModelSim 6.1f。图5中(a),(b)分别是振动信号及其幅度谱的Matlab绘图表示,已知擦伤振动信号的振动频率在2.5kHz附近,系统采样频率为15kHz。
对振动信号通过ModelSim仿真进行测试,由于处理过程为流水线处理,各级将依次处理数据,且在时间上可以有重叠,使总的处理时间减少。如图6为ModelSim仿真图。最终得到的数据经过倒序输出后在Matlab中进行了绘图表示,图7(a),图7(b)分别表示经过处理后的FFT变换结果的实部和虚部。对处理后数据的实部和虚部进行运算后得到最终的输入信号幅度谱如图8所示。
4 结语
通过对比Matlab处理结果图5(b)和FPGA仿真结果图8可知:
(1)在该实验中,设计方案能够正确地对64点数据进行FFT运算,幅度谱峰值位于Matlab结果的第13点和第21点处,它们对应的频率分别是2.8 kHz和4.7 kHz。其中,2.8 kHz可判断为擦伤信号频率,而4.7 kHz可视为高频噪声,因而需要滤波器处理;
(2)FPGA处理结果存在噪声,这些噪声的产生原因在2.2节中已进行了初步分析。这是由于用硬件处理数据时由于数据的表示位数有限,且在乘法器的输出过程中对数据进行了截断处理所造成的。在此,仿真测试是基于64点数据进行的,但该设计方法可以方便地扩展到其他数据点数的处理中去,只需要增减运算级数,修改旋转因子表和修正各级控制与寻址参数即可。
新闻来源:现代电子技术,文中所述为作者独立观点,不代表icspec立场。更多精彩资讯请下载icspec App。如对本稿件有异议,请联系微信客服specltkj。
暂无评论哦,快来评论一下吧!
2026-07-08

2026-07-10