✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。
🍎 往期回顾关注个人主页:Matlab科研工作室
👇 关注我领取海量matlab电子书和数学建模资料
🍊个人信条:格物致知,完整Matlab代码获取及仿真咨询内容私信
🔥 内容介绍
一、引言:脑电源定位的技术痛点与核心需求
脑电脑源定位(Electroencephalography Source Localization, ESL)是通过头皮脑电信号(EEG)反推大脑皮层神经活动源位置与强度的技术,在癫痫病灶定位、认知神经科学、脑机接口(BCI)等领域具有关键应用价值。脑电逆问题本质是欠定、病态且高度非线性的优化问题,核心挑战源于:
欠定特性:头皮 EEG 通道数(通常 32~128 通道)远小于大脑皮层可能的源点数(数千至上万个),解不唯一;
噪声干扰:EEG 信号幅值微弱(μV 级),易受头皮肌肉电、工频干扰等噪声影响,信噪比(SNR)通常低于 10dB;
生理约束:神经源活动强度具有非负性(神经元放电率不可为负),且功能相关的源点常呈 “块稀疏” 分布(如同一脑区的神经元同步激活);
定位精度:传统算法(如 MNE、sLORETA)忽略稀疏性与非负性约束,定位误差较大(通常>10mm),难以满足临床诊断需求。
传统稀疏贝叶斯学习(SBL)算法虽利用了源信号的稀疏性,但未考虑非负性与块结构特性,导致生理意义不符且定位精度有限;非负稀疏算法(如 NNLS)缺乏概率框架支撑,抗噪声鲁棒性差。非负块稀疏贝叶斯学习(Non-negative Block Sparse Bayesian Learning, NBSBL)算法通过融合 “非负约束 + 块稀疏建模 + 贝叶斯概率框架”,在保持抗噪声鲁棒性的同时,提升定位精度与生理合理性,成为脑电源定位的优选方案。
本文将系统阐述 NBSBL 算法的核心原理、脑电逆问题建模、算法优化策略,结合仿真数据与真实 EEG 数据验证其性能,为脑电源定位的工程化与临床应用提供技术支撑。
二、脑电逆问题建模与稀疏特性分析
(一)脑电正问题模型
脑电正问题是计算已知神经源在头皮电极上产生的电位分布,为逆问题求解提供映射基础。采用球头模型(BEM)简化大脑结构,正问题模型表示为:
Image
三、核心技术原理:非负块稀疏贝叶斯学习(NBSBL)算法
(一)算法设计思想
NBSBL 算法基于贝叶斯概率框架,通过引入非负先验与块稀疏先验,将脑电逆问题转化为概率推断问题。其核心优势在于:
概率建模:通过先验分布刻画源信号的非负块稀疏特性,后验分布自动估计源强度与噪声方差,无需人工设置正则化参数;
生理约束满足:非负先验确保源强度的物理合理性,块稀疏先验契合大脑神经活动的空间聚集性;
抗噪声鲁棒性:贝叶斯框架通过边际似然最大化自动平衡数据拟合与模型复杂度,降低噪声干扰。
(二)概率模型构建
- 非负块稀疏先验设计
Image
⛳️ 运行结果
Image
📣 部分代码
function [DeltaL,C,L] = LaplaceOperMatGen(Faces,GridLoc,Vertices1)
%Faces:矩阵形式,每行表示一个三角网格的三个顶点的(在导程场矩阵中对应列的)索引
%GridLoc:矩阵形式,表示为导程场矩阵每列对应顶点的坐标值,维度为 顶点数×3
%Vertices1:cell形式,各元素表示该脑区所包含的所有顶点的(在导程场矩阵中对应列的)索引集合(行向量形式)
Nvert = size(GridLoc,1);%全顶点数
Ntria = size(Faces,1);%网格中三角形的个数
H = zeros(Nvert,Nvert);%三角网格上的相邻点间的距离;0表示不相邻;索引顺序为导程场矩阵各列的索引顺序
%计算相邻点距离矩阵H
for k = 1:Ntria
if H(Faces(k,1),Faces(k,2)) == 0
H(Faces(k,1),Faces(k,2)) = norm(GridLoc(Faces(k,1))-GridLoc(Faces(k,2)),2);
H(Faces(k,2),Faces(k,1)) = H(Faces(k,1),Faces(k,2));
end
if H(Faces(k,1),Faces(k,3)) == 0
H(Faces(k,1),Faces(k,3)) = norm(GridLoc(Faces(k,1))-GridLoc(Faces(k,3)),2);
H(Faces(k,3),Faces(k,1)) = H(Faces(k,1),Faces(k,3));
end
if H(Faces(k,2),Faces(k,3)) == 0
H(Faces(k,2),Faces(k,3)) = norm(GridLoc(Faces(k,2))-GridLoc(Faces(k,3)),2);
H(Faces(k,3),Faces(k,2)) = H(Faces(k,2),Faces(k,3));
end
end
%由相邻点距离矩阵H计算全顶点拉普拉斯算子矩阵L,其维度为:全顶点数×全顶点数
hm = 1./sum(H)';
Hr = H;
for k1 = 1:Nvert
for k2 = 1:Nvert
if Hr(k1,k2)
Hr(k1,k2) = 1/Hr(k1,k2);
end
end
end
hr = sum(Hr)';
L = 4Hr.repmat(hm,1,Nvert);
for k = 1:Nvert
L(k,k) = -4*hm(k)*hr(k);
end
%从全顶点拉普拉斯算子矩阵L中提取一个cell结构数据C,其中每个元胞单元存储的是每个脑区的Laplace算子矩阵
%元胞单元的排列顺序按照Region中脑区的顺序,元胞单元内每个矩阵行与列排列顺序按照Vertices1排列顺序
Nregi = size(Vertices1,1);%脑区个数
DeltaL = cell(Nregi,1);
C = cell(Nregi,1);
for n = 1:Nregi
DeltaL{n} = L(Vertices1{n},Vertices1{n});
C{n} = pinv(DeltaL{n}.'*DeltaL{n});
end
🔗 参考文献
🎈 部分理论引用网络文献,若有侵权联系博主删除
🏆团队擅长辅导定制多种科研领域MATLAB仿真,助力科研梦: