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

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

   10.3672

Очистка временных файлов

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