前言:
在处理光谱数据时由于外界因素影响测量光谱的稳定性,为了获得更精准和较好的数据,我们需要对光谱数据取平均,本脚本就可实现对光谱数据每隔K列取一次平均。
请注意输入的文件里的数据列数要能被你输入的数字整除才能出结果。
(不需要修改代码,运行以后只需要按照弹出的界面输入值就好了,不过对文件格式有要求只能读xls和csv)
输入的格式入下:第一行是标签,第一列是波数 程序自动跳过第一行第一列进行数据读取

下面附上使用说明:
步骤1:选择需要每隔多少列取平均 如5列取一个平均

步骤2:选择需要取平均的文档

步骤3:选择保存的路径和文件名

取平均后的数据,第一行第一列默认空出自行添加标签和波数

k=cell2mat(inputdlg('请输入需要进行几点平均'))%输入K值需要对光谱多少列取平均
k=str2double(k)%将k由文本类型转为数字类型
[inputfile,PathName] = uigetfile({'*.*';'*.xls';'*.csv';'*.csv'},'选择目标文件夹')
%获取输入文件的路径
Nameall=strcat(PathName,inputfile)%将路径和文件名拼接
Position=strfind(Nameall,'.xls'); %判断文件是不是xls文件
Filetype=isempty(Position); %判断文件是不是xls文件
if Filetype==1
data=csvread(Nameall,1,1); %读取csv文件去掉第一行第一列的标签和波数
else
[num,txt,raw] = xlsread(Nameall)%读取xls文件
[m1,n1]=size(num)
data=num(2:m1,2:n1)
end
[m,n]=size(data); %获取表格形状
if mod(n,k)~=0% 判断表格中光谱数目是否能被整除
disp('请确认输入的数据是否可被整除 ')
end
sum1=zeros(m,n/k)*nan;%提前构建一个空矩阵加快运算速度
B=zeros(m,1)*nan;%提前构建一个空矩阵加快运算速度
for i=1:(n/k)%(光谱总数)除以(平均点数)判断循环迭代次数
j=1;
while j-1~=k
if j==1
sum1(:,i)=data(:,j+(i-1)*k);%第一列的值
j=j+1;
else
B=data(:,j+(i-1)*k);
sum1(:,i)=sum1(:,i)+B;%每K列的和
j=j+1;
end
end
end
result=sum1/k;%对求和后的光谱K点平均后的值
[filename, pathname] = uiputfile(...
{'*.xlsx';'*.xls';'*.csv';'*.*'},...
'select Savepath and name');
output_file=strcat(pathname,filename)%选择结果保存形式和保存路径
xlswrite(output_file,result,'sheet1','B2')
代码已使用在毕业论文中,仅供使用。
1462

被折叠的 条评论
为什么被折叠?



