2008-10-18
卡尔曼滤波器示例
我们来看一种用MATLAB编写的高级算法,使用AccelDSP综合工具进行综合,然后将算法集成到System Generator模型中。卡尔曼滤波器是一种特殊类型的自适应递归滤波器,非常适合将多个有噪声的信号合并成一个较清晰的信号。卡尔曼滤波器以对象(如由地面雷达跟踪的商用飞机)的数学模型开始,使用该模型预测未来行为。然后,滤波器使用实测信号(如返回到雷达接收器的飞机特征信号)定时校正预测。
图3 DSP系统框图
以下是一个卡尔曼滤波器的MATLABM文件。该算法定义矩阵R和I,这两个矩阵描述了实测信号和预测行为的统计数据。算法的后九行是前向预测代码和自我校正代码。
function[s]=simple_kalman(A)
DIM=size(A,2)
pesistent P_cap
if isempty(P_cap)
P_cap=[8 0 0;0 8 0;0 0 8];
p="ones"(DIM,1)/2;
end;
1=eye(DIM);
R=[128 0 0;0 128 0;0 0 128]
% estimate step:
P_cap_est=P_cap+1;
% correction step:
K=P_cap_est*inv(P_cap_est+R);
P=P+K*(A'-P);
P_cap=(1-K)*P_cap_est;
S=p'
表1 控制所生成硬件的综合指令
像加减这类常用运算符是在A或P_cap这类数组上运算,无须像C语言所要求的那样编写循环语句。二维数组自动以矩阵相乘,无须任何特别注释。
MATLAB运算符(如矩阵转置)可以使MATLAB代码短小易读。而像矩阵求逆这类复杂运算可以用MATLAB丰富的线性代数功能完成。虽然可以将这种算法构建成框图,但这样做很容易使算法结构在MATLAB中显得费解。有了AccelDSP综合工具,就可以用AccelWare IP工具套件将复杂的MATLAB工具箱和内置函数(如卡尔曼滤波器示例中使用的矩阵求逆)直接赋予硬件。这些工具套件提供多种矩阵求逆方法。核的选择取决于矩阵的大小、结构和值。
我们再回到卡尔曼滤波器示例,最适宜的方法是使用AccelWare QR矩阵求逆核。AccelWare核是依据MATLAB语法生成的,可有多种硬件实现架构,这些架构允许用户对设计进行速度、面积、功耗和噪声优化。为了使用AccelWare功能,需要对代码进行以下小修改:
用AccelDSP综合工具综合MATLAB可以使用AccelDSP综合工具进行浮点仿真,以建立一个基准来参考。然后将设计转换成定点,以便进行定点效果仿真。有诸多功能可以帮助分析这些效果和定点设计(如饱和与四舍五入)。数据位宽的增长可以用户控制的方式自动传播到整个设计中。这种算法设计浏览过程可以帮助您获得理想的量化结果,此量化结果能够在控制上溢出/下溢出的同时尽量缩小位宽,以便尽早在硅片面积与性能指针之间进行权衡。一旦确定了适宜的量化结果,使用AccelDSP综合工具的下一步就是为Xilinx目标器件生成RTL。可以通过使用表1所列综合指令来规定硬件含义。使用这些指令可以规范基于硬件的设计浏览,使设计小组能够进一步提高结果质量。在综合RTL时,AccelDSP综合工具评估和调度整个算法,并且在可能时进行边界优化。
AccelDSP工具在整个流程中都保持始终如一的验证环境,这是因为使用了自校验式测试平台,即使用MATLAB定点设计时生成的输入/ 输出向量来验证生成的RTL。AccelDSP综合工具还会报告卡尔曼滤波器的流量和延时量,这是衡量设计是否满足指标以及生成时序精度的 SystemGenerator模型所必需的。
生成System Generator模型
成功完成RTL验证之后,即可通过单击“Generate System Generator”图标来为设计生成System Generator模型。AccelDSP工具产生一个可支持仿真和RTL代码的System Generator IP模块。
此时,设计流程过渡到System Generator for DSP,其中可以在Simulink库浏览器中使用卡尔曼滤波器的新模块,只需选择卡尔曼滤波器模块,然后将其拖入到目标环境中,便可将AccelDSP 生成的卡尔曼滤波器集成到System Generator设计中。
结束语
自定制DSP算法最适于用MATLAB建立数学模型,而完整的系统则最适于用Simulink建立 时序精度的模型。这两种建模域紧密结合即可使用丰富的MATLAB语言(包括内置函数和工具箱函数)来创建复杂DSP算法的System Generator IP模块,从而为在FPGA中设计DSP系统提供一种有效的手段。
评论0