В этом примере показано, как использовать рекурсивный фильтр наименьших квадратов (RLS) для идентификации неизвестной системы, смоделированной с помощью низкочастотного фильтра FIR. Визуализатор динамического фильтра используется для сравнения частотной характеристики неизвестной и оценочной систем. В этом примере можно динамически настраивать параметры моделирования ключей с помощью пользовательского интерфейса. В примере также показано, как использовать кодер MATLAB для генерации кода алгоритма и ускорения его выполнения.
Необходимые MathWorks™ продукты:
Toolbox™ системы DSP
Дополнительные MathWorks™ продукты:
MATLAB Coder™ для генерации кода C из моделирования MATLAB
Simulink™ для выполнения Simulink-версии примера
Адаптивная идентификация системы является одним из основных приложений адаптивной фильтрации. В этом примере показана идентификация системы с использованием фильтра RLS. Ниже показан рабочий процесс примера:

Неизвестная система моделируется фильтром FIR нижних частот. Один и тот же вход подается на фильтры FIR и RLS. Требуемым сигналом является выходной сигнал неустановленной системы. Поэтому оцененные веса фильтра RLS сходятся к коэффициентам фильтра FIR. Коэффициенты фильтра RLS и фильтра FIR используются визуализатором динамического фильтра для визуализации желаемой и оцененной частотной характеристики. Кривая обучения фильтра RLS (график среднеквадратической ошибки (MSE) фильтра в зависимости от времени) также визуализируется.
Фильтр FIR нижних частот, используемый в этом примере, моделируется с использованием dsp. Объект VariiveBandwidthFIRFilter System. Этот объект позволяет настраивать частоту отсечения фильтра при сохранении структуры FIR. Настройка достигается путем умножения каждого коэффициента фильтра на коэффициент, пропорциональный текущей и желаемой частотам отсечки. Для получения дополнительных сведений об этом объекте введите dsp.VariableBandwidthFIRFilter.
HelperRLSFilterSystemSim - функция, содержащая реализацию алгоритма. Он создает экземпляры, инициализирует и выполняет шаги по объектам, формирующим алгоритм.
Функция обертки RLSFilterSystemIDExampleApp вокруг HelperRLSFilterSystemIdentificationSim и многократно называет его, предоставляя непрерывную адаптацию неопознанной системе ЕЛИ. Используя dsp.DynamicFilterVisualizer приложение также отображает следующее:
Требуемые и расчетные функции передачи частоты.
Кривая обучения фильтра RLS.
Печать выполняется, когда значение параметра plotResults, введенное в функцию, равно true.
Выполните RLSFilterSystemIDExampleApp, чтобы управлять моделированием и подготовить результаты на объемах. Обратите внимание, что моделирование выполняется до тех пор, пока пользователь не остановит его явным образом.
Графики, приведенные ниже, являются результатом выполнения вышеуказанного моделирования для 100 временных шагов:


Быстрая сходимость фильтра RLS к фильтру FIR может быть видна на приведенных выше графиках.
RLSFilterSystemIDExampleApp начинает Пользовательский интерфейс (UI), разработанный, чтобы взаимодействовать с моделированием. Пользовательский интерфейс позволяет настраивать параметры, и результаты мгновенно отражаются в моделировании. Например, перемещение ползунка «Частота отсечения» вправо во время моделирования увеличивает частоту отсечения фильтра FIR. Аналогично, перемещение ползунка для коэффициента забывания RLS настраивает коэффициент забывания фильтра RLS. Графики отражают изменения при настройке этих параметров. Дополнительные сведения об интерфейсе пользователя см. в разделе HelperCreateParamTuningUI.
На UI также имеются две кнопки - кнопка «Reset» сбрасывает состояния фильтров RLS и FIR до их начальных значений, и «Stop simulation» завершает моделирование. Если настроить коэффициент забывания фильтра RLS на слишком низкое значение, то можно заметить, что фильтр RLS не сходится к требуемому решению, как ожидалось. Можно восстановить сходимость, сначала увеличив коэффициент забывания до приемлемого значения, а затем нажав кнопку «Сброс». Используйте пользовательский интерфейс для управления моделированием или, при необходимости, MEX-файлом (или автономным исполняемым файлом), созданным из кода моделирования, как подробно описано ниже. При наличии контроллера MIDI его можно синхронизировать с пользовательским интерфейсом. Это можно сделать, выбрав элемент управления MIDI в диалоговом окне, которое открывается при щелчке правой кнопкой мыши на ползунках или кнопках и выборе в контекстном меню пункта «Синхронизировать». Выбранный элемент управления MIDI затем работает в соответствии с ползуном/кнопкой, так что управление одним элементом управления отслеживается другим.

Кодер MATLAB также может использоваться для генерации кода C для функции HelperRLSFilterSystemSim. Чтобы создать файл 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-файлов часто помогает сократить время выполнения моделирования. Чтобы измерить улучшение производительности, давайте впервые выполним алгоритм в 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, выделенный в предыдущих разделах.

В этой модели фильтр КИХ нижних частот моделируется с использованием блока фильтра КИХ переменной полосы пропускания. Визуализация амплитудного отклика осуществляется с помощью dsp.DynamicFilterVisualizer.
Дважды щелкните подсистему идентификации системы, чтобы запустить маску, предназначенную для взаимодействия с моделью Simulink. Можно настроить частоту отсечения фильтра FIR и коэффициент забывания фильтра RLS.
При моделировании модель генерирует код. Поэтому она должна выполняться из папки с разрешениями на запись.