Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекции / Lektsia_3

.doc
Скачиваний:
165
Добавлен:
11.03.2016
Размер:
322.05 Кб
Скачать

Метод градиентного спуска

В предыдущей лекции рассматривалась задача проектирования оптимального фильтра Винера. При этом было получено выражение среднеквадратичной ошибки на выходе фильтра в виде

. (1)

Из него затем было выведено уравнение Винера – Хопфа для оптимальной импульсной характеристики фильтра . Как было показано в этой лекции, вычислительная сложность алгоритма Винера велика и имеет порядок O(N3), где N - длина фильтра.

Поэтому на практике вместо прямого вычисления широко используются менее сложные последовательные адаптивные алгоритмы, сходящиеся к фильтру Винера.

Напомним общую структуру адаптивного фильтра

Входной сигнал фильтра , его импульсная характеристика , выход фильтра

d(k)

Желаемый

сигнал

Входной

сигнал

Адаптивный фильтр

x(k)

Ошибка

e(k)

Σ

Адаптивный

алгоритм

Фильтр Винера

Наиболее простым и часто используемым из итеративных методов сходимости к минимуму функции является метод градиентного спуска (метод наискорейшего спуска).

Напоминание понятия градиента функции. Пусть задана функция нескольких переменных. Такую функцию в математике называют функцией точки J(H). В нашем случае – это функция среднеквадратичной ошибки , зависящая от значений коэффициентов фильтра (вектор H). Как было показано ранее, для задачи фильтрации она является нелинейной, а именно - квадратичной функцией коэффициентов. Выше на графике это отчетливо видно. Поверхностью (линией) уровня функции называют совокупность точек пространства, в которых эта функция имеет одинаковые значения (см. рис. выше). Производной функции J(H) по направлению линии называют предел отношения разности значений функции (J(H1)-J(H2)) в точках к величине направленного отрезка при стремлении точки H1 к H2 на прямой . В частности, производная функции J(H) по любому направлению касательной к линии уровня равна нулю, т.к. функция на этой линии не изменяется.

Градиентом функции J(H) в точке Н называется вектор

, (4)

состоящий из частных производных функции по каждой из её переменных в этой точке. Градиент определяет направление и скорость максимального (наискорейшего) роста функции.

Градиентный спуск – это метод нахождения локального минимума функции с помощью движения по направлению, противоположному направлению градиента (направление антиградиента), т.е. .

Рассмотрим простейший вариант градиентного метода для одномерного случая, т.е. для фильтра всего с одним весовым коэффициентом h. Вид функции ошибки для этого случая

Функция ошибки J(h) имеет квадратичный характер. Её минимальное значение Jmin достигается в т. h = hopt. Это значение ошибки для фильтра Винера. Предположим, что начальное (исходное) значение коэффициента есть h(k). Производная функции ошибки в этой точке положительная. Для уменьшения значения функции ошибки J(h) следующую точку h(k+1) следует выбрать по направлению касательной вниз

Направление градиента

h

Если этот подход обобщить, перейти к N - мерной функции ошибки фильтра с N коэффициентами и использовать градиент вместо производной, то мы получим следующее рекурсивное выражение для настройки коэффициентов фильтра градиентным методом наискорейшего спуска

. (5)

В заключение обсуждения этого метода приведем сам алгоритм наискорейшего спуска для решения задачи оптимальной фильтрации:

Задать начальные значения вектора коэффициентов фильтра H0

и определить АКФ сигнала и ВКФ

Далее вычислять для k = 0, 1, 2,……..

до достижения ошибки (6)

Здесь ε – погрешность приближения к Hopt.

Этот алгоритм требует O(N2) операций сложения и умножения, а не 0(N3), как обычный алгоритм Винера, т.к. исключается инверсия матрицы. Однако вычислительная сложность с порядком O(N2) все – таки достаточно большая. Поэтому на практике чаще применяется разновидность градиентного метода наискорейшего спуска, т.н. метод наименьших квадратов, характеризующийся вычислительной сложностью порядка O(N).

Пример. Рассмотрим пример использования алгоритма градиентного спуска в среде MATLAB.

При этом для упрощения примера и его наглядности будем предполагать простой фильтр второго порядка. Значение шага сходимости μ выберем в данном примере равным 0,01.

Автокорреляционную функцию (АКФ) сигнала возьмем в виде , взаимную корреляцию (ВКФ) .

Скрипт- файл

R_x=[1.1 0.5 ; 0.5 1.1]; % АКФ сигнала

P=[0.5721 ; -0.4458 ]; % ВКФ сигнала

H=[-1 ; 1]; % Начальные значения коэффициентов

mu=0.01; % Шаг сходимости

Ht=H;

% Цикл вычисления значений коэффициентов фильтра

% методом наискорейшего спуска

for k=1:1000 % число шагов

H=H+mu*(P-R_x*H);

Ht=[Ht H];

end

subplot(1,2,1)

plot( Ht(1,:)), grid

title('Коэффициент фильтра h0')

subplot(1,2,2)

plot( Ht(2,:)), grid

title('Коэффициент фильтра h1')

Из результатов видно, что по мере

увеличения числа шагов (итераций)

коэффициенты фильтра стремятся

к оптимальным значениям фильтра

Винера, равным соответственно

h0 = 0,8362, h1 = - 0,7854.

Коэффициенты фильтра

Желаемый сигнал

Алгоритм МНК – это статистическая аппроксимация алгоритма наискорейшего спуска.

