Идентификация системы - это процесс идентификации коэффициентов неизвестной системы с помощью адаптивного фильтра. Общий обзор процесса показан в разделе Идентификация системы - использование адаптивного фильтра для идентификации неизвестной системы. Основными компонентами являются:
Алгоритм адаптивного фильтра. В этом примере установите Method имущество dsp.LMSFilter кому 'LMS' для выбора алгоритма адаптивного фильтра LMS.
Неизвестная система или процесс для адаптации. В этом примере фильтр разработан fircband является неизвестной системой.
Соответствующие входные данные для осуществления процесса адаптации. Для общей модели LMS это желаемый сигнал ) и входной сигнал k).
Целью адаптивного фильтра является минимизация сигнала ошибки между выходом адаптивного фильтра ) и выходом неизвестной системы (или системы, которая должна быть идентифицирована) k). Как только сигнал ошибки минимизируется, адаптированный фильтр напоминает неизвестную систему. Коэффициенты обоих фильтров тесно совпадают.
Примечание.При использовании R2016a или более ранней версии замените каждый вызов объекта синтаксисом эквивалентного шага. Например, obj(x) становится step(obj,x).
Создать dsp.FIRFilter объект, представляющий идентифицируемую систему. Используйте fircband функция для разработки коэффициентов фильтра. Проектируемый фильтр представляет собой фильтр нижних частот, ограниченный до 0,2 пульсации в полосе останова.
filt = dsp.FIRFilter; filt.Numerator = fircband(12,[0 0.4 0.5 1],[1 1 0 0],[1 0.2],... {'w' 'c'});
Передать сигнал x к фильтру FIR. Требуемый сигнал d - сумма выходного сигнала неизвестной системы (КИХ-фильтр) и аддитивного шумового сигнала n.
x = 0.1*randn(250,1); n = 0.01*randn(250,1); d = filt(x) + n;
При наличии разработанного неизвестного фильтра и требуемого сигнала создайте и примените объект адаптивного фильтра LMS для идентификации неизвестного фильтра.
Подготовка объекта адаптивного фильтра требует начальных значений для оценок коэффициентов фильтра и размера шага LMS (mu). Можно начать с некоторого набора ненулевых значений в качестве оценок коэффициентов фильтра. В этом примере используются нули для 13 начальных весов фильтра. Установите InitialConditions имущество dsp.LMSFilter к требуемым начальным значениям весов фильтра. Для размера шага 0,8 является хорошим компромиссом между достаточно большим для того, чтобы сойтись в пределах 250 итераций (250 точек входной выборки) и достаточно малым для того, чтобы создать точную оценку неизвестного фильтра.
Создать dsp.LMSFilter объект для представления адаптивного фильтра, который использует адаптивный алгоритм LMS. Установите длину адаптивного фильтра равной 13 отводам, а размер шага - 0,8.
mu = 0.8;
lms = dsp.LMSFilter(13,'StepSize',mu)lms =
dsp.LMSFilter with properties:
Method: 'LMS'
Length: 13
StepSizeSource: 'Property'
StepSize: 0.8000
LeakageFactor: 1
InitialConditions: 0
AdaptInputPort: false
WeightsResetInputPort: false
WeightsOutput: 'Last'
Show all properties
Прохождение первичного входного сигнала x и желаемый сигнал d к фильтру LMS. Запустите адаптивный фильтр для определения неизвестной системы. Продукция y адаптивного фильтра является сигнал, сходящийся к требуемому сигналу d, тем самым минимизируя ошибку e между двумя сигналами.
Постройте график результатов. Выходной сигнал не соответствует требуемому сигналу, что делает ошибку между двумя нетривиальными.
[y,e,w] = lms(x,d); plot(1:250, [d,y,e]) title('System Identification of an FIR filter') legend('Desired','Output','Error') xlabel('Time index') ylabel('Signal value')

Вектор весов w представляет коэффициенты фильтра LMS, который подобен неизвестной системе (фильтр FIR). Чтобы подтвердить сходимость, сравните числитель фильтра FIR и расчетные веса адаптивного фильтра.
Оцененные веса фильтра не совпадают с фактическими весами фильтра, подтверждая результаты, наблюдаемые на предыдущем графике сигнала.
stem([(filt.Numerator).' w]) title('System Identification by Adaptive LMS Algorithm') legend('Actual filter weights','Estimated filter weights',... 'Location','NorthEast')

В качестве эксперимента измените размер шага на 0,2. Повторение примера с mu = 0.2 приводит к следующему графику стебля. Фильтры не сходятся, и расчетные веса не являются хорошими расчетами фактических весов.
mu = 0.2; lms = dsp.LMSFilter(13,'StepSize',mu); [~,~,w] = lms(x,d); stem([(filt.Numerator).' w]) title('System Identification by Adaptive LMS Algorithm') legend('Actual filter weights','Estimated filter weights',... 'Location','NorthEast')

Увеличьте размер кадра требуемого сигнала. Несмотря на то, что это увеличивает количество вычислений, алгоритм LMS теперь имеет больше данных, которые можно использовать для адаптации. При 1000 выборках данных сигнала и размере шага 0,2 коэффициенты выравниваются ближе, чем раньше, что указывает на улучшенную сходимость.
release(filt); x = 0.1*randn(1000,1); n = 0.01*randn(1000,1); d = filt(x) + n; [y,e,w] = lms(x,d); stem([(filt.Numerator).' w]) title('System Identification by Adaptive LMS Algorithm') legend('Actual filter weights','Estimated filter weights',... 'Location','NorthEast')

Увеличьте число выборок данных путем ввода данных через итерации. Выполните алгоритм на 4000 выборках данных, переданных в алгоритм LMS партиями по 1000 выборок в течение 4 итераций.
Сравните веса фильтров. Веса фильтра LMS очень близко совпадают с весами фильтра FIR, что указывает на хорошую сходимость.
release(filt); n = 0.01*randn(1000,1); for index = 1:4 x = 0.1*randn(1000,1); d = filt(x) + n; [y,e,w] = lms(x,d); end stem([(filt.Numerator).' w]) title('System Identification by Adaptive LMS Algorithm') legend('Actual filter weights','Estimated filter weights',... 'Location','NorthEast')

Выходной сигнал очень близко соответствует требуемому сигналу, делая ошибку между двумя близкими к нулю.
plot(1:1000, [d,y,e]) title('System Identification of an FIR filter') legend('Desired','Output','Error') xlabel('Time index') ylabel('Signal value')

[1] Хейс, Монсон Х., Статистическая цифровая обработка и моделирование сигналов. Хобокен, Нью-Джерси: John Wiley & Sons, 1996, pp.493-552.
[2] Хайкин, Саймон, теория адаптивных фильтров. Река Верхнее Седло, Нью-Джерси: Прентис-Холл, Инк., 1996.