www.gusucode.com > 时间序列神经网络matlab源码程序 > code/net_1.m

    clear all;
close all;
clc;
%clf;%清除图像
%figure(gcf)
%    NEWFF   - Inititializes feed-forward networks.
%    TRAINGDX - Trains a feed-forward network with faster backpropagation.
%    SIM   - Simulates feed-forward networks.

%    CHARACTER RECOGNITION:
%    Using the above functions a feed-forward network is trained
%    to recognize character bit maps, in the presence of noise.

%    DEFINING THE MODEL PROBLEM
%    ==========================

load 'jam_pos_wave.mat';% jam_pos jam_num ori_sig %干扰位置    干扰个数     原始信号
%load ideal_sig;%???????
%jam_num=1;
figure;
plot(1:256,real(ori_sig));
title('需要预测的受干干扰信号。其中第19-27个点,89-74个点受到干扰,我想用没受到干扰的数据预测出19-27,89-74这两段的正常数据')
load yuanshi;
figure;
plot(1:256,real(yuanshi));
title('共参考的正常数据。即ori_sig恢复完的数据跟yuanshi越逼近越好')
% jam_pos(2,1)=29;
% jam_pos(2,2)=84;
%abs_sig = real(ori_sig);%受干扰的原始信号实部
abs_sig = ori_sig;%受雷电干扰的数据
deltaX = 2;%????????
Dd = 0;%?????????? 干扰长度的最大值
N = length(abs_sig);
tt =[];%?????????
% 判断最长的那个干扰的长度
for i=1:jam_num
    temp = jam_pos(2,i)-jam_pos(1,i)+1;%干扰长度
    if (temp > Dd)
        Dd = temp;
    end
end         
% 构造样本 Ntemp滚动多少次   Pend从哪里开始滚动     time取干扰程度的时间段
alphabet=[];%时间
targets=[];%样本值
for i=1:jam_num+1
    if (i == jam_num+1)
        Ntemp = N - jam_pos(2,jam_num) - Dd - deltaX;%Ntemp是看到底取多少组滚动序列
    elseif (i == 1)
        Ntemp = jam_pos(1,i) - Dd - deltaX;
    else
        Ntemp = jam_pos(1,i) - jam_pos(2,i-1) - Dd - deltaX;
    end
    
    if (i == 1)
        Pend = 1;
    else
        %Pend = jam_pos(2,i-1);这里改成
         Pend = jam_pos(2,i-1)+deltaX;      
    end
    
    for nn = 0:Ntemp-1
        time = (Pend:Dd+Pend-1)+nn;%构造Dd长度的滚动序列,关键是nn起作用。滚动序列从哪里开始由Pend决定
        alphabet=[alphabet time'];
        targets=[targets abs_sig(time)'];
    end
end

[R,Q] = size(alphabet);
[S2,Q] = size(targets);

% 进行网络训练
%    DEFINING THE NETWORK
%    ====================
%    The character recognition network will have 25 TANSIG
%    neurons in its hidden layer.
S1 = 1;
net = newff(minmax(alphabet),[S1 S2],{'logsig' 'logsig'},'traingdx');
net.LW{2,1} = net.LW{2,1}*0.01;%权值和阈值
net.b{2} = net.b{2}*0.01;%输出层阈值

%    TRAINING THE NETWORK WITHOUT NOISE
%    ==================================
net.performFcn = 'sse';        % Sum-Squared Error performance function
net.trainParam.goal = 0.1;     % Sum-squared error goal.误差设定
net.trainParam.show = 20;      % Frequency of progress displays (in epochs).%每20次显示一次训练过程?
net.trainParam.epochs = 5000;  % Maximum number of epochs to train.训练次数
net.trainParam.mc = 0.95;      % Momentum constant.

P = alphabet;
T = targets;
[net,tr] = train(net,P,T);


% 进行结果预测
P = [];
time2 = [];
time1 = [];
for i=1:jam_num
    temp = jam_pos(2,i)-jam_pos(1,i)+1;
    if (Dd == temp)
        time = (jam_pos(1,i) : jam_pos(2,i))';
    else
        time = (jam_pos(1,i)- (Dd - temp - deltaX) : jam_pos(2,i) + deltaX)';
    end
    time1 = [time1 time];
    if (i==1)
        time2 = [time2 time + 30];
    else
        time2 = [time2 time - 30];
    end
    P=[P time];
end
A = sim(net,P);
for i=1:size(A,2)
    %abs_sig(time1(:,i)) = abs_sig(time2(:,i));
    abs_sig(time1(:,i)) = A(:,i);
end
% figure
% plot(abs(abs_sig-real(ideal_sig)));
% title('预测完后整个时间序列与理想时间序列的误差');
% xlabel('时刻');
% ylabel('幅值误差');

figure
plot(1:256,abs_sig,'r');
title('预测后的信号波形图');
xlabel('时刻');
ylabel('幅值');
hold on;
%figure;
plot(1:256,yuanshi);

figure
plot(abs(abs_sig)-abs(yuanshi));
title('预测完后整个时间序列与理想时间序列的误差');
xlabel('时刻');
ylabel('幅值误差');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% figure;
% Z888=abs_sig;
%Swp1=1:TotalSweeps/2;
%save duopule3 Z888