1. 任务态脑电时频分析概述
任务态脑电(Task-related EEG)分析是认知神经科学研究中的重要手段,通过记录被试在执行特定认知任务时的脑电信号,揭示大脑活动的动态特征。时频分析(Time-Frequency Analysis)作为其中的核心技术,能够同时解析脑电信号在时间和频率维度上的变化规律。
与传统的时域分析(如ERP)相比,时频分析具有三大独特优势:
- 揭示非相位锁定活动:捕捉与任务相关但不受试次间严格锁相的神经振荡
- 多频段联合解析:同时分析δ(1-4Hz)、θ(4-8Hz)、α(8-13Hz)、β(13-30Hz)、γ(>30Hz)等频段
- 动态过程可视化:通过时频能量变化展现认知过程的动态演化
2. 时频分析核心方法
2.1 连续小波变换(CWT)
连续小波变换是最常用的时频分析方法,其数学表达式为:
code复制CWT(a,b) = (1/√a) ∫ x(t)ψ*((t-b)/a) dt
其中:
a为尺度参数(对应频率)b为平移参数(对应时间)ψ(t)为母小波函数
在MATLAB中的实现代码:
matlab复制% 参数设置
frequencies = 1:30; % 分析频段(Hz)
cycles = 7; % 小波周期数
% 执行CWT
[wt, freqout] = cwt(eeg_data, 'amor', Fs, 'FrequencyLimits',[1 30]);
2.2 短时傅里叶变换(STFT)
STFT通过滑动时间窗实现时频分析,核心公式:
code复制STFT(t,f) = ∫[x(τ)w(τ-t)e^(-j2πfτ)]dτ
Python实现示例:
python复制from scipy import signal
import numpy as np
f, t, Zxx = signal.stft(eeg_data, fs=1000, nperseg=256)
2.3 Hilbert变换与包络分析
适用于窄带信号的瞬时能量提取:
matlab复制analytic_signal = hilbert(bandpass_data);
amplitude_envelope = abs(analytic_signal);
3. 完整分析流程与代码实现
3.1 数据预处理
python复制# Python示例
import mne
raw = mne.io.read_raw_brainvision('eeg.vhdr', preload=True)
raw.filter(1, 40, fir_design='firwin') # 带通滤波
raw.notch_filter(50) # 工频陷波
epochs = mne.Epochs(raw, events, event_id=1, tmin=-0.2, tmax=1.5, baseline=(-0.2,0))
3.2 时频分解实现
MATLAB完整示例:
matlab复制% 参数设置
Fs = 1000; % 采样率
frex = logspace(log10(2),log10(30),20); % 对数间隔频率
wavtime = -2:1/Fs:2; % 小波时间轴
nData = length(EEG.data);
nConv = nData + length(wavtime) - 1;
% 初始化输出矩阵
tf = zeros(length(frex),nData);
% 循环处理每个频率
for fi=1:length(frex)
% 创建复Morlet小波
s = 6/(2*pi*frex(fi)); % 标准差
cmw = exp(1i*2*pi*frex(fi).*wavtime) .* exp(-wavtime.^2./(2*s^2));
% 卷积计算
EEG_fft = fft(EEG.data,nConv);
cmw_fft = fft(cmw,nConv);
conv_result = ifft(EEG_fft.*cmw_fft);
conv_result = conv_result(1:nData);
% 提取能量
tf(fi,:) = abs(conv_result).^2;
end
3.3 统计检验与可视化
python复制# Python统计检验示例
from mne.stats import permutation_cluster_1samp_test
# 组水平统计
T_obs, clusters, cluster_pv, H0 = permutation_cluster_1samp_test(
tf_power, n_permutations=1000, threshold=dict(start=0.2, step=0.2))
# 可视化
plt.imshow(tf_power.mean(axis=0),
extent=[time[0], time[-1], frex[0], frex[-1]],
aspect='auto', origin='lower', cmap='jet')
4. 实战注意事项与经验分享
4.1 小波参数选择黄金法则
- 周期数选择:认知任务通常5-7个周期,高频分析可减少到3-5个
- 频率步长:建议对数间隔(logspace)优于线性间隔
- 边缘效应:需排除分析时段两端至少2*最长周期的数据
4.2 常见问题解决方案
问题1:时频分辨率不平衡
- 高频:时间分辨率高但频率分辨率低
- 低频:频率分辨率高但时间分辨率低
解决方案:采用对数频率尺度+变周期小波
问题2:多重比较校正
matlab复制% FDR校正示例
pvals = [0.01 0.005 0.03 0.001];
[h, crit_p] = fdr_bh(pvals, 0.05);
4.3 性能优化技巧
- 矩阵运算替代循环:使用
bsxfun或广播机制加速计算 - GPU加速:利用
pagefun(MATLAB)或CUDA(Python) - 内存管理:对长时程数据分块处理
5. 进阶应用方向
5.1 跨频段耦合分析
python复制# 相位-幅值耦合计算示例
from mne.connectivity import spectral_connectivity
pac = spectral_connectivity(
epochs, method='plv', mode='multitaper',
sfreq=1000, fmin=[8,30], fmax=[13,80])
5.2 时频特征解码
matlab复制% MVPA分类示例
cfg = [];
cfg.method = 'svm';
cfg.metric = 'accuracy';
cfg.design = design_matrix;
accuracy = ft_timelockstatistics(cfg, tf_data);
5.3 动态功能连接
code复制[coh, phasestats] = mscohere(x, y, window, noverlap, freqs, fs)
时频分析作为脑电研究的核心技术,其正确实施需要注意三大关键点:参数选择的生理合理性、统计检验的严谨性、结果解释的认知相关性。建议初学者从标准化的分析流程入手,逐步过渡到个性化分析方案的开发。实际分析中,建议同时保存原始时频数据和所有处理参数,确保结果的可重复性。
