*.spa 二进制文件格式是商业机密吗?但是 Perkin Elmer 向公众发布了 *.sp 格式;
如何阅读?
4 回答
我知道这个线程现在有点老了,但我最近需要阅读 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
我找到了设置光谱偏移的位置,它位于位置 386:
fseek(fid,386,'bof');
spectral_offset = fread(fid,1,'int32')
fseek(fid,spectral_offset,'bof');
spectrum=fread(fid,Number_of_DataPoints,'single');
'如何处理.spa(频谱分析仪输出文件)usnig matlab'我认为处理读取.spa文件的最佳方法是首先使用'记事本'文件将其转换为txt,然后使用导入将其导入matlab该工具为您提供了大量功能,从制表符分隔开始,以自定义分隔结束,然后您选择需要从 .spa 文件中提取的频率和接收功率,以获取更多详细信息,您可以查看
https://nl.mathworks.com/videos/importing-data-from-text-files-interactively-71076.html
这对我处理 .spa 频谱分析仪输出文件有很大帮助
:)
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 的文件。