Этот пример показывает, как ускорить алгоритмы с фиксированной точкой, используя 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>