脑电信号4
脑电信号4目录1. 盲源分离——从鸡尾酒会问题说起2. ICA的数学原理3. ICA在脑电中的实战应用4. EEG微状态——大脑的基本字母5. 微状态分析流程6. Python完整实战1. 盲源分离——从鸡尾酒会问题说起BSS盲源分离就是仅从混合录音中分离各自的声音不知道混合比例也不知道源信号长什么样。脑电跟BSS一样头皮64个电极录到的是脑内多个源的混合。BSS帮我们把它们拆开。importnumpyasnpimportmatplotlib.pyplotaspltfromscipyimportsignalfromsklearn.decompositionimportFastICA# 直观演示两个源→混合→ICA还原np.random.seed(42)tnp.linspace(0,2,500)s1np.sin(2*np.pi*2*t)# 源1慢正弦模拟脑电s2signal.sawtooth(2*np.pi*8*t)# 源2快锯齿模拟眼电x10.8*s10.5*s2# 电极1混合x20.3*s10.9*s2# 电极2混合Xnp.c_[x1,x2]icaFastICA(n_components2,random_state42,max_iter1000)S_hatica.fit_transform(X)fig,axesplt.subplots(2,2,figsize(14,6))axes[0,0].plot(t,s1,b,lw1.5);axes[0,0].plot(t,s2,r,lw1.5)axes[0,0].set_title(真实信号源);axes[0,0].legend([脑电,眼电])axes[0,1].plot(t,x1,gray,lw0.8);axes[0,1].plot(t,x2,k,lw0.8)axes[0,1].set_title(头皮电极录到的混合信号);axes[0,1].legend([电极1,电极2])axes[1,0].plot(t,S_hat[:,0],b,lw1.5);axes[1,0].plot(t,S_hat[:,1],r,lw1.5)axes[1,0].set_title(ICA还原的独立成分)axes[1,1].imshow(ica.mixing_,cmapRdBu_r,aspectauto)axes[1,1].set_title(混合矩阵A);axes[1,1].set_xticks([0,1]);axes[1,1].set_yticks([0,1])plt.suptitle(ICA盲源分离仅从头皮混合信号还原出独立源,fontsize13)plt.tight_layout();plt.show()ICA vs PCA——很多人混淆这两个PCAICA目标找方差最大的方向找统计独立的方向假设信号服从高斯分布信号非高斯输出成分之间不相关正交成分之间统计独立更强2. ICA的数学原理ICA模型X A·S。已知X头皮EEG求W≈A⁻¹得 Ŝ W·X。核心假设源信号是非高斯的。为什么中心极限定理——多个独立非高斯信号的混合比单个信号更像高斯分布。ICA做的就是找到让输出最不像高斯分布的分离方向——“非高斯性≈独立性”。用负熵量化非高斯性J(y) H(y_gauss) − H(y)。高斯分布熵最大负熵越大→越不像高斯→越可能是独立源。FastICA通过最大化负熵迭代求解W。defdemo_ica_geometry():直观感受ICA的几何意义np.random.seed(0)s1np.random.uniform(-1,1,1000)# 两个独立均匀源s2np.random.uniform(-1,1,1000)Xnp.array([[0.7,0.5],[0.3,0.8]]) np.vstack([s1,s2])S_hatFastICA(n_components2,random_state42).fit_transform(X.T).T fig,axesplt.subplots(1,3,figsize(15,4.5))axes[0].scatter(s1,s2,s3,alpha0.5)axes[0].set_title(源信号正方形独立);axes[0].set_aspect(equal)axes[1].scatter(X[0],X[1],s3,alpha0.5,cred)axes[1].set_title(混合后菱形相关);axes[1].set_aspect(equal)axes[2].scatter(S_hat[0],S_hat[1],s3,alpha0.5,cgreen)axes[2].set_title(ICA还原恢复正方形);axes[2].set_aspect(equal)plt.suptitle(ICA几何直觉混合旋转拉伸→ICA解旋还原,fontsize13)plt.tight_layout();plt.show()demo_ica_geometry()3. ICA在脑电中的实战应用3.1 三大去伪迹场景伪迹类型ICA识别依据关键特征眼电(EOG)前额通道权重高 低频功率大波形呈尖峰、峰度5肌电(EMG)高频功率大(30Hz)颞区权重高、不规则心电(ECG)规律尖峰(~1Hz)空间分布广泛3.2 自动分类成分defclassify_ica_components(ica,raw_eeg,fs256):自动分类ICA成分眼电/肌电/心电/脑电n_compica.mixing_.shape[1]sourcesica.transform(raw_eeg.T).T mixingica.mixing_ labels[]foriinrange(n_comp):frontal_wnp.abs(mixing[:3,i]).mean()/(np.abs(mixing[:,i]).mean()1e-10)f,psdsignal.welch(sources[i],fs,npersegfs*2)totalnp.trapz(psd,f)1e-10low_rnp.trapz(psd[(f0.5)(f4)],f[(f0.5)(f4)])/total high_rnp.trapz(psd[(f30)(f50)],f[(f30)(f50)])/total kurtnp.mean((sources[i]-sources[i].mean())**4)/(np.std(sources[i])**41e-10)iffrontal_w1.5andlow_r0.3andkurt5:labels.append(眼电)elifhigh_r0.3:labels.append(肌电)elif0.05low_r0.4andkurt4:labels.append(心电)else:labels.append(脑电)returnlabels使用ICA的注意事项先做1Hz高通滤波再做ICA——低频漂移会让分解不稳定成分数≤通道数数据越长ICA越稳定自动标记后建议人工复查——误删脑电成分比漏删伪迹更糟糕去坏段后再ICA——运动伪迹会污染所有成分4. EEG微状态——大脑的基本字母4.1 什么是微状态观察EEG的多通道地形图你会发现头皮电位不是随机变化的——它在几种固定空间模式之间快速切换每种模式持续约60-120ms。这些准稳态的地形图就是微状态Microstate。打个比方微状态像字母大脑用有限的字母约4种的不同排列组合来表达不同认知状态。4.2 经典四类微状态微状态地形图特征功能关联A类左枕→右额梯度听觉/语言网络B类右枕→左额梯度视觉网络C类额-枕对称中线突显网络——自我参照、冥想相关D类中央-额叶分布注意网络——任务正相关4.3 四个关键时间参数参数含义冥想中的变化持续时间平均持续多少ms冥想相关微状态持续时间↑覆盖率占总时间百分比冥想相关微状态占比↑出现频率每秒出现次数切换频率↓→大脑更稳定转移概率从A切换到B的概率某些转移路径概率改变有研究发现资深冥想者的C类微状态覆盖率显著高于普通人且切换频率更低——大脑更倾向于稳定地保持在自我参照状态。5. 微状态分析流程5.1 四步走预处理EEG → 计算GFP → 取GFP峰值处地形图 → K-means聚类(4类) → 回标到原始EEG取GFP峰值处的原因GFP峰值处信噪比最高、地形图最稳定。谷值处地形图不可靠。deffind_gfp_peaks(eeg_multi,fs256,min_dist_ms50):找到GFP峰值时刻gfpnp.std(eeg_multi,axis0)peakssignal.find_peaks(gfp,distanceint(min_dist_ms/1000*fs))[0]returnpeaks,gfpdefextract_microstates(eeg_data,n_states4,n_peaks500,fs256):从EEG提取微状态GFP峰值→聚类→回标# 1. 找GFP峰值处的地形图peaks,gfpfind_gfp_peaks(eeg_data,fs)top_idxpeaks[np.argsort(gfp[peaks])[-n_peaks:]]toposeeg_data[:,top_idx].T# 2. K-means聚类fromsklearn.clusterimportKMeans kmeansKMeans(n_clustersn_states,random_state42,n_init10)kmeans.fit(topos)# 3. 回标每个时间点分配给最近聚类中心eeg_teeg_data.T distsnp.array([np.sum((eeg_t-c)**2,axis1)forcinkmeans.cluster_centers_])seqnp.argmin(dists,axis0)returnseq,kmeans.cluster_centers_defmicrostate_params(seq,fs256,min_dur_ms30):计算微状态时间参数min_sint(min_dur_ms/1000*fs)params{}forsinnp.unique(seq):is_s(seqs).astype(int)edgesnp.diff(np.concatenate([[0],is_s,[0]]))startsnp.where(edges1)[0]endsnp.where(edges-1)[0]durs(ends-starts)/fs*1000validdursmin_s params[fMS{s}]{平均持续(ms):np.mean(durs[valid]),覆盖率(%):is_s.sum()/len(seq)*100,频率(次/s):len(starts[valid])/(len(seq)/fs),}returnparams6. Python完整实战classEEGBSSAnalyzer:ICA去伪迹 微状态分析def__init__(self,fs256):self.fsfs;self.icaNonedefrun_ica(self,eeg):n_cheeg.shape[0]self.icaFastICA(n_componentsn_ch,random_state42,max_iter2000)sourcesself.ica.fit_transform(eeg.T).Treturnsources,self.ica.mixing_defremove_artifacts(self,eeg,artifact_idx):sourcesself.ica.transform(eeg.T).T sources[artifact_idx]0returnself.ica.mixing_ sources# 完整演示 fs,dur256,10tnp.arange(0,dur,1/fs);nlen(t);n_ch8np.random.seed(42)# 生成模拟多通道EEGeegnp.array([(10-ch*0.8)*np.sin(2*np.pi*10*tch*0.3)(5ch*0.3)*np.sin(2*np.pi*20*tch*0.5)np.random.randn(n)*3forchinrange(n_ch)])# 加眼电前额通道强forbtin[2.5,5.0,7.5]:blink100*np.exp(-((t-bt)/0.1)**2)forchinrange(n_ch):eeg[ch]blink*(1.5-0.18*ch)# 1. ICA去眼电analyzerEEGBSSAnalyzer(fs)sources,mixinganalyzer.run_ica(eeg)artifact_idxnp.argmax(np.abs(mixing[:2]).mean(axis0))# 前额权重最高的成分eeg_cleananalyzer.remove_artifacts(eeg,[artifact_idx])# 2. 微状态分析seq,centersextract_microstates(eeg_clean,n_states4,fsfs)paramsmicrostate_params(seq,fs)# 可视化fig,axesplt.subplots(2,2,figsize(14,8))# ICA前后对比axes[0,0].plot(t,eeg[0],gray,lw0.5,alpha0.7,label含眼电)axes[0,0].plot(t,eeg_clean[0],blue,lw1,label去眼电后)axes[0,0].set_title(f通道0(Fp1) ICA前后对比);axes[0,0].legend();axes[0,0].grid(True,alpha0.3)# 混合矩阵imaxes[0,1].imshow(mixing,aspectauto,cmapRdBu_r)axes[0,1].set_title(f混合矩阵(成分{artifact_idx}眼电))axes[0,1].axvline(artifact_idx,colorred,lw2)plt.colorbar(im,axaxes[0,1])# 微状态覆盖率nameslist(params.keys())axes[1,0].bar(names,[params[k][覆盖率(%)]forkinnames],color[red,blue,green,orange],edgecolorblack)axes[1,0].set_title(四类微状态覆盖率);axes[1,0].set_ylabel(%)# 微状态时序segseq[500:900]colors[red,blue,green,orange]axes[1,1].fill_between(range(len(seg)),seg-0.4,seg0.4,color[colors[int(s)]forsinseg],alpha0.5)axes[1,1].plot(seg,black,lw0.5)axes[1,1].set_title(微状态时序~1.6秒片段);axes[1,1].set_ylabel(状态)axes[1,1].set_ylim(-0.5,3.5);axes[1,1].set_yticks([0,1,2,3])plt.suptitle(ICA去眼电 微状态聚类 完整演示,fontsize14)plt.tight_layout();plt.show()print(\n微状态时间参数:)forkinsorted(params.keys()):pparams[k]print(f{k}: 持续{p[平均持续(ms)]:.0f}ms, 覆盖{p[覆盖率(%)]:.1f}%, 频率{p[频率(次/s)]:.2f}次/s)关键发现ICA能有效分离眼电成分前额高权重低频尖峰特征明显EEG微状态通常聚类为4类其中C类与自我参照/冥想状态密切相关微状态时间参数比传统频谱指标更稳定——是个体脑指纹的候选去伪迹后脑电成分保留完好重构信号波形自然无失真

