В этом примере показов, как использовать MATLAB Compiler™ для создания автономного приложения из функции MATLAB, которая использует системные объекты из DSP System Toolbox™.
В этом примере вы начинаете с функции RLSFilterSystemIDCompilerExampleApp, которая использует RLS-фильтр для системы идентификации. Вы генерируете исполняемое приложение из этой функции с помощью MATLAB Compiler, а затем запускаете приложение. Преимущество генерации таких автономных приложений в том, что их можно запускать даже в системах, в которых не установлен MATLAB. Им нужна только установка MATLAB Runtime.
Рекурсивные фильтры методом наименьших квадратов (RLS) являются адаптивными фильтрами, которые могут использоваться для идентификации неизвестной системы. RLSFilterSystemIDCompilerExampleApp
использует фильтры RLS, чтобы идентифицировать систему с переменной частотой отключения. Система является lowpass конечная импульсная характеристика, реализованным с помощью dsp.VariableBandwidthFIRFilter
. RLS-фильтр реализован с помощью dsp.RLSFilter
.
Для получения дополнительной информации об алгоритме и настройке, следуйте примеру: Система идентификации с использованием адаптивной фильтрации RLS.
Чтобы проверить поведение RLSFilterSystemIDCompilerExampleApp
, запустите функцию в MATLAB. Он принимает необязательный вход, который является количеством шагов итерации. Значение по умолчанию является 300 итерациями.
RLSFilterSystemIDCompilerExampleApp;
Появляется пользовательский интерфейс (UI), который имеет два параметра, которыми можно управлять:
Частота отсечения (Гц) - частота отсечения lowpass, которая будет идентифицирована как скаляр в области значений [0, 5000] Гц.
Коэффициент забывания 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'));
Во временной директории, который вы только что создали, запустите 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');