Документация Engee

EngeeDSP.LMSFilter

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

Библиотека

EngeeDSP

Блок

LMS Filter

Описание

Системный объект EngeeDSP.LMSFilter реализует адаптивный фильтр с конечной импульсной характеристикой (КИХ-фильтр), который обеспечивает сходимость входного сигнала к требуемому сигналу с использованием одного из следующих алгоритмов:

  • LMS;

  • Normalized LMS;

  • Sign-Data LMS;

  • Sign-Error LMS;

  • Sign-Sign LMS.

Подробную информацию об этих алгоритмах см. в разделе Алгоритмы.

Фильтр адаптирует свои весовые коэффициенты до тех пор, пока ошибка между опорным входным сигналом и требуемым сигналом не станет минимальной.

Чтобы отфильтровать сигнал с помощью адаптивного КИХ-фильтра, выполните следующие действия:

  1. Создайте объект EngeeDSP.LMSFilter и установите его свойства.

  2. Вызовите объект с аргументами, как если бы это была функция.

Чтобы узнать подробнее о том, как работать с системными объектами, см. Системные объекты Engee.

Синтаксис

Создание

  • lms = EngeeDSP.LMSFilter() — возвращает системный объект адаптивного КИХ-фильтра lms, который вычисляет отфильтрованный выходной сигнал, ошибку фильтрации и весовые коэффициенты фильтра для заданного входного и требуемого сигналов, используя алгоритм наименьших квадратов (LMS).

  • lms = EngeeDSP.LMSFilter(Name=Value) — возвращает системный объект адаптивного КИХ-фильтра с заданными свойствами в виде пары Name=Value, где Name — имя свойства, а Value — соответствующее значение. Можно указать несколько пар «имя-значение», порядок пар не имеет значения. Неуказанные свойства сохраняют свои значения по умолчанию.

Использование

  • y,err,wts = lms(x,d) — фильтрует входной сигнал x, используя d в качестве требуемого сигнала, и возвращает отфильтрованный выходной сигнал y, ошибку фильтрации err и оценочные весовые коэффициенты фильтра wts. Объект lms оценивает весовые коэффициенты, необходимые для минимизации ошибки между выходным сигналом и требуемым сигналом.

  • y,err = lms(x,d) — возвращает только отфильтрованный выходной сигнал y и ошибку фильтрации err, если для свойства OutputFilterWeights установлено значение false.

  • ___ = lms(x,d,mu) — использует mu в качестве размера шага, если для свойства SpecifyStepSizeVia установлено значение "Input port". Эти входные аргументы можно использовать с любым из предыдущих наборов выходных аргументов.

  • ___ = lms(x,d,a) — использует a в качестве сигнала, управляющего адаптацией, если для свойства AdaptPort установлено значение true. Когда a не равно нулю, фильтр непрерывно обновляет весовые коэффициенты фильтра. Когда a равно нулю, весовые коэффициенты фильтра остаются постоянными.

  • ___ = lms(x,d,r) — использует r в качестве сигнала сброса, если для свойства ResetPort установлено значение "Rising edge", "Falling edge", "Either edge" или "Non-zero sample". Если происходит событие сброса, фильтр сбрасывает весовые коэффициенты фильтра до их начальных значений.

  • y,err,wts = lms(x,d,mu,a,r) — фильтрует входной сигнал x, используя d в качестве требуемого сигнала, mu в качестве размера шага, a в качестве сигнала, управляющего адаптацией, и r в качестве сигнала сброса. Объект возвращает отфильтрованный выходной сигнал y, ошибку фильтра err и адаптированные весовые коэффициенты фильтра wts. Установите соответствующие свойства, чтобы предоставить все возможные входные данные.

Аргументы

Входные аргументы

# x — входной сигнал
скаляр | вектор-столбец

Details

Сигнал, который будет отфильтрован системным объектом LMS-фильтра. Входной сигнал x и требуемый сигнал d должны иметь одинаковый размер и тип данных.

Типы данных

Float32, Float64

Поддержка комплексных чисел

Да

# d — требуемый сигнал
скаляр | вектор-столбец

Details

Фильтр LMS адаптирует свои весовые коэффициенты wts для минимизации ошибки err и максимально точного приближения входного сигнала x к требуемому сигналу d.

Входной сигнал x и требуемый сигнал d должны иметь одинаковый размер и тип данных.

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

Типы данных

Float32, Float64

Поддержка комплексных чисел

Да

# mu — размер шага
неотрицательный скаляр

Details

Коэффициент размера шага адаптации, заданный как неотрицательный скаляр. Для обеспечения сходимости метода "Normalized LMS" размер шага должен быть больше 0 и меньше 2. Тип данных входного размера шага должен соответствовать типу данных аргументов x и d.

