Matlab之数据处理

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

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

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

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

wave = csvread(‘.\dark\dark.csv‘,14,0,[14,0,269,0]);%看参数,具体参数的功能参考相应的Matlab书籍
dark =csvread(‘.\dark\dark.csv‘,14,1,[14,1,269,1]);%获取背景参数,当前目录的下级目录
ref = csvread(‘.\ref\ref.csv‘,14,1,[14,1,269,1]);%获取参比
B = ref-dark;
files = dir(‘*.csv‘);%获取当前目录的文件数,注意读取的是csv文件
l = length(files);
C = [];
for i = 1:l
    filename = files(i).name;%获得文件名
    A=csvread(filename,14,1,[14,1,269,1]);%读入指定列的数据,详细参数功能参考对应的代码
    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=3:3:n%第二个参数是步长
    temp = A(:,i-2:i);
    C = mean(temp,2);
    B=[B C];
end
xlswrite(‘mean_3.xlsx‘,B,‘Sheet1‘);%xls的形式输出
msgbox([‘complete! ‘]);

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

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

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

B=[];%产生一个空矩阵,
for i=0:14
data=zeros(396,1);%生成一个行*列为396*1的零矩阵
for j=1:3
    s=strcat(num2str(i),‘-‘,num2str(j),‘.txt‘);%‘-‘是取得i和j之间的链接符。如果是1.2那就是‘.‘。
    k=importdata(s);
    t=k(:,2);%如果原数据的第一列是光的波数,第二列才是吸光度,那么这里写2
    data=data+t;%注意矩阵的相加
end
    data=data/3;%举证的除法运算,其中每个点都除以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))^2 %求得相关系数R的平方进行输出
SC=[];
Temp=[];
for i =1:a
    if fx(i) > 0
        if i >1
            string = [‘+‘,num2str(fx(i))];
        else
            string = num2str(fx(i));
        end
    else
        string = num2str(fx(i));
    end
    Temp = [string,[‘x^‘,num2str(a+1-i)]];
    SC = [SC,Temp];
end
if fx(a+1) > 0
    lastString = [‘+‘,num2str(fx(a+1))];
    SC =[SC,lastString];
else
    SC = [SC,num2str(fx(a+1))];
end
%画图程序(x,y)对应的点,x1y1对应的是带入拟合后的点
x1=x(1):0.2:x(length(x));%0.2是步长,不是特别要求
y1=polyval(fx,x1);
plot(x,y,‘b*‘,x1,y1,‘g‘);
xlabel(strcat(‘拟合方程:y=‘,SC));

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

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

Matlab之数据处理的相关文章

MATLAB 常用数据处理命令

1. 元素排序: sort(X)返回一个对X中的元素按升序排列的新向量 [Y,I]=sort(A,dim,mode) 若dim=1,则按列排:若dim=2,则按行排(dim默认为1) 若mode=ascend,则按升序:若mode=descend,则按降序(默认升序) Y是排序后的矩阵,I记录Y中的元素在A中的行号 2. 平均值 mean(X):返回向量X的算术平均值 mean(A):   返回一个行向量,其第i个元素是A的第i列的算术平均值. mean(A,2):返回一个列向式,其第i个元素是

(转载)MatLab绘图

转载自:http://www.cnblogs.com/hxsyl/archive/2012/10/10/2718380.html 转载自:http://www.cnblogs.com/jeromeblog/p/3396494.html plot选项: 一 基础功能 二维图形 一. plot函数① 函数格式:plot(x,y)  其中x和y为长度相同                     坐标向量     函数功能:以向量x.y为轴,绘制曲线. [例] 在区间0≤X≤2?内,绘制正弦曲线y=si

Matlab绘图高级部分

