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: 5.0245 seconds
Time taken to run the MEX-File: 0.84719 seconds
Speed-up by a factor of 5.9308 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.

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