Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Литература / Потемкин В.Г. MATLAB 6.doc
Скачиваний:
5
Добавлен:
07.09.2025
Размер:
15.55 Mб
Скачать

Синтез сети

Поскольку сигнал стационарный и соотношения между прошлыми и будущими значениями остаются неизменными, можно воспользоваться линейной моделью нейронной сети, рассчитывая веса на основе прямого решения системы линейных уравнений. Такой подход реализует М-функция newlind. Она вычисляет веса и смещение, которые минимизируют среднеквадратичную ошибку предсказания, которые зависят от длины обучающей последовательности Q1. Сеть для решения этой задачи должна состоять из одного нейрона с пятью входами (рис. 9.2).

net = newlind(P1,T1);

Рис. 9.2

Графики зависимостей значений весовых коэффициентов wi и смещения b показаны на рис. 9.3, а и б соответственно.

а

б

Рис. 9.3

Значения этих величин стабилизируются после 0.5 с, когда исчерпывается 1 период синусоиды.

На рис. 9.4 представлена зависимость среднеквадратичной ошибки, которая характеризует погрешность экстраполяции в зависимости от длины обучающей последовательности.

Рис. 9.4

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

Выполним проверку сети, используя входную последовательность обучающего подмножества и сравнивая выход сети с фактическим значением сигнала T (рис. 9.5):

Q1 = 40;

a = sim(net,P1(:,1:Q1));

t1 = 6:Q1+5;

plot(time(t1),a,'*r', time(1:Q1+5),T(1,1:Q1+5))

xlabel('Time, c');

Рис. 9.5

Как следует из анализа этого рисунка, нейронная сеть достаточно точно отслеживает входной сигнал.

Теперь проверим работу сети, используя контрольное множество T2. Определим длину входной последовательности N1, равную 20, и построим график реакции сети (рис. 9.6):

N1 = 20;

Tt = T2(1,1:N1);

P2(1,:) = Tt(1,:);

P2(2,2:end) = Tt(1,1:end–1);

P2(3,3:end) = Tt(1,1:end–2);

P2(4,4:end) = Tt(1,1:end–3);

P2(5,5:end) = Tt(1,1:end–4);

a = sim(net,P2);

figure(3), clf

h1 = plot(time(1:size(P2, 2)–5), a(1:end–5), '*'); hold on

h2 = plot(time(1:size(P2, 2)–5), Tt(6:end), 'r');

Рис. 9.6

Вычислим погрешность сети, используя информацию из описания графических объектов Line с дескрипторами h1 и h2:

y1 = get(h1,'YData'); y2 = get(h2,'YData');

minlength = min(length(y1), length(y2));

e = y1(1:minlength) – y2(1:minlength);

nre = sqrt(mse(e));

График погрешности экстраполяции в функции от длины обучающего сигнала и в зависимости от количества точек экстраполяции в качестве параметра показан на рис. 9.7.

Рис. 9.7

Из анализа этого графика следует, что при малом числе экстраполируемых точек 6, 8 и длительности обучающей последовательности более 0.1 с погрешности малы. С ростом числа экстраполируемых точек 10, 20, 30 требуется большая длина обучающей последовательности, и при длине, превышающей 20 тактов (0.5 с), погрешность не зависит от числа точек экстраполяции и монотонно убывает с увеличением длины обучающего множества.

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

9.1.2. Слежение за нестационарным сигналом

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

Задана дискретная выборка T из гармонического сигнала длительностью 6 с, частота которого удваивается по истечении 4 с. Частота квантования для интервала времени от 0 до 4 с составляет 20 Гц, а для интервала от 4.05 до 6 с – 40 Гц.

time1 = 0:0.05:4;

time2 = 4.05:0.025:6;

time = [time1 time2];

T = [sin(time1*4*pi) sin(time2*8*pi)];

Поскольку при синтезе сети будут использоваться адаптивные алгоритмы настройки, сформируем обучающую последовательность {P, T} в виде массива ячеек, при этом последовательность входов Р должна совпадать с последовательностью целевых выходов Т, поскольку рассматривается задача слежения:

T = con2seq(T);

P = T;

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

График гармонического сигнала показан на рис. 9.8.

Рис. 9.8

Для решения поставленной задачи используется однослойная линейная сеть, которая предсказывает текущее значение сигнала по пяти предшествующим значениям.