Система идентификации является процессом идентификации коэффициентов неизвестной системы с помощью адаптивного фильтра. Общее размещение процесса, как показывают, в System Identification – Используя Адаптивный Фильтр Идентифицирует Неизвестную Систему. Основные включенные компоненты:
Адаптивный алгоритм фильтра. В этом примере, набор Method
свойство dsp.LMSFilter
к 'LMS'
, выбрать адаптивный алгоритм фильтра LMS.
Неизвестная система или процесс, чтобы адаптироваться к. В этом примере фильтр спроектирован fircband
неизвестная система.
Соответствующие входные данные, чтобы осуществить процесс адаптации. В терминах типовой модели LMS это желаемый сигнал и входной сигнал .
Цель адаптивного фильтра состоит в том, чтобы минимизировать сигнал ошибки между выходом адаптивного фильтра, , и выход неизвестной системы (или системы, которая будет идентифицирована), . Если сигнал ошибки минимален, адаптированный фильтр напоминает неизвестную систему. Коэффициенты обоих фильтры соответствуют тесно.
Примечание: Если вы используете R2016a или более ранний релиз, заменяете каждый вызов объекта с эквивалентным синтаксисом шага. Например, obj(x)
становится step(obj,x)
.
Создайте dsp.FIRFilter
объект, который представляет систему, которая будет идентифицирована. Используйте fircband
функционируйте, чтобы спроектировать коэффициенты фильтра. Спроектированный фильтр является фильтром lowpass, ограниченным к 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
к КИХ-фильтру. Желаемый сигнал, d
, сумма выхода неизвестной системы (КИХ-фильтр) и аддитивный шумовой сигнал, n
.
x = 0.1*randn(250,1); n = 0.01*randn(250,1); d = filt(x) + n;
С неизвестным спроектированным фильтром и желаемый сигнал на месте, создайте и примените адаптивный объект фильтра LMS, чтобы идентифицировать неизвестный фильтр.
Подготовка адаптивного объекта фильтра требует, чтобы вы ввели начальные значения для оценок коэффициентов фильтра и размера шага LMS (mu
). Вы могли запустить с предполагаемых коэффициентов некоторого набора ненулевых значений. Этот пример использует нули в 12 начальных весах фильтра. Установите 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, который адаптируется, чтобы напомнить неизвестную систему (КИХ-фильтр). Чтобы подтвердить сходимость, сравните числитель КИХ-фильтра и предполагаемые веса адаптивного фильтра.
Предполагаемые веса фильтра тесно не совпадают с фактическими весами фильтра, подтверждая результаты, замеченные в предыдущем графике сигнала.
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-алгоритм теперь имеет больше данных, которые могут использоваться в адаптации. С 1 000 выборок данных сигнала и размером шага 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')
Далее увеличьте число выборок данных путем приписывания данных через итерации. Запустите алгоритм на 4 000 выборок данных, переданных LMS-алгоритму в пакетах 1 000 выборок, более чем 4 итераций.
Сравните веса фильтра. Веса фильтра LMS соответствуют очень тесно к весам КИХ-фильтра, указывающего на хорошую сходимость.
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] Hayes, Монсон Х., статистическая цифровая обработка сигналов и Modeling, John Wiley & Sons, 1996, 493–552.
[2] Haykin, Саймон, адаптивная теория фильтра, Prentice-Hall, Inc., 1996