声明:参考来源:https://zhuanlan.zhihu.com/p/34410111

生理信号数据常用的格式为edf,而matlab常用的是mat,txt。

如果已经在数据库里下载了edf格式的数据。不妨先了解下EDF格式具体内容:

HEADER RECORD

8 ascii : 数据格式的版本
80 ascii : 被试ID
80 ascii : 数据记录编号

8 ascii : 开始记录的日期 (dd.mm.yy) 
8 ascii : 开始记录的时间 (hh.mm.ss) 
8 ascii : 头比特数

44 ascii :保留给EDF+
8 ascii : 初始值-1,结束时被赋其他值

8 ascii : 数据持续记录时间,s 
4 ascii : 记录几种信号种类

ns * 16 ascii : 电极位置,体温等信息

ns * 80 ascii : 电极信息
ns * 8 ascii : ns * 幅值单位信息

ns * 8 ascii : ns * physical minimum (e.g. -500 or 34) 
ns * 8 ascii : ns * physical maximum (e.g. 500 or 40) 
ns * 8 ascii : ns * digital minimum (e.g. -2048) 
ns * 8 ascii : ns * digital maximum (e.g. 2047) 
ns * 80 ascii : 滤波器参数
ns * 8 ascii : 采样率
ns * 32 ascii : 采集信号类型

DATA RECORD 
nr of samples[1] * integer : first signal in the data record 
nr of samples[2] * integer : second signal 
.. 
nr of samples[ns] * integer : last signal

我们将matlab官方提供的读edf头文件的脚本跑一下:看看是否像如上格式

 [header,~] = edfread('Subject00_1.edf')

“edfRead ” version 2.10 (7.44 KB) by Brett Shoelson:

(温馨提醒:为保证后续阅读,手机用户长按松开拷贝地址到浏览器打开为宜)

http://cn.mathworks.com/matlabcentral/fileexchange/31900-edfread

下载代码,命令行运行结果如下:

我的数据结果:

符合翻译的Header的格式。

帧头之后就是数据。

这里原始数据我用了网上的另一个代码:因为他支持的格式更全,支持edf,rec转mat。

用的是 Alois Schloegl 的脚本。(点击下载源码)

https://files.cnblogs.com/files/myohao/edfsample.zip

mathworks官网也给出了列子:https://ww2.mathworks.cn/matlabcentral/fileexchange/31900-edfread?s_tid=prof_contriblnk

直接运行代码取变量S的前三列,即EDF数据前三通道的脑电数据,画出结果如下:

recorddata = recorddata';
%转置数据,一列为一个通道,采集的数据太长,只展示2000点
plot(recorddata(1:2000,1:3));

将工作区的变量S右键,数据另存为导出为txt。好了有了我们最熟悉的txt格式,接下来选出想分析的通道(列)进行分析就可以了。

(我的数据为一行代表一个通道)

接下来我们跑个简单的算法:FFT分析睡眠数据,我们提取出不同的节律,也就是不同的频段,进行功率谱估计。

以下是四种节律:

α/阿尔法脑波(ALPHA)在大脑中有时出现,有时消失,它并不总是存在。例如,在深睡情况下没有α波;如果一个人在激动状态下,或恐惧,愤怒时,大脑中也没有α脑波。α脑波在初睡或初醒时出现(即半睡半醒时),此时身体处于放松状态,并有自觉的警觉意识。

δ/德尔塔脑波(DELTA)只在深睡时出现。

θ/西塔脑波(THETA)在浅睡时出现。

β/贝塔脑波(BETA)在清醒时出现,伴有需努力能够达到的注意力集中。

不懂傅里叶变换原理的先来这里:最通俗的讲解传送门:

https://zhuanlan.zhihu.com/p/19759362

Matlab下FFT实现代码实例:

https://cn.mathworks.com/help/matlab/ref/fft.html?searchHighlight=FFT&s_tid=doc_srchtitle

