Подавление помех Используя LMS-алгоритм данных знака

Когда объем расчета, требуемого выводить адаптивный фильтр, управляет вашим процессом разработки, вариантом данных знака LMS (SDLMS) алгоритм может быть очень хороший выбор, как продемонстрировано в этом примере.

В стандартных и нормированных изменениях адаптивного фильтра LMS коэффициенты для адаптирующегося фильтра являются результатом среднеквадратичной погрешности между желаемым сигналом и выходным сигналом неизвестной системы. Используя данные знака алгоритм изменяет вычисление среднеквадратичной погрешности при помощи знака входных данных изменить коэффициенты фильтра.

Когда ошибка положительна, новые коэффициенты являются предыдущими коэффициентами плюс ошибка, умноженная на размер шага µ. Если ошибка отрицательна, новые коэффициенты являются снова предыдущими коэффициентами минус ошибка, умноженная на µ — обращают внимание на изменения знака.

Когда вход является нулем, новые коэффициенты совпадают с предыдущим набором.

В векторной форме LMS-алгоритм данных знака:

w(k+1)=w(k)+μe(k)sgn(x(k)),

где,

sgn(x(k))={1,x(k)>00,x(k)=0-1,x(k)<0

с вектором w содержание весов применилось к коэффициентам фильтра и вектору x содержа входные данные. Вектор e ошибка между желаемым сигналом и отфильтрованным сигналом. Цель алгоритма SDLMS состоит в том, чтобы минимизировать эту ошибку. Размер шага представлен μ.

Как вы задаете μ меньший, коррекция к весам фильтра становится меньшей для каждой выборки, и ошибка SDLMS падает более медленно. Больше μ изменяет веса больше для каждого шага, таким образом, ошибка падает более быстро, но получившаяся ошибка не приближается к идеальному решению как тесно. Чтобы гарантировать хороший уровень сходимости и устойчивость, выбрать μ в следующих практических границах.

0<μ<1N{InputSignalPower},

где, N количество выборок в сигнале. Кроме того, задайте μ как степень двойки для эффективного вычисления.

Примечание: Как вы устанавливаете начальные условия алгоритма данных знака, глубоко влияет на эффективность адаптации. Поскольку алгоритм по существу квантует входной сигнал, алгоритм может стать нестабильным легко.

Серия больших входных значений, вместе с процессом квантования может привести к ошибке при росте вне всех границ. Вы ограничиваете тенденцию алгоритма данных знака выйти из-под контроля путем выбора размера небольшого шага (μ1) и устанавливание начальных условий для алгоритма к ненулевым положительным и отрицательным величинам.

В этом примере подавления помех, набор Method свойство dsp.LMSFilter к 'Sign-Data LMS'. Этот пример требует двух наборов входных данных:

Для сигнала используйте синусоиду. Обратите внимание на то, что signal вектор-столбец 1 000 элементов.

signal = sin(2*pi*0.055*(0:1000-1)');

Теперь добавьте коррелируемый белый шум в signal. Чтобы гарантировать, что шум коррелируется, передайте шум через КИХ-фильтр lowpass, и затем добавьте отфильтрованный шум в сигнал.

noise = randn(1000,1);
filt = dsp.FIRFilter;
filt.Numerator = fir1(11,0.4);
fnoise = filt(noise);
d = signal+fnoise;

fnoise коррелированый шум и d теперь желаемый вход к алгоритму данных знака.

Подготовить dsp.LMSFilter объект для обработки, набор начальные условия веса (InitialConditions) и mu (StepSize) для объекта. Как отмечено ранее в этом разделе, значения вы устанавливаете для coeffs и mu определите, может ли адаптивный фильтр удалить шум из пути прохождения сигнала.

В System Identification КИХ-Фильтра Используя LMS-алгоритм вы создали фильтр по умолчанию, который устанавливает коэффициенты фильтра на нули. В большинстве случаев тот подход не работает на алгоритм данных знака. Чем ближе вы устанавливаете свои начальные коэффициенты фильтра на ожидаемые значения, тем более вероятно случается так, что алгоритм остается хорошего поведения и сходится к решению для фильтра, которое удаляет шум эффективно.

В данном примере запустите с коэффициентов в фильтре, вы раньше фильтровали шум (filt.Numerator), и измените их немного, таким образом, алгоритм должен адаптироваться.

coeffs = (filt.Numerator).'-0.01; % Set the filter initial conditions.
mu = 0.05;          % Set the step size for algorithm updating.

С необходимыми входными параметрами для dsp.LMSFilter подготовленный, создайте объект фильтра LMS, запустите адаптацию и просмотрите результаты.

lms = dsp.LMSFilter(12,'Method','Sign-Data LMS',...
   'StepSize',mu,'InitialConditions',coeffs);
[~,e] = lms(noise,d);
L = 200;
plot(0:L-1,signal(1:L),0:L-1,e(1:L));
title('Noise Cancellation by the Sign-Data Algorithm');
legend('Actual Signal','Result of Noise Cancellation',...
       'Location','NorthEast');

Когда dsp.LMSFilter запуски, это использует, гораздо меньше умножает операции, чем любой из LMS-алгоритмов. Кроме того, выполнение адаптации данных знака требует, чтобы только битная перемена умножилась, когда размер шага является степенью двойки.

Несмотря на то, что производительность алгоритма данных знака как показано в следующей фигуре довольно хороша, алгоритм данных знака намного менее устойчив, чем стандартные изменения LMS. В этом примере подавления помех сигнал после того, как обработка является очень хорошим соответствием к входному сигналу, но алгоритм мог очень легко вырасти без связанного, а не достигнуть хорошей производительности.

Изменение начальных условий веса (InitialConditions) и mu (StepSize), или даже lowpass фильтрует вас, раньше создавал коррелированый шум, может заставить подавление помех перестать работать и алгоритм, чтобы стать бесполезным.

Смотрите также

Объекты

Похожие темы

Ссылки

[1] Hayes, Монсон Х., статистическая цифровая обработка сигналов и Modeling, John Wiley & Sons, 1996, 493–552.

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