基于分类任务的信号(EEG)处理

对于我们这些从没做过信号处理以及分类的小伙伴来说,面对信号数据真的是不知道该如何下手。既然大家来看这篇博文,我相信,大家与我一样,其中的痛楚无需多言。下面我就与大家分享一下,这段时间我对这一问题的感悟(新手上路,如有错误,请大家批评指正)。

首先我们需要对这一问题有一个宏观的认识。我们采集到的原始脑电信号包含了很多的噪声与干扰,这些在分类中都会影响分类性能,那么我们就需要先对信号去噪去干扰。这一步后得到的就是较为纯净的信号了,接下来就要对信号提取特征了,分类器是根据信号的特征进行学习建立模型的。那么该如何提取特征呢?在我处理的信号中,我需要分delta(1-3hz)、theta(4_7hz)、alpha (8-13hz)、beta(14-30hz)四个频带,因此我利用滤波器,先分别得到这四个频带的信号,然后再在这四个频带上提取特征。提取特征后我们利用特征矩阵进行分类任务。

下面我们来对基于脑电信号的分类任务进行分析:

1、我们首先采集到的是脑电的原始信号,例如有BDF格式、CNT格式等等,我们利用matlab处理不能直接读取这些格式的文件,那么我们就需要对这些格式的文件进行处理,将其保存为.mat格式的文件,这样matlab就能对其直接进行运算了。处理这些格式的文件可以使用eeglab工具包,这是一个图形化界面的处理工具包,当然也可以调用相关函数进行处理。关于eeglab工具包的详细信息就不在这里阐述了,大家可以参考eeglab工具包的官网进行下载和了解:EEGLAB官网

2、对原始脑电信号的格式文件处理后得到相关的.mat格式文件,此时便可以开始我们的信号处理。在这里假设我们采集了32通道的脑电信号,采样率为1000Hz,采集了10分钟,转化后的.mat格式文件的shape为32*600000,那么行向量就表示一个通道所采集的脑电信号,每一个通道有10min*60s*1000Hz个样本点。我们可以通过eeglab去除一些采集的不好的样本点,也可以利用一些算法进行去噪去干扰,例如去除工频干扰、利用滤波器滤波、去除眼电等,此处有一个思维导图,可以参考EEG预处理思维导图

3、提取特征时可以按通道提取,即将32个通道分开进行提取,在这里我们提取频域信号功率谱密度(PSD, 功率谱密度相关方法的MATLAB实现)。因为我需要分析delta、theta、alpha、bete四个频带,因此我先对当前处理的通道信号提取四个频带的信号。然后在每个频带上求其对应的功率谱密度。如果一个标签对应1s的数据,那么我们需要将信号按1s进行分段,即每1000个采样点求一个PSD值;然后将四个频带分别求出的特征值进行排列。此时一个通道(shape为1*600000)的数据就会变为shape为4*600的特征数据集,对32个通道的数据提取特征后,如果排列成3为则shape为32*4*600,如果排列成二维这共有32*4=128行,则shape为128*600,此时其对应的标签的shape应该为1*600。

这里给出一个简要的代码:

for i =1:channals %channals为通道数
    delta = butter_bandpass_filter(data(:,i), 1, 3, frequency,3);
    theta = butter_bandpass_filter(data(:,i), 4, 7, frequency,3);
    alpha = butter_bandpass_filter(data(:,i), 8, 13, frequency,3);
    beta  = butter_bandpass_filter(data(:,i), 14, 30, frequency,3);
    
    for j =1:sample % sample为采样点数
        psd_delta =         [psd_delta;compute_psd(delta(((j-1)*frequency*time_win+1):j*frequency*time_win, 1))];
    ...
    end
...
...
...
end

4、此时就可以将处理后的数据和标签输入到分类器中进行训练模型了。例如使用SVM进行分类,我们需要将特征矩阵转换为样本*维度的shape形式,那么就对特征矩阵和标枪向量同时进行转置后输入到svmtrain函数中,再利用predict函数进行预测。

具体的代码实现及讲解大家可以参考我的另一篇博文基于分类任务的信号(EEG)处理——代码分步解析

### 多通道EEG信号的采集与处理 #### LabVIEW中的硬件配置 为了实现实时多通道EEG信号的采集,在LabVIEW环境中需先设置合适的硬件接口。通常情况下,会选用NI的数据采集卡(DAQ),这类设备能够提供高精度模拟输入端口来连接EEG传感器[^1]。 ```c // 配置DAQmx VI节点用于创建任务并指定物理信道 daqmxCreateTask("", &taskHandle); daqmxCreateAIVoltageChan(taskHandle, "Dev1/ai0:7", "", DAQmx_Val_Cfg_Default, -10.0, 10.0, DAQmx_Val_Volts, NULL); ``` #### 数据流控制与时钟同步 对于多个电极产生的EEG信号而言,保持各通道间的时间一致性至关重要。通过设定公共采样率以及触发机制可以确保所有通道的数据被精确同步获取。此外,还需考虑缓冲区大小以适应持续时间较长的记录需求。 #### 实现预处理算法 一旦完成原始数据收集之后,则进入到初步过滤阶段。这一步骤旨在去除噪声干扰源比如工频干扰(50Hz或60Hz)以及其他可能存在的伪迹成分。常见的做法是应用带通滤波器来限定感兴趣的频率范围,并采用陷波滤波消除特定频率点上的污染项。 ```matlab % 应用带通滤波器于每条EEG轨迹上 [b,a]=butter(order,[lowcut highcut]/nyquist,'bandpass'); filteredData=filter(b,a,data); ``` #### 特征提取与模式识别 经过上述清理后的干净脑电信号可供进一步深入挖掘其潜在特征参数。例如计算功率谱密度分布情况、检测事件相关去同步化现象等都是常用的技术手段之一;而机器学习模型则可以帮助区分不同状态下的大脑活动模式从而支持临床诊断或是认知科学研究工作。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值