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