阶段四 · 连接与溯源 · 模块 6 · 第 15 课 / 共 28 课

脑电功能连接指标:相干与相位同步

连接分析的第一课先把"指标"讲透:相干、PLV、PLI、wPLI 各自在算什么、 谁会被体积传导骗、谁又怕噪声。最后用几十行 Matlab 手算一遍 PLV, 把公式变成看得见的曲线。

🕐 60 分钟🎯 难度:高阶✅ 前置:模块 4

🎯 本节学习目标

  • 能区分功能连接与有效连接:一个像"聊天记录",一个像"谁先说话"
  • 理解相位与解析信号,会用 hilbert + angle 提取瞬时相位,并说清为什么必须先做窄带滤波
  • 能解释 coherence / PLV / PLI / wPLI 四个指标各自"在算什么"、值域与含义
  • 理解零滞后体积传导为何让 coherence 与 PLV 出现假高值,PLI 与 wPLI 的抗性从何而来
  • 能独立运行手算 PLV 的 Matlab 代码,并解释每个中间变量的物理含义

一、从"哪里激活"到"谁和谁对话"

前五个模块回答的都是"哪里、什么时候"激活:ERP 看电位幅度(模块 3),时频看功率(模块 4)。 但大脑是分布式系统,认知加工靠脑区之间的通信完成。模块 6 换一个问题: 哪些脑区在对话?对话得多紧密?

功能连接有效连接
回答什么两个信号统计上是否相关/同步谁对谁有方向性影响
有无方向无(A–B 与 B–A 相同)有(A→B 不等于 B→A)
生活类比聊天记录:只知道聊得勤不勤谁先说话、谁在回应
代表方法相干、PLV、PLI、wPLIGranger 因果、DTF、DCM

本模块聚焦功能连接:计算简单、物理直觉清晰,是地基。方向性指标(FieldTrip 里的 cfg.method = 'granger' 一族)建立在自回归模型上,地基不牢时极易把体积传导伪迹 读成"因果方向",本课程不展开。

二、相位:连接分析的通用语言

频域连接指标几乎都建立在相位(phase)上。把一段窄带信号写成 x(t) = A(t) · cos( φ(t) )A(t) 是包络(这一拍敲多重), φ(t) 是瞬时相位(这一拍敲到循环的哪个位置)。两个信号的相位差稳定, 说明它们始终"对得上拍"。

实信号没有现成的相位,标准做法是构造解析信号:给实信号 x 配上一个虚部, 变成复信号 z(t) = x(t) + i·H(x)(t),其中 H(x) 是希尔伯特变换。 复数用模长和辐角表示——模长就是包络 A(t),辐角就是瞬时相位 φ(t)。 Matlab 里一行 angle(hilbert(x)) 就能拿到(模块 4 讲时频时见过同一招)。

💡 相位只在"窄带"里有意义

混合了 8Hz 和 30Hz 的信号,其瞬时相位是两个成分相位的杂糅,物理上无从解释。所以永远先 滤波到目标频段(如 8–13Hz),再做希尔伯特变换。顺序颠倒 = 后面全错。

直觉类比:两个鼓手掌心相对轮流击掌。每次击掌是一个周期,相位就是手掌在 "举起—拍下—分开"循环里的位置。两人每次都同时拍下 = 相位锁定; 一个总慢半拍 = 恒定相位差;各拍各的 = 相位差随机。本节课的所有指标, 都是在给"这两位鼓手的合拍程度"打分。

Matlab
% 提取瞬时相位:滤波 -> 希尔伯特 -> angle
fs = 500; t = (0:1/fs:2)';                      % 采样率 500Hz,2 秒

x1 = sin(2*pi*10*t) + 0.3*randn(size(t));       % 10Hz 振荡 + 噪声
x2 = sin(2*pi*10*t + pi/2) + 0.3*randn(size(t)); % 同频,恒定超前 pi/2

% 1) 窄带滤波(9-11Hz):相位只在窄带内可解释
[b, a] = butter(2, [9 11]/(fs/2), 'bandpass');
x1f = filtfilt(b, a, x1);                       % filtfilt:零相位滤波,不引入额外延迟
x2f = filtfilt(b, a, x2);

% 2) 解析信号 -> 瞬时相位(弧度)
phi1 = angle(hilbert(x1f));
phi2 = angle(hilbert(x2f));

% 3) 相位差:理论上应稳定在 -pi/2 附近
dphi = phi1 - phi2;
figure;
subplot(2,1,1); plot(t, phi1, t, phi2); legend('phi_1', 'phi_2');
title('两条瞬时相位曲线');
subplot(2,1,2); plot(t, dphi); hold on; yline(-pi/2, 'r--');
ylim([-pi pi]); title('相位差(两端的滤波边缘抖动先忽略)');

三、相干 coherence:最老牌、也最容易被骗

相干在频域定义(模块 4 的谱估计知识直接用上):对频率 f,先算两信号的互谱 Sxy(f)——一个同时含幅值与相位信息的复数——和各自的自谱 Sxx(f)、Syy(f),然后:

