dsp.RLSFilter

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

Описание

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

Отфильтровать каждый канал входа:

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

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

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

Создание

Описание

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

пример

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

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

Свойства

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

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

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

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Используя Системные объекты (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');

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

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

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

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

Этот пример демонстрирует адаптивный алгоритм 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. Обратная система похожа на фильтр highpass с линейной фазой.

freqz(b,1)

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

freqz(filt.Numerator,1)

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

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

Отмените аддитивный шум 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);
TS = dsp.TimeScope('LayoutDimensions',[2 1],'NumInputPorts',2,'TimeSpan',FrameSize*NIter,'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;
    TS(d,e)
end
release(TS)

Алгоритмы

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
Pn Матрица обратной корреляции на шаге n
k (n)Вектор усиления на шаге n
w (n)Вектор фильтра касается оценок на шаге n
y (n)Отфильтрованный выход на шаге n
e (n)Ошибка оценки на шаге n
dN Желаемый ответ на шаге n
λФактор упущения

u, w и k являются всеми вектор-столбцами.

Ссылки

[1] М Хейз, статистическая цифровая обработка сигналов и моделирование, Нью-Йорк: Вайли, 1996.

[2] С. Хейкин, адаптивная теория фильтра, 4-й выпуск, верхний Сэддл-Ривер, NJ: Prentice Hall, 2002.

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

[4] Южная Каролина Дуглас, "Численно устойчивый O (N2) RLS алгоритмы с помощью предварительного отбеливания наименьших квадратов", Proc. Конференция Int IEEE по Акустике, Речи, и Обработке сигналов, Стамбулу, Турция, изданию I, стр 412-415, июнь 2000.

[5] А. Х. Сайед, основные принципы адаптивной фильтрации, Хобокена, NJ: John Wiley & Sons, 2003.

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

Введенный в R2013a