Его основной особенностью является то, что используемая в градиенте среднеквадратичная ошибка в методе МНК для упрощения аппроксимируется (приближенно оценивается) мгновенным значением квадрата ошибки фильтра ek2. Т.е. на очередном шаге коррекции коэффициентов фильтра вместо истинного градиента используется его приближенная оценка по мгновенному значению квадрата ошибки, а не по усредненному значению

. (7)

Здесь - это вектор сигнала в момент времени k ( k -ый шаг)

При этом отдельный i - ый элемент вектора градиента (i = 0,1,…,N-1) приближенно определяется (оценивается) по выражению

. (8)

Подставляя оценку градиента в выражение градиентного метода коррекции коэффициентов фильтра на (k+1) - ом шаге

(9)

получаем выражение для коррекции коэффициентов методом наименьших квадратов (МНК)

(10)

Коэффициент 2 перед значением шага μ обычно опускают, т.к. значение μ выбирается.

В поэлементной форме

.

Приведем в заключение в кратком виде алгоритм метода наименьших квадратов.

Инициализировать начальные значения коэффициентов фильтра,

обычно принимается H[0]=0, т.е.

Для каждого отсчета входного сигнала вычислять (do)

конец (end)

Пример. Рассмотрим простейший пример использования процедуры МНК для фильтра (см. рис. выше) всего с двумя коэффициентами H=[h0 , h1]T и входными сигналами

Начальные значения коэффициентов фильтра примем равными нулю, т.е. ,

размер шага сходимости .

Вычислить выход фильтра на шаге k

Вычислить ошибку фильтра

Обновить коэффициенты фильтра

Приведем подробно вычисления по обновлению двух коэффициентов фильтра для нескольких отсчетов (шагов) входного сигнала.

Продолжая аналогичные вычисления, получим еще несколько итераций для коэффициентов и ошибки фильтра

Ниже на рис. представлен графики изменения коэффициентов фильтра (h0, h1) слева и справа ошибки фильтра e(k) от номера итерации k. Сходимость здесь происходит достаточно быстро.

Видно, что ошибка фильтра стремится к нулю, а значения коэффициентов фильтра H[ k] приближаются к значениям, определяемым из уравнения Винера – Хопфа .

h1

h0

Ниже на рис. представлены результаты вычислений для того же примера в среде MATLAB с помощью специальной функции fir_lms(), которая будет рассмотрена в следующей лекции.

Вычислительная сложность алгоритма МНК

Обратимся вновь к алгоритму МНК

Вычисление очередного значения выходного сигнала y(k) фильтра требует N операций умножения – сложения (операций MACs), а обновление коэффициентов фильтра H(k) - также N операций. Операцией вычисления ошибки можно пренебречь.

Таким образом, всего алгоритм МНК на каждой итерации k требует 2N операций MACs. Напомним, что вычислительная сложность фильтра Винера составляет О(N3), а градиентного алгоритма наискорейшего спуска – O(N2). По сравнению с этими алгоритмами МНК имеет наименьшую вычислительную сложность, её порядок O(N), т.е. на 2 порядка меньше, чем у фильтра Винера и на порядок меньше, чем в методе градиентного спуска. Поэтому алгоритм МНК может работать в реальном времени даже при скромных требованиях к процессору.

Пример модели фильтра МНК в среде MATLAB

Рассмотрим в среде MATLAB задачу фильтрации гармонического сигнала с шумом фильтром Винера и адаптивным фильтром с алгоритмом МНК. В среде MATLAB имеется несколько функций для адаптивной фильтрации методом МНК. Для реализации стандартного метода МНК предназначена функция adaptfilt.lms(). Её входным параметром является порядок фильтра.

Скрипт- файл

k=(1:1000)';

s=sin(0.08*pi*k); % полезный гармонический сигнал

f1=[1, 0.6]; % БИХ - фильтр для шума

n=0.9*randn(1000,1);

n1=filter(1,f1,n); % шум, суммируемый с полезным сигналом

x=s+n1; % желаемый сигнал

f2=[1, -0.5, 0.6, -0.2]; % КИХ - фильтр для шума

n2=filter(f2, 1, n); % вход адаптивного фильтра

N=8; % порядок фильтра

hlms = adaptfilt.lms(N); % получение параметров АД_фильтра МНК

[mumaxlms,mumaxmselms]= maxstep(hlms,x); % определение макс. шага сходимости

hlms.StepSize = mumaxmselms/10; % определение шага сходимости

[ylms, elms]=filter(hlms, n2, x); % фильтрация фильтром МНК

fwin=firwiener(N-1,n2,x); % % реализация фильтра Винера

ywin=filter(fwin,1,n2); % фильтрация фильтром Винера

ewin=x-ywin; % получение оценки полезного сигнала ф-ром Винера

% построение графиков сигналов

subplot(211),plot(k(1:400),x(1:400),k(1:400),s(1:400))

legend('Сигнал с шумом','Сигнал')

subplot(212),plot(k(1:400), ewin(1:400),k(:400),elms(1:400));

xlim([900,1000])

legend('Фильтр Винера','Фильтр МНК')

xlabel('Индекс времени (к)'), ylabel('Уровень сигнала')

Результаты работы программы, итерации с номерами 1-400. Порядок адаптивного КИХ – фильтра выбран равным 8.

Видно, что адаптивный МНК фильтр в этом случае сходится к фильтру Винера при k>150.

Имеет смысл проверка сходимости для меньших значений порядка фильтра, чем N = 8.

Сделайте это самостоятельно.

Соседние файлы в папке Лекции