转载自:http://www.cnblogs.com/jeromeblog/p/3396494.html 图形是呈现数据的一种直观方式,在用Matlab进行数据处理和计算后,我们一般都会以图形的形式将结果呈现出来.尤其在论文的撰写中,优雅的图形无疑会为文章加分.本篇文章非完全原创,我的工作就是把见到的Matlab绘图代码收集起来重新跑一遍,修改局部错误,然后将所有的图贴上来供大家参考.大家可以先看图,有看中的可以直接把代码Copy过去改成自己想要的. 1 2 3 4 5 6 7 8 9 10 1

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

 原创文章,欢迎转载,转载请注明出处      最近时间花在最多的地方就是STM32的I2C上了.之前就知道STM32的I2C并不好用,因为之前用过模拟的I2C,也写过AVR的I2C也就是TWI的硬件驱动,所以想试试写STM32的硬件I2C...为了避免库带来的麻烦,之前和特意将STM32F4的标准库升级到了1.3.0,但是貌似问题依旧.于是在网上找到了ST转为I2C写的CPAL的库,拿着它的英文手册和例子看了下,觉得很不错,功能相当的齐全,按照手册配置用起来应该不错,于是开始加载到自己的项目中

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

1989 年圣诞节期间,已经从阿姆斯特丹大学(University of Amsterdam)获得数学和计算机硕士学位的 Guido van Rossum,为了打发圣诞节的无趣,决心开发一个新语言解释器,作为 ABC 语言的一种继承. 之所以选中 Python(蟒蛇)作为该编程语言的名字,是取自英国 20世纪 70 年代首播的电视喜剧<蒙提.派森的飞行马戏团>(Monty Python's Flying Circus). 1991年,第一个 Python 解释器正式发布.它是用 C 语言实现,

Matlab与单片机的串行通信及数据处理

http://hi.baidu.com/20066203/blog/item/891edf52f73278040df3e360.html 摘要:结合单片机和Matlab两者优点,基于事件驱动中断通信机制,提出一种Matlab环境下PC机与单片机实时串行通信及数据处理方法:完成单片机数据采集系统与PC机RS-232/RS-485串行通信及其通信数据分析处理.文件存储.FIR滤波及图形显示:简化系统开发流程,提高开发效率.该方法已成功应用于一个PIC16F876单片机应用系统实例之中. 关键词:PI

大数据处理之道 (MATLAB 篇&lt;三&gt;)

一:起因 (1)最近一直在处理大数据,从MB ----> GB的变化,是一次质的飞跃,相应的工具也在变 从widows到linux,从单机单核 到 hadoop多节点的计算 (2)问题来了,面对海量的数据,如何从中挖掘实用的信息或者发现潜在的现象,可视化工具可能是必不可少的 : (3)可视化工具可以说百度一大篇,可是作为研究者的我们,程序猿的我们可能更希望能够抽象出一种数学模型,对现实的现象进行非常好的描述和刻画 (4)Python(数据清洗和处理) + MATLAB(模型分析) 或 c++/j

大数据处理之道 (MATLAB 篇)

一:起因 (1)最近一直在处理大数据,从MB ----> GB的变化,是一次质的飞跃,相应的工具也在变 从widows到linux,从单机单核 到 hadoop多节点的计算 (2)问题来了,面对海量的数据,如何从中挖掘实用的信息或者发现潜在的现象,可视化工具可能是必不可少的 : (3)可视化工具可以说百度一大篇,可是作为研究者的我们,程序猿的我们可能更希望能够抽象出一种数学模型,对现实的现象进行非常好的描述和刻画 (4)Python(数据清洗和处理) + MATLAB(模型分析) 或 c++/j

大数据处理之道 (MATLAB 篇(二))

一:起因 (0)开始个人非常抵触MATLAB编程语言的,肯能是部分编程人员的通病 -- 学会c/c++或者java,就会鄙视其他的语言,懒得尝试其他语言.直到有一天--他发现,他或者她发现自己精通的这门语言实在是解决不了这个问题时,才做出改变. (1)最近一直在处理大数据,从MB ----> GB的变化,是一次质的飞跃,相应的工具也在变 从widows到linux,从单机单核 到 hadoop多节点的计算 (2)问题来了,面对海量的数据,如何从中挖掘实用的信息或者发现潜在的现象,可视化工具可能是