Когда объем расчета, требуемого выводить адаптивный фильтр, управляет вашим процессом разработки, вариантом данных знака LMS (SDLMS) алгоритм может быть очень хороший выбор, как продемонстрировано в этом примере.
В стандартных и нормированных изменениях адаптивного фильтра LMS коэффициенты для адаптирующегося фильтра являются результатом среднеквадратичной погрешности между желаемым сигналом и выходным сигналом неизвестной системы. Алгоритм данных знака изменяет вычисление среднеквадратичной погрешности при помощи знака входных данных изменить коэффициенты фильтра.
Когда ошибка положительна, новые коэффициенты являются предыдущими коэффициентами плюс ошибка, умноженная на размер шага µ. Если ошибка отрицательна, новые коэффициенты являются снова предыдущими коэффициентами минус ошибка, умноженная на µ — обращают внимание на изменения знака.
Когда вход является нулем, новые коэффициенты совпадают с предыдущим набором.
В векторной форме LMS-алгоритм данных знака:
где
с вектором содержание весов применилось к коэффициентам фильтра и вектору содержа входные данные. Вектор ошибка между желаемым сигналом и отфильтрованным сигналом. Цель алгоритма SDLMS состоит в том, чтобы минимизировать эту ошибку. Размер шага представлен .
С меньшим , коррекция к весам фильтра становится меньшей для каждой выборки, и ошибка SDLMS падает более медленно. Большее изменяет веса больше для каждого шага, таким образом, ошибка падает более быстро, но получившаяся ошибка не приближается к идеальному решению как тесно. Чтобы гарантировать хороший уровень сходимости и устойчивость, выбрать в следующих практических границах.
где количество отсчетов в сигнале. Кроме того, задайте как степень двойки для эффективного вычисления.
Примечание: Как вы устанавливаете начальные условия алгоритма данных знака, глубоко влияет на эффективность процесса адаптации. Поскольку алгоритм по существу квантует входной сигнал, алгоритм может стать нестабильным легко.
Серия больших входных значений, вместе с процессом квантования может привести к ошибке при росте вне всех границ. Ограничьте тенденцию алгоритма данных знака выйти из-под контроля путем выбора размера небольшого шага и устанавливание начальных условий для алгоритма к ненулевым положительным и отрицательным величинам.
В этом примере подавления помех, набор 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
объект для обработки, установленный начальные условия весов фильтра и mu
Неродной размер
). Как отмечено ранее в этом разделе, значения вы устанавливаете для 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'); xlabel('Time index') ylabel('Signal values')
Когда dsp.LMSFilter
запуски, это использует гораздо меньше операций умножения, чем любой из стандартных LMS-алгоритмов. Кроме того, выполнение адаптации данных знака требует только умножения переменой бита, когда размер шага является степенью двойки.
Несмотря на то, что эффективность алгоритма данных знака как показано в этом графике довольно хороша, алгоритм данных знака намного менее устойчив, чем стандартные изменения LMS. В этом примере подавления помех обработанный сигнал является очень хорошим соответствием к входному сигналу, но алгоритм мог очень легко вырасти без связанного, а не достигнуть хорошей эффективности.
Изменение начальных условий веса (InitialConditions
) и mu
Неродной размер
), или даже lowpass фильтрует вас, раньше создавал коррелированый шум, может заставить подавление помех перестать работать.
[1] Hayes, Монсон Х., Статистическая Цифровая обработка сигналов и Моделирование. Хобокен, NJ: John Wiley & Sons, 1996, pp.493–552.
[2] Haykin, Саймон, адаптивная теория фильтра. Верхний Сэддл-Ривер, NJ: Prentice-Hall, Inc., 1996.