dsp.RLSFilter

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

Описание

The dsp.RLSFilter Система object™ фильтрует каждый канал входа, используя реализации фильтра RLS.

Для фильтрации каждого канала входного входа:

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

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

Дополнительные сведения о работе системных объектов см. в разделе «Что такое системные объекты?».

Создание

Описание

rlsFilt = dsp.RLSFilter возвращает адаптивный фильтр RLS Системного объекта, rlsFilt. Этот системный объект вычисляет отфильтрованный выход, ошибку фильтра и веса фильтра для заданного входного и желаемого сигнала, используя алгоритм RLS.

пример

rlsFilt = dsp.RLSFilter(len) возвращает фильтр RLS Системного объекта, rlsFilt. Этот Системный объект имеет Length значение свойства установлено в len.

rlsFilt = dsp.RLSFilter(Name,Value) возвращает системный объект фильтра RLS с каждым заданным набором свойств заданное значение. Заключайте каждое имя свойства в одинарные кавычки. Неопределенные свойства имеют значения по умолчанию.

Свойства

расширить все

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

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

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

Можно задать метод, используемый для вычисления коэффициентов фильтра следующим Conventional RLS [1] [2], Householder RLS [3] [4], Sliding-window RLS [5][1][2], Householder sliding-window RLS [4], или QR decomposition [1] [2]. Это свойство неразрывно.

Задайте длину вектора коэффициентов RLS-фильтра в виде скалярного положительного целого значения. Это свойство неразрывно.

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

Задайте ширину скользящего окна как скаляра положительное целое число значения больше или равное Length значение свойства. Это свойство неразрывно.

Зависимости

Это свойство применяется только когда Method для свойства задано значение Sliding-window RLS или Householder sliding-window RLS.

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

Задайте коэффициент забывания RLS как скаляр положительное числовое значение, меньше или равное 1. Установка значения этого свойства 1 обозначает бесконечную память, при этом адаптируясь к поиску нового фильтра.

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

Типы данных: single | double

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

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

Типы данных: single | double

Задайте начальные значения обратной ковариационной матрицы входного сигнала. Это свойство должно быть либо скаляром, либо квадратной матрицей, при этом каждая размерность равна Length значение свойства. Если вы задаете скалярное значение, InverseCovariance свойство инициализируется в диагональную матрицу с диагональными элементами, равными этому скалярному значению.

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

Зависимости

Это свойство применяется только когда Method для свойства задано значение Conventional RLS или Sliding-window RLS.

Типы данных: single | double

Задайте начальные значения обратной матрицы квадратного корня ковариации входного сигнала. Это свойство должно быть либо скаляром, либо квадратной матрицей с каждой размерностью, равной Length значение свойства. Если вы задаете скалярное значение, SquareRootInverseCovariance свойство инициализируется в диагональную матрицу с диагональными элементами, равными этому скалярному значению.

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

Зависимости

Это свойство применяется только когда Method для свойства задано значение Householder RLS или Householder sliding-window RLS.

Типы данных: single | double

Задайте начальные значения квадратного корня ковариации матрицы входного сигнала. Это свойство должно быть либо скаляром, либо квадратной матрицей с каждой размерностью, равной Length значение свойства. Если вы задаете скалярное значение, SquareRootCovariance свойство инициализируется в диагональную матрицу с диагональными элементами, равными скалярному значению.

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

Зависимости

Это свойство применяется только когда Method для свойства задано значение QR-decomposition RLS.

Типы данных: single | double

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

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

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

Описание

пример

y = rlsFilt(x,d) рекурсивно адаптирует вход ссылки, x, чтобы соответствовать желаемому сигналу, d, используя Системный объект, rlsFilt. Нужный сигнал, d, желаемый сигнал плюс некоторый нежелательный шум.

[y,e] = rlsFilt(x,d) показывает выход RLS-фильтра вместе с ошибкой, e, между ссылкой и желаемым сигналом. Фильтры адаптируют свои коэффициенты до ошибки e минимизируется. Вы можете получить доступ к этим коэффициентам, обращаясь к Coefficients свойство объекта. Это может быть сделано только после вызова объекта. Для примера получить доступ к оптимизированным коэффициентам rlsFilt фильтр, вызов rlsFilt.Coefficients после того, как вы передаете вход и желаемый сигнал объекту.

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

расширить все

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

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

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

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

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

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

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

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

расширить все

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

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

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

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

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

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

release(obj)

расширить все

msesimОценка средней квадратичной невязки для адаптивных фильтров
stepЗапуск алгоритма системного объекта
releaseОтпустите ресурсы и допустите изменения в значениях свойств системного объекта и входных характеристиках
resetСброс внутренних состояний Системного объекта

Примеры

свернуть все

Используйте рекурсивный фильтр методом наименьших квадратов (RLS), чтобы идентифицировать неизвестную систему, смоделированную с помощью lowpass конечной импульсной характеристики. Сравните частотные характеристики неизвестной и оцененной систем.

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

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

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

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

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

Создайте dsp.RLSFilter Объект для создания RLS-фильтра. Установите длину фильтра равную 11 отводам, а коэффициент забывания равным 0,98. Передайте основной входной сигнал x и желаемый сигнал d в фильтр RLS. Область выхода y адаптивный фильтр является сигналом, сходящимся к желаемому сигналу d тем самым минимизируя ошибку e между двумя сигналами.

rls = dsp.RLSFilter(11, 'ForgettingFactor', 0.98);
[y,e] = rls(x,d);
w = rls.Coefficients;

Постройте график результатов

Сигнал выхода соответствует желаемому сигналу, делая ошибку между ними близкой к нулю.

plot(1:1000, [d,y,e]);
title('System Identification of an FIR filter');
legend('Desired', 'Output', 'Error');
xlabel('time index'); 
ylabel('signal value');

Figure contains an axes. The axes with title System Identification of an FIR filter contains 3 objects of type line. These objects represent Desired, Output, Error.

Сравните веса

Вектор весов w представляет коэффициенты RLS-фильтра, который приспособлен напоминать неизвестную систему ( конечную импульсную характеристику). Для подтверждения сходимости сравните числитель конечной импульсной характеристики и оценочные веса RLS-фильтра.

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

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

Figure contains an axes. The axes contains 2 objects of type stem. These objects represent Actual, Estimated.

Этот пример демонстрирует адаптивный алгоритм RLS, используя модель обратной системы идентификации, показанную здесь.

Каскадирование адаптивного фильтра с неизвестным фильтром заставляет адаптивный фильтр сходиться к решению, которое является обратным неизвестной системе.

Если передаточная функция неизвестной системы и адаптивного фильтра являются H (z) и G (z), соответственно, ошибка, измеренная между желаемым сигналом и сигналом от каскадной системы, достигает своего минимума, когда G (z)×H (z) = 1. Чтобы это отношение было верным, G (z) должно равняться 1/H (z), обратной передаточной функции неизвестной системы.

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

s = randn(3000,1);

В случае каскадных фильтров неизвестный фильтр приводит к задержке в сигнале, поступающем в точку суммирования после обоих фильтров. Чтобы предотвратить попытку адаптивного фильтра адаптироваться к сигналу, которого он еще не видел (эквивалентно предсказанию будущего), задержите нужный сигнал на 12 выборки, что является порядком неизвестной системы.

Как правило, вы не знаете порядок системы, которую вы пытаетесь идентифицировать. В этом случае задержка требуемого сигнала на количество выборок, равное половине порядка адаптивного фильтра. Задержка входа требует предварительной подготовки 12 нулевых выборок к входу s.

delay = zeros(12,1);
d = [delay; s(1:2988)]; % Concatenate the delay and the signal.

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

Хотя обычно это не так, для этого примера вы знаете порядок неизвестного фильтра, поэтому добавьте задержку, равную порядку неизвестного фильтра.

Для неизвестной системы используйте lowpass, 12-го порядка конечной импульсной характеристики фильтр.

filt = dsp.FIRFilter;
filt.Numerator = fir1(12,0.55,'low');

Фильтрация s предоставляет сигнал входных данных для функции адаптивного алгоритма.

x = filt(s);

Чтобы использовать алгоритм RLS, создайте dsp.RLSFilter объект и установите его Length, ForgettingFactor, и InitialInverseCovariance свойства.

Для получения дополнительной информации о входных условиях для подготовки объекта алгоритма RLS, смотрите dsp.RLSFilter.

p0 = 2 * eye(13);
lambda = 0.99;
rls = dsp.RLSFilter(13,'ForgettingFactor',lambda,...
   'InitialInverseCovariance',p0);

Этот пример стремится разработать обратное решение, вы должны быть осторожны с тем, какой сигнал несет данные, а какой является желаемым сигналом.

Более ранние примеры адаптивных фильтров используют отфильтрованный шум в качестве желаемого сигнала. В этом случае отфильтрованный шум (x) содержит информацию неизвестной системы. При Гауссовом распределении и отклонении 1 нефильтрованный шум d является желаемым сигналом. Код для запуска этого адаптивного фильтра:

[y,e] = rls(x,d);

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

Получите оцененные коэффициенты RLS-фильтра.

b = rls.Coefficients;

