System Identification КИХ-фильтра Используя LMS-алгоритм

Система идентификации является процессом идентификации коэффициентов неизвестной системы с помощью адаптивного фильтра. Общее размещение процесса, как показывают, в System Identification – Используя Адаптивный Фильтр Идентифицирует Неизвестную Систему. Основные включенные компоненты:

  • Адаптивный алгоритм фильтра. В этом примере, набор Method свойство dsp.LMSFilter к 'LMS', выбрать адаптивный алгоритм фильтра LMS.

  • Неизвестная система или процесс, чтобы адаптироваться к. В этом примере фильтр спроектирован fircband неизвестная система.

  • Соответствующие входные данные, чтобы осуществить процесс адаптации. В терминах типовой модели LMS это желаемый сигнал d(k) и входной сигнал x(k).

Цель адаптивного фильтра состоит в том, чтобы минимизировать сигнал ошибки между выходом адаптивного фильтра, y(k), и выход неизвестной системы (или системы, которая будет идентифицирована), d(k). Если сигнал ошибки минимален, адаптированный фильтр напоминает неизвестную систему. Коэффициенты обоих фильтры соответствуют тесно.

Примечание: Если вы используете 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