EEG信号时频域分析详解
EEG信号时频域分析详解
EEG(脑电图)信号的时频域分析是理解大脑电活动的关键技术。本文将详细介绍EEG信号的基本特性、产生机制,以及如何通过时频域分析方法揭示大脑活动的复杂模式。
1. 简介
脑电图(EEG, Electroencephalogram)是一种通过在头皮上放置电极来记录大脑电活动的技术。但EEG信号具有非平稳性,因此常常需要时频域分析来更好地理解其特性。
EEG信号的数据是什么样的?
01 离散时间序列:
EEG信号是通过在头皮上放置电极记录到的电活动。这些电活动是时间上连续的,但记录设备会以特定的采样率将其转换为离散的时间序列数据。因此,原始的EEG数据是由很多个样本点数所构成的一个有限的离散的时间序列数据。
02 采样率:
采样率决定了每秒钟采集的样本点数。例如,采样率为1000Hz(赫兹)意味着每秒采集1000个数据样本点。
常见的采样率有256Hz、512Hz、1000Hz等,具体选择取决于研究的需求和设备的性能。
03 数据单位:
每个样本点的数据表示脑电波幅度,通常以电压值(伏特,V)为单位。由于脑电信号通常较弱,更常使用的单位是微伏(µV)。
典型的EEG信号幅度范围在0.5µV到100µV之间。
04 多通道数据:
EEG信号通常从多个通道(电极)同时记录,每个通道对应头皮上的一个特定位置。多通道数据允许研究人员分析不同脑区的活动及其相互关系。
2. EEG信号的基本特性
01 频带:
EEG信号通常按频率划分为不同频带,包括:
- Delta波 (0.5-4 Hz):常见于深睡眠状态和某些病理状态。
- Theta波 (4-8 Hz):与浅睡眠、放松和冥想状态相关。
- Alpha波 (8-13 Hz):在清醒且闭眼状态下明显,与放松和休息状态有关。
- Beta波 (13-30 Hz):与警觉、思维活跃和集中注意力有关。
- Gamma波 (>30 Hz):涉及高级认知功能,如记忆、注意和意识。
02 非平稳性:
EEG信号的非平稳性是指它的统计特性(如频率成分和幅度)会随着时间变化,而不是恒定的。具体来说,EEG信号在不同的时间段内会表现出不同的频率活动。例如,某个时间段内可能以Alpha波为主,而另一个时间段可能以Theta波为主。这意味着EEG信号在时间上是动态变化的。
这种非平稳性使得单纯的时域分析或频域分析难以捕捉EEG信号的特征。因此,需要结合时域和频域信息的时频分析方法,如短时傅里叶变换(STFT)和小波变换,来更好地理解和分析EEG信号的变化。
3. 脑电信号的产生机制
EEG信号主要由皮层椎体细胞群产生:
- 突触后电位:持续时间较长的突触后电位被认为是EEG信号的基础。局部场电位主要与皮层椎体细胞的突触后电位变化有关。
- 低通滤波作用:由于人体组织的低通滤波作用,高频动作电位在传至头皮时会极大衰减。
4.时域与频域信号处理
01 时域/频域信号
时域信号:幅值随时间变化的信号。
频域信号:幅值随频率变化的信号。
示例:正弦/余弦波的时域表示、频域表示。
02 时域/频域分析
时域分析:脑电波幅随时间的变化(如刺激后-刺激前)
频域分析:分析脑电信号各频段的频谱能量。
03 时域分析:
原始的EEG信号就是一个时域上的数据。时域分析关注的是EEG波幅随时间进程的变化情况,事件相关电位(ERP)分析就是常用的时域分析方法,能够快速得到由某个事件(刺激)所引起的波幅值的变化,如常见的事件相关电位成分P300,MMN、N400等。
时域分析的优点在于其计算简单和快速,而且由于不需要进行滤波处理,相较于频域分析/时频分析具有更高的时间精度和准确性。
ERP分析
一般信号的时域、频域视角:
- 时域 -> 频域:傅里叶级数分解\傅里叶变换
- 频域->时域:傅里叶逆变换
然而,时域分析并不足以反映EEG信号中所蕴藏的信息。我们常说的a波、B波、v波等就是根据不同频率的EEG信号来进行划分的,反映的是脑电信号随时间变化的快慢。
脑电信号的三个维度(Li et al.,2016)
因此,频域分析实现的是EEG信号从时域到频域的转换,频域分析的结果为各个频率上的能量值分布,也就是我们常说的power值,可以简单理解为振幅的平方,单位为uV2。
(https://imotions.com/blog/eeg/)
频域分析使用的是傅里叶变换。根据傅里叶定理,任何连续测量的时序或信号,都可以表示为不同频率的正弦波信号的无限叠加。
脑电信号可以看成就是由不同的正弦信号混壘而成的混合信号,通过傅里叶变换,就能够将这个混合信号重新分解成具有不同频率的正弦波,从而获得频域上的信息。
频域分析不仅可以用于分析任务态的数据,还常用于分析静息态的数据。
但是,傅里叶变换有一个局限性,就是其只适用于稳态数据,而脑电数据就属于非稳态数据。另外,频域分析不能反映频率随时间的变化。因此,单一维度的时域分析或频域分析都不能反映信号特征,这时候就需要时频分析。
EEG频域分析方法:对各被试、各通道、各分段的脑电信号做傅里叶变换,得到各个频率点上的能量,再做统计分析。
主要适用场景:静息态数据等。
统计方式:
(1)沿着频率点统计:选择感兴趣的空间区域(通道),沿着频率点进行统计检验。
(2)沿着通道统计:选择感兴趣的频段,沿着通道进行统计检验。
(3)提取特定通道、特定频段的能量数值,进行统计检验。
5.时频域分析方法
类别 缺点 备注
时域分析 *能体现幅值随时间的变化 缺少频段信息
频域分析 *能查看频段能量的分布,并不能体现特定频段能量随时间的变化 缺少时间信息,*适用于稳态数据分析
顾名思义,时频分析既包含时域,又包含了频域的信息,其方法是通过对脑电数据进行加窗处理,并假设在该时间窗内数据是稳态的,从而进行傅里叶变换,提取该时间窗内的频域信息。
将窗口沿着时间轴向前滑动,并对每个时间窗内的数据进行同样的处理,这样就能得到随时间变化的频率的信息,所得到的结果就是时频图。(其横轴的是时间,纵轴的是频率,每个时间频率所对应的点的就是power值。)
(Witzel,et al.,2011)
窗口的大小会影响到时间精度和频率精度。窗口越大,时间精度越低,频率精度越高,适合分析低频慢波,窗口越小,时间精度越高,频率精度越低,适合分析高频快波。
当然,具体还是根据研究需要进行设定。时间窗可以是固定大小,也可以具有自适应性。如短时傅里叶变换的时间窗就是大小固定的,而小波变换的时间窗则可以随着频率变化而伸缩,使用更灵活。
主要适用于:事件相关实验; 非稳态数据等。
主要实现方式:短时傅里叶变换、小波变换等。
分析方法:对各被试、各通道、各分段的数据做时频变换,得到各时频点的能量,再做统计分析。
统计方式:
(1)沿着频率点统计:选择感兴趣的空间区域(通道),沿着时频点进行统计检验。
(2)沿着通道统计:选择感兴趣的时频区域,沿着通道进行统计检验。
(3)提取特定通道、特定时频区域的能量数值,进行统计检验。
时频分析图示例:
01 短时傅里叶变换 (STFT)
短时傅里叶变换通过在不同时间段内对信号进行傅里叶变换,得到信号的时频表示。STFT的公式为:
其中,x(τ)x(\tau)是输入信号,w(τ−t)w(\tau - t)是时间窗函数。
优点:适用于分析信号的时频特性,能够提供较高的频率分辨率。
缺点:时间窗口的大小影响时间和频率分辨率,固定窗口大小限制了分析精度。
02 小波变换 (Wavelet Transform)
小波变换使用伸缩和平移的小波函数对信号进行分析。小波变换的优点在于它能够在高频段提供高时间分辨率,在低频段提供高频率分辨率。小波变换的公式为:
其中,ψ\psi 是母小波,aa 是尺度参数,bb 是平移参数。
优点:能够在高频段提供高时间分辨率,在低频段提供高频率分辨率,适合分析非平稳信号。
缺点:计算复杂度较高。
03 希尔伯特黄变换 (Hilbert-Huang Transform)
希尔伯特黄变换是一种自适应方法,主要包括经验模态分解 (EMD) 和希尔伯特谱分析 (HSA)。EMD 将信号分解为固有模态函数 (IMF),然后使用希尔伯特变换获得瞬时频谱。步骤:
- 经验模态分解 (EMD):将信号分解为若干IMFs。
- 希尔伯特谱分析 (HSA):对每个IMF进行希尔伯特变换,获取瞬时频率和幅值。
优点:适用于非线性、非平稳信号,可以提供高分辨率的时频表示。
缺点:计算复杂度高,EMD的结果可能存在模态混淆。
04 短时离散余弦变换 (ST-DCT)
短时离散余弦变换类似于STFT,但使用余弦基函数。其公式为:
优点:在某些应用中比STFT更高效,尤其是在图像压缩和处理领域。
缺点:对非平稳信号的处理效果不如小波变换。
6. 时频分析工具与实现
01 MATLAB
MATLAB 提供了丰富的时频分析工具,如 spectrogram 用于 STFT,小波变换工具箱等。
02 Python
Python 有多个库可以进行时频分析,如:
- scipy.signal:提供了 stft 函数。
- pywt:提供了小波变换工具。
- mne:专门用于处理EEG/MEG数据的库。
7. 实例分析
下面给出一个简单的Python示例,使用STFT分析EEG信号:
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import stft
# 生成一个模拟的EEG信号
fs = 256# 采样频率
t = np.arange(0, 10, 1/fs)
eeg_signal = np.sin(2 * np.pi * 10 * t) + np.sin(2 * np.pi * 20 * t)
# 进行短时傅里叶变换
f, t, Zxx = stft(eeg_signal, fs, nperseg=256)
# 绘制时频谱
plt.pcolormesh(t, f, np.abs(Zxx), shading='gouraud')
plt.title('STFT of EEG Signal')
plt.ylabel('Frequency [Hz]')
plt.xlabel('Time [sec]')
plt.colorbar(label='Amplitude')
plt.show()