精华内容
下载资源
问答
  • EEG信号特征提取(PSD)

    2017-08-30 06:17:51
    因为刚入门做EEG情感数据分析,所以对特征提取存在一些困扰,具体在于使用spectrogram计算PSD后,如何提取特定频域带的PSD呢?是计算平均power(用bandpower)吗? 具体问题如下: 如果对于一段采样频率是200Hz的信号...
  • EEG分类】脑电信号提取PSD功率谱密度特征

    千次阅读 多人点赞 2020-06-26 18:00:47
    1. 序言 脑电信号是一种非平稳的...正因如此,在研究中经常使用功率谱密度(Power spectral density, PSD)来分析脑电信号的频域特性。 本文简单的演示了对脑电信号提取功率谱密度特征然后分类的基本流程。希望对那些尚

    1. 序言

    脑电信号是一种非平稳的随机信号,一般而言随机信号的持续时间是无限长的,因此随机信号的总能量是无限的,而随机过程的任意一个样本函数都不满足绝对可积条件,所以其傅里叶变换不存在。

    不过,尽管随机信号的总能量是无限的,但其平均功率却是有限的,因此,要对随机信号的频域进行分析,应从功率谱出发进行研究才有意义。正因如此,在研究中经常使用功率谱密度(Power spectral density, PSD)来分析脑电信号的频域特性。

    本文简单的演示了对脑电信号提取功率谱密度特征然后分类的基本流程。希望对那些尚未入门、面对 BCI 任务不知所措的新手能有一点启发。

    2. 功率谱密度理论基础简述

    功率谱密度描是对随机变量均方值的量度,是单位频率的平均功率量纲。对功率谱在频域上积分就可以得到信号的平均功率。

    功率谱密度 S ( f ) S(f) S(f) 是一个以频率 f f f 为自变量的映射, S ( f ) S(f) S(f) 反映了在频率成分 f f f 上信号有多少功率。

    我们假定一个随机过程 X ( t ) X(t) X(t),并定义一个截断阈值 t 0 t_0 t0,随机过程 X X X 的截断过程 X t 0 ( t ) X_{t_0}(t) Xt0(t) 就可以定义为

    X t 0 ( t ) = { X ( t ) ∣ t ∣ ≤ t o 0 ∣ t ∣ > t o \begin{aligned} X_{t_0}(t)=\left\{\begin{array}{cl} X(t) & |t| \leq t_{o} \\ 0 & |t|>t_{o} \end{array}\right. \end{aligned} Xt0(t)={X(t)0ttot>to

    则该随机过程的能量可定义为

    E X t 0 = ∫ − t 0 t 0 X 2 ( t ) d t = ∫ − ∞ ∞ X t 0 2 ( t ) d t \begin{aligned} E_{X_{t_0}}=\int_{-t_0}^{t_0} X^{2}(t) d t=\int_{-\infty}^{\infty} X_{t_0}^{2}(t) dt \end{aligned} EXt0=t0t0X2(t)dt=Xt02(t)dt

    对能量函数求导,就可以获得平均功率。

    P X t 0 = 1 2 t o ∫ − ∞ ∞ X t 0 2 ( t ) d t \begin{aligned} P_{X_{t_0}}=\frac{1}{2 t_{o}} \int_{-\infty}^{\infty} X_{t_0}^{2}(t) dt \end{aligned} PXt0=2to1Xt02(t)dt

    根据 Parseval 定理(即能量从时域角度和频域角度来看都是相等的)可得:

    P X t 0 = 1 2 t o ∫ − ∞ ∞ ∣ X t 0 2 ( f ) ∣ 2 d f \begin{aligned} P_{X_{t_0}} =\frac{1}{2 t_{o}} \int_{-\infty}^{\infty}\left|X_{t_0}^{2}(f)\right|^{2} df \end{aligned} PXt0=2to1Xt02(f)2df

    这里 X t 0 ( f ) X_{t_0}(f) Xt0(f) X t 0 ( t ) X_{t_0}(t) Xt0(t) 经过傅里叶变换后的形式。由于随机过程 X X X 被限定在了一个有限的时间区间 [ − t 0 , t 0 ] [-t_0, t_0] [t0,t0] 之间,所以对随机过程的傅里叶变换不再受限。另外我们还需要注意到, P X t 0 P_{X_{t_0}} PXt0 是一个随机变量,因此为了得到最终总体的平均功率,还需要求取随机变量的期望值。

    P X t 0 ‾ = E [ P X t 0 ] = 1 2 t o ∫ − ∞ ∞ E [ ∣ X t 0 2 ( f ) ∣ 2 ] d f \begin{aligned} \overline{P_{X_{t_0}}} = E \left[ P_{X_{t_0}} \right] = \frac{1}{2 t_{o}} \int_{-\infty}^{\infty} E\left[\left|X_{t_0}^{2}(f)\right|^{2}\right] df \end{aligned} PXt0=E[PXt0]=2to1E[Xt02(f)2]df

    由此,通过求取 t 0 → ∞ t_0 \rightarrow \infty t0 时的极限,就可以得到原始随机过程的平均功率 P X ‾ \overline{P_X} PX

    P X ‾ = lim ⁡ t 0 → ∞ 1 2 t 0 ∫ − ∞ ∞ E [ ∣ X t 0 ( f ) ∣ ] d f = ∫ − ∞ ∞ lim ⁡ t 0 → ∞ E [ ∣ X t 0 ( f ) ∣ ] 2 t 0 d f \begin{aligned} \overline{P_{X}}=\lim_{t_{0} \rightarrow \infty} \frac{1}{2 t_{0}} \int_{-\infty}^{\infty} E\left[\left|X_{t_0}(f)\right|\right] d f=\int_{-\infty}^{\infty} \lim_{t_{0} \rightarrow \infty} \frac{E\left[\left|X_{t_0}(f)\right|\right]}{2 t_{0}} df \end{aligned} PX=t0lim2t01E[Xt0(f)]df=t0lim2t0E[Xt0(f)]df

    将式中被积函数单独提取出来,定义为 S ( f ) S(f) S(f):

    S ( f ) = lim ⁡ t 0 → ∞ E [ ∣ X t 0 ( f ) ∣ ] 2 t 0 \begin{aligned} S(f) = \lim_{t_0 \rightarrow \infty} \frac{E\left[\left|X_{t_0}(f)\right|\right]}{2 t_{0}} \end{aligned} S(f)=t0lim2t0E[Xt0(f)]

    这样一来,平均功率 P X ‾ \overline{P_X} PX 可以表示为 ∫ − ∞ ∞ S ( f ) d f \int_{-\infty}^{\infty}S(f) df S(f)df。通过这种定义方式,函数 S ( f ) S(f) S(f) 可以表征每一个最小极限单位的频率分量所拥有的功率大小,因此我们把 S ( f ) S(f) S(f) 称为功率谱密度。

    3. Matlab 中 PSD 函数的使用

    功率谱密度的估计方法有很多。总体来讲可以分为两大类:传统的非参数方法,和现代的参数方法。

    在这里插入图片描述

    本节不对理论知识做详细的叙述,感兴趣的可以深入查阅文献,这里只介绍一下有哪些方法,以及他们在 matlab 当中的使用。

    3.1 传统非参数方法估计 PSD

    最简单的方法是周期图法,先对信号做 FFT 变换,然后求平方,periodogram 函数实现了这个功能。不过周期图法估计的方差随采样点数N的增加而增加,不是很建议使用。

    另一种自相关方法,基于维纳辛钦定律:信号的功率谱估计等于该信号自相关函数的离散DTFT,不过我没有在 matlab 里找到对应的函数,如果有知道的朋友请告诉我一下。

    最常用的函数是 pwelch 函数,利用 welch 方法来求 PSD,这也是最推荐使用的。

    3.2 参数方法估计 PSD

    包括 pconvpburgpyulear 等几个方法。

    这些方法我没用过,所以也不敢随便乱说。

    4. 实验示例

    给出从 EEG 信号中提取功率谱特征并分类的简单范例。

    4.1 实验数据

    本文选用的实验数据为BCI Competition Ⅱ任务四,使用的数据为 sp1s_aa_1000Hz.mat

    实验使用的数据

    这个数据集中,受试者坐在一张椅子上,手臂放在桌子上,手指放在电脑键盘的标准打字位置。被试需要用食指和小指依照自己选择的顺序按相应的键。实验的目标是预测按键前130毫秒手指运动的方向(左 OR 右)。

    在 matlab 中导入数据。

    %% 导入数据
    % 1000 Hz 记录了 500 ms
    load('sp1s_aa_1000Hz.mat');
    % 采样率 1000 Hz
    srate = 1000;
    [frames, channels, epochs] = size(x_train);
    
    rightwards = sum(y_train);
    leftwards = length(y_train) - rightwards;
    fprintf('一共有 %d 个训练样本,其中往左运动有 %d 个,往右运动有 %d 个\n',...
        length(y_train), leftwards, rightwards);
    
    一共有 316 个训练样本,其中往左运动有 159 个,往右运动有 157 个
    

    4.2 提取特征

    我们使用 welch 法来提取功率谱密度,利用 pwelch 函数计算功率谱,使用 bandpower 函数可以提取特定频段的功率信息,所以分别提取 δ \delta δ θ \theta θ α \alpha α β \beta β节律的功率。最后取各通道平均功率的前12个点(根据 f 来看,前 12 个点基本覆盖了 0到 40Hz 的频带)

    %% 提取 PSD 特征
    function [power_features] = ExtractPowerSpectralFeature(eeg_data, srate)
        % 从 EEG 信号中提取功率谱特征
        %   Parameters:
        %       eeg_data:   [channels, frames] 的 EEG 信号数据
        %       srate:      int, 采样率
        %   Returns:
        %       eeg_segments:   [1, n_features] vector
    
        %% 计算各个节律频带的信号功率
        [pxx, f] = pwelch(eeg_data, [], [], [], srate);
        power_delta = bandpower(pxx, f, [0.5, 4], 'psd');
        power_theta = bandpower(pxx, f, [4, 8], 'psd');
        power_alpha = bandpower(pxx, f, [8, 14], 'psd');
        power_beta = bandpower(pxx, f, [14, 30], 'psd');
    
        % 求 pxx 在通道维度上的平均值
        mean_pxx = mean(pxx, 2);
        % 简单地堆叠起来构成特征(可以用更高级地方法,比如考虑通道之间的相关性的方法构成特征向量)
        power_features = [
                        power_delta, power_theta, ...
                        power_alpha, power_beta, ...
                        mean_pxx(1:12)';
                    ];
    
    end
    

    然后对每个样本都提取特征,构造一个二维矩阵 X_train_features

    X_train_features = [];
    for i = 1:epochs
        % 取出数据
        eeg_data = squeeze(x_train(:, :, i));
        feature = ExtractPowerSpectralFeature(eeg_data, srate);
        X_train_features = [X_train_features; feature];
    end
    % 原始的 y_train 是行向量,展开成列向量
    y_train = y_train(:);
    

    4.3 分类

    使用 SVM 进行简单的分类任务,由于只是简单演示,所以不划分训练集、交叉验证集。

    % 由于只是简单演示,所以不划分训练集、交叉验证集
    model = fitcsvm(X_train_features, y_train,...
        'Standardize', true, 'KernelFunction', 'RBF', 'KernelScale', 'auto', 'verbose', 1);
    
    y_pred = model.predict(X_train_features);
    acc = sum(y_pred == y_train) / length(y_pred);
    fprintf('Train Accuracy: %.2f%%\n', acc * 100);
    

    结果如下:

    |===================================================================================================================================|
    |   Iteration  | Set  |   Set Size   |  Feasibility  |     Delta     |      KKT      |  Number of   |   Objective   |   Constraint  |
    |              |      |              |      Gap      |    Gradient   |   Violation   |  Supp. Vec.  |               |   Violation   |
    |===================================================================================================================================|
    |            0 |active|          316 |  9.968454e-01 |  2.000000e+00 |  1.000000e+00 |            0 |  0.000000e+00 |  0.000000e+00 |
    |          350 |active|          316 |  5.175246e-05 |  9.741516e-04 |  5.129944e-04 |          312 | -1.850933e+02 |  5.967449e-16 |
    
    由于 DeltaGradient,收敛时退出活动集。
    Train Accuracy: 94.62%
    
    展开全文
  • matlab投射转相除代码使用来自DEAP数据集的EEG进行人类情感分析 根据以下内容处理DEAP数据集 PSD(功率谱密度)和2)DWT(离散小波变换)功能。 根据Arousal和Valence(高/低)对EEG等级进行分类 在此处找到DEAP数据...
  • PSD和功率带 缓冲和划时代 IIR滤波器 信号质量(新) 和更多。 通过安装库开始: npm install @neurosity/pipes 入门 npm install @neurosity/pipes 然后导入模块 ESM import { epoch } from "@neurosity/pipes...
  • EEG 信号频带功率计算

    千次阅读 2021-03-06 18:05:47
    目录前言信号功率谱密度(Power Spectral Density)计算基于 FFT 计算功率谱密度基于 scipy.signal.welch 计算功率谱密度基于 mne.time_frequency.psd_array_multitaper 计算功率谱密度特定频带绝对功率(Absolute ...

    前言

           EEG 信号与大脑的活动和状态密切相关,在脑机接口等领域中有着广泛的应用,由此也衍生出了大量的 EEG 信号分析和特征提取方法,不同的子领域间侧重点可能略有差异,但一些基础的方法是相通的。例如,EEG 信号的功率计算就是一个十分基础且应用极其广泛的分析方法。本文以Raphael Vallet 的文章为基础,记录了一些我认为在 EEG 信号功率计算中需要注意的地方。(Raphael Vallet 写得十分清晰,可能的话,推荐直接看原文。)

    信号功率谱密度(Power Spectral Density)计算

           功率谱密度(Power Spectral Density) 表征了信号功率在频域的分布状况。下图为一示例:
    在这里插入图片描述
    横轴一般单位为 Hz,纵轴在不同的领域中往往使用不同的单位,常用的有dB/Hz、W/Hz 等,在 EEG 信号分析中通常使用 μV2/Hz。本文不会涉及信号频域分析的数学推导和理论细节(感兴趣的朋友可以查阅教科书或其他资料),而是直接介绍3种基于 python 的计算 EEG 信号功率谱密度的方式。

    基于 FFT 计算功率谱密度

           第一种方式根据功率谱密度的定义直接进行计算。首先对时序信号进行快速傅里叶变换(Fast Fourier Transformation,FFT),得到各频率对应的信号幅度和相位,通常对 FFT 结果的幅度取平方以表示功率谱密度,以下为一个示例

    import numpy.fft as fft
    import matplotlib.pyplot as plt
    # EEG_data 维度为 1 * seq_len
    complex_array = fft.fft(EEG_data)
    power = np.abs(complex_array) ** 2
    Fs = sample_rate  # 采样频率
    T = 1 / Fs  # 采样周期
    L = len(EEG_data)  # 信号长度
    t = np.array([i * T for i in range(L)])
    freqs = fft.fftfreq(t.size, t[1] - t[0])  # 得到分解波的频率序列
    plt.plot(freqs[freqs > 0], pows[freqs > 0], color='orangered', label='Frequency')
    plt.show()
    

    得到的功率谱密度图如下(服务器上字体有些问题,请见谅):
    在这里插入图片描述
           直接 FFT 计算得到的功率谱密度 “has a good frequency resolution but way too much variance.”——Raphael Vallet

    基于 scipy.signal.welch 计算功率谱密度

           第二种方法利用了 scipy.signal.welch,在直接 FFT 方法上做了一些改进,具体可以参考官方文档。以下为一个示例:

    import numpy as np
    import matplotlib.pyplot as plt
    import seaborn as sns
    # 示例 EEG 数据
    data = np.loadtxt('data.txt')
    # 定义采样率和时间向量
    sf = 100
    time = np.arange(data.size) / sf
    # 定义窗口长度为4秒
    win = 4 * sf
    freqs, psd = signal.welch(data, sf, nperseg=win)
    # 画功率谱密度图
    sns.set(font_scale=1.2, style='white')
    plt.figure(figsize=(8, 4))
    plt.plot(freqs, psd, color='k', lw=2)
    plt.xlabel('Frequency (Hz)')
    plt.ylabel('Power spectral density (V^2 / Hz)')
    plt.ylim([0, psd.max() * 1.1])
    plt.title("Welch's periodogram")
    plt.xlim([0, freqs.max()])
    sns.despine()
    

    得到的功率谱密度图如下:
    在这里插入图片描述
           利用 welch 计算得到的功率谱密度 “has a low variance, at the cost of a lower frequency resolution.”——Raphael Vallet

    基于 mne.time_frequency.psd_array_multitaper 计算功率谱密度

           第三种方法是 multitaper 方法,最早由 David J. Thompson 于1982开发,用以克服经典频谱估算技术的一些限制,而 mne 则是一个专门用来处理 EEG, EMG, ECG 等生理信号的 Python 库。以下为一个示例:

    import matplotlib.pyplot as plt
    from mne.time_frequency import psd_array_multitaper
    psd, freqs = psd_array_multitaper(data, sf, adaptive=True,normalization='full', verbose=0)
    plt.plot(freqs, psd)
    plt.show()
    

    得到的功率谱密度图如下:
    在这里插入图片描述
           利用 multitaper 计算得到的功率谱密度 “has the advantages of the two previous methods: high frequency resolution and low variance.”——Raphael Vallet
           三种计算方式的对比图如下所示:
    在这里插入图片描述

    特定频带绝对功率(Absolute Power)、相对功率(Relative Power)计算

           在 EEG 信号分析中,常常需要在功率谱密度的基础上计算特定频带的功率,而这也是我最初犯迷糊的地方——理论上,特定频带的功率只需要对这段频率范围的功率谱密度积分即可,然而上述三种方法得到的功率谱密度都是一系列离散的值,应该如何计算呢?
           最开始我用的方式是直接求和,如下所示:

    import numpy as np
    from mne.time_frequency import psd_array_multitaper
    # 计算功率谱密度
    psd, freqs = psd_array_multitaper(data, sf, adaptive=True,normalization='full', verbose=0)
    # 指定频带范围
    band = [lower_freq, upper_freq]
    idx_band = np.logical_and(freqs >= band[0], freqs <= band[1])
    band_power = sum(psd[idx_band])
    

           显然这种计算方式得到的结果和真实的频带功率相差甚远。那应该如何计算呢?可以使用 composite Simpson’s rule 进行估算,具体示例如下,使用了 scipy 提供的 simps 方法:

    import numpy as np
    from scipy.integrate import simps
    from mne.time_frequency import psd_array_multitaper
    # 计算功率谱密度
    psd, freqs = psd_array_multitaper(data, sf, adaptive=True,normalization='full', verbose=0)
    # 计算频率分辨率
    freq_res = freqs[1] - freqs[0]
    # 指定频带范围
    band = [lower_freq, upper_freq]
    idx_band = np.logical_and(freqs >= band[0], freqs <= band[1])
    # psd 为一系列离散值,无法直接积分,因此采用 simps 做抛物线近似
    band_power = simps(psd[idx_band], dx=freq_res)
    

           采用这种方法估算的频带功率更为准确。有了特定频带绝对功率的估算方式后,频带的相对功率计算便一目了然了band_power_relative = band_power_absolute / total_power_absolute
           有了上述基础,类似于 spectral edge frequency 95(SEF95,the frequency such that 95% of the power in the spectrum lies below this value.) 的特征计算就是水到渠成的事情了。

    References

    1、https://raphaelvallat.com/bandpower.html
    2、https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.welch.html
    3、https://mathworld.wolfram.com/SimpsonsRule.html

    展开全文
  • EEG处理方法的研究

    2020-05-17 23:00:40
    对磁刺激诱发EEG特征分析及应用比较感兴趣,虽课题组里有做EEG分析的,但我的基础薄弱,需要多学习–从中文综述开始学起。 1 脑电信号处理方法的研究 大脑为高级神经中枢系统,脑电信号是反映大脑神经元群自发性、...

    对磁刺激诱发EEG特征分析及应用比较感兴趣,虽课题组里有做EEG分析的,但我的基础薄弱,需要多学习–从中文综述开始学起。
    1 脑电信号处理方法的研究
    大脑为高级神经中枢系统,脑电信号是反映大脑神经元群自发性、节律性的电生理活动信号,包含着重要的生理信息。对脑电信号进行深入的处理分析是提取脑电信息的重要手段,为生物医学、临床病症提供重要依据。文章主要鬼难熬电信的处理方法,对时频分析、高级谱分析、人工神经网络和非线性动力学分析等四种处理方法进行介绍,将国内外对应处理方法的应用结果加以展示,同时总结脑电研究的相关成果并提出脑电研究在当前社会的应用前景。
    由脑部神经元活动产生的脑电信号可分为三类:脑电图信号、脑诱发电位信号和神经元细胞内外记录信号(之前听报告时有老师将信号分为:自发电位、诱发电位、事件相关电位,与该文章的分类不同。不知道是二者同属同一内容只是分类方法不同还是不同的概念)。脑电信号的应用已经从集中于医学、神经等生理方向的研究扩展到神经病学、外科学、生物医学、心理学、信号处理、计算机软件与计算机应用技术等领域。关于脑电的研究方式也从单一的波形描述、脑电地形图到多形态分析,不少国内外的科研机构从单独脑电研究的初步探索阶段迈向以脑电信号分析为研究对象的综合研究阶段,提出许多具有价值的方法和技术。
    脑电信号分析方法:脑电信号特征提取的主要方法包括共空间模式(CSP)、AR模型、小波变换(WT)、功率谱密度分析(PSD)、混沌法,多维统计等方法。脑电信号具有非平稳、非线性等较为突出的频域(频域即频率域是描述信号在频率方面特性是用到的一种坐标系。横轴是频率,纵轴是该频率信号的幅度,就是常说的频谱图。因为信号不仅随时间变化,还与频率、相位等信息相关,这这就需要进一步分析信号的频率结构,并在频率中对信号进行描述。动态信号从时间域到频率域主要通过傅里叶级数和傅里叶变换实现,周期信号靠傅里叶级数,非周期信号靠傅里叶变换)特征。近年来,波形特征描述、自回归AR模型、傅里叶变换、功率谱密度、双谱分析、小波变换、人工神经网络、非线性动力学分析等脑电分析方法得到了深入研究。其中时频分析、高阶谱分析、人工神经网络和非线性动力学四种方法应用最为广泛。
    1 时频分析
    较早应用的EEG分析方法是从时域中直接提取出其中有用波形特征的信息,AR模型、方差分析(ANOVA单因素方差分析)、波形参数分析和波辨识、直方图分析、相关分析、峰值检测等都是研究中使用较多的时域分析方法。由于脑电信号在频域比在时域更加简单直观,所以大多数研究是在频域下进行。频谱分析、倒频谱分析、包络分析、阶比谱分析以及全系谱分析等方法时使用较多的频域信号分析处理方法。有研究人员用功率谱中AR谱技术和FFT技术进行正常人的脑电图和癫痫病人痫性分发作脑电图进行比较,说明AR谱性能优于FFT功率谱,为临床诊疗癫痫提供技术上的支持。有报道认为,6阶AR模拟拟合EEG信号,以LVQ神经网络作为分类器,通过比较网络选择不同参数对分类正确率的影响得到及竞争层神经元数目直接影响了正确率。冯春晖发现在不进行主成分分析的基础上支%持向量机与CSSD的组合识别正确率最高达74%。
    然而时域和频域分析方法,主要运用与平稳信号分析。对于不平稳、非线性信号的分析,应用时域和频域时,都难以提取出有效的特征信息。时频分析方法,弥补了时域和频域分析方法在非线性信号分析的缺陷,能够准确第提取到非线性信号随时间变化的特征信息。目前,在信号处理的工程领域和众多学科当中,视频分析的技术已被大范围应用,比如语音分析、图像识别、接卸设备故障诊断、生物工程等,在分析脑电信号时,脑电信号特征的多分辨分析、波形辨识、诱发电位特征提取、信号与处理等是视频分析的主要应用领域。时频分析提供频域和时域的联合分布信息,清洗地阐明了信号频率时变性,近年来受到越来越多的重视。

    展开全文
  • 在对接收到的信号进行预处理之后,使用两种特征提取方法:第一种使用功率谱密度(PSD),第二种使用谱相干(COH)。 最后,使用两种分类方法:第一种是“单个元素分类”,其中每个EEG通道被视为每个主题的单个特征,...
  • EEG脑电信号常用处理方法

    千次阅读 多人点赞 2020-01-18 11:42:36
    一. 关于脑电信号 今年中旬,在马斯克召开的发布会,其名下Neuralink 的脑机接口植入技术引发热议,脑-机... EEG)由于易操作性,安全性等特点,受到了科研工作者的广泛关注,如何准确得利用脑电信号来实现操控,...

    一. 关于脑电信号

    今年中旬,在马斯克召开的发布会,其名下Neuralink 的脑机接口植入技术引发热议,脑-机接口(brain-computer interface, BCI)技术也成为了当前信息交互的研究热点,意念控制似乎离我们不再遥远,而脑电信号(electroencephalography, EEG)由于易操作性,安全性等特点,受到了科研工作者的广泛关注,如何准确得利用脑电信号来实现操控,信号的处理问题便成为了重中之重。

    目前,运用较为广泛的信号是当受试者自主想象某种特定动作所产生的神经活动,称之为基于运动想象(Motor Imagery,MI)的脑电信号。研究表明,当受试者进行手、脚、舌头动作的运动想象,大脑皮层对侧和同侧运动感觉区的μ频带(8-13Hz)表现显著,而对侧区域其节律能量下降,该现象被称为事件相关同步/去同步(ERD/ERS)现象, 这种电生理现象常被用作运动想象脑电信号的分类标准, 用来辨别受试者的运动意图,为信号的特征提取提供了依据。

    BCI 的实现主要涉及信号处理和模式识别。信号处理包括数据的预处理,如滤波、伪迹去除,还有关键的特征提取技术。利用机器学习技术,对输入特征进行分类。

    接下来便对脑电信号(EEG)的相关方法进行一个简单的概括以便后续的学习:

    二. 脑电信号处理算法概括:

    通过查阅大量论文以及国际竞赛的数据,对脑电信号处理方法概括如下:

    一.信号预处理方法:

    在这里插入图片描述
    1.去趋势化
    2.独立成分分析(独立分量分析)
    3.带通滤波去伪迹
    4.陷波滤波
    5.盲源分析

    二.特征提取及其算法:

    脑电信号是一种 5-100μv和低频的生物电信号,需放大后才能显示和处理。在脑电信号处理与模式识别系统中,为了正确的识别 EEG 信号,信号的处理应该包括以下三个部分:预处理、特征选择与提取以及特征分类。信号预处理主要为了去除低频噪声干扰,如利用空间滤波器(CAR)滤除眼电、肌电等低频噪声干扰。特征提取与选择主要是为了降低脑电数据的维数和提取出与分类相关的特征。

    EEG数据的特征主要有三种:时域特征、频域特征与空域特征,不同的特征需要采取不同的特征提取方法,如空域特征一般采用空域滤波器(共同空间模式,CSP)进行提取,频域特征一般采用傅立叶变换、小波变换或自回归(Auto-Regressive, AR)模型获取。特征分类主要是利用分类算法对提取到的特征进行分类,主要分为两个步骤:首先,利用训练样本特征进行模型的训练,获取分类的参数,然后,用训练好的分类器来获取测试样本特征的类别。目前,较常用的分类器有 Fisher、支持向量机(SVM)、神经网络分类器(Neural network classifier)和贝叶斯分类器(Bayesian classifier)等。

    BCI 的实现主要涉及信号处理和模式识别。信号处理包括数据的预处理,如滤波、伪迹去除,还有关键的特征提取技术。文献中的特征提取方法一般有:

    频域分析:
    自回归(AR)模型、功率谱估计;
    时频分析:
    小波变换、小波包变换、局部均值分解;空间域有主成
    分分析(PCA)、独立分量分析(ICA)和共空间模式
    (CSP),用于多导联的脑电信号。
    模式识别是利用机器学习技术,对输入特征进行分类。
    常用的二分类技术:
    线性判别分析(LDA)、神经网络(NN)、支持向量
    机(SVM)、基于随机森林和 Boosting 的集成技术。

    通过对相关文献的研究,信号变换和分解的方法
    多样,一般在信号处理后选取能量、熵等作为特征,但
    变换方法及提取的特征单一化,无法多方面地表示脑
    电信号,因此一般选用易于理解、计算量小、效果
    良好的算法。

    一些方法和分类器列表:
    1.三层小波分析:frequecy domain
    2.Hilbert变换:amplitude domain
    3.岭回归分析
    4.滑动窗技术
    5.共空间算法
    6.相关性分析法
    7.利用功率谱的Fisher比来选择滤波频带的DCSP算法
    8.ICA算法(互信息极小算法、JADE算法、FastIA算法、Infomax算法(同步分离的扩展Infomax算法))
    9.SCM分类识别
    10.(complex)Morlet wavelet transform:Time domain
    11.fast Fourier transform:Frequecy domain
    12.Feature subset selection(FSS)
    13.Band bower ratios
    14.MANOVA algorithm for SVM(支持向量机)
    15.prediction neural networks(PNN)
    16.Hjorth prameters two hidden markov model
    17.(adoptive) auto regressive parameters
    18.leaner discriminant analysis
    19.common spatial subspace decomposition algorithm(CSSD)
    20.classifier : Bayesian Gibbs sampling Laplace approximation Expectation propagation k-nearest neighbor linear minimum sum of squred error classifier
    21.自回归(AR)
    22.共空间模式(CSP)
    23.离散小波变换(DWT)
    24.功率谱密度(PSD)

    三.验证方法:

    10折交叉验证分析稳定性

    脑电信号处理在python中实现工具MNE链接

    展开全文
  • 在各种用于脑信号记录的技术中,脑电图(EEG)是BCI研究中研究最多的方法。而基于EEG的认知BCI,旨在评估和增强诸如注意力等认知功能。 之前的研究更多的关注于选取合适的特征,以将其用来对注意力程度进行分类。...
  • 基于分类任务的信号(EEG)处理——代码分步解析

    千次阅读 多人点赞 2019-12-09 13:50:52
    本篇博文是对本人另一篇博文《基于分类任务的信号(EEG)处理》的扩展,另一篇博文是从宏观方面介绍利用EEG信号进行分类任务,本片博文是用详细的代码进行解析,大家可以两篇结合着来看,希望可以帮助到大家。...
  • Python专栏 | 脑电图和脑磁图(EEG/MEG)的数据分析方法(一) 文章目录系列文章目录正文总结 正文 MNE包的核心结构之一——Raw的对象里有几种内置的可视化EEG/MEG数据的方法。 ​ 代码示例: raw.plot_psd(fmax=50...
  • 《Identifyecognition from EEGing Stable Patterns over Time for Emotion Recognition from EEG》 《从脑电图(EEG)中提取稳定的模式进行识别》 Abstract 采用机器学习的方法,研究了情绪识别过程中脑电图随...
  • 点击上面"脑机接口社区"关注我们更多技术干货第一时间送达本文是由CSDN用户[Memory逆光]授权分享。主要介绍了使用 1D 卷积和 LSTM 混合模型做 EEG 信号...
  • 基于分类任务的信号(EEG)处理

    千次阅读 2019-11-10 15:05:08
    psd_delta = [psd_delta;compute_psd(delta(((j-1)*frequency*time_win+1):j*frequency*time_win, 1))]; ... end ... ... ... end 4、此时就可以将处理后的数据和标签输入到分类器中进行训练模型了。例如使用...
  • 点击上面"脑机接口社区"关注我们更多技术干货第一时间送达本文由网友Jon_Snow_Stark授权分享本篇文章是对作者对另一篇文章《基于分类任务的信号(EEG)处理》的扩...
  • for j =1:sample % sample为采样点数 psd_delta = [psd_delta;compute_psd(delta(((j-1)*frequency*time_win+1):j*frequency*time_win, 1))]; ... end ... ... ... end 功率谱估计 功率谱估计是频域分析的主要手段...
  • 简单介绍了短时傅里叶变换和小波变换,并将其应用到EEG信号的频段提取中。
  • % Spectral_EEG clear all; clc; Fs=1000; %% sampling rate L=1000; %% signal length for FFT T=1/Fs; t=(0:L-1)*T; NFFT=2^nextpow2(L); f=Fs/2*linspace(0,1,NFFT/2+1); f_idx=find(f<=30); %% region of ...
  • Python中小波工具(pywt)分析EEG数据

    千次阅读 多人点赞 2020-07-01 15:26:12
    3、基于小波包分解计算不同频段的能量和 计算能量或者说是功率的方法有很多,比如之前写过的PSD:https://blog.csdn.net/zhoudapeng01/article/details/106906593 这里利用小波包的方法计算区间能量的累加和。...
  • 本研究使用脑电图(EEG)研究了AO和AO+MI步行过程中与步态相关的皮层活动,受试者分别在想象和不想象的情况下观察步行。脑电源和频谱分析表明,感觉运动皮质的α、β功率降低,功率调制依赖于步行时的相位。AO+MI时的...
  • EEG】关于SEED-VIG数据集介绍

    千次阅读 2020-09-02 16:59:29
    这里只介绍EEG的电极位置,如图所示,CPZ为参考电极,因此数据中只有17个电极的数据。 实验过程和Raw_Data简介 如上图模拟真实驾驶环境,实验中共选取了23名实验对象,最后数据筛选收集了21个受试者的数据,共有
  • MNE安装 ...1.安装MNE-python conda install mne 2.原始数据raw的读入和使用 导入库 import mne ...raw = mne.io.read_raw_bdf('./Part1_IAPS_SES1_EEG_fNIRS_03082006.bdf') #查看核心数据 raw.info

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 173
精华内容 69
关键字:

EEGPSD