Этот пример демонстрирует адаптивный алгоритм 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)

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

Результатом каскада неизвестной системы и адаптированного фильтра является компенсированная система с расширенной частотой отсечения 0,8.
overallCoeffs = conv(filt.Numerator,b); freqz(overallCoeffs,1)

[1] Хейс, Монсон Х., Статистическая цифровая обработка и моделирование сигналов. Хобокен, Нью-Джерси: John Wiley & Sons, 1996, pp.493-552.
[2] Хайкин, Саймон, теория адаптивных фильтров. Река Верхнее Седло, Нью-Джерси: Прентис-Холл, Инк., 1996.