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

本文介绍了如何使用Python和MNE库生成模拟脑电数据,通过设置偶极子数量、事件窗口和正弦波模型,演示了从源头激活到构造原始数据,并展示了如何添加噪声和生理干扰。最后展示了诱发数据的分析过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

案例介绍

# 导入工具包
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

01

生成偶极子时间序列

# 设置偶极子的数量
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()

02

得到模拟原始数据并绘制

"""
模拟原始数据
"""
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()

03

绘制诱发数据

"""
绘制诱发数据
"""
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()

版权声明:文章仅用于学术交流,不用于商业行为,

若有侵权及疑问,请后台留言,管理员即时删侵!

转载请联系下面微信!

更多阅读

AI与BCI相结合读取大脑数据,根据个人喜好生成图像

EEG信号特征提取算法

EMD算法之Hilbert-Huang Transform原理详解和案例分析

运动想象脑机接口中模式识别方法研究

最新研究 | 人类大脑皮质对有声调和非有声调语言的音高编码

Hinton:我终于想明白大脑怎么工作了!神经学家花三十年,寻找反向传播的生物机制

基于深度学习网络的运动想象BCI系统及其应用

你的每一次在看,我都很在意!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

脑机接口社区

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值