dsp. LMSFilter

Вычислите вывод, ошибку и веса адаптивного фильтра LMS

Описание

Система dsp.LMSFilter object™ реализует адаптивный фильтр конечного импульсного ответа (FIR), который сходится входной сигнал к желаемому сигналу с помощью одного из следующих алгоритмов:

  • LMS

  • Нормированный LMS

  • Данные знака LMS

  • Ошибка знака LMS

  • Знак знака LMS

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

Фильтр адаптирует свои веса до ошибки между сигналом первичного входного параметра, и желаемый сигнал минимален. Среднее квадратичное этой ошибки (MSE) вычисляется с помощью функции msesim. Предсказанная версия MSE определяется с помощью Винера, просачиваются функция msepred. Функция maxstep вычисляет максимальный размер шага адаптации, который управляет быстротой сходимости.

Отфильтровать сигнал с помощью адаптивного КИХ-фильтра:

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

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

Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты? MATLAB.

Создание

Синтаксис

lms = dsp.LMSFilter
lms = dsp.LMSFilter(L)
lms = dsp.LMSFilter(Name,Value)

Описание

пример

lms = dsp.LMSFilter возвращает объект фильтра LMS, lms, который вычисляет отфильтрованный вывод, ошибку фильтра и веса фильтра для данного входа и желаемого сигнала с помощью алгоритма наименьшее количество средних квадратичных (LMS).

пример

lms = dsp.LMSFilter(L) возвращает объект фильтра LMS с набором свойств Длины к L.

пример

lms = dsp.LMSFilter(Name,Value) возвращает объект фильтра LMS с каждым заданным набором свойств к заданному значению. Заключите каждое имя свойства в одинарные кавычки. Можно использовать этот синтаксис с предыдущим входным параметром.

Свойства

развернуть все

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

Если свойство является настраиваемым, можно изменить его значение в любое время.

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Используя Системные объекты (MATLAB).

Метод, чтобы вычислить веса фильтра, заданные как одно из следующего:

  • 'LMS'

  • 'Normalized LMS'

  • 'Sign-Data LMS'

  • 'Sign-Error LMS'

  • 'Sign-Sign LMS'

Для получения дополнительной информации на алгоритмах, см. Алгоритмы.

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

Пример: 64

Пример: 16

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

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

  • Свойство Свойство StepSize задает размер каждого шага адаптации.

  • 'Input port' – Задайте размер шага адаптации как одни из входных параметров к объекту.

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

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

Настраиваемый: да

Зависимости

Это свойство применяется, когда вы устанавливаете StepSizeSource на 'Property'.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Фактор утечки, используемый при реализации текучего метода LMS, заданного как скаляр в области значений [0 1]. Когда значение равняется 1, в методе адаптации нет никакой утечки. Когда значение - меньше чем 1, фильтр реализует текучий метод LMS.

Пример: 0.5

Настраиваемый: да

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Начальные условия весов фильтра, заданных как скаляр или вектор длины, равняются значению свойства Length. Когда вход действителен, значение этого свойства должно быть действительным.

Пример: 0

Пример: [1 3 1 2 7 8 9 0 2 2 8 2]

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
Поддержка комплексного числа: Да

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

  • ложь Объект постоянно обновляет веса фильтра.

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

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

  • ложь Объект не сбрасывает веса.

  • tRUE Вход управления сбросом предоставляется объекту, когда вы вызываете его алгоритм. Эта установка включает свойство WeightsResetCondition. Объект сбрасывает веса фильтра на основе значений свойства WeightsResetCondition и входа сброса, предоставленного объектному алгоритму.