Coh(f) = | Sxy(f) | / sqrt( Sxx(f) · Syy(f) )

文字解释:分子是"两信号在这个频率上共同的成分有多强",分母用各自能量做归一化, 所以取值 0–1。1 表示该频率上两信号完全线性相关,0 表示完全独立。它是脑电连接文献的 "开场白指标"——也是最常被误读的指标,因为有两个坑。

⚠️ 相干的两个坑:幅值混入 + 体积传导

坑一:相干混合幅值相位两种耦合——两个脑区只是"功率一起涨落"、 相位毫无同步,相干照样升高。坑二:单个源经容积传导同时扩散到两个电极,两电极收到的 是"同一份信号的两次拷贝",相干虚高。下面逐一拆解。

📖 概念:容积导体

脑组织、颅骨、头皮都是导电介质,合称容积导体。任何源的电流都会像水波一样 传遍整个头,每个电极记录的都是所有源的加权混合。类比:你站在两个房间的隔墙外, 两边开着的音响你都能听到——你耳朵里"两个房间的声音高度同步",但两个房间里的人 可能一句话都没说过。

体积传导为什么专坑"看重相似性"的指标:源信号传到两个电极几乎同时到达(介质中的传导延迟 是微秒级,脑电采样率分辨不出),于是两电极信号零时间滞后地相似。相干、互相关 这类指标无法区分"真交互"与"同一源的两份拷贝"——这就是第五节 PLI 要下刀的地方。

四、PLV:只看相位的同步强度

PLV(phase-locking value)把注意力收窄到相位:对每个时间点(或每个试次)算相位差 Δφ(t) = φx(t) − φy(t),把它看成单位圆上的一个向量,再取所有向量的平均:

PLV = | (1/N) · Σ e^( i·Δφ(t) ) |

文字解释:相位差完全锁定时,所有向量指向同一方向,平均向量长度 = 1;相位差均匀随机时, 向量四面八方互相抵消,平均长度 = 0。PLV 天然落在 0–1,衡量的是 相位差分布的集中度——像指南针:大家指向一致,指针长;各指各的,指针缩成一个点。

  • 相比相干:PLV 剔除了幅值信息,只回答"相位是否同步",解释更干净;
  • 统计前提:N 次重复观测(多试次或多段时间窗)。单试次 PLV 没有意义—— 没有"分布"就谈不上"集中度";
  • 它不抗体积传导:同一源拷贝到两个电极,相位差恒为 0,PLV 照样 = 1。 换指标换不掉这个坑,要靠下一节的 PLI。

五、PLI:只认相位差的"符号"

📖 概念:零滞后(zero-lag)

两个信号没有时间差地同步波动。真实神经传导有轴突传导与突触延迟(毫秒级), 表现为系统性非零滞后;体积传导制造的"假同步"则是零滞后的。零滞后因此成为 分辨真假交互的一把刀。

PLI(phase lag index)的思路极其大胆:相位差的其他信息全部扔掉,只留正负号

PLI = | (1/N) · Σ sign( Δφ(t) ) |

文字解释:统计"φx 比 φy 超前的次数"与"落后的次数"是否失衡。恒定超前 → 全是 +1, PLI 趋近 1;真随机 → 正负各半,PLI 趋近 0;而零滞后(Δφ ≈ 0)时, 相位差在 0 附近被噪声推来推去,正号负号对半出现,PLI 同样趋近 0。换句话说: 体积传导制造的假连接恰好落在 PLI 的"盲区"里,被自动扔掉;真实交互带着毫秒级延迟 → 相位差系统性偏离 0 → 符号失衡 → PLI 升高。

代价也很直接:正负号是信息量极低的粗糙统计量。当真实相位差本来就很小(快频段、短延迟) 或试次数少时,噪声在 0 附近频繁翻转符号,PLI 估计值剧烈抖动、系统性偏低。 这正是下一节 wPLI 要修的问题。

六、wPLI:给符号配上"权重"

wPLI(weighted phase lag index)的改进一句话讲完:不让每个相位差一票一权, 而是按可信度加权。权重取交叉谱虚部的幅度 |Im(Sxy)|——相位差离 0 越远(滞后越明确), 虚部越大,这一票分量越重;贴着 0 的相位差权重接近 0,就算被噪声翻转了符号也几乎不影响总和:

wPLI = | Σ |w(t)| · sign( w(t) ) | / Σ |w(t)|,其中 w(t) = Im( Sxy(t) )

文字解释:分子是加权后的符号净失衡,分母归一化。效果:既保留 PLI"扔掉零滞后"的优点, 又把噪声敏感度大幅压低。同族还有去偏版本:FieldTrip 的 wpli_debiased (修正少试次时的正偏差)等。新手可以直接记结论:头皮电极水平的连接分析, wPLI(或去偏版)通常比相干更稳妥

七、四大指标对比表

