MATLAB从文件得出数据并计算吸收光谱

这一系列就是科研用的真实程序了,也是对自己的一个备忘录

真的收购每次都重写了

但真的文件太多了找不到啊!!!

好吧是我废物

废话不多说,这就开始

基础的清理:

clear
clc
close all

读取文件中的数据(来自示波器直接保存)

data=csvread('1\DC\Tek000_ALL.csv',13,0);%csvread只能读取纯数据,跳过前面的字符
%此时data中应该储存了对应的五列数据,我提取了两个通道,中间有一个空列
%读取另一个文件
data2=csvread('1\TDC\Tek000_ALL.csv',13,0);
%将data分成两部分
ch4 = data(:,2);%4通道结果
MATH1 = data(:,5);
T_MATH1 = data2(:,5);
%分别得到两列数据

详细的注释写在每一行了

csvread函数读取文件中的数值,但是只能读取数字,需要汉字会读取失败

这里从第十三行开始读取,结果是一个矩阵

首先绘制原始数据的图像:

%绘制原始图像:
figure(1)
x = 1:length(ch4);%两信号的x轴理论上是相同的
[AX,H1,H2] = plotyy(x,ch4,x,MATH1,'plot');
set(get(AX(1),'Ylabel'),'String','ch4');%设置左边的y轴标签
set(get(AX(2),'Ylabel'),'String','MATH1');%设置右边的y轴标签
xlabel('Time');
set(H1,'Linestyle','--');%设置曲线1的线型
set(H2,'Linestyle',':');%设置曲线2的线型

这里用到了在同一张图中绘制两个y轴的数据

在我的MATLAB基础操作专栏中有详细解释:

https://blog.csdn.net/fendoudecheng/article/details/130218116

实验数据,当然是不会放效果图的,自己想象~

使用移动平均函数平滑曲线

主要是测量的时候噪音较大:

%可以看到还是有很多高频的震荡,这里再次取平均
%直接使用移动均值函数
%M = movmean(A,k) 返回由局部 k 个数据点的均值组成的数组
ave_ch4 = movmean(ch4,16);%4通道结果
ave_MATH1 = movmean(MATH1,16);%1通道相邻16个点取平均后的结果
ave_T_MATH1 = movmean(T_MATH1,16);%1通道相邻16个点取平均后的结果

这里分别取十六个采样点进行平均

移动平均就是一个数组相邻的十六个取平均

原数组长度:200000,改变后的长度:200000

注意这可不是变成十六分之一哦

绘制平滑后的曲线:

% 另一种方式绘制:
figure(2)
yyaxis left
plot(x,ave_ch4)
yyaxis right
plot(x,ave_MATH1)
set(H1,'Linestyle','--');%设置曲线1的线型
set(H2,'Linestyle',':');%设置曲线2的线型

同样是一张图两个y轴,注意这里用了一种新的方法

按照MATLAB官方的说法,这个更提倡

画图:

%比较直接透射和经过铷泡
figure(3)
plot(x,10*ave_MATH1,x,5*ave_T_MATH1);
hold on
plot(x,5*ave_T_MATH1-10*ave_MATH1);

我这里直接的投射是单调递减的,用来标定一个周期:

%得到真正的谱
[m1,index1] = max(ave_T_MATH1);%取数组的最大值和对应的序号
[m2,index2] = min(ave_T_MATH1);%取数组的最小值和对应的序号
x = index1:index2;
figure(4)
plot(x,5*ave_T_MATH1(index1:index2)-10*ave_MATH1(index1:index2));

最后是归一化:

%归一化
% T = 5*ave_T_MATH1(index1:index2)-10*ave_MATH1(index1:index2);
% T = T/max(T);
ave_MATH1 = ave_MATH1(index1:index2);
ave_MATH1 = max(ave_T_MATH1)-ave_MATH1;
ave_MATH1 = ave_MATH1/max(ave_MATH1);
figure(5);
plot(x,ave_MATH1);

注意这里,求归一化的过程,也就是归一化怎么进行:

1、用整张图的最大值减去整个图,得到吸收谱,归一化

2、用透射谱减,得到吸收谱,归一化

这里不太精确,用第一种就行

最后是保存在文件内:

saveas(gca,'my2.png')

结束

放个图做封面吧:

MATLAB从文件得出数据并计算吸收光谱_第1张图片

 (图片来自于网络)

上图搜索关键词:做实验哪有不疯的

你可能感兴趣的:(#,matlab,开发语言)