Когда количество расчета, требуемое для вывода адаптивного фильтра, управляет вашим процессом разработки, вариант sign-data алгоритма LMS (SDLMS) может быть очень хорошим выбором, как показано в этом примере.
В стандартных и нормированных изменениях адаптивного фильтра LMS коэффициенты для адаптирующего фильтра возникают из-за средней квадратной ошибки между желаемым сигналом и выходом сигналом от неизвестной системы. Алгоритм sign-data изменяет среднее вычисление квадратной ошибки с помощью знака входных данных, чтобы изменить коэффициенты фильтра.
Когда ошибка положительная, новые коэффициенты являются предыдущими коэффициентами плюс ошибка, умноженная на размер шага Если ошибка отрицательная, новые коэффициенты снова являются предыдущими коэффициентами минус ошибка, умноженная на, - обратите внимание на изменение знака.
Когда вход равен нулю, новые коэффициенты те же, что и в предыдущем наборе.
В векторной форме LMS-алгоритм со знаком-данными является:
где
с вектором содержащие веса, примененные к коэффициентам фильтра и вектору содержит входные данные. Вектор - ошибка между желаемым сигналом и отфильтрованным сигналом. Цель алгоритма SDLMS состоит в том, чтобы минимизировать эту ошибку. Размер шага представлен .
С меньшим коррекция к весам фильтра становится меньше для каждой выборки, и ошибка SDLMS падает медленнее. Большее изменяет веса больше для каждого шага, поэтому ошибка падает быстрее, но полученная ошибка не приближается к идеальному решению так близко. Чтобы гарантировать хорошую скорость сходимости и стабильность, выберите в пределах следующих практических границ.
где - количество выборок в сигнале. Кроме того, задайте как степень двойки для эффективных вычислений.
Примечание: То, как вы устанавливаете начальные условия алгоритма sign-data, глубоко влияет на эффективность процесса адаптации. Поскольку алгоритм по существу квантует входной сигнал, алгоритм может легко стать нестабильным.
Серия больших входных значений в сочетании с процессом квантования может привести к росту ошибки за все границы. Ограничьте склонность алгоритма sign-data к выходу из-под контроля, выбрав небольшой размер шага и установка начальных условий для алгоритма ненулевых положительных и отрицательных значений.
В этом примере шумоподавления установите Method
свойство dsp.LMSFilter
на 'Sign-Data LMS'
. Этот пример требует двух наборов входных данных:
Данные, содержащие сигнал, поврежденный шумом. На блоке под шумом или подавлением помех - Использование адаптивного фильтра для удаления шума из неизвестной системы, это желаемый сигнал . Процесс шумоподавления удаляет шум из сигнала.
Данные, содержащие случайный шум. На блоке под шумом или подавлением помех - Использование адаптивного фильтра для удаления шума из неизвестной системы, это . Сигнал коррелирует с шумом, который повреждает данные сигнала. Без корреляции между данными о шуме алгоритм адаптации не может удалить шум из сигнала.
Для сигнала используйте синусоиду. Обратите внимание, что signal
- вектор-столбец из 1000 элементов.
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
теперь является желаемым входом в алгоритм sign-data.
Подготовка dsp.LMSFilter
объект для обработки, установите начальные условия весов и mu
фильтра
(StepSize
). Как отмечалось ранее в этом разделе, значения, которые вы задаете для coeffs
и mu
определите, может ли адаптивный фильтр удалить шум из пути сигнала.
В Система Идентификации of FIR Filter Using LMS Algorithm вы создали фильтр по умолчанию, который устанавливает коэффициенты фильтра в нули. В большинстве случаев этот подход не работает для алгоритма sign-data. Чем ближе вы устанавливаете свои начальные коэффициенты фильтра к ожидаемым значениям, тем больше вероятность, что алгоритм остается хорошо поведенным и сходится к решению фильтра, которое эффективно удаляет шум.
В данном примере начнем с коэффициентов, используемых в шумовом фильтре (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'); xlabel('Time index') ylabel('Signal values')
Когда dsp.LMSFilter
запускается, он использует гораздо меньше операций умножения, чем любой из стандартных LMS-алгоритмов. Кроме того, выполнение адаптации данных о знаках требует только умножения на перемену бит, когда размер шага является степенью двойки.
Несмотря на то, эффективность алгоритма sign-data, как показано на этом графике, довольно хороша, алгоритм sign-data намного менее стабилен, чем стандартные изменения LMS. В этом примере шумоподавления обработанный сигнал является очень хорошим соответствием входному сигналу, но алгоритм может очень легко расти без привязки, а не достигать хорошей эффективности.
Изменение начальных условий веса (InitialConditions
) и mu
(StepSize
), или даже фильтр lowpass, который вы использовали для создания коррелированного шума, может вызвать отказ шумоподавления.
[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.