通过以下方法可以读取尼高力.spa格式光谱、spc格式光谱和布鲁克.o格式光谱数据。
1、借助windows旗下的UltraEdit文本编辑器;
2、利用UltraEdit打开二进制光谱文件;
3、寻找吸光度向量开始指针位置:
(1)找到“3E”,指针开始位置为第一个“3E”的前3个位置,如下图所示。
fseek(fid,hex2dec('47c'),'bof');
fread(fid,NumPoint,’single’);%读取的数据格式通常是单精度浮点型
(2)如果第一种情况失效,找“Ydata”字符空两隔开始读取;
4、寻找开始波长和结束波长;通常找到“FXV”和“LXV”两个标识符,然后将指针定位到空5格的位置开始读取。
FXV…..
LXV…..
fseek(fid,hex2dec('94b0'),'bof'); % 找到开始波长点指针位置
FirstPoint=fread(fid,1,'double'); % 读取开始波长点,有时候是单精度浮点型,有时候是双精度浮点型
fseek(fid,hex2dec('94c0'),'bof'); % 找到结束波长点指针位置
LastPoint=fread(fid,1,'double'); % 读取结束波长点,有时候是单精度浮点型,有时候是双精度浮点型
5、寻找波长点数;找到“NPT”字符,然后将指针定位到5个字符后开始读取。读取数据类型为“int32”整型。
fseek(fid,hex2dec('94a4'),'bof');%
NumPoint=fread(fid,1,'int32'); %
6.读取赛默飞世尔近红外光谱.spa格式的光谱完整代码如下:
clc;clear all
%%
fid=fopen('E:\1.spa','rb');
fseek(fid,hex2dec('234'),'bof'); % 找到波长点数的指针位置
NumPoint=fread(fid,1,'int32'); % 读取“int32”型波长点数
fseek(fid,hex2dec('240'),'bof'); % 找到开始波长点和结束波长点指针位置
FirstPoint=fread(fid,1,'single');% 读取开始波长点
LastPoint=fread(fid,1,'single'); % 读取结束波长点
Interval=(FirstPoint-LastPoint)/(NumPoint-1); % 波点间隔波数
wavenumber=linspace(LastPoint,FirstPoint,NumPoint)'; % 生成波长点数
fseek(fid,hex2dec('3b8'),'bof'); % 找到吸光度指针(主要是找第7位的数为“3E”)
y=fread(fid,NumPoint,'single'); % 读取波长点数对应的吸光度向量
figure
plot(wavenumber,y);