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

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

Введение

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

Алгоритм System Identification

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

Для получения дополнительной информации об алгоритме и настройке, последуйте примеру: System Identification Используя Адаптивную Фильтрацию 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

Подобно System Identification MATLAB в качестве примера Используя Адаптивную Фильтрацию RLS, запуская это исполняемое приложение также запускает пользовательский интерфейс. Пользовательский интерфейс позволяет вам настройкам параметров, и результаты отражаются в симуляции немедленно. Например, переместите ползунок для 'Частоты среза (Гц)' налево, в то время как симуляция запускается. Вы будете видеть уменьшение графика для частоты среза и соответствующего колебания MSE фильтра RLS. Можно использовать кнопки на пользовательском интерфейсе, чтобы приостановить или остановить симуляцию.

Очистите Сгенерированные Файлы

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

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