基于可穿戴式设备的癫痫检测多模态生理信号【附代码】
✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导毕业论文、期刊论文经验交流。✅ 专业定制毕设、代码✅如需沟通交流查看文章底部二维码1多模态生理信号特征提取与统计优化基于智能手表采集的加速度ACC、陀螺仪GYR、皮肤电EDA和表面肌电sEMG四种模态信号开展癫痫检测特征工程。时域特征包含均值、标准差、峰值因子、过零率和均方根值共20维频域特征通过10秒滑动窗FFT提取各频段0.5-4Hz4-8Hz8-13Hz13-30Hz的相对功率共16维非线性特征包含排列熵、样本熵以及去趋势波动分析标度指数共12维。总计提取48维候选特征。针对特征冗余提出一种基于统计检验的两阶段特征优化方法第一阶段使用Mann-Whitney U检验比较癫痫发作段与正常段特征差异保留p0.01的特征第二阶段对剩余特征计算组内相关系数剔除非对偶比较中一致性过高ICC0.9的冗余特征最终得到27维优化特征集。在包含23例癫痫患者、总计约800小时数据的CHB-MIT数据集上测试优化后特征在随机森林分类器上准确率达89.7%高于全特征集的82.1%且模型推理时间缩短38%。2基于注意力机制的多尺度卷积神经网络提出一种专用于多模态癫痫检测的深度学习模型。模型包含三个并行处理分支每个分支专门处理一对模态ACCGYR、EDA单模态、sEMG单模态各分支采用多尺度时间卷积卷积核长度分别为5、15、30对应捕捉0.5秒的快速抽搐、1.5秒的动作变化和3秒的行为模式。卷积后采用通道注意力机制SE模块对多尺度特征进行重标定增强重要尺度通道的响应。三支特征通过拼接后输入双向LSTM层以捕捉发作前后的时序依赖。最后通过全连接层和Sigmoid输出癫痫发作概率。在患者独立测试协议留一患者验证下该模型灵敏度为93.2%误报率0.22次/小时AUC达0.961优于单模态CNN和多模态基线模型。注意力权重的可视化表明在全面性强直-阵挛发作前8-10秒sEMG通道的注意力权重显著升高证实了肌电信号在早期预警中的关键作用。3MATLAB图形化癫痫检测系统开发为方便临床医生和患者使用开发了一款基于MATLAB App Designer的癫痫检测系统。系统主界面分为数据加载、特征分析、实时检测和报告生成四个面板。数据加载支持EDF格式原始信号导入自动分割窗口并以不同颜色显示ACC、GYR、EDA、sEMG波形。特征分析面板提供交互式特征选择用户可勾选拟参与检测的特征系统实时更新ROC曲线和性能指标。实时检测面板通过串口或TCP/IP接收智能手表数据流每秒进行一次预测若连续5秒检测发作概率超过0.8则发出声光报警和紧急联系人短信需手机端配合。系统内部封装了训练好的注意力多尺度CNN模型通过MATLAB的Python引擎调用。离线测试中系统对23例患者的全程记录进行事后分析平均检出率91.3%报警延迟中位数7.2秒为及时干预提供了宝贵时间。import torch import torch.nn as nn import numpy as np # 多尺度卷积模块 class MultiScaleConv(nn.Module): def __init__(self, in_ch, out_ch, kernel_sizes[5,15,30]): super().__init__() self.convs nn.ModuleList([nn.Conv1d(in_ch, out_ch, k, paddingk//2) for k in kernel_sizes]) self.se ChannelAttention(out_ch*len(kernel_sizes)) def forward(self, x): features [torch.relu(conv(x)) for conv in self.convs] combined torch.cat(features, dim1) return self.se(combined) class ChannelAttention(nn.Module): def __init__(self, ch, reduction4): super().__init__() self.fc nn.Sequential( nn.Linear(ch, ch//reduction), nn.ReLU(), nn.Linear(ch//reduction, ch), nn.Sigmoid() ) def forward(self, x): b, c, t x.size() y torch.mean(x, dim2) y self.fc(y).view(b, c, 1) return x * y # 特征提取函数 def extract_features(epoch_data, fs100): # epoch_data: (4, T) modal x time features [] for i in range(4): sig epoch_data[i] # 时域 features.append(np.mean(sig)) features.append(np.std(sig)) features.append(np.max(np.abs(sig)) / (np.sqrt(np.mean(sig**2))1e-6)) features.append(np.sum(np.diff(np.signbit(sig)))/len(sig)) # 频域 fft_vals np.abs(np.fft.rfft(sig)) features.append(np.sum(fft_vals[2:4])/np.sum(fft_vals)) # 0.5-4Hz # 非线性 features.append(sample_entropy(sig, 2, 0.2*np.std(sig))) return np.array(features) def sample_entropy(signal, m, r): N len(signal) A 0; B 0 for i in range(N-m): for j in range(N-m): if i ! j: if np.max(np.abs(signal[i:im]-signal[j:jm])) r: B 1 if np.max(np.abs(signal[i:im1]-signal[j:jm1])) r: A 1 return -np.log((A1)/(B1))如有问题可以直接沟通