exponenta event banner

dsp. RLSFilter

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

Описание

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

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

  1. Создать dsp.RLSFilter и задайте его свойства.

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

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

Создание

Описание

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

пример

rlsFilt = dsp.RLSFilter(len) возвращает объект System фильтра RLS, rlsFilt. Этот объект System имеет 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

Укажите начальные значения коэффициентов адаптивного фильтра FIR как скаляр или вектор длиной, равной 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, используя объект System, rlsFilt. Требуемый сигнал, d, является требуемым сигналом плюс некоторый нежелательный шум.

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

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

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

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

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

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

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

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

Требуемый сигнал, d, может быть сигналом переменного размера. Можно изменить количество элементов в векторе столбца, даже если объект заблокирован. Объект System блокируется при вызове объекта для выполнения его алгоритма.

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

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

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

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

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

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

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

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

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

release(obj)

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

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

Примеры

свернуть все

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

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

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

Создать dsp.FIRFilter объект, представляющий идентифицируемую систему. Передать сигнал x к фильтру FIR. Выход неизвестной системы является требуемым сигналом d, которая является суммой выходного сигнала неизвестной системы (FIR-фильтр) и аддитивного шумового сигнала 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, который подобен неизвестной системе (фильтр FIR). Чтобы подтвердить сходимость, сравните числитель фильтра FIR и оценочные веса фильтра 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таким образом, отрегулируйте подсчет сигнальных элементов, чтобы обеспечить возможность отсчетов задержки.

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

Для неизвестной системы используйте низкочастотный фильтр FIR 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). Отклик является откликом фильтра нижних частот с частотой отсечки 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)

Алгоритмы

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

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

где λ-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] М. Хейс, Статистическая цифровая обработка и моделирование сигналов, Нью-Йорк: Уайли, 1996.

[2] С. Хайкин, теория адаптивных фильтров, 4-е издание, Верхнее седло, Нью-Джерси: Прентис Холл, 2002.

[3] А. А. Ронтогианнис и С. Теодоридис, «Адаптивные алгоритмы наименьших квадратов обратной факторизации», Обработка сигналов, том 52, № 1, стр. 35-47, июль 1996.

[4] ЮЖНАЯ КАРОЛИНА. Дуглас, «Численно-надежные алгоритмы O (N2) RLS, использующие предварительное беление наименьших квадратов», Proc. IEEE Int. Conf. on Acoustics, Speech and Signal Processing, Стамбул, Турция, том I, стр. 412-415, июнь 2000 года.

[5] А. Х. Сайед, Основы адаптивной фильтрации, Хобокен, Нью-Джерси: Джон Уайли и сыновья, 2003.

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

.
Представлен в R2013a