Малый размер шага обеспечивает малую ошибку в установившемся режиме между выходным сигналом y и требуемым сигналом d. Если размер шага мал, скорость сходимости фильтра снижается. Для повышения скорости сходимости увеличьте размер шага. Обратите внимание, что если размер шага велик, фильтр может стать неустойчивым.

Зависимости

Чтобы использовать этот аргумент, установите для свойства SpecifyStepSizeVia значение "Input port".

Типы данных

Float32, Float64

# a — управление адаптацией
скаляр

Details

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

Зависимости

Чтобы использовать этот аргумент, установите для свойства AdaptPort значение true.

Типы данных

Float32, Float64, Int8, Int16, Int32, UInt8, UInt16, UInt32, Bool

# r — сигнал сброса
скаляр

Details

Сигнал сброса, который сбрасывает весовые коэффициенты фильтра на основе значений свойства ResetPort.

Зависимости

Чтобы использовать этот аргумент, установите для свойства ResetPort значение "Rising edge", "Falling edge", "Either edge" или "Non-zero sample".

Типы данных

Float32, Float64, Int8, Int16, Int32, UInt8, UInt16, UInt32, Bool

Выходные аргументы

# y — отфильтрованный выходной сигнал
скаляр | вектор-столбец

Details

Отфильтрованный выходной сигнал, возвращаемый в виде скаляра или вектора-столбца. Объект адаптирует свои весовые коэффициенты фильтра для сходимости входного сигнала x к требуемому сигналу d. Фильтр выдает на выходе сходящийся сигнал.

Типы данных

Float32, Float64

Поддержка комплексных чисел

Да

# err — разница между выходным и требуемым сигналами
скаляр | вектор-столбец

Details

Разница между выходным сигналом y и требуемым сигналом d, возвращаемая в виде скаляра или вектора-столбца. Тип данных err соответствует типу данных y. Цель адаптивного фильтра — минимизировать эту ошибку. Объект адаптирует свои весовые коэффициенты для сходимости к оптимальным весовым коэффициентам фильтра, которые обеспечивают выходной сигнал, максимально приближенный к требуемому сигналу.

Типы данных

Float32, Float64

# wts — адаптивные весовые коэффициенты фильтра
скаляр | вектор-столбец

Details

Адаптивные весовые коэффициенты фильтра, возвращаемые в виде скаляра или вектора-столбца, длина которого определяется значением свойства FilterLength.

Типы данных

Float32, Float64

Свойства

# OutputFilterWeights — весовые коэффициенты на выходе фильтра
Logical

Details

Установите для этого свойства значение true (по умолчанию), чтобы получать весовые коэффициенты фильтра из выходного аргумента wts.

Чтобы не использовать выходной аргумент wts, установите для этого свойства значение false.

# ResetPort — дополнительный вход для активации сброса значений весовых коэффициентов
String

Details

Событие, инициирующее сброс весовых коэффициентов фильтра, заданное одним из следующих вариантов:

  • "None" (по умолчанию) — не использовать входной аргумент r.

  • "Rising edge" — запускает операцию сброса, когда сигнал r изменяется следующим образом:

    • повышается от отрицательного значения до положительного или нуля;

    • повышается от нуля до положительного значения, когда повышение не является продолжением повышения от отрицательного значения до нуля, как показано на рисунке:

      counter 1

  • "Falling edge" — запускает операцию сброса, когда сигнал r изменяется следующим образом:

    • понижается от положительного значения до отрицательного или нуля;

    • понижается от нуля до отрицательного значения, когда понижение не является продолжением понижения от положительного значения до нуля, как показано на рисунке:

      counter 2

  • "Either edge" — запускает операцию сброса, когда на входном аргументе r происходит событие запуска "Rising edge" или "Falling edge".

  • "Non-zero sample" — запускает операцию сброса в каждый такт выборки, когда сигнал r не равен нулю.

# Algorithm — алгоритм расчета весов фильтра
String

Details

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

  • "LMS" (по умолчанию) — решает уравнение Винера — Хопфа и находит коэффициенты фильтра для адаптивного фильтра.

  • "Normalized LMS" — нормализованный вариант алгоритма LMS.

  • "Sign-Data LMS" — коррекция весовых коэффициентов фильтра на каждой итерации зависит от знака входного сигнала x.

  • "Sign-Error LMS" — коррекция, применяемая к текущим весовым коэффициентам фильтра на каждой последующей итерации, зависит от знака ошибки err.

  • "Sign-Sign LMS" — коррекция, применяемая к текущим весовым коэффициентам фильтра на каждой последующей итерации, зависит как от знака x, так и от знака err.

