EEGLAB读入数据后精度变为single类型

关于本博客的说明: 本次博客主要分享如何改变EEGLAB默认的数据类型,其默认数据类型为single,这个设置给笔者的实验过程带来了不少的问题,并花了不少时间来解决。如果想直接知道如何修改,请穿越到后文的“解决方法”

问题描述:MATLAB默认的数据类型为double类型,在用eeglab软件读入EEG数据(包括.mat普通数据文件和.cnt数据文件)时,原double类型的数据全都变成了single类型,后续将其处理结果用作其它分析时出现了不可知的问题。在对比分析载入数据和原始数据的过程中发现主要是前者的精度发生了变化,故而对其进行了初步研究。 

解决过程:运用EEGLAB软件File→ History scripts→ Save dataset history script 将在eeglab中载入数据的操作过程用m文件以代码的形式表示出来,便于后续执行程序单步操作分析出现问题的原因。

自动生成的代码很简洁,主要函数是'pop_importdata()'

% EEGLAB history file generated on the 11-Mar-2018
% ------------------------------------------------

EEG.etc.eeglabvers = '14.1.1'; % this tracks which version of EEGLAB
% is being used, you may ignore it
EEG = pop_importdata('dataformat','matlab','nbchan',0,'data',...
    'D:\\Ghost\\Holiday\\MATLAB\\Fatigue detection\\cnt\\data1225.mat',...
    'srate',1,'pnts',0,'xmin',0);
EEG.setname='data';
EEG = eeg_checkset( EEG );

在pop_importdata文件中发现'pop_editset()'函数改变了数据的类型,进一步进入该函数

发现在option_single为'1'的时候原数据类型被强制转换成了single类型


进一步单步运行进入函数'eeglab_options',在该函数内发现又调用了函数'eeg_optionsbackup',  option_single参数在该文件中进行了定义:option_single = 1 ; 且有如下说明,

% If set, use single precision under Matlab 7.x. This saves RAM but can lead to rare numerical imprecisions.

这就是问题的根本原因。如果在该函数内将option_single的值设置为'0'可解决该问题。此外,从函数名可以看出还存在另一个函数'eeg_options', 该函数具有相同的参数定义,而且不知道封装的程序何时调用哪个函数。运用该方法进行修改比较繁琐。

该函数对相关参数的修改给出了如下说明,提供了另一种简便的实现方法


解决方法:依次选择EEGLAB软件File→ Memory and other options,取消选中下图红色框内选项,则可避免在读入数据的过程中将double型数据转换为single类型。



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值