被老师坑了做这个项目,要用脑电分析,现在共享一下一些文档,有好心人告诉我一下怎么转码吗?

# coding=utf8
## 进行带通滤波,并进行小波变换,画出原始的小波图像
# 可以选择的是小波的数据的显示
# 还要注意小波图的大小
# CWT可以完成很多事情,但是效果不一定好
import mne
import matplotlib.pyplot as plt
import numpy as np
import pywt
import scipy.io
from scipy import signal
from sklearn import preprocessing
import os
import gc
import cv2
import glob
import scipy.io as scioeventDescription = {'276': "eyesOpen", '277': "eyesClosed", '768': "startTrail", '769': "cueLeft",'770': "cueRight", '781': "feedback", '783': "cueUnknown",'1023': "rejected", '1077': 'horizonEyeMove', '1078': "verticalEyeMove",'1079': "eyeRotation", '1081': "eyeBlinks", '32766': "startRun"}ch_types = ['eeg', 'eeg', 'eeg', 'eog', 'eog', 'eog']
ch_names = ['EEG_Cz', 'EEG_C3', 'EEG_C4', 'EOG_ch01', 'EOG_ch02', 'EOG_ch03']
label_name = ["left", "right"]  # 标签
time_label = ["4_55", "55_7"]def butter_bandpass_filtfilt(data, cutoff, f_low, f_high, order=8):  # 巴特沃得滤波# data 输入# cutoff  采集频率# f_low 下限频率# f_high 上限频率# order 阶数w_down = 2 * f_low / cutoffw_up = 2 * f_high / cutoffb, a = signal.butter(order, [w_down, w_up], 'bandpass', analog=False)output = signal.filtfilt(b, a, data, axis=0)return outputif __name__ == "__main__":wavlist = pywt.wavelist(kind='continuous')for j in range(1, 10):base_line = None# base_line = (None,None)#wavename = 'cmor1-1'sampling_rate = 250totalscal = 600fc = pywt.central_frequency(wavename)cparam = 2 * fc * totalscalscales = cparam / np.arange(totalscal, 1, -1)left_num = 0right_num = 0gc.enable()data_list = glob.glob(f"..\\source_data\\BCICIV_2b_gdf\\B0" + str(j) + "0*.gdf")  # 实验数据lable_path = "..\\source_data\\BCICIV_2b_gdf\\true_labels\\"save_path = "..\\PIC_2\\0" + str(j) + "\\CWT_PIC\\" + wavename + "_minmax_noeq_nobaseline_300x100" + "\\"for flie in data_list:print(flie)file_name = flie.split("\\")[-1].split(".")[0]file_type = file_name[-1]rawDataGDF = mne.io.read_raw_gdf(flie, preload=True, eog=['EOG:ch01', 'EOG:ch02', 'EOG:ch03'])# 创建数据的描述信息info = mne.create_info(ch_names=ch_names, sfreq=rawDataGDF.info['sfreq'], ch_types=ch_types)# 创建数据结构体data = np.squeeze(np.array([rawDataGDF['EEG:Cz'][0], rawDataGDF['EEG:C3'][0], rawDataGDF['EEG:C4'][0], rawDataGDF['EOG:ch01'][0],rawDataGDF['EOG:ch02'][0], rawDataGDF['EOG:ch03'][0]]))# 创建RawArray类型的数据rawData = mne.io.RawArray(data, info)# 获取事件event, _ = mne.events_from_annotations(rawDataGDF)event_id = {}for i in _:  # 整理event_idevent_id[eventDescription[i]] = _[i]# 提取epochepochs4_55 = mne.Epochs(rawData, event, event_id, tmin=4, tmax=5.5, baseline=base_line,event_repeated='merge')epochs55_7 = mne.Epochs(rawData, event, event_id, tmin=5.5, tmax=7, baseline=base_line,event_repeated='merge')##得到epochs,可以得到事件的列表。for time in time_label:if time == "4_55":epochs = epochs4_55if time == "55_7":epochs = epochs55_7if file_type == "T":ev_left = epochs['cueLeft']ev_right = epochs['cueRight']left_data = ev_right.get_data()right_data = ev_left.get_data()if file_type == "E":left_data = []right_data = []ev_Unknown = epochs['cueUnknown']unknow_data = ev_Unknown.get_data()labels = scio.loadmat(lable_path + file_name + ".mat")["classlabel"]j = 0for label in labels:if label == 1:left_data.append(unknow_data[j])if label == 2:right_data.append(unknow_data[j])j = j + 1# 得到左手或者右手的数据。left_data = np.array(left_data)right_data = np.array(right_data)# 小波的系数for trip_label in label_name:if trip_label == "left":data = left_datanum = left_numif trip_label == "right":data = right_datanum = right_num# 先对左手进行滤波加进行小波变换,然后把图存放在指定的文件夹中  \\left\\通道名称[trip_num, channel_num, data_num] = data.shapefor i in range(trip_num):num = num + 1for j in range(channel_num):print(trip_label, "prossing", num)print("channle", ch_names[j])tmp_data = data[i, j, :]  # 取出一个通道的数据tmp_data_filter = butter_bandpass_filtfilt(tmp_data, 250, 7, 40)  # 进行带通滤波 7-30Hz 8阶滤波器min_max_scaler = preprocessing.MinMaxScaler()  # 默认为范围0~1,拷贝操作tmp_data_filter_min_max = np.squeeze(min_max_scaler.fit_transform(tmp_data_filter.reshape(-1, 1)))  # 变成0-1之间进行归一化。[cwtmatr, frequencies] = pywt.cwt(tmp_data_filter_min_max, scales, wavename,1.0 / sampling_rate)  # 进行小波变换# 参数需要选择,进行比较 小波出来是个复数,也需要继续进行分类min_frequency = np.sum(frequencies >= 8)max_frequency = frequencies.shape[0] - np.sum(frequencies <= 38)  # 要选频段,不能全部进去# 计算需要的频带,我们需要的在[max_frequency:min_frequency]之间abs_cwtmatr = abs(cwtmatr[max_frequency:min_frequency])  # 这里是求绝对值,如果小波基不一样就要改一下abs_cwtmatr_min_max = min_max_scaler.fit_transform(abs_cwtmatr)  # 取最大最小值,让图像明显一点pic_data = np.array(abs_cwtmatr_min_max * 255, dtype='uint8')  # 直接转换成图像# pic_data_equalizeHist = cv2.equalizeHist(pic_data)  # 直方图均衡化,让图片更明显一点path_saving = save_path + trip_label + "\\" + ch_names[j]  # 保存的目录if not os.path.exists(path_saving):  # 创建目录os.makedirs(path_saving)pic_data = cv2.resize(pic_data, (300, 100), interpolation=cv2.INTER_AREA)cv2.imwrite(path_saving + "\\" + time + "_" + str(num) + ".png", pic_data)  # 保存图if trip_label == "left":left_num = numif trip_label == "right":right_num = num

