В этом примере показано, как ускорить алгоритмы фиксированной точки с помощью 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, которая выполняет обратную связь, находится в файле 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
tic, y = fiaccelFeedback(x,a,y,w); t1 = toc;
fiaccel fiaccelFeedback -args {x,A,y,w} -o fiaccelFeedback_mex
tic y2 = fiaccelFeedback_mex(x,y,w); t2 = toc;
Ускорение кода обеспечивает оптимизацию для ускорения алгоритмов фиксированной точки посредством генерации файла MEX. Fixed-Point Designer™ предоставляет функции удобства fiaccel
преобразовывать ваш код MATLAB в MEX-функцию, которая может значительно ускорить скорость выполнения ваших алгоритмов фиксированной точки.
r = t1/t2
r = 10.3672
clear fiaccelFeedback_mex; tempdirObj.cleanUp; %#ok<*NOPTS>