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

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,182元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
简介: 基于时间反向传播 (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电子书和数学建模资料


相关文章
|
9天前
|
算法 计算机视觉
【MPDR & SMI】失配广义夹角随输入信噪比变化趋势、输出信干噪比随输入信噪比变化趋势研究(Matlab代码实现)
【MPDR & SMI】失配广义夹角随输入信噪比变化趋势、输出信干噪比随输入信噪比变化趋势研究(Matlab代码实现)
|
9天前
|
编解码 人工智能 算法
【采用BPSK或GMSK的Turbo码】MSK、GMSK调制二比特差分解调、turbo+BPSK、turbo+GMSK研究(Matlab代码实现)
【采用BPSK或GMSK的Turbo码】MSK、GMSK调制二比特差分解调、turbo+BPSK、turbo+GMSK研究(Matlab代码实现)
|
9天前
|
机器学习/深度学习 编解码 并行计算
【改进引导滤波器】各向异性引导滤波器,利用加权平均来实现最大扩散,同时保持图像中的强边缘,实现强各向异性滤波,同时保持原始引导滤波器的低低计算成本(Matlab代码实现)
【改进引导滤波器】各向异性引导滤波器,利用加权平均来实现最大扩散,同时保持图像中的强边缘,实现强各向异性滤波,同时保持原始引导滤波器的低低计算成本(Matlab代码实现)
|
9天前
|
机器学习/深度学习 传感器 边缘计算
【故障诊断】基于时滞反馈随机共振的增强型旋转电机故障诊断(Matlab代码实现)
【故障诊断】基于时滞反馈随机共振的增强型旋转电机故障诊断(Matlab代码实现)
|
8天前
|
存储 编解码 算法
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
|
9天前
|
传感器 机器学习/深度学习 算法
【UASNs、AUV】无人机自主水下传感网络中遗传算法的路径规划问题研究(Matlab代码实现)
【UASNs、AUV】无人机自主水下传感网络中遗传算法的路径规划问题研究(Matlab代码实现)
|
9天前
|
运维 算法
【故障诊断】基于最小熵反卷积、最大相关峰度反卷积和最大二阶环平稳盲反卷积等盲反卷积方法在机械故障诊断中的应用研究(Matlab代码实现)
【故障诊断】基于最小熵反卷积、最大相关峰度反卷积和最大二阶环平稳盲反卷积等盲反卷积方法在机械故障诊断中的应用研究(Matlab代码实现)
|
8天前
|
机器学习/深度学习 传感器 算法
【高创新】基于优化的自适应差分导纳算法的改进最大功率点跟踪研究(Matlab代码实现)
【高创新】基于优化的自适应差分导纳算法的改进最大功率点跟踪研究(Matlab代码实现)
87 14
|
8天前
|
机器学习/深度学习 算法
【概率Copula分类器】实现d维阿基米德Copula相关的函数、HACs相关的函数研究(Matlab代码实现)
【概率Copula分类器】实现d维阿基米德Copula相关的函数、HACs相关的函数研究(Matlab代码实现)
|
8天前
|
机器学习/深度学习 传感器 算法
【裂纹检测】检测和标记图片中的裂缝(Matlab代码实现)
【裂纹检测】检测和标记图片中的裂缝(Matlab代码实现)

热门文章

最新文章