Чтобы улучшать производительность сходимости LMS-алгоритма, нормированный вариант (NLMS) использует адаптивный размер шага на основе степени сигнала. Когда степень входного сигнала изменяется, алгоритм вычисляет входную мощность и настраивает размер шага, чтобы обеспечить соответствующее значение. Изменения размера шага со временем, и в результате нормированный алгоритм сходятся быстрее с меньшим количеством выборок во многих случаях. Для входных сигналов, которые изменяются медленно в зависимости от времени, нормированный LMS-алгоритм может быть более эффективным подходом LMS.
Для примера с помощью подхода LMS смотрите System Identification КИХ-Фильтра Используя 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(1000,1); n = 0.001*randn(1000,1); d = filt(x) + n;
Чтобы использовать нормированное изменение LMS-алгоритма, установите Method
свойство на dsp.LMSFilter
к 'Normalized LMS'
. Установите длину адаптивного фильтра к 13 касаниям и размера шага к 0,2.
mu = 0.2; lms = dsp.LMSFilter(13,'StepSize',mu,'Method',... 'Normalized LMS');
Передайте сигнал первичного входного параметра x
и желаемый d
сигнала к фильтру LMS.
[y,e,w] = lms(x,d);
Выход y
из адаптивного фильтра сигнал, сходившийся к желаемому сигналу d, таким образом, минимизирующему ошибку e
между двумя сигналами.
plot(1:1000, [d,y,e]) title('System Identification by Normalized LMS Algorithm') legend('Desired','Output','Error') xlabel('Time index') ylabel('Signal value')
Вектор весов w представляет коэффициенты фильтра LMS, который адаптируется, чтобы напомнить неизвестную систему (КИХ-фильтр). Чтобы подтвердить сходимость, сравните числитель КИХ-фильтра и предполагаемые веса адаптивного фильтра.
stem([(filt.Numerator).' w]) title('System Identification by Normalized LMS Algorithm') legend('Actual filter weights','Estimated filter weights',... 'Location','NorthEast')
[1] Hayes, Монсон Х., Статистическая Цифровая обработка сигналов и Моделирование. Хобокен, NJ: John Wiley & Sons, 1996, pp.493–552.
[2] Haykin, Саймон, адаптивная теория фильтра. Верхний Сэддл-Ривер, NJ: Prentice-Hall, Inc., 1996.