Событие, которое инициировало сброс весов фильтра, заданных как одно из следующих. Объект сбрасывает веса фильтра каждый раз, когда событие сброса обнаруживается в его входе сброса.

  • 'Non-zero' – Инициировал операцию сброса на каждой выборке, когда вход сброса не является нулем.

  • 'Rising edge' – Инициировал операцию сброса, когда вход сброса выполняет одно из следующих действий:

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

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

  • 'Falling edge' – Инициировал операцию сброса, когда вход сброса выполняет одно из следующих действий:

    • Падения от положительного значения до отрицательной величины или нуля.

    • Падения от нуля до отрицательной величины, где падение не является продолжением падения от положительного значения, чтобы обнулить.

  • 'Either edge' – Инициировал операцию сброса, когда вход сброса является возрастающим ребром или падающим ребром.

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

Зависимости

Это свойство применяется, когда вы устанавливаете свойство WeightsResetInputPort на true.

Метод, чтобы вывести адаптированные веса фильтра, заданные как одно из следующего:

  • 'Last' (значение по умолчанию) — Объект возвращает вектор-столбец весов, соответствующих последней выборке кадра данных. Длина вектора весов является значением, данным свойством Length.

  • все Объект возвращает FrameLength-by-Length матрица весов. Матрица соответствует полной истории выборки выборкой весов для всех выборок FrameLength входных значений. Каждая строка в матрице соответствует набору весов фильтра LMS, вычисленных для соответствующей входной выборки.

  • 'none' Эта установка отключает веса вывод.

Свойства фиксированной точки

Задайте округляющийся режим для операций фиксированной точки. Для получения дополнительной информации смотрите округление режима.

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

  • 'Wrap' – Объект переносит результат своих операций фиксированной точки.

  • 'Saturate' – Объект насыщает результат своих операций фиксированной точки.

Для получения дополнительной информации на действиях переполнения, смотрите режим переполнения для операций фиксированной точки.

Размер слова размера шага и дробные настройки длины, заданные как одно из следующего:

  • 'Same word length as first input' – Объект задает размер слова размера шага, чтобы совпасть с тем из первого входа. Дробная длина вычисляется, чтобы получить самую лучшую точность.

  • 'Custom' – Тип данных размера шага задан как пользовательский числовой тип через свойство CustomStepSizeDataType.

Для получения дополнительной информации о типе данных размера шага этот объект использование смотрите раздел Fixed Point.

Word и дробные длины размера шага, заданного как числовой тип автосо знаком с размером слова 16 и дробной длиной 15.

Пример: numerictype ([], 32)

Зависимости

Это свойство применяется при следующих условиях:

  • Набор свойств StepSizeSource к 'Property' и StepSizeDataType установил на 'Custom'.

  • Набор свойств StepSizeSource к 'Input port'.

Размер слова фактора утечки и дробные настройки длины, заданные как одно из следующего:

  • 'Same word length as first input' – Объект задает размер слова фактора утечки, чтобы совпасть с тем из первого входа. Дробная длина вычисляется, чтобы получить самую лучшую точность.

  • 'Custom' – Тип данных фактора утечки задан как пользовательский числовой тип через свойство CustomLeakageFactorDataType.

Для получения дополнительной информации о типе данных фактора утечки этот объект использование смотрите раздел Fixed Point.

Word и дробные продолжительности фактора утечки, заданного как числовой тип автосо знаком с размером слова 16 и дробной длиной 15.

Пример: numerictype ([], 32)

Зависимости

Это свойство применяется, когда вы устанавливаете свойство LeakageFactorDataType на 'Custom'.

Размер слова весов и дробные настройки длины, заданные как одно из следующего:

  • 'Same as first input' – Объект задает тип данных весов фильтра, чтобы совпасть с тем из первого входа.

  • 'Custom' – Тип данных весов фильтра задан как пользовательский числовой тип через свойство CustomWeightsDataType.

Для получения дополнительной информации о типе данных весов фильтра этот объект использование смотрите раздел Fixed Point.

Word и дробные длины весов фильтра, заданных как числовой тип автосо знаком с размером слова 16 и дробной длиной 15.

Пример: numerictype ([], 32,20)

