写在前面的,软件不太强大,每次保存都需要生成rec和dark的文件,在处理是只需要一个就行了,所有网上查看了下运用批处理的命令去掉多余的文件:

解决办法:windows命令模式下CMD进入文件的目录,输入命令:del /q *rec*.csv(*rec*就是需要删除的包含rec的文件)

昨天下午搞了一个下午的数据提取,想过了用多种方法包括java,delphi等,最后还是想到用Matlab比较方便,选对工具真的很重要啊

我的数据格式:有多个csv文件,对我有用的只有B15:B270的数据,如何提取,看下面代码:

wave = csvread('.\dark\dark.csv',,,[,,,]);%看参数,具体参数的功能参考相应的Matlab书籍
dark =csvread('.\dark\dark.csv',,,[,,,]);%获取背景参数,当前目录的下级目录
ref = csvread('.\ref\ref.csv',,,[,,,]);%获取参比
B = ref-dark;
files = dir('*.csv');%获取当前目录的文件数,注意读取的是csv文件
l = length(files);
C = [];
for i = :l
filename = files(i).name;%获得文件名
A=csvread(filename,,,[,,,]);%读入指定列的数据,详细参数功能参考对应的代码
D = B./(A-dark);%矩阵对应的数相除
C = [C D];%矩阵列合并
end
E = [wave log10(C)];
%dlmwrite('result.txt',C,'delimiter','\t');%以文本的形式输出,注意指定精确度'precision','%f32'
xlswrite('result.xlsx',E,'Sheet1');%xls的形式输出
msgbox(['complete! ' num2str(l) ' xls files.']);

后来跑数据不好,分析原因是没有去三次的平均值,我是每一个位置光谱扫了三次,但是对应的化学只有一个值(一开始我的办法是三次都是取同一个化学值,但是这样的做法是不对的),所有在原有的基础上,每隔3列取一次平均值,算法如下(代码比较简单):

A = xlsread('result.xlsx','Sheet1','B3:PE258');
[m,n]=size(A);
B=[];
for i=::n%第二个参数是步长
temp = A(:,i-:i);
C = mean(temp,);
B=[B C];
end
xlswrite('mean_3.xlsx',B,'Sheet1');%xls的形式输出
msgbox(['complete! ']);

以上就提取完成了,但是化学值是必须自己手动写的,那个真叫一个辛苦,420个数据还好吗,真的还好吗?

方法是通用的,以后读取xls的文件可以对应的用xlsread和xlswrite方法来写,类似能读的文本还有txt、dat......

关于常见的光谱数据的处理,对于同一个点的三次的取平均值的matlab的算法:

B=[];%产生一个空矩阵,
for i=:
data=zeros(,);%生成一个行*列为396*1的零矩阵
for j=:
s=strcat(num2str(i),'-',num2str(j),'.txt');%'-'是取得i和j之间的链接符。如果是1.2那就是'.'。
k=importdata(s);
t=k(:,);%如果原数据的第一列是光的波数,第二列才是吸光度,那么这里写2
data=data+t;%注意矩阵的相加
end
data=data/;%举证的除法运算,其中每个点都除以3
B=[B,data];
end

关于近红外光谱的吸光度的算法,偶然在一个java程序中看见的计算方法:

result[i] = Math.abs(Math.round(((resultQ[i] - resultDark[i]) / (double)(resultLight[i] - resultDark[i])) * 10000) / 10000.0);//此处得到的是透射率T%
result[i] = -Math.log10(result[i]);//得到吸光度abs

Matlab实现曲线拟合

function string = curveFitting(a,x,y)
%spfit 拟合两组数据的线性关系
%a 拟合的次数
%x x轴数据
%y y轴数据
fx=polyfit(x,y,a)%结果返回a次拟合多项式系数,从高次到低次依次存放到变量fx中;
yvalue=polyval(fx,x);%求得多项式在x0处的值y0;
ymean=mean(y);
Rsquare=(norm(yvalue-ymean)/norm(y-ymean))^ %求得相关系数R的平方进行输出
SC=[];
Temp=[];
for i =:a
if fx(i) >
if i >
string = ['+',num2str(fx(i))];
else
string = num2str(fx(i));
end
else
string = num2str(fx(i));
end
Temp = [string,['x^',num2str(a+-i)]];
SC = [SC,Temp];
end
if fx(a+) >
lastString = ['+',num2str(fx(a+))];
SC =[SC,lastString];
else
SC = [SC,num2str(fx(a+))];
end
%画图程序(x,y)对应的点,x1y1对应的是带入拟合后的点
x1=x():0.2:x(length(x));%.2是步长,不是特别要求
y1=polyval(fx,x1);
plot(x,y,'b*',x1,y1,'g');
xlabel(strcat('拟合方程:y=',SC));

Matlab批量到数据(二维荧光数据处理)

B=[];%产生一个空矩阵
for i=:
data=zeros(,);%生成一个行*列为396*1的零矩阵
for j=:
s=strcat(num2str(i),'-',num2str(j),'.txt');%'-'是取得i和j之间的链接符。如果是1.2那就是'.'。
k=importdata(s);
t=k(:,);%如果原数据的第一列是光的波数,第二列才是吸光度,那么这里写2
data=data+t;
end
data=data/;
B=[B,data];
end

