* 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と思われる