气体识别的matlab程序,BP神经网络用于气体浓度检测

本帖最后由 zh190588 于 2013-8-7 18:41 编辑

想用神经网络测量气体浓度。但是训练出的网络误差很大。调整过隐含层节点数,没有效果。训练过很多次,误差最小的也在50%以上,误差大的都到1000%了。本人刚学神经网络,不知是不是参数设置的问题。请大侠指点!

下面贴出训练代码和仿真代码。其中输入数据和目标输出数据引用自别人的论文。论文运用神经得出的结果,误差10%以下(大概,具体多少忘了)。

训练代码:

ptrain=[0.889 10151 0.599;2.071 2.429 0.811;2.544 2.889 0.892;2.929 3.247 0.962;0.35  0.561 0.9  ;...

1.652 2.194 1.388;2.233 2.788 1.54 ;2.708 3.231 1.663;3.087 3.56  1.768;0.376 0.65  1.315;...

1.052 1.604 1.685;1.738 2.404 1.923;2.328 2.994 2.099;2.803 3.419 2.239;3.177 3.726 2.355;...

0.396 0.721 1.676;1.098 1.737 2.089;1.8   2.553 2.344;2.87  3.545 2.669;3.24  3.837 2.785;...

0.412 0.78  1.986;1.134 1.844 2.42 ;2.449 3.243 2.859;2.922 3.639 2.998;3.288 3.917 3.108;...

0.425 0.831 2.253;1.165 1.933 2.693;1.89  2.763 2.947;2.964 3.713 3.254;3.327 3.98  3.358 ]'; %输入

ttrain =[100 0 ;300

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
module KEY(CLK, RESET, ADD, MINUS, KEY_IN, SIGN, HOUR_EN, MINUTE_EN, SECOND_EN, KEY_OUT ); //输入输出信号 input CLK; input RESET; input [3:0]KEY_IN; input [1:0]SIGN; output reg ADD; output reg MINUS; output reg HOUR_EN; output reg MINUTE_EN; output reg SECOND_EN; output reg[3:0]KEY_OUT; //寄存器定义 reg [19:0]CNT; wire [3:0]KEY_SCAN; wire [3:0]KEY_LOW; reg [3:0]KEY_SAMP; reg [3:0]KEY_SAMP_R; reg [3:0]KEY_RST; reg [3:0]KEY_RST_R; //逻辑部分 always@(posedge CLK or negedge RESET) begin if(!RESET) KEY_SAMP<=4'b1111; else KEY_SAMP<=KEY_IN; end always@(posedge CLK or negedge RESET) begin if(!RESET) KEY_SAMP_R<=4'b1111; else KEY_SAMP_R<=KEY_SAMP; end assign KEY_SCAN=KEY_SAMP_R&(~KEY_SAMP); always@(posedge CLK or negedge RESET) begin if(!RESET) CNT<=20'h0; else if(KEY_SCAN) CNT<=20'h0; else CNT<=CNT+1'b1; end always@(posedge CLK or negedge RESET) begin if(!RESET) KEY_RST<=4'b1111; else if(CNT==20'hfffff) KEY_RST<=KEY_IN; end always@(posedge CLK or negedge RESET) begin if(!RESET) KEY_RST_R<=2'b11; else KEY_RST_R<=KEY_RST; end assign KEY_LOW=KEY_RST_R&(~KEY_RST); always@(posedge CLK or negedge RESET) begin if(!RESET) begin KEY_OUT<=4'b0000; ADD<=1'b1; MINUS<=1'b1; HOUR_EN<=1'b1; SECOND_EN<=1'b1; MINUTE_EN<=1'b1; end else case (KEY_LOW) 4'b0001: begin if(SIGN==2'b00) KEY_OUT<=4'b0011; else if(SIGN==2'b01) KEY_OUT<=4'b0111; else if(SIGN==2'b10) KEY_OUT<=4'b1011; else if(SIGN==2'b11) KEY_OUT<=4'b0000; end 4'b0010: begin if(SIGN==2'b11) begin if(ADD==1'b1) ADD<=1'b0; else ADD<=1'b1; end else KEY_OUT<=KEY_OUT+1'b1; end 4'b0100: begin if(SIGN==2'b11) MINUS<=!MINUS; else KEY_OUT<=KEY_OUT-1'b1; end 4'b1000: begin if(SIGN==2'b11) begin if({HOUR_EN ,SECOND_EN,MINUTE_EN}==3'b111) begin HOUR_EN<=1'b1;MINUTE_EN<=1'b1;SECOND_EN<=1'b0; end else if(SECOND_EN==1'b0) begin HOUR_EN<=1'b1;MINUTE_EN<=1'b0;SECOND_EN<=1'b1; end else if(MINUTE_EN==1'b0) begin HOUR_EN<=1'b0;MINUTE_EN<=1'b1;SECOND_EN<=1'b1; end else if(HOUR_EN==1'b0) begin HOUR_EN<=1'b1;SECOND_EN<=1'b1;MINUTE_EN<=1'b1; end end else begin HOUR_EN<=1'b1;SECOND_EN<=1'b1;MINUTE_EN<=1'b1; end end default; endcase end endmodule

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值