基于时间反向传播 (BPTT)递归神经网络实现非线性系统识别附matlab代码

简介: 基于时间反向传播 (BPTT)递归神经网络实现非线性系统识别附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法  神经网络预测雷达通信 无线传感器

信号处理图像处理路径规划元胞自动机无人机 电力系统

⛄ 内容介绍

基于时间反向传播 (BPTT)递归神经网络实现非线性系统识别附matlab完整代码

⛄ 完整代码

%% Non-Linear System Identification using Backpropagation Throught Time (BPTT)

clc;

clear all;

close all;


%% Training method

BPTT_type='Epochwise';

% BPTT_type='Truncated';


%% system configuration

ts=0.001;

if (strcmp(BPTT_type,'Epochwise'))

   a=20;

   eta = 0.001;    %%%%%% Learning Rate 0-1   eg .01, .05, .005

   t = 0:ts:a;

   l=length(t);

   u = square(pi*t);

else

   a=20;

   eta = 0.05;    %%%%%% Learning Rate 0-1   eg .01, .05, .005

   t = 0:ts:a;

   l=length(t);

   u = square(pi*t);

end


% u = awgn(u,30);

plant=[1 -0.25 0.1045 0.0902]; % Minimum Phase Plant

y(1:2)=0;


for i=3:length(t)

   ph=[y(i-1) y(i-2) cos(2*u(i))+exp(-10*abs(u(i))) u(i-1)];

   y(i)=ph*plant'+.001*randn(1,1);

end


%% RNN architecture


