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). Можно начать с некоторого набора ненулевых значений как оценки для коэффициентов фильтра. Этот пример использует нули для 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, который адаптируется, чтобы напомнить неизвестную систему (КИХ-фильтр). Чтобы подтвердить сходимость, сравните числитель КИХ-фильтра и предполагаемые веса адаптивного фильтра.

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

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 результаты в следующей диаграмме стебель-листья. Фильтры не сходятся, и предполагаемые веса не являются хорошим approxmations фактического веса.

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, Монсон Х., Статистическая Цифровая обработка сигналов и Моделирование. Хобокен, NJ: John Wiley & Sons, 1996, pp.493–552.

[2] Haykin, Саймон, адаптивная теория фильтра. Верхний Сэддл-Ривер, NJ: Prentice-Hall, Inc., 1996.