专栏首页脑机接口Python-生成模拟原始脑电数据

Python-生成模拟原始脑电数据

在实验中有时需要原始脑电数据来进行模拟实验,但又限于实验条件的不足,需要构造模拟的原始脑电数据。

本示例通过多次重复所需的源激活来生成原始数据。

案例介绍

# 导入工具包
import numpy as np
import matplotlib.pyplot as plt

import mne
from mne import find_events, Epochs, compute_covariance, make_ad_hoc_cov
from mne.datasets import sample
from mne.simulation import (simulate_sparse_stc, simulate_raw,
                            add_noise, add_ecg, add_eog)
%matplotlib auto

data_path = sample.data_path()
raw_fname = data_path + '/MEG/sample/sample_audvis_raw.fif'
fwd_fname = data_path + '/MEG/sample/sample_audvis-meg-eeg-oct-6-fwd.fif'

# 加载真实数据作为模板
raw = mne.io.read_raw_fif(raw_fname)
raw.set_eeg_reference(projection=True)

生成偶极子时间序列

# 设置偶极子的数量
n_dipoles = 4
# 每个epoch或者event的时间窗口长度
epoch_duration = 2.
#谐波数
n = 0  
# 随机状态(可复制)
rng = np.random.RandomState(0)

def data_fun(times):
    """产生时间交错的正弦波,谐波为10Hz"""
    global n
    n_samp = len(times)
    window = np.zeros(n_samp)
    start, stop = [int(ii * float(n_samp) / (2 * n_dipoles))
                   for ii in (2 * n, 2 * n + 1)]
    window[start:stop] = 1.
    n += 1
    data = 25e-9 * np.sin(2. * np.pi * 10. * n * times)
    data *= window
    return data


times = raw.times[:int(raw.info['sfreq'] * epoch_duration)]
fwd = mne.read_forward_solution(fwd_fname)
src = fwd['src']
stc = simulate_sparse_stc(src, n_dipoles=n_dipoles, times=times,
                          data_fun=data_fun, random_state=rng)
# look at our source data
fig, ax = plt.subplots(1)
ax.plot(times, 1e9 * stc.data.T)
ax.set(ylabel='Amplitude (nAm)', xlabel='Time (sec)')
mne.viz.utils.plt_show()

得到模拟原始数据并绘制

"""
模拟原始数据
"""
raw_sim = simulate_raw(raw.info, [stc] * 10, forward=fwd, cov=None,
                       verbose=True)
cov = make_ad_hoc_cov(raw_sim.info)
add_noise(raw_sim, cov, iir_filter=[0.2, -0.2, 0.04], random_state=rng)
add_ecg(raw_sim, random_state=rng)
add_eog(raw_sim, random_state=rng)
raw_sim.plot()
plt.show()

绘制诱发数据

"""
绘制诱发数据
"""
events = find_events(raw_sim)  # only 1 pos, so event number == 1
epochs = Epochs(raw_sim, events, 1, tmin=-0.2, tmax=epoch_duration)
cov = compute_covariance(epochs, tmax=0., method='empirical',
                         verbose='error')  # quick calc
evoked = epochs.average()
evoked.plot_white(cov, time_unit='s')
plt.show()

本文分享自微信公众号 - 脑机接口社区(Brain_Computer),作者:Rose

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-02-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MNE-Python专辑 (2) MNE中数据结构Raw及其用法简介(更新)

    Raw对象主要用来存储连续型数据,核心数据为n_channels和times,也包含Info对象。

    脑机接口社区
  • MNE中文教程(1)-MNE中数据结构Raw及其用法简介

    Raw对象主要用来存储连续型数据,核心数据为n_channels和times,也包含Info对象。

    脑机接口社区
  • Python-EEG工具库MNE中文教程(1)-MNE中数据结构Raw及其用法简介

    本教程为脑机学习者Rose发表于公众号:脑机接口社区(微信号:Brain_Computer),QQ交流群:903290195

    脑机接口社区
  • VB语言基础重要知识点06

    假设输入的文本是50,那么text1.text的值为50,但是这个50此时为文本类型(字符串类型),字符串类型用""表示,实际上就是"50"

    刘金玉编程
  • 深入理解ES6--迭代器、生成器、代理、反射、Promise

    注意:数组和Set集合的默认迭代器是values();Map集合的默认迭代器是entries()

    奋飛
  • Python进程/线程/协程相关

    (2)、系统全局标识:python下使用ctypes获取threading线程id。

    py3study
  • 【代码+推导】常见损失函数和评价指标总结

    回归问题中常用的损失函数,在线性回归中,可以通过极大似然估计(MLE)推导。计算的是预测值与真实值之间距离的平方和。实际更常用的是均方误差(Mean Squar...

    昱良
  • 开源Python做的火币和ZB搬砖差价监

    火币和ZB网站域名经常换,页面也经常改,只保证发布文章时能用,将来要用自己改改URL地址一类的。

    py3study
  • 无成本为网站服务器加入高可靠的WAF防护

    什么是WAF:WAF就是Web应用防护系统(Web Application Firewall)翻译过来就是网站应用级入侵防御系统,他的工作原理是通过执行一系列针...

    周俊辉
  • 无成本给网站服务器加入高可靠的WAF防护

    据可靠的新闻网数据显示,阿里巴巴每天被黑客攻击的次数高达三亿多次。跨站攻击、CC攻击、DDOS攻击,甚至还有些站长遭遇了“可怕的”刷流量,作为一个普通的小站长,...

    极客云栖

扫码关注云+社区

领取腾讯云代金券