Зависимости

Это свойство применяется, когда вы устанавливаете свойство WeightsDataType на 'Custom'.

Размер слова энергетического продукта и дробные настройки длины, заданные как одно из следующего:

  • 'Same as first input' – Объект задает тип данных энергетического продукта, чтобы совпасть с тем из первого входа.

  • 'Custom' – Тип данных энергетического продукта задан как пользовательский числовой тип через свойство CustomEnergyProductDataType.

Для получения дополнительной информации о типе данных энергетического продукта этот объект использование смотрите раздел Fixed Point.

Зависимости

Это свойство применяется, когда вы устанавливаете свойство Method на 'Normalized LMS'.

Word и дробные длины энергетического продукта, заданного как числовой тип автосо знаком с размером слова 32 и дробной длиной 20.

Зависимости

Это свойство применяется, когда вы устанавливаете свойство Method на свойство 'Normalized LMS' и EnergyProductDataType к 'Custom'.

Энергетический размер слова аккумулятора и дробные настройки длины, заданные как одно из следующего:

  • 'Same as first input' – Объект задает тип данных энергетического аккумулятора, чтобы совпасть с тем из первого входа.

  • 'Custom' – Тип данных энергетического аккумулятора задан как пользовательский числовой тип через свойство CustomEnergyAccumulatorDataType.

Для получения дополнительной информации об энергетическом типе данных аккумулятора этот объект использование смотрите раздел Fixed Point.

Зависимости

Это свойство применяется, когда вы устанавливаете свойство Method на 'Normalized LMS'.

Word и дробные длины энергетического аккумулятора, заданного как числовой тип автосо знаком с размером слова 32 и дробной длиной 20.

Зависимости

Это свойство применяется, когда вы устанавливаете свойство Method на свойство 'Normalized LMS' и EnergyAccumulatorDataType к 'Custom'.

Размер слова продукта свертки и дробные настройки длины, заданные как одно из следующего:

  • 'Same as first input' – Объект задает тип данных продукта свертки, чтобы совпасть с тем из первого входа.

  • 'Custom' – Тип данных продукта свертки задан как пользовательский числовой тип через свойство CustomConvolutionProductDataType.

Для получения дополнительной информации о типе данных продукта свертки этот объект использование смотрите раздел Fixed Point.

Word и дробные длины продукта свертки, заданного как числовой тип автосо знаком с размером слова 32 и дробной длиной 20.

Зависимости

Это свойство применяется, когда вы устанавливаете свойство ConvolutionProductDataType на 'Custom'.

Размер слова аккумулятора свертки и дробные настройки длины, заданные как одно из следующего:

  • 'Same as first input' – Объект задает тип данных аккумулятора свертки, чтобы совпасть с тем из первого входа.

  • 'Custom' – Тип данных аккумулятора свертки задан как пользовательский числовой тип через свойство CustomConvolutionAccumulatorDataType.

Для получения дополнительной информации о типе данных аккумулятора свертки этот объект использование смотрите раздел Fixed Point.

Word и дробные длины аккумулятора свертки, заданного как числовой тип автосо знаком с размером слова 32 и дробной длиной 20.

Зависимости

Это свойство применяется, когда вы устанавливаете свойство ConvolutionAccumulatorDataType на 'Custom'.

Ошибочный размер слова продукта размера шага и дробные настройки длины, заданные как одно из следующего:

  • 'Same as first input' – Объект задает тип данных ошибочного продукта размера шага, чтобы совпасть с тем из первого входа.

  • 'Custom' – Тип данных ошибочного продукта размера шага задан как пользовательский числовой тип через свойство CustomStepSizeErrorProductDataType.

Для получения дополнительной информации об ошибочном типе данных продукта размера шага этот объект использование смотрите раздел Fixed Point.

Word и дробные длины ошибочного продукта размера шага, заданного как числовой тип автосо знаком с размером слова 32 и дробной длиной 20.