Matlab之数据处理的更多相关文章

  1. MATLAB之数据处理+公式拟合

    MATLAB之数据处理+公式拟合 前言:由试验得到一组数据,对该组数据进行处理,作图分析,分析各变量的关系,期望得到拟合公式. 试验数据背景 本次试验有三个自变量:V.M.G,因变量为F,每组试验重复 ...

  2. Matlab绘图高级部分

    图形是呈现数据的一种直观方式,在用Matlab进行数据处理和计算后,我们一般都会以图形的形式将结果呈现出来.尤其在论文的撰写中,优雅的图形无疑会为文章加分.本篇文章非完全原创,我的工作就是把见到的Ma ...

  3. (转载)MatLab绘图

    转载自:http://www.cnblogs.com/hxsyl/archive/2012/10/10/2718380.html 转载自:http://www.cnblogs.com/jeromebl ...

  4. Stata和Matlab联合处理金融数据

    Stata是统计学专业软件,可以很方便的对数据处理,但几乎只能按照整行整列进行,而且每次只能加载一个矩阵(dta文件),如果要用到多个矩阵数据进行操作或进行复杂的循环控制,就力不从心了. 而Matla ...

  5. matlab 常用函数

    Matlab常用函数 Matlab的内部常数  eps   浮点相对精度  pi  圆周率  exp  自然对数的底数e  i 或j  虚数单位  Inf或 inf  无穷大 Matlab概率密度函数 ...

  6. Matlab高级绘图

    http://blog.csdn.net/haizimin/article/details/50372630 图形是呈现数据的一种直观方式,在用Matlab进行数据处理和计算后,我们一般都会以图形的形 ...

  7. matlab中常用见的小知识点

    矩阵相关: 在matlab中,矩阵或向量是 column-major 表示形式.用 [] 来构建向量或矩阵, 用()来引用向量或矩阵中的元素:用:表示矩阵中的该index下的所以元素: matlab中 ...

  8. 四轴飞行器1.3 MPU6050(大端)和M4的FPU开启方法

    四轴飞行器1.3 MPU6050(大端)和M4的FPU开启方法  原创文章,欢迎转载,转载请注明出处      最近时间花在最多的地方就是STM32的I2C上了.之前就知道STM32的I2C并不好用, ...

  9. 30 年前的圣诞节,Python 序章被谱写

    1989 年圣诞节期间,已经从阿姆斯特丹大学(University of Amsterdam)获得数学和计算机硕士学位的 Guido van Rossum,为了打发圣诞节的无趣,决心开发一个新语言解释 ...

随机推荐

  1. 掌握HDFS的Java API接口访问

    HDFS设计的主要目的是对海量数据进行存储,也就是说在其上能够存储很大量文件(可以存储TB级的文件).HDFS将这些文件分割之后,存储在不同的DataNode上, HDFS 提供了两种访问接口:She ...

  2. C#中的new修饰符说明

    new修饰符主要是用来隐藏从基类继承的成员. 这句话怎么理解呢,就是说有一个类,它有一个继承类,继承类中存在和基类中一样名称的成员(属性,方法等). 对继承类中的该成员使用new修饰符时,调用时将会隐 ...

  3. 19. CTF综合靶机渗透(十二)

    靶机说明: 靶机主题来自美剧<黑客军团> 本次靶机有三个flag,难度在初级到中级,非常适合新手训练学习,不需要逆向技术,目标就是找到三个key,并且拿到主机root权限. 渗透过程: 本 ...

  4. Firefox 网页 光标 闪烁

    最近 Firefox 出现怪异情况:鼠标点击网页,在点击的位置显示光标,并一直闪烁,导致 Home End 等按键都无效. 原来这是 Firefox 的 “特色功能”:Caret Browsing,激 ...

  5. KOL运营之——如何与网文作者高效地约稿?

    本文来自网易云社区,转载务必请注明出处. 随着网络文学的发展,影响力逐渐扩大,越来越多的同事在工作中遇到需要和这些作者打交道的时候.对于作者这个群体,很多时候都是只闻其书,不见其人.要跟这样的群体打交 ...

  6. Boost Python学习笔记(五)

    你将学到什么 在C++中调用Python代码时的返回值问题 基础类型 修改Python脚本(build/zoo.py) def rint(): return 2 def rstr(): return ...

  7. Oracle中 row_number() over()分析函数(转)

    https://www.cnblogs.com/moon-jiajun/p/3530035.html

  8. CF 980D Perfect Groups(数论)

    CF 980D Perfect Groups(数论) 一个数组a的子序列划分仅当这样是合法的:每个划分中的任意两个数乘积是完全平方数.定义a的权值为a的最小子序列划分个数.现在给出一个数组b,问权值为 ...

  9. 问题 Can't load AMD 64-bit .dll on a IA 32-bit platform

    问题简要描述: java.lang.UnsatisfiedLinkError: F:\Tools\tomcat6045\tomcat6.0.45_x64\apache-tomcat-6.0.45\bi ...

  10. VC添加全局热键的方法

    VC添加全局热键的方法 这个方法靠谱 http://blog.csdn.net/lujianfeiccie2009/article/details/7498704 VC添加全局热键的方法 标签: bu ...