Как читать данные из спектрального файла Nicolet FTIR с расширением * .spa - PullRequest
2 голосов
/ 22 мая 2010
  1. Является ли коммерческий секрет формата двоичных файлов * .spa? Но Perkin Elmer выпустил * .sp формат для общественности;

  2. как читать?

Ответы [ 4 ]

3 голосов
/ 01 апреля 2014

Я знаю, что эта ветка уже немного устарела, но мне нужно было недавно прочитать файлы SPA, и я хотел бы поделиться тем, как мне удалось с ними справиться.
Как заявляет cooooldog, смещение 0x41c не является стандартным. Однако это смещение закодировано в самом файле spa.
При редактировании файла спа в начале появляется короткий заголовок, а затем множество нулей. От 0x11e ненулевые значения.
Вот как мне удалось найти правильное смещение для моих спектральных файлов:
Начиная с 0x11e, я начинаю читать значения int32. Похоже, что смещение данных кодируется непосредственно перед этим значением: 54 18 00 00 (что составляет 6228 в десятичном виде). ​​
Редактировать: я получил новый набор файлов спа, где искомый шаблон больше не 54 18 00 00, а 40 61 00 00 (24896), так что это может быть не стандартным. Фактически, кажется, что начальный адрес кодируется в 172 или 182 часа в файле спа. Мне все еще нужен способ выяснить это.
Таким образом, при поиске 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  
2 голосов
/ 20 октября 2015

Я нашел, где установлен спектральный сдвиг, он находится в позиции 386:

fseek(fid,386,'bof'); 
spectral_offset = fread(fid,1,'int32')

fseek(fid,spectral_offset,'bof'); 
spectrum=fread(fid,Number_of_DataPoints,'single');
0 голосов
/ 03 августа 2018

'как иметь дело с.spa (выходные файлы анализатора спектра) usnig matlab' Что ж, я думаю, что лучший способ справиться с чтением .spa-файлов - это сначала преобразовать его в txt с помощью файла 'notepad', а затем импортировать его в matlab с помощью инструмента импорта, который дает вам огромное количество функций, начиная с табуляции и заканчивая пользовательские разделители после этого вы выбираете частоты и полученную мощность, которые нужно извлечь из файла .spa для более подробной информации вы можете проверить

https://nl.mathworks.com/videos/importing-data-from-text-files-interactively-71076.html

это помогло мне разобраться с выходными файлами спектрального анализатора .spa

:)

0 голосов
/ 27 февраля 2017

Реализация Matlab

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 будут быть созданным.

...