指标核心计算抗零滞后体积传导噪声敏感性一句话解释
Coherence互谱 / 自谱归一化不抗广义耦合(幅值与相位混在一起)
PLV相位差向量的平均长度不抗(零滞后反而锁相)相位同步的集中程度
PLI相位差符号的净失衡高(符号易被噪声翻转)存在真实滞后的相位同步
wPLI符号 × 虚部幅度加权低(比 PLI 稳得多)抗零滞后且稳健的相位滞后同步
📌 选择口诀

源空间数据(模块 7 的 ROI 时间序列):coherence / PLV 可以放心用;头皮电极水平: 优先 wPLI / PLI 家族;想保留幅值信息、且能论证容积传导已妥善处理:coherence。 指标选择要在分析前写进方案——做完再挑"好看的指标"是审稿人最反感的操作。

八、Matlab 手算 PLV:把公式落成代码

下面这段代码不依赖任何工具箱,从模拟数据到 PLV 全流程手写。跑通它, 你对"相位同步"的理解会超过 90% 只会调函数的人。

Matlab
%% 手算 PLV:filter -> hilbert -> angle -> 相位差 -> PLV
clear; clc; close all;
rng(6);                                   % 固定随机种子,结果可复现

% --- 模拟数据:60 个试次,y 相对 x 恒定滞后 pi/2(真实交互的样子) ---
fs = 500; T = 2; t = (0:1/fs:T-1/fs)';
nTrials = 60;
x = zeros(nTrials, numel(t));             % 试次 x 时间
y = zeros(nTrials, numel(t));
for k = 1:nTrials
    p0 = 2*pi*rand;                       % 每试次初始相位随机(试次之间不同步)
    x(k,:) = sin(2*pi*10*t + p0) + 0.2*randn(size(t));
    y(k,:) = sin(2*pi*10*t + p0 + pi/2) + 0.2*randn(size(t));  % 恒定相位差
end

% --- 1) 窄带滤波:相位只在窄带内可解释 ---
[b, a] = butter(2, [9 11]/(fs/2), 'bandpass');
xf = filtfilt(b, a, x, [], 2);            % 第 5 个参数 2 = 沿第 2 维(时间)滤波
yf = filtfilt(b, a, y, [], 2);

% --- 2) 解析信号 -> 瞬时相位(弧度) ---
phix = angle(hilbert(xf, [], 2));         % hilbert(x, [], dim) 沿指定维做变换
phiy = angle(hilbert(yf, [], 2));

% --- 3) 相位差 ---
dphi = phix - phiy;

% --- 4) PLV:单位圆上相位差向量的平均长度 ---
plv = squeeze(abs(mean(exp(1i*dphi), 1)));   % 沿试次维平均 -> 1x时间的 PLV 曲线

% --- 顺手算个 PLI 对比(只用符号,见第五节) ---
pli = squeeze(abs(mean(sign(dphi), 1)));

figure;
subplot(2,1,1);
plot(t, plv, 'LineWidth', 1.5); hold on; plot(t, pli);
ylim([0 1.05]); legend('PLV', 'PLI');
title('稳态区(忽略两端 0.3s 滤波边缘)两者都应接近 1');
subplot(2,1,2);
plot(dphi(1,:), '.');                     % 看一眼相位差本身:应稳定贴着 -pi/2
ylabel('\Delta\phi (rad)'); xlabel('时间 (s)');

九、从模拟数据到真实数据

把模拟数据换成你模块 2 预处理好的真实数据,只需替换中间几行:EEG.data 是 通道 × 时间 × 试次的三维矩阵,挑两个电极(如 F3 与 O1),沿第三维做相位差即可——练习里 就做这件事。单被试单指标的数值别急着写进论文:6.2 解决"这条边是真的吗"(统计与校正), 6.3 解决"整套流程怎么工程化"(FieldTrip)。

📌 本节小结

  • 功能连接 = 无方向的统计依赖(聊天记录);有效连接 = 有方向的因果影响(谁先说话)
  • 相位是连接分析的通用语言:filter → hilbert → angle 三步提相位,窄带滤波不可省
  • coherence 混合幅值与相位、且不抗体积传导;PLV 只看相位集中度,但零滞后照样满分
  • PLI 只用相位差符号 → 零滞后假连接自动归零;代价是对噪声敏感、少试次不稳
  • wPLI 用虚部幅度加权 → 保留抗零滞后优点并大幅降噪;头皮水平的首选指标
  • 指标选择要在分析前定死:源空间可用 coh/PLV,头皮水平优先 wPLI/PLI

✏️ 课后练习

  1. 把模拟代码里的滞后量从 pi/2 改成 0(零滞后假同步)再跑一遍:观察 PLV 依然接近 1,而 PLI 塌向 0——亲手体验"零滞后盲区"。
  2. 把试次数依次改成 10 / 30 / 60 各跑一遍,观察 PLI 曲线的抖动如何随试次数下降——这就是 wPLI 被发明出来的理由。
  3. 用模块 2 输出的 lesson23_preprocessed.set:取 EEG.data 中 F3 与 O1 两个电极,在 8–13Hz 上按本课代码计算 PLV 与 PLI,报告两个数值并解释差异。