基于时间反向传播 (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电子书和数学建模资料

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

matlab科研助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值