Этот пример демонстрирует адаптивный алгоритм 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
. Обратная система выглядит как высокочастотный фильтр с линейной фазой.
freqz(b,1)
Просмотрите частотную характеристику неизвестной системы H (z). Реакция является характеристикой lowpass с частотой отключения 0,55.
freqz(filt.Numerator,1)
Результатом каскада неизвестной системы и адаптированного фильтра является компенсированная система с расширенной частотой отключения 0,8.
overallCoeffs = conv(filt.Numerator,b); freqz(overallCoeffs,1)
[1] Hayes, Monson H., Statistical Digital Signal Processing and Modeling. Hoboken, NJ: John Wiley & Sons, 1996, pp.493-552.
[2] Haykin, Simon, Adaptive Filter Theory. Upper Saddle River, NJ: Prentice-Hall, Inc., 1996.