加速定点仿真
此示例说明如何使用 fiaccel
函数来加速定点算法。代码加速为通过 MEX 文件生成加速定点算法提供优化。Fixed-Point Designer™ 提供了一个方便的函数 fiaccel
来将您的 MATLAB® 代码转换为 MEX 函数,这可以大大加快定点算法的执行速度。在此示例中,您将从 MATLAB 代码生成 MEX 函数,运行生成的 MEX 函数,并将执行速度与 MATLAB 代码仿真速度进行比较。
示例描述
此示例使用一阶反馈环。转换为输出信号类型可以防止无限的位增长。输出信号被延迟一个采样周期并通过回馈来缓冲输入信号。
检查 MATLAB 反馈函数代码
执行反馈环的 MATLAB 函数位于文件 fiaccelFeedback.m
中。对输出 y
的下标赋值转换为 y
的类型,并防止无限的位增长。
function [y,z] = fiaccelFeedback(x,a,y,z) for n = 1:length(x) y(n) = x(n) - a*z; z(:) = y(n); end end
此函数中使用以下变量:
x
是输入信号向量。y
是输出信号向量。a
是反馈增益。z
是延迟一个单位时间的输出信号。
创建输入信号并初始化变量
clearvars
将随机数生成器的设置设为其默认值。
rng('default');
输入信号。
x = fi(2*rand(1000,1)-1,true,16,15);
反馈增益。
a = fi(0.9,true,16,15);
初始化输出。选择小数长度以防止溢出。
y = fi(zeros(size(x)),true,16,12);
初始化延迟的输出。
z = cast(0,'like',y);
运行解释的 MATLAB 和时间
tic y1 = fiaccelFeedback(x,a,y,z); t1 = toc;
编译反馈代码的 MEX 版本
为代码生成声明反馈增益参数 a
常量。
fiaccel fiaccelFeedback -args {x,coder.Constant(a),y,z} -o fiaccelFeedback_mex
运行 MEX 编译和时间
运行一次以将 MEX 文件加载到内存中。
fiaccelFeedback_mex(x,a,y1,z);
再次运行以计时。
tic y2 = fiaccelFeedback_mex(x,a,y,z); t2 = toc;
加速比
将 MEX 执行速度与 MATLAB 代码仿真速度进行比较。
ratio_of_speed_up = t1/t2
ratio_of_speed_up = 152.8251
验证定点解释的 MATLAB 和 MEX 输出是否相同
isequal(y1,y2)
ans = logical 1
隐藏代码分析器警告。
%#ok<*NOPTS>