利用matlab与eeglab对EEG信号(脑电)进行处理分段与保存

这段代码详细展示了如何批量处理 EEG 信号,包括读取 .edf 文件,选择特定通道,进行 0-50Hz 滤波,将数据分段并保存为 .set 文件,最后将分段数据合并并导出为 Excel 文件。整个流程适用于 EEG 数据预处理和存储。
摘要由CSDN通过智能技术生成

本文中的代码仅对eeg信号进行了筛通道,滤波,分段处理

如有其他要求,请在第一段代码中自行补充

%这个是对edf文件处理的代码进化过程,每一段都是对前一段的提升
%用井号框起来的部分是成功后的代码
%完整代码在最后
%其中,文件的读取保存地址,名称之类的,有很多需要在使用时进行手动改变的地方,注意自行更改
%使用eeg相关函数前,先调用eeglab
%读文件与选通道
EEG = pop_biosig('C:\Users\DELL\Desktop\dataset\s1-2210113.edf', 'channels',10);
%滤波
EEG = pop_eegfiltnew(EEG, 'locutoff',0,'hicutoff',50,'plotfreqz',1);
%保存
EEG = pop_saveset( EEG, 'filename','1.set','filepath','C:\\Users\\DELL\\Desktop\\set\\');


i=1
EEG = pop_biosig('C:\Users\DELL\Desktop\dataset\s1-2210113.edf', 'channels',10);
EEG = pop_eegfiltnew(EEG, 'locutoff',0,'hicutoff',50,'plotfreqz',1);
%strcat('participant',num2str(i),'ICA','.set')每个引号中,是一组文件名,可以自己改动,删减
EEG = pop_saveset( EEG, 'filename',strcat(num2str(i),'.set'),'filepath','C:\\Users\\DELL\\Desktop\\set\\');


i=1
filename=strcat(num2str(i),'.edf');
filepath='C:\\Users\\DELL\\Desktop\\dataset\\s1\\';
x=[filepath,filename]
EEG = pop_biosig(x, 'channels',10);
EEG = pop_eegfiltnew(EEG, 'locutoff',0,'hicutoff',50,'plotfreqz',1);
%strcat('participant',num2str(i),'ICA','.set')每个引号中,是一组文件名,可以自己改动,删减
EEG = pop_saveset( EEG, 'filename',strcat(num2str(i),'.set'),'filepath','C:\\Users\\DELL\\Desktop\\set\\');


##############################################################################################
for i=1:25
filename=strcat(num2str(i),'.edf');
filepath='C:\\Users\\DELL\\Desktop\\dataset\\s1\\';
x=[filepath,filename]
EEG = pop_biosig(x, 'channels',10);
EEG = pop_eegfiltnew(EEG, 'locutoff',0,'hicutoff',50,'plotfreqz',1);
%strcat('participant',num2str(i),'ICA','.set')每个引号中,是一组文件名,可以自己改动,删减
EEG = pop_saveset( EEG, 'filename',strcat(num2str(i),'.set'),'filepath','C:\\Users\\DELL\\Desktop\\set\\s1\\');
end
##############################################################################################


%至此利用eeg获得数据已经完成,接下来是对数据进行分割以及保存为exlx

i=1
setFileName =strcat(num2str(i),'.set');
filepath='C:\\Users\\DELL\\Desktop\\set\\s1\\';
eeg = pop_loadset(setFileName, filepath);
event = eeg.event;
data = eeg.data;
srate = eeg.srate;


size(a,1) % 行数
size(a,2) % 列数
b=floor(a/2500)*2500%整除
a=data(1,1:b)%data的第一行中第一列到第b列


%删除多余数据并分段
a=floor(size(data,2) /2500)*2500
a=data(1,1:a)%data的第一行中第一列到第b列
a=reshape(a,[],2500)

###################################################################################
for j=1:size(a,1) 
savefilepath='C:\\Users\\DELL\\Desktop\\xlsx\\s1\\'
saveFileName =strcat(num2str(i),num2str(j),'.xlsx');
x=[savefilepath,saveFileName]
test=a(j,:)
xlswrite(x,test,'Sheet1')
end
###################################################################################
%分段与保存的部分也就做完了,然后是结合文件读取部分

###################################################################################
for i=1:11%要比实际少一个数字
setFileName =strcat(num2str(i),'.set');
filepath='C:\\Users\\DELL\\Desktop\\set\\s1\\';
eeg = pop_loadset(setFileName, filepath);
event = eeg.event;
data = eeg.data;
srate = eeg.srate;

a=floor(size(data,2) /2500)*2500
a=data(1,1:a)%data的第一行中第一列到第b列
a=reshape(a,[],2500)

for j=1:size(a,1) 
savefilepath='C:\\Users\\DELL\\Desktop\\xlsx\\s1\\'
saveFileName =strcat(num2str(i),num2str(j),'.xlsx');
x=[savefilepath,saveFileName]
test=a(j,:)
xlswrite(x,test,'Sheet1')
end
end
###################################################################################
%然后我发现不需要拆开保存,等晚上再重新做合并保存的代码吧,饿了。