Зависимости

Это свойство применяется, когда вы устанавливаете свойство StepSizeErrorProductDataType на 'Custom'.

Word и дробные настройки длины весов фильтра обновляют продукт, заданный как одно из следующего:

  • 'Same as first input' – Объект указывает, что тип данных весов фильтра обновляет продукт, чтобы совпасть с тем из первого входа.

  • 'Custom' – Тип данных продукта обновления весов фильтра задан как пользовательский числовой тип через свойство CustomWeightsUpdateProductDataType.

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

Word и дробные длины весов фильтра обновляют продукт, заданный как числовой тип автосо знаком с размером слова 32 и дробной длиной 20.

Зависимости

Это свойство применяется, когда вы устанавливаете свойство WeightsUpdateProductDataType на 'Custom'.

Размер слова частного и дробные настройки длины, заданные как одно из следующего:

  • 'Same as first input' – Объект задает тип данных частного, чтобы совпасть с тем из первого входа.

  • 'Custom' – Тип данных частного задан как пользовательский числовой тип через свойство CustomQuotientDataType.

Для получения дополнительной информации о типе данных частного этот объект использование смотрите раздел Fixed Point.

Зависимости

Это свойство применяется, когда вы устанавливаете свойство Method на 'Normalized LMS'.

Word и дробные длины весов фильтра обновляют продукт, заданный как числовой тип автосо знаком с размером слова 32 и дробной длиной 20.

Зависимости

Это свойство применяется, когда вы устанавливаете свойство Method на свойство 'Normalized LMS' и QuotientDataType к 'Custom'.

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

Для версий ранее, чем R2016b, используйте функцию step, чтобы запустить алгоритм Системного объекта. Аргументы к step являются объектом, который вы создали, сопровождаемый аргументами, показанными в этом разделе.

Например, y = step(obj,x) и y = obj(x) выполняют эквивалентные операции.

Синтаксис

[y,err,wts] = lms(x,d)
[y,err] = lms(x,d)
[___] = lms(x,d,mu)
[___] = lms(x,d,a)
[___] = lms(x,d,r)
[y,err,wts] = lms(x,d,mu,a,r)

Описание

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

[y,err] = lms(x,d) фильтрует входной сигнал, x, с помощью d в качестве желаемого сигнала, и возвращает отфильтрованный выходной параметр в y и ошибку фильтра в err, когда свойство WeightsOutput установлено в 'None'.

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

[___] = lms(x,d,a) фильтрует входной сигнал, x, с помощью d в качестве желаемого сигнала и a как управление адаптацией, когда свойство AdaptInputPort установлено в true. Когда a является ненулевым, Системный объект постоянно обновляет веса фильтра. Когда a является нулем, веса фильтра остаются постоянными.

[___] = lms(x,d,r) фильтрует входной сигнал, x, с помощью d в качестве желаемого сигнала и r как сигнал сброса, когда свойство WeightsResetInputPort установлено в true. Свойство WeightsResetCondition может использоваться, чтобы установить триггерное условие сброса. Если событие сброса имеет место, Системный объект сбрасывает веса фильтра к их начальным значениям.

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

Входные параметры

развернуть все

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

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

Типы данных: single | double | int8 | int16 | int32 | int64 | fi
Поддержка комплексного числа: Да

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

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

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

Типы данных: single | double | int8 | int16 | int32 | int64 | fi
Поддержка комплексного числа: Да

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

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

Зависимости

Этот вход требуется, когда свойство StepSizeSource установлено в 'Input port'.

Типы данных: single | double | int8 | int16 | int32 | int64 | fi

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

Зависимости

Этот вход требуется, когда свойство AdaptInputPort установлено в true.

Типы данных: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | logical

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

Зависимости

Этот вход требуется, когда свойство WeightsResetInputPort установлено в true.

Типы данных: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | logical

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

развернуть все

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

