Система идентификации с использованием адаптивной фильтрации RLS

В этом примере показано, как использовать рекурсивный фильтр методом наименьших квадратов (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.

Симуляция MATLAB

HelperRLSFilterSystemIdentificationSim является функцией, содержащей реализацию алгоритма. Он создает экземпляры, инициализирует и проходит через объекты, образующие алгоритм.

Функция RLSFilterSystemIDExampleApp переносов вокруг HelperRLSFilterSystemIdentificationSim и итеративно вызывает его, обеспечивая непрерывную адаптацию к неопознанной конечной импульсной характеристике системе. Использование dsp.DynamicFilterVisualizer в заявке также показано следующее:

  1. Желаемые и оцененные передаточные функции.

  2. Кривая обучения фильтра 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 затем работает в соответствии с ползунком/кнопкой, так что одно управление отслеживается другим.

Генерация файла MEX

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

Создание файлов 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');

Версия Simulink

rlsfiltersystemidentification является моделью Simulink, которая реализует пример идентификации системы RLS, выделенный в предыдущих разделах.

В этой модели lowpass конечной импульсной характеристике моделируется с помощью блока Переменная ширина полосы конечной импульсной характеристики. Визуализация характеристики величины выполняется с помощью dsp.DynamicFilterVisualizer.

Дважды кликните подсистему Системы идентификации, чтобы запустить маску, предназначенную для взаимодействия с моделью Simulink. Можно настроить частоту отключения конечной импульсной характеристики и коэффициент забывания RLS-фильтра.

Модель генерирует код, когда он моделируется. Поэтому она должна выполняться из папки с разрешениями на запись.