Просмотрите частотную характеристику адаптированного RLS-фильтра (обратной системы, G (z)), используя freqz. Обратная система выглядит как высокочастотный фильтр с линейной фазой.

freqz(b,1)

Figure contains 2 axes. Axes 1 contains an object of type line. Axes 2 contains an object of type line.

Просмотрите частотную характеристику неизвестной системы H (z). Реакция является характеристикой lowpass с частотой отключения 0,55.

freqz(filt.Numerator,1)

Figure contains 2 axes. Axes 1 contains an object of type line. Axes 2 contains an object of type line.

Результатом каскада неизвестной системы и адаптированного фильтра является компенсированная система с расширенной частотой отключения 0,8.

overallCoeffs = conv(filt.Numerator,b);
freqz(overallCoeffs,1)

Figure contains 2 axes. Axes 1 contains an object of type line. Axes 2 contains an object of type line.

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

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

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

Создайте dsp.FIRFilter Системные object™ для представления неизвестной системы. Создайте dsp.RLSFilter Объектом и установите длину равной 11 отводам. Установите метод равным 'Householder RLS'. Создайте синусоиду, чтобы представлять шум, добавленный в неизвестную систему. Просмотрите сигналы в временных возможностях.

FrameSize = 100;
NIter = 10;

rls = dsp.RLSFilter('Length',11,'Method','Householder RLS');
filt = dsp.FIRFilter('Numerator',fir1(10,[.5,.75]));

sinewave = dsp.SineWave('Frequency',0.01, ...
    'SampleRate',1,'SamplesPerFrame',FrameSize);
scope = timescope('LayoutDimensions',[2 1],'NumInputPorts',2, ...
    'TimeUnits','Seconds','YLimits',[-2.5 2.5], ...
    'BufferLength',2*FrameSize*NIter, ...
    'ActiveDisplay',1,'ShowLegend',true,'ChannelNames',{'Noisy signal'}, ...
    'ActiveDisplay',2,'ShowLegend',true,'ChannelNames',{'Error signal'});

for k = 1:NIter
    x = randn(FrameSize,1);
    d = filt(x) + sinewave();
    [y,e] = rls(x,d);
    w = rls.Coefficients;
    scope(d,e)
end
release(scope)

Алгоритмы

The dsp.RLSFilter Системный объект, когда Conventional RLS выбран, рекурсивно вычисляет оценку методом наименьших квадратов (RLS) весов конечной импульсной характеристики фильтра. Системный объект оценивает веса или коэффициенты фильтра, необходимые для преобразования входного сигнала в требуемый сигнал. Входной сигнал может быть скаляром или вектором-столбцом. Требуемый сигнал должен иметь совпадающий тип данных, сложность и размерности, что и входной сигнал. Соответствующий RLS-фильтр выражен в матричной форме как P (n):

k(n)=λ1P(n1)u(n)1+λ1uH(n)P(n1)u(n)y(n)=wT(n1)u(n)e(n)=d(n)y(n)w(n)=w(n1)+k*(n)e(n)P(n)=λ1P(n1)λ1k(n)uH(n)P(n1)

где-1 обозначает обратное значение экспоненциала коэффициента взвешивания. Переменные следующие:

ПеременнаяОписание
nТекущий индекс времени
u (n)Вектор буферизованных входных выборок на шаге n
P (n)Сопряженный матрицы обратной корреляции на шаге n
k (n)Вектор усиления на шаге n
k* (n)Комплексный сопряженный k
w (n)Вектор оценок отвода фильтра на шаге n
y (n)Отфильтрованный выход на шаге n
e (n)Ошибка расчета на шаге n
d (n)Желаемый ответ на шаге n
λКоэффициент забывания

u, w и k все векторы-столбцы.

Ссылки

[1] M Hayes, Statistical Digital Signal Processing and Modeling, New York: Wiley, 1996.

[2] С. Хайкин, Adaptive Filter Theory, 4th Edition, Upper Saddle River, NJ: Prentice Hall, 2002.

[3] A.A. Rontogiannis and S. Theodoridis, «Inverse factorization adaptive now-squares algorithms», Signal Processing, vol. 52, no. 1, pp. 35-47, July 1996.

[4] ЮЖНАЯ КАРОЛИНА. Дуглас ", численно-устойчивый O (N2) Алгоритмы RLS, использующие предварительное бурение методом наименьших квадратов ", Proc. IEEE Int. Conf. on Acoustics, Speech, and Signal Processing, Istanbul, Turkey, vol. I, pp. 412-415, June 2000.

[5] A. H. Sayed, Основы адаптивной фильтрации, Hoboken, NJ: John Wiley & Sons, 2003.

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

.
Введенный в R2013a