Типы данных: single | double | int8 | int16 | int32 | int64 | fi
Поддержка комплексного числа: Да

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

Типы данных: single | double | int8 | int16 | int32 | int64 | fi

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

Типы данных: single | double | int8 | int16 | int32 | int64 | fi

Функции объекта

Чтобы использовать объектную функцию, задайте Системный объект как первый входной параметр. Например, чтобы выпустить системные ресурсы Системного объекта под названием obj, используйте этот синтаксис:

release(obj)

развернуть все

maxstepМаксимальный размер шага для адаптивной сходимости фильтра LMS
msepredПредсказанная среднеквадратическая ошибка для адаптивного фильтра LMS
msesimПредполагаемая среднеквадратическая ошибка для адаптивных фильтров
stepЗапустите алгоритм Системного объекта
releaseВысвободите средства и позвольте изменения в значениях свойств Системного объекта и введите характеристики
resetСбросьте внутренние состояния Системного объекта

Примеры

развернуть все

Среднеквадратическая ошибка (MSE) измеряет среднее значение квадратов ошибок между желаемым сигналом и первичным входом сигнала к адаптивному фильтру. Сокращение этой ошибки сходится первичный входной параметр к желаемому сигналу. Определите ожидаемое значение MSE и моделируемое значение MSE в каждый раз мгновенное использование функции msesim и msepred. Сравните эти значения MSE друг с другом и относительно минимального MSE и установившихся значений MSE. Кроме того, вычислите сумму квадратов содействующих ошибок, данных трассировкой содействующей ковариационной матрицы.

Примечание: Если вы используете R2016a или более ранний релиз, заменяете каждый вызов объекта с эквивалентным синтаксисом шага. Например, obj(x) становится step(obj,x).

Инициализация

Создайте Систему dsp.FIRFilter object™, который представляет неизвестную систему. Передайте сигнал, x, к КИХ-фильтру. Вывод неизвестной системы является желаемым сигналом, d, который является суммой вывода неизвестной системы (КИХ-фильтр) и аддитивный шумовой сигнал, n.

num = fir1(31,0.5);
fir = dsp.FIRFilter('Numerator',num);  
iir = dsp.IIRFilter('Numerator',sqrt(0.75),...
        'Denominator',[1 -0.5]);
x = iir(sign(randn(2000,25))); 
n = 0.1*randn(size(x));           
d = fir(x) + n; 

Фильтр LMS

Создайте Системный объект dsp.LMSFilter, чтобы создать фильтр, который адаптируется, чтобы вывести желаемый сигнал. Установите длину адаптивного фильтра к 32 касаниям, размера шага к 0,008, и фактор десятикратного уменьшения для анализа и симуляции к 5. Переменная simmse представляет моделируемый MSE между выводом неизвестной системы, d, и выводом адаптивного фильтра. Переменная mse дает соответствующее ожидаемое значение.

l = 32;
mu = 0.008;
m  = 5;

lms = dsp.LMSFilter('Length',l,'StepSize',mu);
[mmse,emse,meanW,mse,traceK] = msepred(lms,x,d,m);
[simmse,meanWsim,Wsim,traceKsim] = msesim(lms,x,d,m);

Постройте результаты MSE

Сравните значения моделируемого MSE, предсказал MSE, минимальный MSE и итоговый MSE. Итоговое значение MSE дано суммой минимального MSE и избыточного MSE.

nn = m:m:size(x,1);
semilogy(nn,simmse,[0 size(x,1)],[(emse+mmse)...
    (emse+mmse)],nn,mse,[0 size(x,1)],[mmse mmse])
title('Mean Squared Error Performance')
axis([0 size(x,1) 0.001 10])
legend('MSE (Sim.)','Final MSE','MSE','Min. MSE')
xlabel('Time Index')
ylabel('Squared Error Value')

Предсказанный MSE следует за той же траекторией как моделируемый MSE. Обе этих траектории сходятся с установившимся (итоговым) MSE.

