В этом примере показано, как использовать рекурсивный фильтр методом наименьших квадратов (RLS) для идентификации неизвестной системы, смоделированной с помощью lowpass конечной импульсной характеристики. Динамический фильтрующий визуализатор используется для сравнения частотной характеристики неизвестной и оцененной систем. Этот пример позволяет вам динамически настраивать параметры симуляции клавиш с помощью пользовательского интерфейса (UI). Пример также показывает, как использовать MATLAB Coder, чтобы сгенерировать код для алгоритма и ускорить скорость его выполнения.
Необходимые MathWorks™ продукты:
DSP System Toolbox™
Дополнительные MathWorks™ продукты:
MATLAB Coder™ для генерации кода С из симуляции MATLAB
Simulink™ для выполнения версии Simulink примера
Адаптивная система идентификации является одним из основных приложений адаптивной фильтрации. Этот пример демонстрирует систему идентификации с помощью RLS-фильтра. Рабочий процесс примера показан ниже:
Неизвестная система моделируется lowpass конечная импульсная характеристика. Этот же вход подается на фильтры конечной импульсной характеристики и RLS. Желаемый сигнал является выходом неопознанной системы. Поэтому оцененные веса RLS-фильтра сходятся к коэффициентам конечной импульсной характеристики. Коэффициенты RLS-фильтра и конечной импульсной характеристики используются динамическим фильтрующим визуализатором для визуализации желаемой и оцененной частотной характеристики. Кривая обучения фильтра RLS (график средней квадратной ошибки (MSE) фильтра от времени) также визуализирована.
lowpass конечная импульсная характеристика, используемый в этом примере, моделируется с помощью dsp. ПеременнаяBandwidthFIRFilter Системный объект. Этот объект позволяет вам настроить частоту отключения фильтра при сохранении структуры конечной импульсной характеристики. Настройка достигается путем умножения каждого коэффициента фильтра на коэффициент, пропорциональный текущей и желаемой частотам отключения. Для получения дополнительной информации об этом объекте введите dsp.VariableBandwidthFIRFilter
.
HelperRLSFilterSystemIdentificationSim является функцией, содержащей реализацию алгоритма. Он создает экземпляры, инициализирует и проходит через объекты, образующие алгоритм.
Функция RLSFilterSystemIDExampleApp переносов вокруг HelperRLSFilterSystemIdentificationSim и итеративно вызывает его, обеспечивая непрерывную адаптацию к неопознанной конечной импульсной характеристике системе. Использование dsp.DynamicFilterVisualizer
в заявке также показано следующее:
Желаемые и оцененные передаточные функции.
Кривая обучения фильтра RLS.
Графическое изображение происходит, когда вход 'plotResults' в функцию 'true'.
Выполните RLSFilterSystemIDExampleApp, чтобы запустить симуляцию и построить график результатов в возможностях. Обратите внимание, что симуляция выполняется до тех пор, пока пользователь не остановит его явным образом.
Приведенные ниже графики являются выходами выполнения вышеописанной симуляции для 100 временных шагов:
Быстрое сходимость RLS-фильтра к конечная импульсная характеристика можно увидеть на вышеописанных графиках.
RLSFilterSystemIDExampleApp запускает Пользовательский интерфейс (UI), предназначенный для взаимодействия с симуляцией. UI позволяет вам настройкам параметров, и результаты отражаются в симуляции мгновенно. Для примера перемещение ползунка для частоты отсечения вправо во время симуляции увеличивает частоту отсечения конечной импульсной характеристики фильтра. Точно так же перемещение ползунка для RLS Formetting Factor настраивает коэффициент забывания RLS-фильтра. Графики отражают ваши изменения, когда вы настраиваете эти параметры. Для получения дополнительной информации об пользовательском интерфейсе см. HelperCreateParamTuningUI.
На пользовательском интерфейсе также есть две кнопки - кнопка 'Reset' сбрасывает состояния фильтров RLS и конечных импульсных характеристик на их начальные значения, и 'Stop simulation' завершает симуляцию. Если вы настраиваете коэффициент забывания RLS-фильтра на слишком низкое значение, вы заметите, что RLS-фильтр не сходится к желаемому решению, как ожидалось. Можно восстановить сходимость, вначале увеличив коэффициент забывания до приемлемого значения, а затем нажав кнопку 'Reset'. Используйте UI, чтобы управлять симуляцией или, опционально, файлом MEX (или независимым исполняемым файлом), сгенерированным из кода симуляции, как подробно описано ниже. Если у вас есть контроллер, его можно синхронизировать с пользовательским интерфейсом. Вы можете сделать это, выбрав элемент управления MIDI в диалоговом окне, который открывается при щелчке правой кнопкой мыши по ползункам или кнопкам и выбрать «Синхронизировать» из контекстного меню. Выбранное управление MIDI затем работает в соответствии с ползунком/кнопкой, так что одно управление отслеживается другим.
MATLAB Coder может использоваться, чтобы сгенерировать код С для функции HelperRLSFilterSystemIdentificationSim также. В порядок генерации Файла MEX для вашей платформы выполните следующее:
currDir = pwd; % Store the current directory address mexDir = [tempdir 'RLSFilterSystemIdentificationExampleMEXDir']; % Name of % temporary directory if ~exist(mexDir,'dir') mkdir(mexDir); % Create temporary directory end cd(mexDir); % Change directory ParamStruct = HelperRLSCodeGeneration();
Code generation successful: To view the report, open('codegen/mex/HelperRLSFilterSystemIdentificationSim/html/report.mldatx').
Вызывая функцию обертки RLSFilterSystemIDExampleApp с 'true'
в качестве аргумента сгенерированный файл MEX HelperRLSFilterSystemIdentificationSimMEX
может использоваться вместо HelperRLSFilterSystemIdentificationSim
для симуляции. В этом сценарии UI все еще работает в среде MATLAB, но основной алгоритм обработки выполняется файлом MEX. Эффективность повышается в этом режиме без ущерба для возможности настройки параметров.
Щелкните здесь, чтобы позвонить RLSFilterSystemIDExampleApp
с 'true'
в качестве аргумента для использования файла MEX для симуляции. Снова симуляция запускается до тех пор, пока пользователь явно не остановит ее из пользовательского интерфейса.
Создание файлов MEX часто помогает достичь более быстрого времени выполнения для симуляций. В порядок измерения улучшения эффективности давайте впервые выполнение алгоритм в MATLAB без каких-либо графических изображений:
clear HelperRLSFilterSystemIdentificationSim disp('Running the MATLAB code...') tic nTimeSteps = 100; for ind = 1:nTimeSteps HelperRLSFilterSystemIdentificationSim(ParamStruct); end tMATLAB = toc;
Running the MATLAB code...
Теперь успеем запустить соответствующий файл MEX и отобразим результаты:
clear HelperRLSFilterSystemIdentificationSim disp('Running the MEX-File...') tic for ind = 1:nTimeSteps HelperRLSFilterSystemIdentificationSimMEX(ParamStruct); end tMEX = toc; disp('RESULTS:') disp(['Time taken to run the MATLAB System object: ', num2str(tMATLAB),... ' seconds']); disp(['Time taken to run the MEX-File: ', num2str(tMEX), ' seconds']); disp(['Speed-up by a factor of ', num2str(tMATLAB/tMEX),... ' is achieved by creating the MEX-File']);
Running the MEX-File... RESULTS: Time taken to run the MATLAB System object: 5.0092 seconds Time taken to run the MEX-File: 0.75715 seconds Speed-up by a factor of 6.6159 is achieved by creating the MEX-File
Созданная ранее временная директория можно удалить через:
cd(currDir); clear HelperRLSFilterSystemIdentificationSimMEX; rmdir(mexDir, 's');
rlsfiltersystemidentification является моделью Simulink, которая реализует пример идентификации системы RLS, выделенный в предыдущих разделах.
В этой модели lowpass конечной импульсной характеристике моделируется с помощью блока Переменная ширина полосы конечной импульсной характеристики. Визуализация характеристики величины выполняется с помощью dsp.DynamicFilterVisualizer
.
Дважды кликните подсистему Системы идентификации, чтобы запустить маску, предназначенную для взаимодействия с моделью Simulink. Можно настроить частоту отключения конечной импульсной характеристики и коэффициент забывания RLS-фильтра.
Модель генерирует код, когда он моделируется. Поэтому она должна выполняться из папки с разрешениями на запись.