由于添加了噪声,fft之后的数据强度接近0.5和1,但不完全相等

%fft部分实验,生成带噪声的数据,fft变换,再反变换回时域数据
%Y = fft(X,n)如果 X 是矩阵,则 fft(X) 将 X 的各列视为向量,并返回每列的傅里叶变换。
%fft的官方解释https://ww2.mathworks.cn/help/matlab/ref/fft.html?searchHighlight=FFT&s_tid=doc_srchtitle
Fs = 500;            % Sampling frequency
T = 1/Fs;             % Sampling period
L = length(recorddata(:,1));  % Length of signal
t = (0:L-1)*T;        % Time vector
%构造一个信号,其中包含幅值为 0.7 的 50 Hz 正弦量和幅值为 1 的 120 Hz 正弦量。
S = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t);
%用均值为零、方差为 4 的白噪声扰乱该信号。
X = S + 2*randn(size(t));
%在时域中绘制含噪信号。通过查看信号 X(t) 很难确定频率分量。
figure; plot(1000*t(1:50),X(1:50))
title('Signal Corrupted with Zero-Mean Random Noise');
xlabel('t (milliseconds)');
ylabel('X(t)');
%%
%计算信号的傅里叶变换。
Y = fft(X);
%计算双侧频谱 P2。然后基于 P2 和偶数信号长度 L 计算单侧频谱 P1。
P2 = abs(Y/L);
P1 = P2(1:L/2+1);%计算单侧频率
P1(2:end-1) = 2*P1(2:end-1);
%定义频域 f 并绘制单侧幅值频谱 P1。与预期相符,由于增加了噪声,幅值并不精确等于 0.7 和 1。一般情况下,较长的信号会产生更好的频率近似值。
f = Fs*(0:(L/2))/L;
figure; plot(f,P1)
title('Single-Sided Amplitude Spectrum of X(t)')
xlabel('f (Hz)')
ylabel('|P1(f)|')%%
%现在,采用原始的、未破坏信号的傅里叶变换并检索精确幅值 0.7 和 1.0。
Y = fft(S);
P2 = abs(Y/L);
P1 = P2(1:L/2+1);
P1(2:end-1) = 2*P1(2:end-1);figure; plot(f,P1)
title('Single-Sided Amplitude Spectrum of S(t)')
xlabel('f (Hz)')
ylabel('|P1(f)|')

有了FFT的函数,在主函数中调用,分割不同频率,分割不同时间,就得到需要的图片了。比如,我想得到10s-150s的θ/西塔脑波(THETA)值。部分源码在这:

http://www.cnblogs.com/myohao/p/8539001.html

测试结果如下

符合截取区间。

附:

主要的心电数据库:https://www.cnblogs.com/myohao/p/8538740.html

edf转txt, mat:https://files.cnblogs.com/files/myohao/edfsample.zip

上面没有给出来中间fft的过程,摸索一下再来补充~

