* .spa二进制文件格式是商业机密吗?但Perkin Elmer向公众发布了* .sp格式;
怎么读?
答案 0 :(得分:3)
我知道这个帖子现在有点老了,但我最近需要阅读SPA文件,并希望分享我是如何设法处理它们的。
如cooooldog所述,0x41c偏移量不是标准的。但是,此偏移量在spa文件本身中编码
编辑spa文件时,开头有一个短标题,然后是多个零。从0x11e开始是非零值
以下是我设法找到光谱文件的正确偏移量的方法:
从0x11e开始,我开始读取int32值。似乎数据偏移在此值之前编码:54 18 00 00(十进制为6228)
编辑:我收到了一组新的spa文件,其中搜索的模式不再是54 18 00 00但是40 61 00 00(24896),所以这可能也不是标准的。事实上,起始地址似乎在spa文件中以172h或182h编码。我仍然需要找到它的方法。
因此,通过查找6228,在文件中稍后查找数据所需的偏移量是在此值6228之前找到的整数。
如果你继续编辑你的spa文件,你应该找到一个32位编码的浮点值,放在一堆文本之后
从现在开始,只需将0x41c替换为找到的地址即可读取这些值
如果这可以帮助任何人...
function address = getStart(filename)
try
% Open the file
fid=fopen(filename,'r');
% Jump where the values become interesting
fseek(fid,hex2dec('11e'),'bof');
% Pattern we're looking for
pattern = 6228;
suspect = 0;
while suspect~=pattern
oldSuspect = suspect;
suspect = fread(fid,1,'int32');
end
% The correct address is just before our current suspect
address = oldSuspect;
% Close the file
fclose(fid);
catch ex
address = 0;
disp(ex)
end
答案 1 :(得分:2)
我找到了光谱偏移设置的位置,它位于386位置:
fseek(fid,386,'bof');
spectral_offset = fread(fid,1,'int32')
fseek(fid,spectral_offset,'bof');
spectrum=fread(fid,Number_of_DataPoints,'single');
答案 2 :(得分:0)
<强> Matlab implementation 强>
https://cn.mathworks.com/matlabcentral/fileexchange/57904-loadspectra
您需要导入光谱文件以分析FTIR和NIR吸光度数据。此函数将.SPA格式文件中的数据加载到矩阵中,并将光谱组织成列。
C / C ++实现:
Github上有一个小型的开源项目:
https://github.com/aitap/spa2txt
该程序读取Nicolet FTIR光谱文件(* .spa扩展名)并生成 文本文件,第一行对应于标题,每隔一行 格式为:波数,标签,吸光度,换行符。
用法:将* .spa文件作为命令行参数提供。名称为* .spa.txt的文件将 被创造。
答案 3 :(得分:0)
'如何处理.spa(频谱分析仪输出文件)usnig matlab' 好吧,我认为处理读取.spa文件的最佳方法是,首先使用“记事本”文件将其转换为txt,然后使用导入工具将其导入到matlab,该工具为您提供了大量功能,从制表符定界到以自定义分隔 之后,您需要选择.spa文件中的频率和接收功率 有关更多详细信息,请检查
https://nl.mathworks.com/videos/importing-data-from-text-files-interactively-71076.html
这对我处理.spa频谱分析仪输出文件很有帮助
:)