📄 matlab elman神经网络作振幅检测.txt
字号:
Elman神经网络作振幅检测2007/06/03 00:24 Elman神经网络能在有限时间内以任意精度逼近任意函数,它可以存储信息以备未来使用,所以它不仅能够学习空域模式,也能学习时域模式。我们利用这一点,进行振幅检测,也就是对时域模式进行识别,然后按空域模式对其进行分类。振幅检测需要在一段时间里对网络提供一个波形,这样网络就会输出这个波形的振幅。
%定义输入信号及目标信号,即定义两个波形函数
Time=1:80;
p1=sin(1:20);
p2=sin(1:20)*2;
t1=ones(1,20);
t2=ones(1,20)*2;
%使得每个波形出现两次,使用这个组合后的延长了的波形信号来训练网络
p=[p1 p2 p1 p2];
t=[t1 t2 t1 t2];
%我们需要的是序列信号,故把矩阵信号都转化
Pseq=con2seq(p);
Tseq=con2seq(t);
%绘出输入信号及目标信号曲线
figure;
plot(Time,cat(2,Pseq{:}),'--',Time,cat(2,Tseq{:}));
xlabel('时间');
ylabel('输入及目标');
title('输入信号及目标信号');
%本问题需要网络检测一个单输入值(即输入波形信号),并且在每个时间步长上输出一个单值信号(即振幅)
%因此网络需要一个输入元件和一个输出神经元
R=1; % 一个输入元件
S2=1; % 第二层一个输出神经元
S1=10;% 在第一层中包含10个递归神经元单元
%使用traingdx函数作为学习速率,它能根据梯度下降的情况,以及自适应学习的速率来调整权重和阀值
net=newelm([-2 2],[S1 S2],{'tansig','purelin'},'traingdx');
%训练网络
net.trainParam.epochs = 500; %设置训练时间为500个时间单位
[net,tr]=train(net,Pseq,Tseq);
%开始测试网络性能
a = sim(net,Pseq);
%绘出输出信号及目标信号曲线
figure;
plot(Time,cat(2,a{:}),Time,cat(2,Tseq{:}),'--');
xlabel('时间');
ylabel('输出及目标');
title('输出信号及目标信号');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -