Обратный System Identification Используя алгоритм RLS

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

Смотрите также

Объекты

Похожие темы

Ссылки

[1] Hayes, Монсон Х., Статистическая Цифровая обработка сигналов и Моделирование. Хобокен, NJ: John Wiley & Sons, 1996, pp.493–552.

[2] Haykin, Саймон, адаптивная теория фильтра. Верхний Сэддл-Ривер, NJ: Prentice-Hall, Inc., 1996.