Ускорьте симуляцию фиксированной точки

В этом примере показано, как ускорить алгоритмы фиксированной точки с помощью fiaccel функция. Вы генерируете MEX-функцию из кода MATLAB®, запускаете сгенерированную MEX-функцию и сравниваете скорость выполнения с симуляцией кода MATLAB.

Описание примера

Этот пример использует обратную связь первого порядка. Это также использует квантизатор, чтобы избежать бесконечного роста разрядности. Выходной сигнал задержан одной выборкой и возвращен, чтобы ослабить входной сигнал.

Скопируйте необходимый файл

Вам нужен этот файл MATLAB, чтобы запустить этот пример. Скопируйте его во временную директорию. Этот шаг требует разрешения записи к временной директории системы.

tempdirObj = fidemo.fiTempdir('fiaccelbasicsdemo');
fiacceldir = tempdirObj.tempDir;
fiaccelsrc = ...
    fullfile(matlabroot,'toolbox','fixedpoint','fidemos','+fidemo','fiaccelFeedback.m');
copyfile(fiaccelsrc,fiacceldir,'f');

Смотрите код функции обратной связи MATLAB

Функция MATLAB, которая выполняет обратную связь, находится в файле fiaccelFeedback.m. Этот код квантует вход и выполняет действие обратной связи:

type(fullfile(fiacceldir,'fiaccelFeedback.m'))
function [y,w] = fiaccelFeedback(x,a,y,w)
%FIACCELFEEDBACK Quantizer and feedback loop used in FIACCELBASICSDEMO.

% Copyright 1984-2013 The MathWorks, Inc.
%#codegen

for n = 1:length(x)
    y(n) =  quantize(x(n) - a*w, true, 16, 12, 'floor', 'wrap');
    w    = y(n);    
end

Следующие переменные используются в этой функции:

  • x вектор входного сигнала.

  • y вектор выходного сигнала.

  • a усиление обратной связи.

  • w задержанный модулем выходной сигнал.

Создайте входной сигнал и инициализируйте переменные

rng('default');                      % Random number generator
x = fi(2*rand(1000,1)-1,true,16,15); % Input signal
a = fi(.9,true,16,15);               % Feedback gain
y = fi(zeros(size(x)),true,16,12);   % Initialize output. Fraction length
                                     % is chosen to prevent overflow
w = fi(0,true,16,12);                % Initialize delayed output
A = coder.Constant(a);               % Declare "a" constant for code
                                     % generation

Запустите режим normal mode

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

Создайте версию MEX кода обратной связи

fiaccel fiaccelFeedback -args {x,A,y,w} -o fiaccelFeedback_mex

Запустите версию MEX

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

Ускоряющее отношение

Ускорение кода обеспечивает оптимизацию для ускорения алгоритмов фиксированной точки посредством генерации файла MEX. Fixed-Point Designer™ предоставляет функции удобства fiaccel преобразовывать ваш код MATLAB в MEX-функцию, которая может значительно ускорить скорость выполнения ваших алгоритмов фиксированной точки.

r = t1/t2
r =

   16.5157

Очистите Временные Файлы

clear fiaccelFeedback_mex;
tempdirObj.cleanUp;
%#ok<*NOPTS>