Matlab之数据处理
写在前面的,软件不太强大,每次保存都需要生成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之数据处理的更多相关文章
- MATLAB之数据处理+公式拟合
MATLAB之数据处理+公式拟合 前言:由试验得到一组数据,对该组数据进行处理,作图分析,分析各变量的关系,期望得到拟合公式. 试验数据背景 本次试验有三个自变量:V.M.G,因变量为F,每组试验重复 ...
- Matlab绘图高级部分
图形是呈现数据的一种直观方式,在用Matlab进行数据处理和计算后,我们一般都会以图形的形式将结果呈现出来.尤其在论文的撰写中,优雅的图形无疑会为文章加分.本篇文章非完全原创,我的工作就是把见到的Ma ...
- (转载)MatLab绘图
转载自:http://www.cnblogs.com/hxsyl/archive/2012/10/10/2718380.html 转载自:http://www.cnblogs.com/jeromebl ...
- Stata和Matlab联合处理金融数据
Stata是统计学专业软件,可以很方便的对数据处理,但几乎只能按照整行整列进行,而且每次只能加载一个矩阵(dta文件),如果要用到多个矩阵数据进行操作或进行复杂的循环控制,就力不从心了. 而Matla ...
- matlab 常用函数
Matlab常用函数 Matlab的内部常数 eps 浮点相对精度 pi 圆周率 exp 自然对数的底数e i 或j 虚数单位 Inf或 inf 无穷大 Matlab概率密度函数 ...
- Matlab高级绘图
http://blog.csdn.net/haizimin/article/details/50372630 图形是呈现数据的一种直观方式,在用Matlab进行数据处理和计算后,我们一般都会以图形的形 ...
- matlab中常用见的小知识点
矩阵相关: 在matlab中,矩阵或向量是 column-major 表示形式.用 [] 来构建向量或矩阵, 用()来引用向量或矩阵中的元素:用:表示矩阵中的该index下的所以元素: matlab中 ...
- 四轴飞行器1.3 MPU6050(大端)和M4的FPU开启方法
四轴飞行器1.3 MPU6050(大端)和M4的FPU开启方法 原创文章,欢迎转载,转载请注明出处 最近时间花在最多的地方就是STM32的I2C上了.之前就知道STM32的I2C并不好用, ...
- 30 年前的圣诞节,Python 序章被谱写
1989 年圣诞节期间,已经从阿姆斯特丹大学(University of Amsterdam)获得数学和计算机硕士学位的 Guido van Rossum,为了打发圣诞节的无趣,决心开发一个新语言解释 ...
随机推荐
- javaScript之事件处理程序
事件就是用户或浏览器自身执行的某个动作,JavaScript与HTML的交互也是通过事件实现的.而相应某个事件的函数就叫做事件处理函数.包括以下几种: 1.HTML事件处理程序 某个元素支持的每 ...
- MS SQL 取分组后的几条数据
SELECT uploaddate ,ptnumber ,instcount FROM ( SELECT ROW_NUMBER() OVER( PARTITION BY uploaddate ORDE ...
- redis-数据类型-string、hash、list、set、zset
String 类型操作string是redis最基本的类型,而且string类型是二进制安全的.意思是redis的string可以包含任何数据.比如jpg图片或者序列化的对象. $redis-> ...
- 【mongodb】json与bson区别
bson是由10gen开发的一个数据格式,目前主要用于mongoDB中,是mongoDB的数据存储格式.bson基于json格式,选择json进行改造的原因主要是json的通用性及json的schem ...
- java线程基础知识----java daemon线程
java线程是一个运用很广泛的重点知识,我们很有必要了解java的daemon线程. 1.首先我们必须清楚的认识到java的线程分为两类: 用户线程和daemon线程 A. 用户线程: 用户线程可以简 ...
- 对各种lca算法的理解
1.RMQ+ST 首先注意这个算法的要素:结点编号,dfs序,结点深度. 首先dfs,求出dfs序,同时求出每个结点的深度.然后st算法,维护深度最小的结点编号(dfs序也可以,因为他们俩可以互相转换 ...
- bzoj 2827: 千山鸟飞绝
2827: 千山鸟飞绝 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 802 Solved: 228[Submit][Status][Discuss ...
- 测试之美 Part 1
1. 本人曾经在一次电话面试中被问到,为什么你作为一个测试人员,还要别人来告诉你要在哪些平台上去测试,你完全可以自己去定夺.下面的这段话是来自<测试之美>,我觉得很有逻辑的反驳了那位面试官 ...
- Django与Ajax,文件上传,ajax发送json数据,基于Ajax的文件上传,SweetAlert插件
一.Django与Ajax AJAX准备知识:JSON 什么是 JSON ? JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON 是轻 ...
- jasper_excel_sheet tab color
<property name="net.sf.jasperreports.export.xls.sheet.tab.color" value="#00FF00&qu ...