%我又来了
%首先要启动一次eeglab才能使用代码
b=[]%需要保存的矩阵
c=[]%检测循环数量
d=[]%检测每一次分段数量
e=0%检测分段数量总和
for i=1:12
setFileName =strcat(num2str(i),'.set');
filepath='C:\\Users\\DELL\\Desktop\\set\\s1\\';
eeg = pop_loadset(setFileName, filepath);
data = eeg.data;

a=floor(size(data,2) /2500)
d=[d;a]
e=e+a 
a=a*2500
a=data(1,1:a)%data的第一行中第一列到第b列
a=reshape(a,[],2500)
b=[b;a]
c=[c;i]

end





b=[]%需要保存的矩阵
c=[]%检测循环数量
d=[]%检测每一次分段数量
e=0%检测分段数量总和
for i=1:12
setFileName =strcat(num2str(i),'.set');
filepath='C:\\Users\\DELL\\Desktop\\set\\s1\\';
eeg = pop_loadset(setFileName, filepath);
data = eeg.data;

a=floor(size(data,2) /2500)
d=[d;a]
e=e+a 
a=a*2500
a=data(1,1:a)%data的第一行中第一列到第b列
a=reshape(a,[],2500)
b=[b;a]
c=[c;i]

end

savefilepath='C:\\Users\\DELL\\Desktop\\xlsx\\s1\\'
saveFileName =strcat('s1.xlsx');
x=[savefilepath,saveFileName]
test=b
xlswrite(x,test,'Sheet1')




###################################################################################
b=[]%需要保存的矩阵
%循环读取数据
for i=1:12
setFileName =strcat(num2str(i),'.set');
filepath='C:\\Users\\DELL\\Desktop\\set\\s1\\';
eeg = pop_loadset(setFileName, filepath);
data = eeg.data;
%对数据进行分段
a=floor(size(data,2) /2500)*2500
a=data(1,1:a)%data的第一行中第一列到第b列
a=reshape(a,[],2500)
%数据合并
b=[b;a]
end
%数据保存
savefilepath='C:\\Users\\DELL\\Desktop\\xlsx\\'
saveFileName =strcat('s1.xlsx');
x=[savefilepath,saveFileName]
xlswrite(x,b,'Sheet1')
###################################################################################
%这一次的代码就算结束了,最后做一下总结
###################################################################################
###################################################################################
###################################################################################
%使用eeg相关函数前,先调用eeglab
%对原始edf文件进行循环调用
for i=1:25
filename=strcat(num2str(i),'.edf');
filepath='C:\\Users\\DELL\\Desktop\\dataset\\s1\\';
x=[filepath,filename]
%选择文件,并选择第10个通道
EEG = pop_biosig(x, 'channels',10);
%对数据进行0—50Hz的滤波
EEG = pop_eegfiltnew(EEG, 'locutoff',0,'hicutoff',50,'plotfreqz',1);
%数据保存
%strcat('participant',num2str(i),'ICA','.set')每个引号中,是一组文件名,可以自己改动,删减
EEG = pop_saveset( EEG, 'filename',strcat(num2str(i),'.set'),'filepath','C:\\Users\\DELL\\Desktop\\set\\s1\\');
end

b=[]%需要保存的矩阵
%循环读取set数据
for i=1:12
setFileName =strcat(num2str(i),'.set');
filepath='C:\\Users\\DELL\\Desktop\\set\\s1\\';
eeg = pop_loadset(setFileName, filepath);
data = eeg.data;
%对数据进行分段
a=floor(size(data,2) /2500)*2500
a=data(1,1:a)%data的第一行中第一列到第b列
a=reshape(a,[],2500)
%数据合并
b=[b;a]
end
%数据保存位xlsx文件
savefilepath='C:\\Users\\DELL\\Desktop\\xlsx\\'
saveFileName =strcat('s1.xlsx');
x=[savefilepath,saveFileName]
xlswrite(x,b,'Sheet1')
###################################################################################
###################################################################################
###################################################################################
###################################################################################
###################################################################################
###################################################################################
%没想到的是,我又重做了一遍代码,这次不需要重命名了,可以直接读文件
FilePath = 'C:\\Users\\10045\\Desktop\\精确打标---儿童医院脑电图资料\\j1\\';                   % 设置数据存放的文件夹路径
File = dir(fullfile(FilePath,'*.edf'));  % 显示文件夹下所有符合后缀名为.edf文件的完整信息
FileNames = {File.name}';            % 提取符合后缀名为.edf的所有文件的文件名,转换为n行1列
Length_Names = size(FileNames,1);    % 获取所提取数据文件的个数
b=[]%需要保存的矩阵

for i=1:Length_Names 
x=[FilePath,char(FileNames(i))]
EEG = pop_biosig(x, 'channels',10);
EEG = pop_eegfiltnew(EEG, 'locutoff',0,'hicutoff',50,'plotfreqz',1);
data = EEG.data;
%对数据进行分段
a=floor(size(data,2) /2500)*2500
a=data(1,1:a)%data的第一行中第一列到第b列
a=reshape(a,[],2500)
%数据合并
b=[b;a]
end
%数据保存为csv文件
writematrix(b,'j1.csv'); 
###################################################################################
###################################################################################
###################################################################################

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值