Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

加速定点仿真

此示例说明如何使用 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 =

  198.6509

验证定点解释的 MATLAB 和 MEX 输出是否相同

isequal(y1,y2)
ans =

  logical

   1

隐藏代码分析器警告。

%#ok<*NOPTS>

另请参阅