Main Content

Accelerate Fixed-Point Simulation

This example shows how to accelerate fixed-point algorithms using the fiaccel function. Code acceleration provides optimizations for accelerating fixed-point algorithms through MEX file generation. Fixed-Point Designer™ provides a convenience function fiaccel to convert your MATLAB code to a MEX function, which can greatly accelerate the execution speed of your fixed-point algorithms. In this example, you generate a MEX function from MATLAB® code, run the generated MEX function, and compare the execution speed with MATLAB code simulation.

Description of the Example

This example uses a first-order feedback loop. Casting to the output-signal type prevents infinite bit growth. The output signal is delayed by one sample and fed back to dampen the input signal.

Inspect the MATLAB® Feedback Function Code

The MATLAB function that performs the feedback loop is in the file fiaccelFeedback.m. Subscripted assignment into the output y casts to y's type and prevents infinite bit growth.

function [y,z] = fiaccelFeedback(x,a,y,z)
    for n = 1:length(x)
        y(n) = x(n) - a*z;
        z(:) = y(n);
    end
end

The following variables are used in this function:

  • x is the input signal vector.

  • y is the output signal vector.

  • a is the feedback gain.

  • z is the unit-delayed output signal.

Create the Input Signal and Initialize Variables

clearvars

Put the settings of the random number generator to its default value.

rng('default');

Input signal.

x = fi(2*rand(1000,1)-1,true,16,15);

Feedback gain.

a = fi(0.9,true,16,15);

Initialize output. Fraction length is chosen to prevent overflow.

y = fi(zeros(size(x)),true,16,12);

Initialize delayed output.

z = cast(0,'like',y);

Run Interpreted MATLAB and Time

tic
y1 = fiaccelFeedback(x,a,y,z);
t1 = toc;

Build the MEX Version of the Feedback Code

Declare feedback gain parameter a constant for code generation.

fiaccel fiaccelFeedback -args {x,coder.Constant(a),y,z} -o fiaccelFeedback_mex

Run the MEX Version and Time

Run once to load the MEX file in memory.

fiaccelFeedback_mex(x,a,y1,z);

Run again to time.

tic
y2 = fiaccelFeedback_mex(x,a,y,z);
t2 = toc;

Acceleration Ratio

Compare the MEX execution speed with MATLAB code simulation.

ratio_of_speed_up = t1/t2
ratio_of_speed_up =

  225.9071

Verify that Fixed-Point Interpreted MATLAB and MEX Outputs are Identical

isequal(y1,y2)
ans =

  logical

   1

Suppress Code Analyzer warnings.

%#ok<*NOPTS>

See Also