Продемонстрируйте адаптивный алгоритм RLS с помощью обратной модели системы идентификации, показанной здесь.
Расположение каскадом адаптивного фильтра с неизвестным фильтром заставляет адаптивный фильтр сходиться к решению, которое является инверсией неизвестной системы.
Если передаточная функция неизвестной системы и адаптивного фильтра является H (z) и G (z), соответственно, ошибка, измеренная между желаемым сигналом и сигналом от каскадной системы, достигает своего минимума, когда продукт H (z) и G (z) равняется 1, 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 получены путем ввода rls.Coefficients
в командной строке MATLAB.
b = rls.Coefficients;
Просмотрите частотную характеристику адаптированного фильтра RLS (обратная система, G (z)) использование freqz
. Обратная система похожа на фильтр highpass с линейной фазой.
freqz(b,1)
Просмотрите частотную характеристику неизвестной системы, H (z). Ответ является ответом фильтра нижних частот с частотой среза 0,55.
freqz(filt.Numerator,1)
Результатом каскада неизвестной системы и адаптированного фильтра является компенсированная система с расширенной частотой среза 0,8.
overallCoeffs = conv(filt.Numerator,b); freqz(overallCoeffs,1)
[1] Hayes, Монсон Х., статистическая цифровая обработка сигналов и Modeling, John Wiley & Sons, 1996, 493–552.
[2] Haykin, Саймон, адаптивная теория фильтра, Prentice-Hall, Inc., 1996.