使用matlab对光谱数据取平均

前言:
在处理光谱数据时由于外界因素影响测量光谱的稳定性,为了获得更精准和较好的数据,我们需要对光谱数据取平均,本脚本就可实现对光谱数据每隔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')

代码已使用在毕业论文中,仅供使用。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值