python读取BCI的gdf数据相关推荐

  1. python读取mysql中表内数据_Python读取MySQL表数据的方法介绍

    这篇文章主要为大家详细介绍了Python如何读取MySQL数据库表数据,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文实例为大家分享了Python读取MySQL数据库表数据的具体代码,供大家参 ...

  2. python读取csv表格的数据并用matplotlib画曲线图

    前言 python读取csv表格的数据并用matplotlib回曲线图 1.导入相关库 import matplotlib.pyplot as plt import pandas as pd impo ...

  3. python读取mysql中的数据_Python笔记:用Python读取MySQL中的数据

    Python处理数据分析的优势,很多人都知道(可以实现更复杂.更灵活的操作,包括数据预处理.数据可视化输出等),但是加载到Python中的数据,只是临时存储在内存中的一张虚拟表(退出之后就会被释放掉了 ...

  4. python 显示表格数据_python显示excel表格数据-怎么用python读取excel表格的数据

    怎么用python读取excel表格的数据 #导入包 import xlrd #设置路径 path='C:\\Users\\jyjh\\Desktop\\datap.xlsx' #打开 data=xl ...

  5. python读取excel某列数据

    文章目录 一.python读取excel某列数据 二.将读取的数据变为浮点数 一.python读取excel某列数据 import xlrdworksheet = xlrd.open_workbook ...

  6. 使用python读取excel中的数据,并绘制折线图

    使用python读取excel中的数据,并绘制折线图 做实验的时候采集到一些数据,从文本拷贝到excel,然后从十六进制转换成十进制.图表是分析数据的有利工具,使用python绘制出的图表简明美观.所 ...

  7. python开发的程序中以电子表格显示数据_使用 Python 读取电子表格中的数据实例详解...

    Python 是最流行.功能最强大的编程语言之一.由于它是自由开源的,因此每个人都可以使用.大多数 Fedora 系统都已安装了该语言.Python 可用于多种任务,其中包括处理逗号分隔值(CSV)数 ...

  8. python如何读取excel数据-使用Python读取电子表格中的数据

    Python 是最流行.功能最强大的编程语言之一.由于它是自由开源的,因此每个人都可以使用.大多数 Fedora 系统都已安装了该语言.Python 可用于多种任务,其中包括处理逗号分隔值(CSV)数 ...

  9. python 读取csv_Python实现CSV数据的读取--两种方法实现

    原博文 2016-08-22 16:42 − 方法一: 方法二: ... 相关推荐 2019-12-08 09:48 − CSV csv文件格式是一种通用的电子表格和数据库导入导出格式.最近我调用RP ...

最新文章

  1. BB84和B92协议
  2. Openfiler 2.3配置及Win2k8 iSCSI应用系列之二
  3. linux c 创建子进程 执行任务
  4. 用《叩响C#之门》复习C#基础知识 第五章 枚举、结构体和数组
  5. 文献学习(part8)--A community detection algorithm based on graph compression...
  6. 为什么肯德基旁边总有一家麦当劳
  7. SAP Spartacus 的 Above-the-Fold Loading 加载机制
  8. ABAP下载的病毒扫描Virus Scan
  9. datax的工具配置oracle,完全小白级DataX安装配置过程详解
  10. 值得收藏的Python小技巧:这17个骚操作你都OK吗?
  11. 世界杯迄今最火的一场比赛 一文看懂世界杯背后的阿里云黑科技
  12. WCF读取配置动态生成客户端对象
  13. @submit.native.prevent
  14. CD Linux启动盘,CDlinux硬盘启动制作方法。CDlinux硬盘怎样启动制作?
  15. JavaScript验证 IP/域名格式
  16. vue项目的IE兼容问题
  17. 【python】使用py3-bencode打开torrent文件
  18. 2021:Check it again:Progressive Visual Question Answering via Visual Entailment通过视觉暗示进行渐进式视觉问答
  19. websocket给指定客户端推送消息
  20. 【happyz】MATLAB-FM仿真01

热门文章

  1. ibm750服务器维护,IBM服务器IBM Power 750
  2. 制作一个简易的UGUI无限滑动框(Unity)
  3. 智能泊车进入「搭载率」攀升期,年度竞争力TOP10供应商榜单发布
  4. 我的电力行业求职经历(供电局电力设计院面经
  5. VMware安装Ubuntu开启蓝屏解决方案
  6. 京东618脚本2021最新 (仿兜兜风f大佬作品,亲测有效)
  7. BBS论坛项目相关-5:评论模块
  8. vue 地图可视化 (2)
  9. AI外呼机器人系统搭建和私有云部署
  10. 论文笔记:Pay More Attention to History: A Context Modeling Strategy for Conversational Text-to-SQL