Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Медведев В.С., Потемкин В.Г. Нейронные сети. MATLAB 6.doc
Скачиваний:
857
Добавлен:
07.03.2016
Размер:
15.55 Mб
Скачать

9.1.4. Моделирование нестационарного фильтра

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

Постановка задачи

Допустим, что на вход фильтра подается входной сигнал вида r(t) = sin(8sin(4t)*t), заданный массивом значений R с тактом квантования 0.005 с на интервале 6 с:

time1 = 0:0.005:4;

time2 = 4.005:0.005:6;

time = [time1 time2];

R = sin(sin(time*4).*time*8);

plot(time,R)

axis([0 6 –1.1 1.1]);

График этого сигнала показан на рис. 9.16.

Рис. 9.16

Нестационарный линейный фильтр описывается следующими рекуррентными соотношениями:

(9.3)

Этот фильтр может быть представлен в системе MATLAB следующим образом:

steps1 = length(time1);

[Y1,state] = filter([1 –0.5],1,R(1:steps1));

steps2 = length(time2);

Y2 = filter([0.9 –0.6],1,R((1:steps2) + steps1),state);

Y = [Y1 Y2];

plot(time,Y)

График сигнала на выходе этого фильтра показан на рис. 9.17.

Рис. 9.17

Определим такую обучающую последовательность: в качестве целевого выхода T примем массив Y, а входную последовательность P зададим на основе текущего и предшествующего значений входа R. Для использования алгоритмов адаптации представим обучающие последовательности в виде массивов ячеек:

T = con2seq(Y);

P = con2seq(R);

Инициализация сети

Сеть создается с помощью функции newlin, которая генерирует веса и смещение для линейного нейрона с двумя входами. На входе сети используется линия задержки на 1 такт; параметр скорости настройки принят равным 0.5.

lr = 0.5;

delays = [0 1];

net = newlin(minmax(cat(2,P{:})),1,delays,lr);

[net,a,e] = adapt(net,P,T);

Сформированная нейронная сеть имеет следующие весовые коэффициенты и смещение:

net.IW{1}, net.b

ans = 0.9 –0.6

ans = –3.14e–013

Нетрудно убедиться, что они соответствуют коэффициентам второго фильтра.

Проверка сети

Построим график погрешности сети (рис.9.18):

plot(time, cat(2,e{:}))

Рис. 9.18

Из анализа этого графика следует, что сети требуется 2.5 с для настройки на реакцию первого фильтра и немногим более 0.2 с для настройки на реакцию второго фильтра. Это объясняется тем, что фактические настройки параметров сети стационарны и соответствуют значениям параметров второго фильтра.

Читатель может обратиться к демонстрационному примеру applin4, где исследуется подобная задача.

9.2. Распознавание образов

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

Постановка задачи

Требуется создать нейронную сеть для распознавания 26 символов латинского алфавита. В качестве датчика предполагается использовать систему распознавания, которая выполняет оцифровку каждого символа, находящегося в поле зрения. В результате каждый символ будет представлен шаблоном размера 57. Например, символ A может быть представлен, как это показано на рис. 9.19,а и б.

а

б

0

0

1

0

0

0

1

0

1

0

0

1

0

1

0

1

0

0

0

1

1

1

1

1

1

1

0

0

0

1

1

0

0

0

1

Рис. 9.19

Однако система считывания символов обычно работает неидеально и отдельные элементы символов могут оказаться искаженными (рис. 9.20).

Рис. 9.20

Проектируемая нейронная сеть должна точно распознавать идеальные векторы входа и с максимальной точностью воспроизводить зашумленные векторы. М-функция prprob определяет 26 векторов входа, каждый из которых содержит 35 элементов, этот массив называется алфавитом. М-функция формирует выходные переменные alphabet и targets, которые определяют массивы алфавита и целевых векторов. Массив targets определяется как eye(26). Для того чтобы восстановить шаблон для i-й буквы алфавита, надо выполнить следующие операторы:

[alphabet, targets] = prprob;

ti = alphabet(:, i);

letter{i} = reshape(ti, 5, 7)';

letter{i}

Пример:

Определим шаблон для символа A, который является первым элементом алфавита:

[alphabet, targets] = prprob;

i = 2;

ti = alphabet(:, i);

letter{i} = reshape(ti, 5, 7)';

letter{i}

ans =

0 0 1 0 0

0 1 0 1 0

0 1 0 1 0

1 0 0 0 1

1 1 1 1 1

1 0 0 0 1

1 0 0 0 1