Адаптивный фильтр адаптирует свои коэффициенты фильтра к коэффициентам неизвестной системы. Целью является минимизация сигнала ошибки между выходом неизвестной системы и выходом адаптивного фильтра. Когда эти два выхода сходятся и близко совпадают для одного и того же входа, коэффициенты, как говорят, совпадают близко. Адаптивный фильтр в этом состоянии напоминает неизвестную систему. В этом примере сравнивается скорость, с которой происходит эта сходимость для нормализованного алгоритма LMS (NLMS) и алгоритма LMS без нормализации.
Создать dsp.FIRFilter представляет неизвестную систему. Передать сигнал x в качестве входных данных неизвестной системы. Требуемый сигнал d - сумма выходного сигнала неизвестной системы (КИХ-фильтр) и аддитивного шумового сигнала n.
filt = dsp.FIRFilter; filt.Numerator = fircband(12,[0 0.4 0.5 1],[1 1 0 0],[1 0.2],... {'w' 'c'}); x = 0.1*randn(1000,1); n = 0.001*randn(1000,1); d = filt(x) + n;
Создать два dsp.LMSFilter объекты, один из которых установлен в алгоритм LMS, а другой - в нормализованный алгоритм LMS. Выберите размер шага адаптации 0,2 и установите длину адаптивного фильтра равной 13 отводам.
mu = 0.2; lms_nonnormalized = dsp.LMSFilter(13,'StepSize',mu,... 'Method','LMS'); lms_normalized = dsp.LMSFilter(13,'StepSize',mu,... 'Method','Normalized LMS');
Прохождение первичного входного сигнала x и желаемый сигнал d к обоим вариациям алгоритма LMS. Переменные e1 и e2 представляют ошибку между требуемым сигналом и выходом нормализованного и ненормализованного фильтров соответственно.
[~,e1,~] = lms_normalized(x,d); [~,e2,~] = lms_nonnormalized(x,d);
Постройте график сигналов ошибок для обоих вариантов. Сигнал ошибки для варианта NLMS сходится к нулю гораздо быстрее, чем сигнал ошибки для варианта LMS. Нормализованная версия адаптируется в гораздо меньшем количестве итераций к результату почти так же хорошо, как ненормированная версия.
plot([e1,e2]); title('Comparing the LMS and NLMS Conversion Performance'); legend('NLMS derived filter weights', ... 'LMS derived filter weights','Location', 'NorthEast'); xlabel('Time index') ylabel('Signal value')

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