原理

通过小波变换对运动想象信号进行特征提取,生成时频图像作为神经网络的输入。

实现

使用BCI竞赛2008–Graz dataset A中的A01受试者的数据作为数据集。

采样

采样频率250Hz,每个数据前三个为伪迹参考信号,后6个为EEG信号集,
每一个划成48次,四个任务,每个任务12次;
每次任务大概8s,每次大概从3-6s(750-1500点)为运动想像时间,
拟采集770-1462点,每个样本512个点,采样间隔20个点,采集25个样本;

%% 采样信号
clear;
fs = 250;     % 采样频率 250Hz
Na = 96735;   %
Nt = 48;      % 一个EEG信号集划成48次数据,即四个任务、每个任务12次
Ns = 25;      % 样本数 25个
Np = 20;      % 采样间隔20个点
N  = 256;
%%
x00 = load('A01T');
%%
for k=1:6  % 后6个为EEG信号集,即data {1,4} {1,5} {1,6} {1,7} {1,8} {1,9}x01 = x00.data{1, k+3}.X;    % EEG信号y01 = x00.data{1, k+3}.y;    % 类别t = x00.data{1, k+3}.trial;  % 试验(trials),包含伪迹t(Nt+1) = Na;%figurefor i = 1:Ntx0 = x01(t(i):t(i+1), :);%subplot(6,8,i);%plot(x0(:,1));xlim([0 2100]);ylim([-100 100]);for j = 1:Nsx1 = x0(750+Np*(j-1):750+Np*(j-1)+N-1, 1:22);x2 = (x1-min(x1(:)))/(max(x1(:))-min(x1(:)));  % 最大最小归一化XTr(:, :, 1, 1200*(k-1)+25*(i-1)+j) = x2;YTr(1, 1200*(k-1)+25*(i-1)+j) = categorical(y01(i));endclear x0; % 每次迭代x0的长度会发生变化end
endsave SubA_Train XTr YTr;

小波变换

%% 小波变换
clear
load SubA_Train;
%%id=[8 10 12];  % 选三个电极,
parfor i=1:length(XTr)for j=1:3 x = XTr(:,id(j),1,i);x1 = abs(cwt(x));  % 小波变换XTrft(:,:,j,i) = (x1-min(x1(:)))/(max(x1(:))-min(x1(:)));   % 归一化end
endsave SubA_TF_Train XTrft YTr;%% 可视化一个样本为彩色图片
size(XTrft(:,:,:,1))  % 51×256×3
categories(YTr)  % 查看类别数figure;
imshow(XTrft(:,:,:,1))

时频图样张:

把时频图保存到本地文件夹

  • 图片的尺寸为51×256×3
  • 4个文件夹(0、1、2、3),每个文件夹的图片为同一类信号