脑电数据处理分析——edf转mat及fft相关推荐

  1. Analyzer脑电数据处理步骤

    Analyzer脑电数据处理步骤 1 简化版流程 2 详细版流程 2.1 设置数据路径的workspace 2.2 转换参考(New Reference 2.3 滤波(Filters) 2.4 ICA ...

  2. Python中FIR滤波和STFT滤波对比(MNE脑电数据处理)

    在脑电数据处理中滤波是很重要的一个步骤,直接影响后面的特征提取等计算流程.在之间写的博客中有过介绍(https://blog.csdn.net/zhoudapeng01/article/details ...

  3. CHB-MIT波士顿儿童医院癫痫EEG脑电数据处理-癫痫发作预测(六)

    CHB-MIT波士顿儿童医院癫痫EEG脑电数据处理-癫痫发作预测(六) 导入需要的包 各功能模块 数据集导入 模型训练 训练结果 保存模型 测试结果 导入需要的包 import numpy as np ...

  4. CHB-MIT波士顿儿童医院癫痫EEG脑电数据处理-通道选择(五)

    CHB-MIT波士顿儿童医院癫痫EEG脑电数据处理-通道选择(五) 概述 通道选择模型 通道选择 LightGBM模块代码 LightGBM模型训练 概述 由于癫痫发作时不是整个大脑区域都有相关的反映 ...

  5. 数据分析实战<一>脑电(EEG)分析

    这两天需要对预实验的脑电进行一个分类,在这里记录一下流程 脑电分析系列文章 mne官网 mne教程 随机森林分类 Python 多因素方差分析 文章目录 1. 脑电数据的处理 1.1 基本概念 1.2 ...

  6. 茗创:脑电数据处理业务

    文章来源于微信公众号(茗创科技),欢迎有兴趣的朋友搜索关注. 01 数据预处理 好的数据质量是获得可靠结果的前提,而预处理的质量往往对后处理的结果存在一定的影响.脑电的数据对噪音的敏感性很强,为了提高 ...

  7. 用MNE包进行Python脑电数据处理

    代码来自公众号"路同学". 这里仅仅把路同学总结的文档里面的代码挑出来了而已.为了方便想先试用一下MNE进行脑电预处理的友友. 这里加载的数据集是你的eeglab里面的sample ...

  8. 脑电溯源分析/源定位 EEG source analysis / Localization

    脑电溯源定位,即脑电逆向问题,是根据头表记录到的电位信号,反向推算出估计的脑内神经活动源的位置.方向和强度信息. 参考链接:脑电溯源定位 本质上,脑电逆问题是非线性优化问题,考虑到计算的复杂性,因而近 ...

  9. CHB-MIT波士顿儿童医院癫痫EEG脑电数据处理-2D-CNN(四)

    主要内容 1.数据提取 2.提取过程 1.数据提取 本次教程做适用于整体数据集上的处理工作,以不同的的处理代码展示整体的数据处理! 本次数据处理教程是没有做STFT变换,之间将提取的数据变换为适合2D ...

最新文章

  1. 微信同步通讯录服务器繁忙,企业微信同步通讯录时提示 mobile existed
  2. 在Centos中安装aria2c
  3. 请输入有效值,两个最接近的有效值分别为1和2.
  4. 两个listmap合并去重_我是如何用单机实现亿级规模题库去重的?
  5. 牛客多校10 - Tournament(找规律)
  6. AdaBoost 算法 入门
  7. NLP情感分析笔记(三):Faster 情感分析
  8. (并查集)~APTX4869(fzu 2233)
  9. 基于stc15f2k60s2芯片单片机编程(呼吸灯)
  10. 《开源公开课分享》:Java开源框架案例分享
  11. ubuntu wps安装
  12. U盘量产U盘扩容和U盘芯片检测
  13. 基于YYLabel的图文混排
  14. “死扛”高并发大流量,大麦抢票的技术涅槃之路
  15. win7 计算机设置命令,Win7设置开机启动项命令的方法
  16. Multi-Armed Bandits
  17. 深圳人行推出企业信用报告网银查询渠道
  18. 预测二手车的交易价格
  19. 羊吃草--二分图匹配
  20. SOPHP免费稳定的微信公众号开源框架

热门文章

  1. 微信小程序获取收货地址及存储收货地址
  2. 中兴ZTEWCDMA3G模块MF206
  3. 综合布线系统中直接与用户终端设备相连的子系统是什么呢?
  4. 15:Named Entity Recognition without Labelled Data: A Weak Supervision Approach
  5. 基于神经网络——鸢尾花识别(Iris)
  6. 虚拟现实产业发展白皮书(2019年)发布
  7. java毕业设计家居体验平台的设计与实现Mybatis+系统+数据库+调试部署
  8. led灯串怎么摆造型_用灯带设计的造型图片
  9. micropython中文社区 microbit_UpyCraft-micropython: 让Microbit发声
  10. A Verifiable Secret Shuffle of Homomorphic Encryptions学习笔记