Подробную информацию об этих алгоритмах см. в разделе Алгоритмы.

# StepSize — размер шага
Real number

Details

Коэффициент размера шага адаптации, заданный как неотрицательный скаляр. Для обеспечения сходимости метода "Normalized LMS" размер шага должен быть больше 0 и меньше 2.

Малый размер шага обеспечивает низкую установившуюся ошибку между выходным сигналом y и требуемым сигналом d. Однако при малом размере шага скорость сходимости фильтра снижается. Чтобы повысить скорость сходимости, следует увеличить размер шага. Следует учитывать, что при слишком большом размере шага фильтр может стать неустойчивым.

Значение по умолчанию — 0.1.

Зависимости

Чтобы использовать это свойство, установите для свойства SpecifyStepSizeVia значение "Dialog".

# LeakageFactor — коэффициент потерь
Real number

Details

Коэффициент потерь для реализации алгоритма LMS с потерями (leaky LMS), заданный как скаляр в диапазоне [0, 1]. Если значение равно 1 (по умолчанию), потери в алгоритме адаптации отсутствуют. Если значение меньше 1, фильтр реализует алгоритм LMS с потерями.

# AdaptPort — использование входного аргумента для обновления весовых коэффициентов фильтра
Logical

Details

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

  • false (по умолчанию) — объект непрерывно обновляет весовые коэффициенты фильтра;

  • true — при вызове алгоритма объекту передается входной сигнал управления адаптацией a. Если значение этого сигнала отлично от нуля, объект непрерывно обновляет весовые коэффициенты фильтра. Если значение сигнала равно нулю, весовые коэффициенты фильтра сохраняют свои текущие значения.

# SpecifyStepSizeVia — способ задания размера шага адаптации
String

Details

Способ задания размера шага адаптации, заданный одним из следующих значений:

  • "Dialog" (по умолчанию) — укажите размер шага с помощью свойства StepSize;

  • "Input port" — укажите размер шага с помощью аргумента mu.

# InitialValueOfFilterWeights — начальные значения весовых коэффициентов фильтра
Scalar / array of real and/or complex numbers

Details

Начальные значения весовых коэффициентов фильтра, заданные как скаляр или вектор длиной, равной значению свойства FilterLength.

Значение по умолчанию — 0.

# FilterLength — длина фильтра
Int64 integer

Details

Длина вектора коэффициентов КИХ-фильтра, заданная как положительное целое число.

Значение по умолчанию — 32.

Методы

Общие для всех системных объектов

step!

Запустить алгоритм работы системного объекта

release!

Разрешить изменение значения свойства системного объекта

reset!

Сброс внутренних состояний системного объекта

Алгоритмы

Алгоритм LMS-фильтра определяется следующими уравнениями:





Различные алгоритмы адаптивного LMS-фильтра, которые можно задать в значении свойства Algorithm, определяются следующим образом:

  • "LMS" — решает уравнение Винера — Хопфа и находит коэффициенты фильтра для адаптивного фильтра:

  • "Normalized LMS" — нормализованный вариант алгоритма LMS:

    В случае "Normalized LMS", чтобы преодолеть потенциальную численную нестабильность при обновлении весов, в знаменатель добавлена небольшая положительная константа . Для входных данных с плавающей запятой двойной точности равняется выходу функции eps(Float64). Для данных одинарной точности равняется выходу функции eps(Float32).

  • "Sign-Error LMS" — коррекция, применяемая к текущим весовым коэффициентам фильтра на каждой последующей итерации, зависит от знака ошибки :

  • "Sign-Data LMS" — коррекция весовых коэффициентов фильтра на каждой итерации зависит от знака входного сигнала :

    где состоит из вещественных чисел.

  • "Sign-Sign LMS" — коррекция, применяемая к текущим весовым коэффициентам фильтра на каждой последующей итерации, зависит как от знака , так и от знака :

    где состоит из вещественных чисел.

В уравнениях выше используются следующие переменные:

  • — индекс текущего времени;

  • — вектор буферизованных входных отсчетов на шаге ;

  • — комплексно-сопряженный вектор буферизованных входных отсчетов на шаге ;

  • — вектор весовых оценок фильтра на шаге ;

  • — отфильтрованный выходной сигнал на шаге ;

  • — ошибка оценки на шаге ;

  • — требуемый сигнал на шаге ;

  • — размер шага адаптации;

  • — коэффициент потерь такой, что ;

  • — константа, которая корректирует любую потенциальную численную нестабильность, возникающую во время обновления весов.

Литература

  1. Hayes, M.H. Statistical Digital Signal Processing and Modeling. New York: John Wiley & Sons, 1996.