%% 转成图片格式,先新建一个images文件夹,然后在images里面新建4个文件夹,分别为0、1、2、3.
load SubA_TF_Train
for i = 1:7200k = double(string(YTr(1,i)))-1;  % labelimwrite(XTrft(:,:,:,i),['images\',num2str(k)','\',num2str(i),'.jpg'])  % 保存为图片
end

训练和评估

利用deepNetworkDesigner搭建网络,导出到工作区,训练。需要注意的是,网络的输出层为4类。可以采用典型的网络,例如Googlenet、resnet等。

clear;%% 导入数据集
imdsTrain = imageDatastore("images","IncludeSubfolders",true,"LabelSource","foldernames");
[imdsTrain, imdsValidation] = splitEachLabel(imdsTrain,0.8,"randomized");% 调整图像大小以匹配网络输入层
% inputsize = [256 256 3];
inputsize = [51 256 3];
augimdsTrain = augmentedImageDatastore(inputsize,imdsTrain);
augimdsValidation = augmentedImageDatastore(inputsize,imdsValidation);%% 网络结构alexnet
% Net = alexnet;
% Net = googlenet;
% Net = inceptionresnetv2;
deepNetworkDesigner%% 训练网络
miniBatchSize = 128;
learnRate = 0.0001;
valFrequency = floor(0.8*7200.0/miniBatchSize);
options = trainingOptions('adam', ...'InitialLearnRate',learnRate, ...'MaxEpochs',20, ...'MiniBatchSize',miniBatchSize, ...'Shuffle','every-epoch', ...'Plots','training-progress', ...'Verbose',false, ...'ValidationData',augimdsValidation, ...'ValidationFrequency',valFrequency, ...'LearnRateSchedule','piecewise', ...'LearnRateDropFactor',0.1, ...'LearnRateDropPeriod',5);
trainedNet = trainNetwork(augimdsTrain, lgraph_1, options);%% 评估
% 准确率
% 训练集
[YPred,probs] = classify(trainedNet,augimdsTrain);
accuracy = mean(YPred == imdsTrain.Labels)
disp("training acc: " + accuracy*100 + "%")
% 验证集
[YPred,probs] = classify(trainedNet,augimdsValidation);
accuracy = mean(YPred == imdsValidation.Labels)
disp("val acc: " + accuracy*100 + "%")% 混淆矩阵
figure('Units','normalized','Position',[0.2 0.2 0.4 0.4]);
cm = confusionchart(imdsValidation.Labels,YPred);
cm.Title = 'Confusion Matrix for Validation Data';
cm.ColumnSummary = 'column-normalized';
cm.RowSummary = 'row-normalized';

结果

  • alexnet

    • training acc: 99.3924%
    • val acc: 84.7917%
  • resnet
    • training acc: 100%
    • val acc: 85.4861%
  • simplenet(我自己搭建的网络)
    • training acc: 98.7674%
    • val acc: 90.0694%

python版本的数据集

  • https://github.com/bregydoc/bcidatasetIV2a

基于小波分析与深度学习的脑电信号分类(matlab)相关推荐

  1. 基于Pytorch深度学习的脑肿瘤分类识别

  2. 阅读笔记3:基于深度学习的运动想象脑电信号分类算法研究

    1.论文信息 题目:基于深度学习的运动想象脑电信号分类算法研究 作者佟歌 单位:哈尔滨工程大学控制科学与工程 发表时间:201803 2.笔记 2.1 脑电信号采集及预处理 2.1.1脑电信号分析方法 ...

  3. 三维深度学习中的目标分类与语义分割

    (转载的文章,仅供学习,如有侵权请随时联系删帖) 在过去的几年中,基于RGB的深度学习已经在目标分类与语义分割方面取得了非常好的效果,也促进了很多技术的发展,深度学习在现实生活中的应用也越来越多.但是 ...

  4. 014基于深度学习的脑电癫痫自动检测系统-2018(300引用)

    An automated system for epilepsy detection using EEG brain signals based on deep learning approach   ...

  5. (脑肿瘤分割笔记:四十四)基于深度学习的脑肿瘤分割的综述

    目录 Abstract&Introduction 脑肿瘤分割任务面临的主要挑战 深度学习方法的脑肿瘤分割的方法 脑肿瘤分割方法一:设计有效的架构分割方法 针对于不同目的的模型 对于精度有要求的 ...

  6. 深度神经网络对脑电信号运动想象动作的在线解码

    目录 简介 网络模型 结果比较 结论 本分享为脑机学习者Rose整理发表于公众号:脑机接口社区 QQ交流群:941473018 简介 近年来,深度学习方法的快速发展使得无需任何特征工程的端到端学习成为 ...

  7. 基于弱监督深度学习的医学图像分割方法综述

    基于弱监督深度学习的医学图像分割方法综述 摘要:基于深度学习的医学影像分割尽管精度在不断的提升,但是离不开大规模的高质量标注数据的训练,被称为弱监督学习的深度学习的一个分支正在帮助医生通过减少对完整和 ...

  8. 语义分割:基于openCV和深度学习(二)

    语义分割:基于openCV和深度学习(二) Semantic segmentation in images with OpenCV 开始吧-打开segment.py归档并插入以下代码: Semanti ...

  9. 语义分割:基于openCV和深度学习(一)

    语义分割:基于openCV和深度学习(一) Semantic segmentation with OpenCV and deep learning 介绍如何使用OpenCV.深度学习和ENet架构执行 ...

最新文章

  1. python3中format方法_python3 自定制format格式化,很多很多的内置方法。。。。。。。。。。。...
  2. “AI让老百姓最多跑一次”:智源科学家打造下一代政务服务智能助手
  3. 当当的羊毛又该剪了!官方活动基础上的额外优惠券,速领!
  4. PPT 2016 后台播放功能
  5. 算法笔记--字符串hash
  6. 发生android.view.ViewRoot$CalledFromWrongThreadException异常的解决方案
  7. No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
  8. Spring Cloud 之 Ribbon,Spring RestTemplate 调用服务使用Hystrix熔断器
  9. loj#6436. 「PKUSC2018」神仙的游戏(NTT)
  10. 计蒜客---N的-2进制表示
  11. symbol lookup error: undefined symbol:PySlice_Unpack
  12. GridView点击行触发SelectedIndexChanged事件
  13. html制作省市区三级联动,js实现省市区三级联动
  14. MIPI CSI转TTL/LVDS/BT656/BT601/BT1120
  15. java中 移位运算符_java中的移位运算符心得总结
  16. 一个Android菜鸡的2020之旅
  17. 山西最新五大姓氏排名发布,排名第一的是王,第二的竟是……
  18. 百度后端二面有哪些内容,万字总结(一)
  19. codeblocks 添加多个工程文件 codeblocks添加已存在工程
  20. Linux系统安装教程(非双系统/虚拟机安装教程)

热门文章

  1. 通信协议——Uart、RS232、RS485、SPI
  2. Linux移动光标指令hkjl,使用 HPC Pack 在 Linux VM 上執行 OpenFOAM - Azure Virtual Machines | Microsoft Docs...
  3. PrintWriter out=response.getWriter()的问题
  4. 劳务员培训建筑八大员培训劳务员对劳务分包企业管理的建议
  5. jQuery_02 快速入门 $作用和方法
  6. 虚拟机安装---模板机准备1(最小化安装)
  7. SCI论文思维导图:写作技巧(2)
  8. 一文搞定子网划分!子网掩码!超详细例题解析!
  9. 华为G9怎么找到云相册_华为G9 Plus图赏:全方位均衡的中端机
  10. echarts3.0 markline 最大值 最小值 均值 方差 标准差 包络 正态分布