
В предыдущей лекции был подробно
рассмотрен алгоритм метода наименьших
квадратов (LMSalgorithm),
который наиболее часто применяется в
практических задачах адаптивной
фильтрации из-за его низкой вычислительной
сложности. Длястационарноговходного сигнала алгоритм МНК сходится
к оптимальному фильтруHopt, получаемому
из уравнения Винера - Хопфа.
Обновление (вычисление) коэффициентов
фильтра в данном алгоритме происходит
по выражению
Схема работы фильтра, использующего
алгоритм МНК.
Значения коэффициентов фильтра hj(k)на каждомk –ом
шаге входного сигнала обновляются
(настраиваются) по вышеприведенному
выражению.
Алгоритм мнк (справочные сведения)
.
Коэффициенты
Алгоритм обновления
коэффициентов.
Задаются:
Значения (отсчеты) случайного входного
сигнала фильтра {x1),
x(2), x(3),...}
Значения желаемого (опорного) сигнала
{d[1], d[2], d[3],…},коррелированные с
сигналомx[k].
Выполнять:
Инициализировать (задать) начальные
значения вектора коэффициентов фильтра
H[0],напримерH[0]=0.
Для итераций (шагов, номеров отсчетов)
k = 0, 1, 2, …, kmax
Получить новую пару значений сигналов
{X[k],
d[k]},
Вычислить выход фильтра
Вычислить ошибку выхода фильтра
Вычислить новые коэффициенты фильтра
Вычислительная сложность алгоритма:
2N умножений
и сложений на одну итерациюk.
При частоте отсчетовFsнеобходимо выполнять (2N)*Fsумножений и сложений в секунду.
,
,
Или
в поэлементной форме
Пользовательская функция MATLAB для
синтеза адаптивного МНК - фильтра,
реализующая вышеприведенный алгоритм,
function
[W,dhat,e]=fir_lms(mu,W0,x,d)
%
Функция адаптивной фильтрации по
алгоритму МНК
%Входные
параметры:
%
mu - размер шага сходимости
%
W0 - начальные значения вектора
коэффициентов фильтра (L x 1)
%
x - входной сигнал (M x 1)
%
d - желаемый сигнал (M x 1)
%
Выходные параметры:
%
W - матрица настройки (эволюции)
коэффициентов фильтра (L x (M+1))
%
dhat - выход адаптивного фильтра (M x 1)
%
e - ошибка адаптивного фильтра (M x 1) % L=length(W0); start_iter=1; end_iter=min([length(x),length(d)]); W=zeros(L,
end_iter); dhat=zeros(end_iter,1); e=zeros(end_iter,
1);
W(:,1:start_iter)=W0*ones(1,start_iter); X=
zeros(L,1);
for
n = start_iter:end_iter;
X(2:L)=X(1:L-1);
X(1)=x(n);
dhat(n)=X'*W(:,n);
e(n)=d(n)-dhat(n);
W(:,n+1)=W(:,n)+mu*e(n)*X;
end;
Рассмотрим ещё один пример адаптивной
фильтрации шумов с использованием
алгоритма МНК. Пусть полезный сигнал
является узкополосным, а шум –
широкополосным (см. рис. ниже)
В этом случае полезный гармонический
сигнал искажен широкополосным гауссовским
шумом n(n).Особенностью данной
задачи является то обстоятельство, что
нет источника для сигналаx(n),коррелированного с шумомn(n).Задача
может казаться неразрешимой для
использования адаптивного фильтра.
Однако её можно все-таки решить, если
в качестве сигнал x(n) использовать
задержанный на определенное число
тактов Δ=k/fs сигналd(n).Адаптивный фильтр с выходомy(n)в
этом случае используется как линейный
предсказывающий фильтр для задержанного
входного сигналаd(n).При этом
задержка Δ выбирается экспериментально,
с тем, чтобы обеспечить наилучшую
степень очистки полезного сигналаAcos(2πfn/fs
) от шума n(n).
Ниже приведен пример модели такой
задачи с использованием функции
fir_lms(). Скрипт- файл помещен в приложении
3.
В качестве полезного сигнала в задаче
используется гармонический сигнал
s=sin(2*pi*500*t) с частотой 500 Гц,
широкополосный шум генерируется
функцией n=randn(1,
length(t)). Экспериментально
подобрана задержка сигнала d(n)
на 7 тактов, реализуемая функцией
x=filter([0 0 0 0 0 0 0 1],
1, d). Если в качестве выходного сигнала
использовать сигнал на выходе сигнала
ошибки e(n),
то данный фильтр будет подавлять
низкочастотный сигнал и выделять
высокочастотную составляющую. Этот
можно видеть на
нижеследующей иллюстрации.
Подавление широкополосного шума с помощью адаптивного устройства предсказания
Адаптивный
КИХ -
фильтр
Z-Δ y(n)
x(n) e(n) d(n)=Acos(2πfn/fs)+n(n)
Выходной сигнал