Адаптивный фильтр адаптирует свои коэффициенты фильтра так, чтобы они совпадали с коэффициентами неизвестной системы. Цель состоит в том, чтобы минимизировать сигнал ошибки между выходом неизвестной системы и выходом адаптивного фильтра. Когда эти два выхода сходятся и тесно совпадают для одного и того же входа, говорят, что коэффициенты тесно совпадают. Адаптивный фильтр в этом состоянии напоминает неизвестную систему. Этот пример сравнивает скорость, с которой это сходимость происходит для нормализованного алгоритма 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] Hayes, Monson H., Statistical Digital Signal Processing and Modeling. Hoboken, NJ: John Wiley & Sons, 1996, pp.493-552.
[2] Haykin, Simon, Adaptive Filter Theory. Upper Saddle River, NJ: Prentice-Hall, Inc., 1996.