Сгенерируйте приложения DSP с помощью MATLAB Compiler

В этом примере показов, как использовать MATLAB Compiler™ для создания автономного приложения из функции MATLAB, которая использует системные объекты из DSP System Toolbox™.

Введение

В этом примере вы начинаете с функции RLSFilterSystemIDCompilerExampleApp, которая использует RLS-фильтр для системы идентификации. Вы генерируете исполняемое приложение из этой функции с помощью MATLAB Compiler, а затем запускаете приложение. Преимущество генерации таких автономных приложений в том, что их можно запускать даже в системах, в которых не установлен MATLAB. Им нужна только установка MATLAB Runtime.

Система идентификации системы

Рекурсивные фильтры методом наименьших квадратов (RLS) являются адаптивными фильтрами, которые могут использоваться для идентификации неизвестной системы. RLSFilterSystemIDCompilerExampleApp использует фильтры RLS, чтобы идентифицировать систему с переменной частотой отключения. Система является lowpass конечная импульсная характеристика, реализованным с помощью dsp.VariableBandwidthFIRFilter. RLS-фильтр реализован с помощью dsp.RLSFilter.

Для получения дополнительной информации об алгоритме и настройке, следуйте примеру: Система идентификации с использованием адаптивной фильтрации RLS.

Симуляция MATLAB

Чтобы проверить поведение RLSFilterSystemIDCompilerExampleApp, запустите функцию в MATLAB. Он принимает необязательный вход, который является количеством шагов итерации. Значение по умолчанию является 300 итерациями.

RLSFilterSystemIDCompilerExampleApp;

Появляется пользовательский интерфейс (UI), который имеет два параметра, которыми можно управлять:

  1. Частота отсечения (Гц) - частота отсечения lowpass, которая будет идентифицирована как скаляр в области значений [0, 5000] Гц.

  2. Коэффициент забывания RLS - Коэффициент забывания для RLS-фильтра, используемого для системы идентификации, заданный как скаляр в области значений [0, 1].

Когда симуляция заканчивается или когда вы кликаете Stop Simulation кнопка показывает график изменений, внесенных вами в эти параметры, и того, как это повлияло на среднюю квадратную ошибку (MSE) RLS-фильтра.

Создайте временную директорию для компиляции

Если вы удовлетворены симуляцией функции в MATLAB, можно скомпилировать функцию. Перед компиляцией создайте временную директорию, в котором у вас есть разрешения на запись. Скопируйте основную функцию MATLAB и связанные файлы помощника в эту временную директорию.

compilerDir = fullfile(tempdir,'compilerDir'); % Name of temporary directory
if ~exist(compilerDir,'dir')
    mkdir(compilerDir); % Create temporary directory
end
curDir = cd(compilerDir);
copyfile(which('RLSFilterSystemIDCompilerExampleApp'));
copyfile(which('HelperRLSFilterSystemIdentificationSim'));
copyfile(which('HelperCreateParamTuningUI'));
copyfile(which('HelperUnpackUIData'));

Скомпилируйте функцию MATLAB в автономное приложение

Во временной директории, который вы только что создали, запустите mcc (MATLAB Compiler) команда функции MATLAB RLSFilterSystemIDCompilerExampleApp. mcc вызывает MATLAB Compiler, который компилирует функцию MATLAB в независимый исполняемый файл, которая сохранена в текущей директории. Используйте mcc (MATLAB Compiler) функция из MATLAB Compiler для компиляции RLSFilterSystemIDCompilerExampleApp в автономное приложение. Задайте опцию '-m', чтобы сгенерировать автономное приложение '-N' опция чтобы включить только директории в путь, заданный через опцию '-p'.

mcc('-mN', 'RLSFilterSystemIDCompilerExampleApp', ...
    '-p', fullfile(matlabroot,'toolbox','dsp'));
DEMO Compiler license. 
  The generated application will expire 30 days from today, 
  on Mon Aug 10 18:05:54 2020.

Этот шаг занимает несколько минут.

Запуск развернутого приложения

Используйте system команда запуска сгенерированного автономного приложения. Обратите внимание, что при запуске автономного приложения с помощью системной команды используется текущее окружение MATLAB и все файлы библиотеки, необходимые из этой установки MATLAB. Для развертывания этого приложения на компьютере, на котором не установлен MATLAB, см. MATLAB Runtime (MATLAB Compiler).

if ismac
    status = system(fullfile('RLSFilterSystemIDCompilerExampleApp.app', ...
        'Contents', 'MacOS', 'RLSFilterSystemIDCompilerExampleApp'));
else
    status = system(fullfile(pwd, 'RLSFilterSystemIDCompilerExampleApp'));
end
dyld: Library not loaded: @rpath/libmwlaunchermain.dylib
  Referenced from: /private/var/folders/dc/482hqt1x0_g33cty0z3_8v20000_8y/T/compilerDir/RLSFilterSystemIDCompilerExampleApp.app/Contents/MacOS/RLSFilterSystemIDCompilerExampleApp
  Reason: image not found
RLSFilterSystemIDCompilerExampleApp.app/Contents/MacOS/RLSFilterSystemIDCompilerExampleApp: Aborted

Подобно примеру MATLAB Система Идентификации Using RLS Adaptive Filtering, выполнение этого исполняемого приложения также запускает пользовательский интерфейс. UI позволяет вам настройкам параметров, и результаты отражаются в симуляции мгновенно. Например, перемещайте ползунок для частоты отсечения (Гц) налево во время симуляции. Вы увидите падение графика для частоты отключения и соответствующее колебание в MSE фильтра RLS. Можно использовать кнопки пользовательского интерфейса, чтобы приостановить или остановить симуляцию.

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

После генерации и развертывания исполняемого файла можно очистить временную директорию, запустив в командной строке MATLAB следующее:

cd(curDir);
rmdir(compilerDir,'s');