多道脉冲幅度分析器的核心,
------梯形成形算法。
单指数脉冲梯形成形算法算法:
设前置放大器输出为理想指数信号,
时域表达式为:
Ui(t)=Umaxe-t/taoμ(t)
Umax 为脉冲幅值,tao为前端放大器的时间常数,μ(t)为标准单位阶跃函数,以Ts为周期对输入信号进行采样,可以得到脉冲序列的表达式:
Ui(t)=Umaxe-nTs/taoμ(t)
令e-nTs/tao=q,对上式进行Z变换得:
Ui(t)=Umaxz/(z-d)
理想梯形函数的分段函数表示如下: Uo(t)=y1(t)+y2(t)+y3(t)+y4(t)
y1(t)=(Umax/ta)t y2(t)=-y1(t-ta)
y3(t)=-y1(t-tb)
y4(t)=y1(t-tc)
式中:ta、tb、tc分别为梯形的上升沿、平顶、下降沿的宽度。令ta=naTs、tb=nbTs、tc=ncTs,理想梯形函数的分段函数经过单边的z变换可表示为:
Uo(z)=Umax(1-z-na-z-nb+z-nc)/(1-2z-1+z-2)
从而可得梯形成形算法的传递函数:
H(z)=Uo(z)/Ui(z)=[z(1-z-na)(1-z-nb)(1-qz-1)]/[na(1-z-1)2
Matlab仿真如下图
根据梯形成形算法,在Matlab中编写相应的脚本测试程序,运行后如下图所示。
在用Matlab验证算法成功后根据相应参数对梯形成形算法进行设计,最后在FPGA中进行实现。本人做了两种方法,将其做对比。
方法一:
根据梯形成形算法直接用硬件描述需要编写工程,完成后使用modelsim软件做功能仿真进行验证,的结果如下图,该方法在设计中主要需要处理浮点数转定点处理,以及在使用Verilog 设计时处理一些小数乘法除法运算,以及一些结位处理,为了方便移植和增加代码可读性,我以使用Verilog进行编码设计,分零极点进行verilog编码设计,并且移植到不同FPGA平台进行测试后效果良好。
从matlab脚本仿真,再到modelsim功能仿真验证了数字梯形成形算法的可行性。接下来,将代码下载进FPGA中进行测试,本人使用AD9226对信号进行采集。接入信号发生器,产生脉冲输入,用逻辑分析仪SingalTap ii观测,成形效果完美。
方法二:System generator数字信号处理工具,搭建梯形成形算法模型,自动生成梯形成形算法的Verilog 代码,此方法避开Verilog代码编写,但是对这里截位要求需控制的很好,不然自动生成的代码功能仿真没问题,时测出大问题。而且只适用于赛灵思芯片,代码可读性可移植性较差。随着芯片制裁,赛灵思和阿尔特拉的FPGA一片难求价格昂贵,本人认为System generator局限性很大,可做认知学习,真正长久还是考写代码。增强工程的可移植性,找到相应国产可替代方案。
本人现在从事FPGA开发工作,曾经研究方向是核电子学,如有兴趣小伙伴可后台私信我。