Постройте содействующие траектории

meanWsim является средним значением моделируемых коэффициентов, данных msesim. meanW является средним значением предсказанных коэффициентов, данных msepred.

Сравните моделируемые и предсказанные средние значения коэффициентов фильтра LMS 12,13,14, и 15.

plot(nn,meanWsim(:,12),'b',nn,meanW(:,12),'r',nn,...
meanWsim(:,13:15),'b',nn,meanW(:,13:15),'r')
PlotTitle ={'Average Coefficient Trajectories for';...
            'W(12), W(13), W(14), and W(15)'}
PlotTitle = 2x1 cell array
    {'Average Coefficient Trajectories for'}
    {'W(12), W(13), W(14), and W(15)'      }

title(PlotTitle)
legend('Simulation','Theory')
xlabel('Time Index')
ylabel('Coefficient Value')

В устойчивом состоянии оба сходятся траектории.

Сумма содействующих ошибок в квадрате

Сравните сумму содействующих ошибок в квадрате, данных msepred и msesim. Эти значения даны трассировкой содействующей ковариационной матрицы.

semilogy(nn,traceKsim,nn,traceK,'r')
title('Sum-of-Squared Coefficient Errors')
axis([0 size(x,1) 0.0001 1])
legend('Simulation','Theory')
xlabel('Time Index')
ylabel('Squared Error Value')

Функция maxstep вычисляет максимальный размер шага адаптивного фильтра. Этот размер шага сохраняет стабильность фильтра в максимальной возможной быстроте сходимости. Создайте сигнал первичного входного параметра, x, путем передачи случайного сигнала со знаком БИХ-фильтру. x сигнала содержит 50 кадров 2 000 выборок каждый кадр. Создайте фильтр LMS с 32 касаниями и размером шага 0,1.

x = zeros(2000,50);
IIRFilter = dsp.IIRFilter('Numerator',sqrt(0.75),'Denominator',[1 -0.5]);
for k = 1:size(x,2)   
  x(:,k) = IIRFilter(sign(randn(size(x,1),1))); 
end
mu = 0.1;     
LMSFilter = dsp.LMSFilter('Length',32,'StepSize',mu);

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

[mumax,mumaxmse] = maxstep(LMSFilter,x)
mumax = 0.0625
mumaxmse = 0.0536

Идентифицируйте неизвестную систему с помощью LMS-алгоритма. Цель адаптивного фильтра состоит в том, чтобы минимизировать сигнал ошибки между выводом адаптивного фильтра и выводом неизвестной системы (или системы, которая будет идентифицирована). Если сигнал ошибки минимален, адаптированный фильтр напоминает неизвестную систему.

Примечание: Если вы используете R2016a или более ранний релиз, заменяете каждый вызов объекта с эквивалентным синтаксисом шага. Например, obj(x) становится step(obj,x).

Инициализация

Создайте объект dsp.FIRFilter, который представляет систему, которая будет идентифицирована. Передайте сигнал, x к КИХ-фильтру. Вывод неизвестной системы является желаемым сигналом, d, который является суммой вывода неизвестной системы (КИХ-фильтр) и аддитивный шумовой сигнал, n.

filt = dsp.FIRFilter;
filt.Numerator = fir1(10,0.25);
x = randn(1000,1);
n = 0.01*randn(1000,1);
d = filt(x) + n;

Адаптивный фильтр

Создайте объект dsp.LMSFilter создать адаптивный фильтр, который использует адаптивный алгоритм LMS. Установите длину адаптивного фильтра к 11 касаниям и размера шага к 0,01. Передайте сигнал первичного входного параметра, x, и желаемый сигнал, d, к фильтру LMS. Вывод, y, адаптивного фильтра являются сигналом, сходившимся к желаемому сигналу, d, таким образом, минимизируя ошибку, e, между двумя сигналами.

