⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bp_dl_ev_4psk.m

📁 BP神经网络对2ask,2fsk,4fsk,2psk,4psk,gmsk六种信号的学习和训练。
💻 M
字号:
%动量校正BP算法
clear
%网络说明
%输入模式向量矩阵p;
%希望输出向量矩阵t;
%中间层各单元输入激活值向量S
%中间层各单元输出向量B;
%输出层各单元输入激活值向量L;
%输出实际值向量C;
%输入层至中间层的连接权W
%中间层至输出层的连接权V
%中间层各单元的阀值F1
%输出层各单元的阀值F2
%输入层数目为n1,中间层数目为n2,输出层数目为n3;
%输出层,隐含层的学习速率分别为a,b
%训练模式个数为m=7;

%%-----取20组样本的均值作为训练样本的输入------------
load('d:\lcy\AMR\design-programme-regulator\DWNN\data\learn-data-5-24f42pg-20av.mat','ppp1')

p=ppp1';

t=[0 0 0 1 1;
   0 1 1 0 0;
   1 0 1 0 1];
n1=5;
n3=3;
m=5;
%设置训练参数:学习速率a,b;隐含层神经元数目n2;
a=input('请输入学习速率:')
b=a
n2=input('请输入隐含层神经元个数n2:')
%---------------------------------------------------
%对神经元网络进行初始化
N=10;
S=rand(n2,1)/N;
B=rand(n2,1)/N;
L=rand(n3,1)/N;
C=rand(n3,1)/N;
W=rand(n2,n1)/N;
V=rand(n3,n2)/N;
F1=rand(n2,1)/N;
F2=rand(n3,1)/N;
sse=0;      %设定全局误差清零
qwsse=0.001;  %设定期望全局误差
epoch_max=20000; %设定训练最大次数
%-----------------------------------------------------
%训练网络

ddV=0;ddW=0;
for epoch=1:epoch_max
     sse=0;
     %-------------------输入模式顺传播
    for g=1:m
        S=W*p(:,g)-F1;      %中间层激活值
        B=1./(1+exp(-S));   %中间层输出值
        L=V*B-F2;           %输出层激活值
        C=1./(1+exp(-L));   %实际输出值
        %-------------------%输出误差逆传播
        d3=(t(:,g)-C).*C.*(1-C);%第三层误差
        d2=(V'*d3).*B.*(1-B);     %第二层误差
        dV=d3*B';
        V=V+a*dV+(1-a)*ddV;             %第三层权值阀值校正
        F2=F2+a*d3;
        dW=d2*p(:,g)'; 
        W=W+b*dW+(1-b)*ddW;          %第二层权值阀值校正
        F1=F1+b*d2;
        ddV=dV;ddW=dW;

        sse=sse+0.5*sum((t(:,g)-C).^2);%计算全局误差

    end
    SSE(epoch)=sse;
     if  (sse>qwsse&epoch<epoch_max)
         epoch=epoch+1;
%          epoch
%          sse
     end
    if sse<qwsse
%         epoch
%         sse
        break
    end
end

epoch
sse

%训练结束
%画全局误差曲线
x=1:1:epoch;
plot(x,SSE,'y--')
title('4FSK.2PSK.DQPSK.GMSK,16QAM,a=b=0.8,Emin=0.001')
xlabel('epochs')
ylabel('SSE')
hold on

%------------------------------------------------------------
% 进行性能评估:

% 设每种调制方式400个样本,其特征值向量构成的输入矩阵ppp为一个5行400列的矩阵。
% 特征向量矩阵从各个数据文件中加载。
load('d:\lcy\AMR\design-programme-regulator\DWNN\data\data-10-1-4psk.mat','ppp');

ppp=ppp' ;

enum=0;
for i=1:400    
  pp=ppp(:,i);
    if size(pp)~=[5,1]
       disp('错误输入量,请重新输入')
   else S=W*pp-F1;         %中间层激活值
        B=1./(1+exp(-S));   %中间层输出值
        L=V*B-F2;           %输出层激活值
        %disp('实际输出值')
        C=1./(1+exp(-L)) ;    
        for j=1:3
%            if C(j)>0.9
%            if C(j)>0.99
%            if C(j)>0.999
           if C(j)>0.5
              C(j)=1;
           end
%            if C(j)<0.1
%            if C(j)<0.01
%            if C(j)<0.001
           if C(j)<0.5
               C(j)=0;
           end
           CC(j)=C(j);
       end
       cc_record(i,:)=CC;
   end
   if CC==[0 1 1]
       enum=enum+1;
   end
end

disp('BP神经网络的正确识别率为:')
enum/400

%程序运行完毕

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -