%%程序说明 %%本程序对SVC获得数据进行处理,读入顺序按照文件名正序排序,求取某样本n条光谱的平均光谱,每个样本保存为一个文件 %读入sig文件,输出txt或xls文件,前n列为样本反射率光谱,第n+1列为平均反射率光谱 %注意:程序默认按照文件命名顺序每n条取平均,因此需要将不需要或无效的数据删除!! % 问题反馈: t_shuai@hotmail.com clc,clear %以下为需要设置参数 fpath='D:\SVC-2012-3-28\';%文件路径 sname='mineral'; %编号前缀,如veg,soil.rock,water fouttype='.xls'; %设置输出文件类型,xls或txt n=3; %样本光谱测量n条,n条取平均 num=1; %输出文件从1开始编号,可自行设置 %批处理 file=dir([fpath,'*.sig']); data=zeros(1024,n+1); %存放输出数组,前n列为样本光谱,第n+1列为平均光谱,SVC默认波段数为1024 for i=1:length(file) %依次打开文件 rfid=fopen([fpath,file(i).name]); count=0;d=[]; %读SVC数据到d while 1 tline = fgetl(rfid); count=count+1; if ~ischar(tline), break, end if count>=23 %SVC从23行开始写入光谱数据 t=str2num(tline); d=vertcat(d,t); end end %读光谱数据到data,读完一个样本时输出文件 if mod(i,n) ==0 %当读完一个样本n个文件的时候,每n条光谱求平均,并输出 data(:,n)=d(:,4);% the 4th column is reflectance data(:,n+1)=(sum(data(:,1:n)')/n)'; fileout=[fpath,sname,num2str(num),fouttype] fidout=fopen(fileout,'wt'); dlmwrite(fileout, data, 'delimiter', '\t', 'precision', 6, 'newline', 'pc') %fprintf(fidout,'%f\n',data);%输出格式不对 num=num+1; fclose(fidout); else %未读完一个样本,将d中的光谱数据读入data data(:,mod(i,n))=d(:,4);% the 4th column is reflectance end end