inp=6;  % Input Layer Neurons (2 nodes for u(i) and u(i-1), 2 for y(i-1) and y(i-2) for state 1 feedback + 1 bias

N1=3;   % Middle Layer Neurons

N2=1;   % Output Layer Neurons


window_length=3;

epoch=(length(t)-2)/window_length;


w1=ones(N1,inp);

w2=ones(N2,N1);


y_NN = 0.*y;


j=2;

a1=zeros(N1,length(t));

e = ones(window_length,1);


%% RNN configuration

for k=1:epoch


   for i=1:window_length

   j=j+1;    

       Input_Vec(:,i)=[-y_NN(j-1) -y_NN(j-2) u(j) u(j-1) a1(1,j-1) 1]';

       n1 = w1*Input_Vec(:,i);

       

       a1(:,j)=tansig(n1);    %%%% Hidden Layer Activation Function  % tansig for [-1,+1] % logsig for [0,1]

       

       n2 = w2*a1(:,j);

       

       a2=tansig(n2);    %%%% Output Layer Activation Function  

       

       y_NN(j) = a2;

       

       e(i) = y(j) - y_NN(j);

   

       if(strcmp(BPTT_type,'Epochwise'))

       %% Epochwise BBTT

       Y2(:,i) = 2*dtansig(n2,a2)*e(i); %%%% For Output Layer  Equation (15.40) for n=n1

       Y1(:,i) = diag(dtansig(n1,a1(:,j)),0)*[e + w2'*Y2(:,i)]; %%%% For Hidden Layer

       elseif(strcmp(BPTT_type,'Truncated'))

       %% Truncated BPTT

       Y2(:,i) = 2*dtansig(n2,a2)*e(i); %%%% For Output Layer

       Y1(:,i) = diag(dtansig(n1,a1(:,j)),0)*w2'*Y2(:,i); %%%% For Hidden Layer

       

   end

   end

   

   MSE(k) = mse(e);

   

       w1 = w1 + eta*Y1*Input_Vec';  % Equation (15.41) and (15.44)

       w2 = w2 + eta*Y2(:,i)*a1(:,j)';

%         w2 = w2 + eta*Y2*a1(:,j-i+1:j)';

       

end


for n=1:length(MSE)

MSE_trend(n)=mean(MSE(1:n));

end

10*log10(MSE_trend(n))


figure

semilogy(MSE);

hold on

semilogy(MSE_trend,'r')

title('Objective Function');


figure

plot(t,y,'r')

hold on

plot(t,y_NN,'b')



%% Testing

a=10;

ts=0.001;

t = 0:ts:a;

l=length(t);

u = square(pi*t);

u = awgn(u,30);

plant=[1 -0.25 0.1045 0.0902]; % Minimum Phase Plant

epoch=(length(t)-2)/window_length;


y=0;

y(1:2)=0;


for i=3:length(t)

   ph=[y(i-1) y(i-2) cos(2*u(i))+exp(-10*abs(u(i))) u(i-1)];

   y(i)=ph*plant';

end


y_NN = 0.*y;

j=2;

a1=zeros(N1,length(t));

for k=1:epoch

   for i=1:window_length

   j=j+1;    

       Input_Vec(:,i)=[-y_NN(j-1) -y_NN(j-2) u(j) u(j-1) a1(1,j-1) 1]';

       n1 = w1*Input_Vec(:,i);

       

       a1(:,j)=tansig(n1);    %%%% Hidden Layer Activation Function  % tansig for [-1,+1] % logsig for [0,1]

       

       n2 = w2*a1(:,j);

       

       a2=tansig(n2);    %%%% Output Layer Activation Function  

       

       y_NN(j) = a2;

       

       e(i) = y(j) - y_NN(j);

       

   end

   

   MSE(k) = mse(e);

   

end


for n=1:length(MSE)

MSE_trend(n)=mean(MSE(1:n));

end

10*log10(MSE_trend(n))


figure

semilogy(MSE);

hold on

semilogy(MSE_trend,'r')

title('Objective Function');


figure

plot(t,y,'m')

hold on

plot(t,y_NN,'b')

legend('Actual Output','RNN');

⛄ 运行结果

⛄ 参考文献

[1]TANG Meili, HU Qiong, MA Tinghuai. 基于循环神经网络的语音识别研究[J]. 现代电子技术, 2019, 42(14):5.

⛄ 完整代码

❤️部分理论引用网络文献,若有侵权联系博主删除
❤️ 关注我领取海量matlab电子书和数学建模资料


相关文章
|
4月前
|
机器学习/深度学习 传感器 算法
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
289 2
|
3月前
|
机器学习/深度学习 数据采集 存储
概率神经网络的分类预测--基于PNN的变压器故障诊断(Matlab代码实现)
概率神经网络的分类预测--基于PNN的变压器故障诊断(Matlab代码实现)
376 0
|
3月前
|
机器学习/深度学习 人工智能 算法
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
180 0
|
3月前
|
传感器 机器学习/深度学习 数据采集
【航空发动机寿命预测】基于SE-ResNet网络的发动机寿命预测,C-MAPSS航空发动机寿命预测研究(Matlab代码实现)
【航空发动机寿命预测】基于SE-ResNet网络的发动机寿命预测,C-MAPSS航空发动机寿命预测研究(Matlab代码实现)
276 0
|
3月前
|
机器学习/深度学习 算法 机器人
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
370 0
|
3月前
|
算法 定位技术 计算机视觉
【水下图像增强】基于波长补偿与去雾的水下图像增强研究(Matlab代码实现)
【水下图像增强】基于波长补偿与去雾的水下图像增强研究(Matlab代码实现)
166 0
|
3月前
|
算法 机器人 计算机视觉
【图像处理】水下图像增强的颜色平衡与融合技术研究(Matlab代码实现)
【图像处理】水下图像增强的颜色平衡与融合技术研究(Matlab代码实现)
138 0
|
3月前
|
新能源 Java Go
【EI复现】参与调峰的储能系统配置方案及经济性分析(Matlab代码实现)
【EI复现】参与调峰的储能系统配置方案及经济性分析(Matlab代码实现)
144 0
|
3月前
|
机器学习/深度学习 算法 机器人
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
199 8
|
3月前
|
机器学习/深度学习 编解码 算法
基于OFDM技术的水下声学通信多径信道图像传输研究(Matlab代码实现)
基于OFDM技术的水下声学通信多径信道图像传输研究(Matlab代码实现)
215 8

热门文章

最新文章