相关新闻

点云转BEV鸟瞰图:从三维感知到二维网格的工程实践

点云转BEV鸟瞰图:从三维感知到二维网格的工程实践

1. 项目概述:从三维世界到二维平面的降维艺术最近在整理一些自动驾驶和机器人感知相关的项目资料,发现“点云转BEV鸟瞰图”这个需求几乎无处不在。无论是做场景理解、障碍物检测,还是路径规划,一个清晰、信息量丰富的鸟瞰图都是后…

2026/10/26 22:55:59 阅读更多 →
哈希算法七大核心应用场景:从数据结构到分布式系统实战

哈希算法七大核心应用场景:从数据结构到分布式系统实战

1. 项目概述:为什么说哈希算法是程序员的“瑞士军刀”?如果你写过代码,哪怕只是写过几行Python脚本,大概率也用过字典(dict)或者集合(set)。你有没有想过,为什么我们能通…

2026/10/26 22:56:01 阅读更多 →
BLAS 3级例程:从矩阵乘法到高性能计算的核心优化

BLAS 3级例程:从矩阵乘法到高性能计算的核心优化

1. 从“单打独斗”到“集团军作战”:为什么我们需要BLAS 3级例程如果你写过矩阵乘法,大概率是从一个三重循环开始的。两个嵌套循环遍历结果矩阵的每个元素,最内层循环累加对应行列的点积。代码简单直观,但性能呢?惨不忍…

2026/10/26 22:56:06 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/27 17:33:32 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/27 4:06:49 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/27 7:21:53 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/27 18:20:50 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/27 6:20:47 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/27 4:06:50 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/27 13:55:19 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/27 7:21:50 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/27 19:19:37 阅读更多 →