System Identification Используя адаптивную фильтрацию RLS

В этом примере показано, как использовать фильтр рекурсивных наименьших квадратов (RLS), чтобы идентифицировать неизвестную систему, смоделированную с КИХ-фильтром lowpass. Динамический фильтр visualizer используется, чтобы сравнить частотную характеристику неизвестных и предполагаемых систем. Этот пример позволяет вам динамически настраивать ключевые параметры симуляции с помощью пользовательского интерфейса (UI). Пример также показывает вам, как использовать MATLAB Coder, чтобы сгенерировать код для алгоритма и ускорить скорость его выполнения.

Требуемые продукты MathWorks™:

  • DSP System Toolbox™

Дополнительные продукты MathWorks™:

  • MATLAB Coder™ для генерации кода С от симуляции MATLAB

  • Simulink™ для выполнения версии Simulink примера

Введение

Идентификация адаптивной системы является одним из главных приложений адаптивной фильтрации. Этот пример демонстрирует систему идентификации с помощью фильтра RLS. Рабочий процесс примера изображен ниже:

Неизвестная система моделируется КИХ-фильтром lowpass. Тот же вход питается фильтры RLS и КИХ. Желаемым сигналом является выход неопознанной системы. Предполагаемые веса фильтра RLS поэтому сходятся к коэффициентам КИХ-фильтра. Коэффициенты фильтра RLS и КИХ-фильтра используются динамическим фильтром visualizer, чтобы визуализировать желаемую и предполагаемую частотную характеристику. Кривая обучения фильтра RLS (график среднеквадратичной погрешности (MSE) фильтра по сравнению со временем) также визуализируется.

Настраиваемый КИХ-фильтр

КИХ-фильтр lowpass, используемый в этом примере, моделируется с помощью dsp. Системный объект VariableBandwidthFIRFilter. Этот объект позволяет вам настраивать частоту среза фильтра при сохранении КИХ-структуры. Настройка достигается путем умножения каждого коэффициента фильтра фактором, пропорциональным текущим и желаемым частотам среза. Для получения дополнительной информации об этом объекте введите dsp.VariableBandwidthFIRFilter.

Симуляция MATLAB

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

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

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

  2. Кривая обучения фильтра RLS.

Графический вывод происходит, когда вход 'plotResults' к функции 'верен'.

Выполните RLSFilterSystemIDExampleApp, чтобы запустить симуляцию и построить результаты на осциллографах. Обратите внимание на то, что симуляция запускается столько, сколько пользователь явным образом не останавливает ее.

Графиками ниже является выход выполнения вышеупомянутой симуляции в течение 100 тактов:

Быстрая сходимость фильтра RLS к КИХ-фильтру видна через вышеупомянутые графики.

RLSFilterSystemIDExampleApp запускает Пользовательский интерфейс (UI), спроектированный, чтобы взаимодействовать с симуляцией. Пользовательский интерфейс позволяет вам настройкам параметров, и результаты отражаются в симуляции немедленно. Например, перемещение ползунка для 'Частоты среза' направо, в то время как симуляция запускается, увеличивает КИХ-частоту среза фильтра. Точно так же перемещая ползунок для 'RLS Упущение Фактора' настраивает фактор упущения фильтра RLS. Графики отражают ваши изменения, когда вы настраиваете эти параметры. Для получения дополнительной информации о пользовательском интерфейсе обратитесь к HelperCreateParamTuningUI.

Существует также две кнопки на пользовательском интерфейсе - кнопка 'Reset' сбрасывает состояния RLS, и КИХ-фильтры к их начальным значениям, и 'Останавливаются, симуляция' заканчивает симуляцию. Если вы настроите упущение фильтра RLS фактора на значение, которое слишком низко, вы заметите, что фильтру RLS не удается сходиться к требуемому решению, как ожидалось. Можно восстановить сходимость первым увеличением фактора упущения к приемлемому значению и затем нажатия на кнопку 'Reset'. Используйте пользовательский интерфейс, чтобы управлять или симуляцией или, опционально, файл MEX (или независимый исполняемый файл) сгенерированный из кода симуляции, как детализировано ниже. Если у вас есть MIDI-контроллер, возможно синхронизировать его с пользовательским интерфейсом. Можно сделать это путем выбора управления MIDI в диалоговом окне, которое открыто, когда вы щелкаете правой кнопкой по ползункам или кнопкам и выбираете "Synchronize" из контекстного меню. Выбранное управление 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 для симуляции. В этом сценарии пользовательский интерфейс все еще запускается в среде 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: 4.7681 seconds
Time taken to run the MEX-File: 0.62498 seconds
Speed-up by a factor of 7.6292 is achieved by creating the MEX-File

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

Временная директория, ранее созданная, может быть удалена через:

cd(currDir);
clear HelperRLSFilterSystemIdentificationSimMEX;
rmdir(mexDir, 's');

Версия Simulink

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

В этой модели КИХ-фильтр lowpass моделируется с помощью блока Variable Bandwidth FIR Filter. Визуализация ответа величины выполняется с помощью dsp.DynamicFilterVisualizer.

Дважды кликните подсистему System Identification, чтобы запустить маску, спроектированную, чтобы взаимодействовать с моделью Simulink. Можно настроить частоту среза КИХ-фильтра и фактор упущения фильтра RLS.

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