matlab小波神经网络测距程序
时间: 2023-06-23 22:08:05 浏览: 107
这里提供一份使用小波神经网络实现测距的MATLAB程序,供参考:
```matlab
clc;
clear all;
close all;
inputdata=xlsread('data.xlsx','Sheet1'); % 从Excel文件中读入输入数据
outputdata=xlsread('data.xlsx','Sheet2'); % 从Excel文件中读入输出数据
[inputrow,inputcol]=size(inputdata);
[outputrow,outputcol]=size(outputdata);
traininput=inputdata(1:inputrow/2,:);
trainoutput=outputdata(1:outputrow/2,:);
testinput=inputdata(inputrow/2+1:end,:);
testoutput=outputdata(outputrow/2+1:end,:);
%% 小波变换
[TrainInput,PS] = mapminmax(traininput'); % 对输入数据进行归一化处理
for i=1:size(traininput,2)
TrainInput(i,:) = wden(TrainInput(i,:),'minimaxi','s','one',4,'sym8'); % 对输入数据进行小波变换
end
TrainInput = TrainInput';
[TestInput,PS1] = mapminmax(testinput'); % 对测试数据进行归一化处理
for i=1:size(testinput,2)
TestInput(i,:) = wden(TestInput(i,:),'minimaxi','s','one',4,'sym8'); % 对测试数据进行小波变换
end
TestInput = TestInput';
%% 神经网络训练
net=newff(TrainInput',trainoutput',20,{'tansig','tansig','purelin'},'trainlm','learngdm','mse'); % 创建小波神经网络
net.trainParam.show=10;
net.trainParam.lr=0.1;
net.trainParam.epochs=1000;
net.trainParam.goal=0.001;
[net,tr]=train(net,TrainInput',trainoutput'); % 训练网络
%% 测试网络
PredictOutput=sim(net,TestInput'); % 使用测试数据测试网络
PredictOutput=mapminmax('reverse',PredictOutput,PS1); % 对输出数据进行反归一化处理
%% 误差分析
figure(1);
plot(1:size(testoutput,1),testoutput,'r',1:size(PredictOutput,1),PredictOutput,'b');
legend('真实值','预测值');
title('小波神经网络测距结果对比');
ylabel('距离/m');
xlabel('测试数据序号');
err=abs(testoutput'-PredictOutput)./testoutput'; % 计算相对误差
MAPE=mean(err)*100 % 计算平均相对误差
```
需要注意的是,这里使用了Excel文件作为输入数据的存储格式,需要首先在MATLAB中将数据读入内存中。此外,需要使用Wavelet Toolbox中的小波变换函数`wden`对输入数据进行小波变换,以提高神经网络的性能。最后,可以使用相对误差(MAPE)对测距结果进行评估。
阅读全文