✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导毕业论文、期刊论文经验交流。✅ 专业定制毕设、代码✅如需沟通交流可以私信或者点击《获取方式》1基于连续小波变换与注意力机制的SSVEP特征提取为充分利用SSVEP信号的时频域信息设计一种结合连续小波变换和注意力机制的特征提取方法。原始脑电信号经过0.5-40 Hz带通滤波后选取Oz、O1、O2、POz等8个视觉相关导联的数据以滑动时间窗1秒长度步进0.1秒截取片段。每个导联片段进行Morlet复小波变换得到时频图频率范围5-30 Hz时间0-1秒。小波变换参数中母小波中心频率设为1 Hz带宽参数fb2以获得良好的时频分辨率。将8个导联的时频图视为8通道2D图像送入设计的频带注意力网络中。网络由卷积层、频带注意力模块和融合层组成。频带注意力模块计算每个频率维度的重要性权重通过对各通道的时频图在频域方向做全局平均池化和最大池化经过1×3卷积和Sigmoid激活生成注意力掩模加权调整时频特征。该机制能自动突出SSVEP的基频和次谐波成分抑制自发脑电噪声。在自建的包含12名被试、4类刺激6,8,9,10 Hz的SSVEP数据集上提取的特征在1秒时间窗下经过线性判别分析分类准确率达到89.3%相比无注意力的CWT特征提高了5.8个百分点证明了注意力对频带选择的积极作用。2混浊图与递归图双流CNN融合分类针对短时窗下SSVEP信号可用周期数少、分类困难的问题提出基于混浊图和递归图的双流卷积神经网络分类模型。将单导联的1秒脑电信号分别转换为未阈值递归图和混浊图。递归图采用嵌入维数3、延迟5个采样点生成128×128的对称图像混浊图通过计算相空间中轨迹与正切空间的夹角余弦并取绝对值绘制。这两类图像从不同角度捕捉信号的确定性和非线性动力学特征。构建两个独立的CNN分支递归图支路使用5层卷积池化混浊图支路结构类似但卷积核尺寸适配混浊图的纹理特征。两支路在全连接层前进行特征拼接最后输出4类分类。采用自研的STRP-CNN模型融合空间注意力增强递归图特定区域提高对噪声的鲁棒性。在相同数据集0.8秒时间窗下单一最优导联Oz的递归图CNN准确率为74.2%混浊图CNN为71.6%双流融合后达到81.5%信息传输率ITR为59.8 bits/min。时间窗进一步缩短至0.5秒时融合模型仍有67.3%的准确率相比传统CCA算法高9.2个百分点体现了短时窗分类的显著优势。3在线迁移学习与自适应校准为解决跨被试和跨时段脑电信号分布差异导致的性能下降问题建立了基于在线迁移学习的自适应校准框架。预训练好的双流CNN模型作为源模型在新被试进行首次试验前采集其50个试次约150秒的校准数据作为目标域小样本。采用域对抗迁移学习策略在源模型的卷积层之后插入一个梯度反转层和一个域判别器与分类器联合微调。微调时固定浅层卷积层仅更新深层和域判别器及分类器采用Adam优化器学习率1e-4迭代15个epoch。在线使用阶段系统每完成5个试次根据识别置信度预测概率0.95且正确的试次累积可靠样本当累积超过20个时触发小规模重训练进一步微调模型以适应被试状态变化。在8名新被试的跨被试实验中无校准时的平均准确率为72.3%经预校准后提升至84.6%再经过5个在线更新周期后达到88.9%非常接近被试内训练的精度91.2%ITR达70.3 bits/min。框架在下肢外骨骼BCI系统中应用成功通过12条脑电指令控制外骨骼完成站立、迈步、转向、停止等动作在线测试10名被试平均任务完成时间为23.5秒路径偏差小于0.2米展示了良好的自适应性和实用性。import numpy as np import pywt from scipy.signal import butter, lfilter from pyts.image import RecurrencePlot import torch import torch.nn as nn import torch.nn.functional as F # Morlet连续小波变换生成时频图 def cwt_scalogram(eeg_epoch, fs250, freq_range(5,30)): scales np.arange(freq_range[0], freq_range[1]1) scales_morlet fs / (2 * scales * 1.03) coef, freqs pywt.cwt(eeg_epoch, scales_morlet, cmor1.5-2.0, sampling_period1/fs) power np.abs(coef) ** 2 return power # shape (n_freqs, time) # 频带注意力模块 class FrequencyAttention(nn.Module): def __init__(self, in_channels): super().__init__() self.avg_pool nn.AdaptiveAvgPool2d((in_channels, 1)) self.max_pool nn.AdaptiveMaxPool2d((in_channels, 1)) self.conv nn.Conv1d(2, 1, kernel_size3, padding1) def forward(self, x): # x: (B, C, H, W) 假设H为频率维度 avg self.avg_pool(x) # (B, C, H, 1) - transpose max_ self.max_pool(x) pooled torch.cat([avg, max_], dim1) # (B, 2, H, 1) pooled pooled.squeeze(-1) # (B, 2, H) attn self.conv(pooled).unsqueeze(-1) # (B, 1, H, 1) attn torch.sigmoid(attn) return x * attn # 递归图生成 def recurrence_plot(segment, dim3, tau5): rp RecurrencePlot(dimensiondim, time_delaytau, thresholdpercentage_points, percentage20) rp_img rp.fit_transform(segment.reshape(1,-1))[0] return rp_img # 双流CNN模型 class DualStreamCNN(nn.Module): def __init__(self, num_classes4): super().__init__() self.rp_conv nn.Sequential( nn.Conv2d(1, 32, 3), nn.ReLU(), nn.MaxPool2d(2), nn.Conv2d(32, 64, 3), nn.ReLU(), nn.AdaptiveAvgPool2d((1,1)) ) self.chaos_conv nn.Sequential( nn.Conv2d(1, 32, 3), nn.ReLU(), nn.MaxPool2d(2), nn.Conv2d(32, 64, 3), nn.ReLU(), nn.AdaptiveAvgPool2d((1,1)) ) self.fc nn.Linear(128, num_classes) def forward(self, rp, chaos): f1 self.rp_conv(rp).flatten(1) f2 self.chaos_conv(chaos).flatten(1) combined torch.cat([f1, f2], dim1) return self.fc(combined) # 域对抗迁移学习简化梯度反转 class GradientReversal(torch.autograd.Function): staticmethod def forward(ctx, x, alpha1.0): ctx.alpha alpha return x.view_as(x) staticmethod def backward(ctx, grad_output): return grad_output * -ctx.alpha, None # 演示 eeg_sample np.random.randn(250) scalogram cwt_scalogram(eeg_sample) print(时频图形状:, scalogram.shape) rp recurrence_plot(eeg_sample) print(递归图形状:, rp.shape)⛳️ 关注我持续更新科研干货
下肢外骨骼SSVEP脑机接口信号感知与相频特征分析【附程序】
发布时间:2026/7/16 10:03:46
✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导毕业论文、期刊论文经验交流。✅ 专业定制毕设、代码✅如需沟通交流可以私信或者点击《获取方式》1基于连续小波变换与注意力机制的SSVEP特征提取为充分利用SSVEP信号的时频域信息设计一种结合连续小波变换和注意力机制的特征提取方法。原始脑电信号经过0.5-40 Hz带通滤波后选取Oz、O1、O2、POz等8个视觉相关导联的数据以滑动时间窗1秒长度步进0.1秒截取片段。每个导联片段进行Morlet复小波变换得到时频图频率范围5-30 Hz时间0-1秒。小波变换参数中母小波中心频率设为1 Hz带宽参数fb2以获得良好的时频分辨率。将8个导联的时频图视为8通道2D图像送入设计的频带注意力网络中。网络由卷积层、频带注意力模块和融合层组成。频带注意力模块计算每个频率维度的重要性权重通过对各通道的时频图在频域方向做全局平均池化和最大池化经过1×3卷积和Sigmoid激活生成注意力掩模加权调整时频特征。该机制能自动突出SSVEP的基频和次谐波成分抑制自发脑电噪声。在自建的包含12名被试、4类刺激6,8,9,10 Hz的SSVEP数据集上提取的特征在1秒时间窗下经过线性判别分析分类准确率达到89.3%相比无注意力的CWT特征提高了5.8个百分点证明了注意力对频带选择的积极作用。2混浊图与递归图双流CNN融合分类针对短时窗下SSVEP信号可用周期数少、分类困难的问题提出基于混浊图和递归图的双流卷积神经网络分类模型。将单导联的1秒脑电信号分别转换为未阈值递归图和混浊图。递归图采用嵌入维数3、延迟5个采样点生成128×128的对称图像混浊图通过计算相空间中轨迹与正切空间的夹角余弦并取绝对值绘制。这两类图像从不同角度捕捉信号的确定性和非线性动力学特征。构建两个独立的CNN分支递归图支路使用5层卷积池化混浊图支路结构类似但卷积核尺寸适配混浊图的纹理特征。两支路在全连接层前进行特征拼接最后输出4类分类。采用自研的STRP-CNN模型融合空间注意力增强递归图特定区域提高对噪声的鲁棒性。在相同数据集0.8秒时间窗下单一最优导联Oz的递归图CNN准确率为74.2%混浊图CNN为71.6%双流融合后达到81.5%信息传输率ITR为59.8 bits/min。时间窗进一步缩短至0.5秒时融合模型仍有67.3%的准确率相比传统CCA算法高9.2个百分点体现了短时窗分类的显著优势。3在线迁移学习与自适应校准为解决跨被试和跨时段脑电信号分布差异导致的性能下降问题建立了基于在线迁移学习的自适应校准框架。预训练好的双流CNN模型作为源模型在新被试进行首次试验前采集其50个试次约150秒的校准数据作为目标域小样本。采用域对抗迁移学习策略在源模型的卷积层之后插入一个梯度反转层和一个域判别器与分类器联合微调。微调时固定浅层卷积层仅更新深层和域判别器及分类器采用Adam优化器学习率1e-4迭代15个epoch。在线使用阶段系统每完成5个试次根据识别置信度预测概率0.95且正确的试次累积可靠样本当累积超过20个时触发小规模重训练进一步微调模型以适应被试状态变化。在8名新被试的跨被试实验中无校准时的平均准确率为72.3%经预校准后提升至84.6%再经过5个在线更新周期后达到88.9%非常接近被试内训练的精度91.2%ITR达70.3 bits/min。框架在下肢外骨骼BCI系统中应用成功通过12条脑电指令控制外骨骼完成站立、迈步、转向、停止等动作在线测试10名被试平均任务完成时间为23.5秒路径偏差小于0.2米展示了良好的自适应性和实用性。import numpy as np import pywt from scipy.signal import butter, lfilter from pyts.image import RecurrencePlot import torch import torch.nn as nn import torch.nn.functional as F # Morlet连续小波变换生成时频图 def cwt_scalogram(eeg_epoch, fs250, freq_range(5,30)): scales np.arange(freq_range[0], freq_range[1]1) scales_morlet fs / (2 * scales * 1.03) coef, freqs pywt.cwt(eeg_epoch, scales_morlet, cmor1.5-2.0, sampling_period1/fs) power np.abs(coef) ** 2 return power # shape (n_freqs, time) # 频带注意力模块 class FrequencyAttention(nn.Module): def __init__(self, in_channels): super().__init__() self.avg_pool nn.AdaptiveAvgPool2d((in_channels, 1)) self.max_pool nn.AdaptiveMaxPool2d((in_channels, 1)) self.conv nn.Conv1d(2, 1, kernel_size3, padding1) def forward(self, x): # x: (B, C, H, W) 假设H为频率维度 avg self.avg_pool(x) # (B, C, H, 1) - transpose max_ self.max_pool(x) pooled torch.cat([avg, max_], dim1) # (B, 2, H, 1) pooled pooled.squeeze(-1) # (B, 2, H) attn self.conv(pooled).unsqueeze(-1) # (B, 1, H, 1) attn torch.sigmoid(attn) return x * attn # 递归图生成 def recurrence_plot(segment, dim3, tau5): rp RecurrencePlot(dimensiondim, time_delaytau, thresholdpercentage_points, percentage20) rp_img rp.fit_transform(segment.reshape(1,-1))[0] return rp_img # 双流CNN模型 class DualStreamCNN(nn.Module): def __init__(self, num_classes4): super().__init__() self.rp_conv nn.Sequential( nn.Conv2d(1, 32, 3), nn.ReLU(), nn.MaxPool2d(2), nn.Conv2d(32, 64, 3), nn.ReLU(), nn.AdaptiveAvgPool2d((1,1)) ) self.chaos_conv nn.Sequential( nn.Conv2d(1, 32, 3), nn.ReLU(), nn.MaxPool2d(2), nn.Conv2d(32, 64, 3), nn.ReLU(), nn.AdaptiveAvgPool2d((1,1)) ) self.fc nn.Linear(128, num_classes) def forward(self, rp, chaos): f1 self.rp_conv(rp).flatten(1) f2 self.chaos_conv(chaos).flatten(1) combined torch.cat([f1, f2], dim1) return self.fc(combined) # 域对抗迁移学习简化梯度反转 class GradientReversal(torch.autograd.Function): staticmethod def forward(ctx, x, alpha1.0): ctx.alpha alpha return x.view_as(x) staticmethod def backward(ctx, grad_output): return grad_output * -ctx.alpha, None # 演示 eeg_sample np.random.randn(250) scalogram cwt_scalogram(eeg_sample) print(时频图形状:, scalogram.shape) rp recurrence_plot(eeg_sample) print(递归图形状:, rp.shape)⛳️ 关注我持续更新科研干货