* matlabでfiffファイルを読み書きするとデータが完全には一致しない

***** fiffをmatlabを用いて読み込み->書き込み->再度読み込みすると完全には一致しない*****

確認用サンプルスクリプト(要mneのtoolbox)

sFnameIn='hoge_In.fif';%読み込むファイルの名前

sFnameOut='hoge_Out.fif';%書き出し用ファイル名

% 読み込み

hdr =fiff_setup_read_raw(sFnameIn);

[matDataIn vecTimesIn]=fiff_read_raw_segment(hdr);

% 書き出し

[fid cals]=fiff_start_writing_raw(sFnameOut,hdr.info);

% hdr.first_sampを書き出しファイルにも入れる:これがないと出力ファイルのhdr.first_sampが0になる。

% でも大した問題ではないと思います。

FIFF = fiff_define_constants();%

fiff_write_int(fid,FIFF.FIFF_FIRST_SAMPLE,hdr.first_samp);

% データ書き出し:基本1秒毎に書き出し。読み込み時ちょっと早いのでこの方がよいかと

for ii = 1:length(hdr.rawdir)

idxFirst = hdr.rawdir(ii).first-hdr.first_samp+1;

idxLast = hdr.rawdir(ii).last -hdr.first_samp+1;

fiff_write_raw_buffer(fid,matDataIn(:,idxFirst:idxLast),cals);

end

% 備忘録

% 上のfor-loopはなしにfiff_write_raw_buffer(fid,matDataIn,cals);でも通るが上記の通り読み込みで少し遅くなる。それ以外で問題があるか不明。たぶん問題はないんじゃないかと思っています。

fiff_finish_writing_raw(fid);

% 書き出したファイルを再読み込み

hdr_out=fiff_setup_read_raw(sFnameOut);

[matDataOut vecTimesOut]=fiff_read_raw_segment(hdr_out);

%比較:差分

matSubtr=matDataOut-matDataIn;

figure; imagesc(matSubtr);colorbar;

% MEGのデータ部分で1e-18(10の-18乗)くらいの誤差。トリガーとかで1e-7くらいの誤差のこともあった

% 比較:比率

matRatio=matSubtr./matDataOut;

figure; imagesc(matRatio);colorbar;

% スケールを見ると自前のデータで1e-7くらいだった。ほぼnegligibleと思われる