exponenta event banner

Создание DSP-приложений с помощью компилятора MATLAB

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

Введение

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

Алгоритм идентификации системы

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

Дополнительные сведения об алгоритме и настройке см. в примере «Идентификация системы с помощью адаптивной фильтрации RLS».

Моделирование MATLAB

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

RLSFilterSystemIDCompilerExampleApp;

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

  1. Частота отсечки (Гц) - частота отсечки фильтра нижних частот, определяемая как скаляр в диапазоне [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) для функции MATLAB RLSFilterSystemIDCompilerExampleApp. mcc вызывает компилятор MATLAB, который компилирует функцию MATLAB в автономный исполняемый файл, сохраненный в текущем каталоге. Используйте mcc (Компилятор MATLAB) функция из компилятора MATLAB для компиляции 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 Идентификация системы с помощью адаптивной фильтрации RLS, запуск этого исполняемого приложения также запускает пользовательский интерфейс. Пользовательский интерфейс позволяет настраивать параметры, и результаты мгновенно отражаются в моделировании. Например, переместите ползунок «Частота отсечения (Гц)» влево во время моделирования. Вы увидите падение на графике частоты отсечки и соответствующее колебание MSE фильтра RLS. Для приостановки или остановки моделирования можно использовать кнопки пользовательского интерфейса.

Очистка созданных файлов

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

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