lms = dsp.LMSFilter(11,'StepSize',0.01);
[y,e,w] = lms(x,d);
plot(1:1000, [d,y,e])
title('System Identification of an FIR filter')
legend('Desired','Output','Error')
xlabel('time index')
ylabel('signal value')

Сравните адаптированный фильтр с неизвестной системой

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

stem([filt.Numerator.',w])
legend('Actual','Estimated') 
xlabel('coefficient #')
ylabel('coefficient value')

Все коэффициенты неизвестной системы (КИХ-фильтр) накладываются с коэффициентами адаптированного фильтра LMS.

Отмените аддитивный шум, n, добавленный к неизвестной системе с помощью адаптивного фильтра LMS. Фильтр LMS адаптирует свои коэффициенты, пока его передаточная функция не совпадает с передаточной функцией неизвестной системы максимально тесно. Различие между выводом адаптивного фильтра и выводом неизвестной системы представляет сигнал ошибки, e. Минимизация этого сигнала ошибки является целью адаптивного фильтра.

Неизвестная система и фильтр LMS обрабатывают тот же входной сигнал, x, и производят выходные параметры d и y, соответственно. Если коэффициенты адаптивного фильтра совпадают с коэффициентами неизвестной системы, ошибка, e, в действительности представляет аддитивный шум.

Примечание: Если вы используете R2016a или более ранний релиз, заменяете каждый вызов объекта с эквивалентным синтаксисом шага. Например, obj(x) становится step(obj,x).

Инициализация

Создайте Системный объект dsp.FIRFilter, чтобы представлять неизвестную систему. Создайте объект dsp.LMSFilter и установите длину на 11 касаний и размер шага к 0,05. Создайте синусоиду, чтобы представлять шум, добавленный к неизвестной системе. Просмотрите сигналы в осциллографе времени.

FrameSize = 100;
NIter = 10;
lmsfilt2 = dsp.LMSFilter('Length',11,'Method','Normalized LMS', ...
    'StepSize',0.05);
firfilt2 = dsp.FIRFilter('Numerator', fir1(10,[.5, .75]));
sinewave = dsp.SineWave('Frequency',0.01, ...
    'SampleRate',1,'SamplesPerFrame',FrameSize);
TS = dsp.TimeScope('TimeSpan',FrameSize*NIter,'TimeUnits','Seconds',...
    'YLimits',[-3 3],'BufferLength',2*FrameSize*NIter, ...
    'ShowLegend',true,'ChannelNames', ...
    {'Noisy signal', 'Error signal'});

Создайте случайный входной сигнал, x и передайте сигнал КИХ-фильтру. Добавьте синусоиду в вывод КИХ-фильтра, чтобы сгенерировать сигнал с шумом, d. Сигналом, d является вывод неизвестной системы. Передайте сигнал с шумом и сигнал первичного входного параметра к фильтру LMS. Просмотрите сигнал с шумом и сигнал ошибки в осциллографе времени.

for k = 1:NIter
    x = randn(FrameSize,1);
    d = firfilt2(x) + sinewave();
    [y,e,w] = lmsfilt2(x,d);
    TS([d,e])
end
release(TS)

Сигнал ошибки, e, является синусоидальным шумом, добавленным к неизвестной системе. Минимизация сигнала ошибки минимизирует шум, добавленный к системе.

Примечание: Этот пример запускается только в R2017a или позже. Если вы используете релиз ранее, чем R2017a, объект не выводит полную историю выборки выборкой весов фильтра. Если вы используете релиз ранее, чем R2016b, заменяете каждый вызов функции с эквивалентным синтаксисом step. Например, myObject(x) становится step(myObject,x).

Инициализируйте Системный объект dsp.LMSFilter и установите свойство WeightsOutput на 'All'. Эта установка позволяет фильтру LMS вывести матрицу весов с размерностями [FrameLength Length], соответствуя полной истории выборки выборкой весов для всех выборок FrameLength входных значений.

FrameSize = 15000;
lmsfilt3 = dsp.LMSFilter('Length',63,'Method','LMS', ...
    'StepSize',0.001,'LeakageFactor',0.99999, ...
    'WeightsOutput','All'); % full Weights history

w_actual = fir1(64,[0.5 0.75]);
firfilt3 = dsp.FIRFilter('Numerator',w_actual);
sinewave = dsp.SineWave('Frequency',0.01, ...
    'SampleRate',1,'SamplesPerFrame',FrameSize);

TS = dsp.TimeScope('TimeSpan',FrameSize,'TimeUnits','Seconds', ...
    'YLimits',[-0.25 0.75],'BufferLength',2*FrameSize, ...
    'ShowLegend',true,'ChannelNames', ...
    {'Coeff 33 Estimate','Coeff 34 Estimate','Coeff 35 Estimate', ...
    'Coeff 33 Actual','Coeff 34 Actual','Coeff 35 Actual'});

Запустите один кадр и выведите полную адаптивную историю весов, w.

x = randn(FrameSize,1);       % Input signal
d = firfilt3(x) + sinewave(); % Noise + Signal
[~,~,w] = lmsfilt3(x,d);

Каждая строка в w является набором весов, оцененных для соответствующей входной выборки. Каждый столбец в w дает полную историю определенного веса. Постройте фактический вес и целую историю 33-го, 34-го, и 35-го веса. В графике вы видите, что предполагаемый вес, вывод в конечном счете сходится с фактическим весом как адаптивный фильтр, получает входные выборки и продолжает адаптироваться.

idxBeg = 33;
idxEnd = 35;
TS([w(:,idxBeg:idxEnd), repmat(w_actual(idxBeg:idxEnd),FrameSize,1)])

Алгоритмы

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

y(n)=wT(n1)u(n)e(n)=d(n)y(n)w(n)=αw(n1)+f(u(n),e(n),μ)

Различные адаптивные алгоритмы фильтра LMS, доступные в этом Системном объекте, заданы как:

  • LMS:

    f(u(n),e(n),μ)=μe(n)u*(n)

  • Нормированный LMS:

    f(u(n),e(n),μ)=μe(n)u(n)ε+uH(n)u(n)

    В Нормированном LMS, чтобы преодолеть потенциальную числовую нестабильность в обновлении весов, маленькая положительная константа, ε, была добавлена в знаменателе. Для входа с плавающей точкой с двойной точностью ε является 2.2204460492503131e-016. Для входа с плавающей точкой с одинарной точностью ε является 1.192092896e-07. Для входа фиксированной точки ε 0.

  • Ошибка знака LMS:

    f(u(n),e(n),μ)=μзнак(e(n))u*(n)

  • Данные знака LMS:

    f(u(n),e(n),μ)=μe(n)знак(u(n))

    где u (n) действителен.

  • Знак знака LMS:

    f(u(n),e(n),μ)=μзнак(e(n))знак(u(n))

    где u (n) действителен.

Переменные следующие:

ПеременнаяОписание

n

Индекс текущего времени

u (n)

Вектор буферизированных входных выборок на шаге n

u* (n)

Сопряженное комплексное число вектора буферизированных входных выборок на шаге n

w (n)

Вектор веса фильтра оценивает на шаге n

y(n)

Отфильтрованный вывод на шаге n

e(n)

Ошибка оценки на шаге n

d(n)

Желаемый ответ на шаге n

µ

Размер шага адаптации

α

Фактор утечки (0 <α ≤ 1)

ε

Константа, которая исправляет любую потенциальную числовую нестабильность, которая происходит во время обновления весов.

Ссылки

[1] Hayes, M.H. Статистическая цифровая обработка сигналов и моделирование. Нью-Йорк: John Wiley & Sons, 1996.

Расширенные возможности

Представленный в R2012a