
前几篇我们把脑电的预处理、时域特征都过了一遍不少读者留言说想尽快进入频域。这其实很正常EEG信号放在时域里多数时候就是几团缠在一起的毛线波形上只能看个大概可一旦从傅里叶变换这面“棱镜”里过一遍各个频段的节律立刻显出轮廓闭眼时的alpha节律、睡眠深处的delta波、藏在背景噪声里的微弱振荡都会在频谱上留下清晰的指纹。做EEG分析的人几乎绕不开一个词功率谱密度PSD。它描述信号功率在不同频率上的分布情况是频域分析的地基也是后续计算相对功率、频谱熵、峰值频率、个体alpha频率等一系列指标的起点。这篇作为系列第7篇打算一次性把PSD的计算方法讲透周期图和Welch到底差在哪、Multitaper好在哪、AR模型什么时候值得用、参数怎么定、代码怎么写最后再把实际处理EEG数据时最容易踩的坑都翻出来。适合谁看准备做时频分析或ERSP、却还没把平稳频谱搞明白的人被单次FFT频谱抖得怀疑人生的新人以及想换一种谱估计方法却拿不准该选谁的老手。这篇尽量用直白的话把这些方法掰开揉碎同时给出一套可以直接套用的参数配置和Python代码。1. 为什么说PSD是脑电频域分析的“基石”1.1 从时域到频域我们到底在看什么脑电的时域波形看起来像一堆随机起伏的电压曲线实际上它是多个频率成分叠加后的结果。脑子里无时无刻不在产生不同节律的电生理活动这些节律各自有各自的频率范围最慢的delta大概在0.5到4Hztheta在4到8Hzalpha在8到13Hzbeta在13到30Hzgamma可以到30Hz以上甚至几十上百Hz。它们混在一起再加上肌电、眼电、环境噪声这些“不速之客”时域图上很难直接分辨谁是谁。傅里叶变换干的事情就是把这堆混合信号拆开看看每种频率的成分各占多少“分量”。这就像客厅里一堆人同时在说话你闭着眼听时只能感受到“很吵”但如果你有一套算法能把每个人的声纹分出来就能知道一共有几个人、每个人音量多大、分别在说什么频率范围内的话。EEG频域分析做的就是类似的事。每个频段又有它自己的生理含义睁眼静息态下枕区alpha会比较明显这是神经科学里最经典的“alpha阻断”现象睡眠时delta和theta会增强纺锤波出现在sigma频段某些认知任务里额叶theta和顶区alpha的变化也经常被拿来当指标。这些现象如果只盯时域波形很难稳定地量化但到了频谱上各个频段的能量一目了然。1.2 PSD的数学背景与单位问题功率谱密度通俗说就是“每个频率点上信号功率的密度是多少”。数学上它有两种常见的等价说法一种是把信号的自相关函数做傅里叶变换这也就是Wiener–Khinchin定理听着唬人本质就是自相关的频域表达另一种是直接对信号做傅里叶变换把幅度谱取模平方再除以时长。日常计算中大家更熟悉后一种。具体到离散信号周期图的定义为P(f) ≈ |X(f)|² / N这里X(f)是信号的离散傅里叶变换N是样本点数。如果把采样率也考虑进去单边功率谱密度还要乘以系数让单位变成我们熟悉的“每赫兹功率”。比如EEG信号幅度单位是μV那么PSD单位就是μV²/Hz这是非常常见的单位。不少软件还喜欢转成dB显示公式是10 * log10(PSD)因为脑电信号的能量在高低频之间差了好几个数量级直接画线性坐标会看不清低频之外的东西。这里要特别提醒一下PSD不是幅值。很多新手看到PSD曲线上的峰会下意识说“这里幅值好高”其实那代表的是“这个频率附近的能量密度高”和时域波形的幅值不是一回事。单位里带了“每赫兹”三个字就说明它是一个密度概念而不是简单的能量或功率值。1.3 工程里PSD支撑着哪些EEG指标PSD之所以被称为基石是因为后面一大堆指标都是从它身上长出来的。最常见的就是绝对频段功率和相对频段功率对某个频段范围的PSD做积分得到的就是这个频段的总功率再除以全频段总功率就得到相对功率。注意这里用的是积分而不是简单取平均因为PSD是一个密度函数频率范围越宽积出来的数值越大不积分会吃亏。再往后峰值频率、个体alpha频率IAF、频谱熵、边缘频率spectral edge frequency、中值频率这些也都是基于PSD衍生出来的。睡眠分期算法里不同睡眠阶段在delta、theta、alpha、beta、sigma频段的功率结构有典型差异而自动分期模型的特征几乎都离不开PSD。做麻醉深度监测、驾驶疲劳评估、情绪识别的研究也普遍会用到PSD作为核心特征。可以说如果只学一个频域工具那大概率就是它。2. 功率谱密度计算方法全景从朴素到进阶2.1 周期图法简单直接但方差大到让人头皮发麻周期图是谱估计里最朴素的做法把整段信号直接做FFT然后对幅度谱取平方。它的实现太简单了一行代码就能出结果很多新手第一次画出来的频谱毛刺就是它。但这个方法的毛病也很明显方差极大。即使数据再长单次周期图的谱曲线依然会上蹿下跳并不会自动收敛到一条光滑曲线。在统计上这叫“非一致估计”通俗点说就是你用一段5秒的数据算一遍频谱再用另一段5秒的数据算一遍两条曲线大概率差得很远谁都不敢只凭一次的结果下结论。对于EEG这种本身信噪比就不高的信号直接拿周期图出报告基本等于赌博。周期图唯一适合的场景是快速预览数据量很大、只想知道大体上在哪些频率有能量可以先用它扫一眼。但不要拿它来做正式分析更不要拿它来做组间比较。代码上对应的就是scipy.signal.periodogram大家可以试试感受一下那条锯齿状的曲线会比我说的更直观。2.2 Welch法EEG分析当之无愧的“主力选手”Welch法是目前EEG频域分析里用得最多的方法没有之一。它的思路是对周期图的“平均降噪”把一段长信号切成若干段每段加窗后分别做FFT和周期图最后把所有段的周期图平均起来作为最终PSD。这样做的好处有两个。第一方差显著降低原理类似重复测量取平均M段数据的平均估计方差大体上能降到大约1/M的量级曲线会光滑很多。第二通过设置重叠率同一段数据可以被反复利用比如相邻两段数据重叠50%既增加了平均的段数也没有因为信息重复增加太多计算负担。配合合适的窗函数频谱泄漏也能压到很低的水平。实现上如果采样率是250Hz想要比较好的谱估计一般推荐用4秒左右的窗也就是1000个点。4秒窗对应的频率分辨率约为0.25Hz在脑电这个尺度上足够把alpha频段内的细微峰分辨出来。重叠率选50%窗函数选汉宁窗这是我在静息态EEG分析里最常用的默认配置。如果手头数据每个segment只有2秒比如事件相关设计那2秒窗也凑合但对应的频率分辨率会降到0.5Hz比较尖锐的谱峰容易被抹平一点后面再说怎么取舍。2.3 Bartlett法Welch的极简版有点尴尬Bartlett法可以理解为Welch法的一个特例把信号平均分成不重叠的段分别计算周期图再取平均。它在概念上帮我们建立“平均能降方差”这个直觉但在实际EEG分析里用得很少。原因很简单不重叠的分段方式浪费了大量数据尤其是整体数据本来就不长的情况下能平均的段数少方差降不了多少频率分辨率还受段长限制。Welch法加入重叠之后用同样长度的数据能拿到更多段来平均性能明显更好。既然直接调参数就能用上Welch谁还会专门去记一个Bartlett呢在科普里提它只是为了把谱估计方法的前后脉络讲清楚实操中大家直接到Welch一步到位就够了。2.4 Multitaper法对付短数据和尖锐谱峰的进阶武器Multitaper法多窗谱估计是很多神经科学研究者的心头好。它和Welch的出发点类似都是想通过多次估计取平均来降低方差但做法完全不同Welch是在时间轴上把数据切成几段Multitaper是用一组相互正交的窗函数最常用的是Slepian窗也叫DPSS窗分别作用于整段数据对每窗加窗后的序列做周期图再把得到的所有谱估计加权平均。由于这些窗相互正交它们对同一段数据提取出的信息是互补的平均之后既保住了整段数据的时长又有效降低了方差。用一句不太严谨但好理解的话说Welch靠“切时间”Multitaper靠“切频带”。正是这个特点让Multitaper在数据长度有限、谱峰又比较尖的情况下表现很好比如分析几十秒到几分钟的静息态分段或者事件相关实验里比较短的epoch。使用Multitaper需要设置一个关键参数时间带宽积NW。它直接影响谱估计的平滑程度和窗的数量。在Chronux等工具箱里常用NW3对应大约5个窗如果想更平滑可以选更大的NW值但代价是频率分辨率变差。MNE中也可以在compute_psd时指定methodmultitaper来直接调用。缺点是不如Welch参数那么直观对新手略不友好EEG数据量很大的时候计算也稍慢。2.5 AR模型谱估计参数化路线的代表除了非参数方法谱估计还有一条参数化路线其中AR自回归模型最典型。AR模型假设信号是白噪声经过一个线性系统后产生的建模时先用实际数据拟合出一组AR系数再根据这组系数直接推导出理论上非常平滑的频谱。这个方法的优点是即使数据很短也能得到分辨率足够高、且曲线的确很光滑的谱估计不存在Welch法里“窗长不够就糊成一片”的问题。在信号本身符合AR模型假设的前提下结果往往很好。但它的风险同样来自“模型假设”这四个字如果信号的真实结构和所选阶数不匹配估计偏差会悄悄出现阶数选多了又容易过拟合。实际使用中需要用AIC、BIC这类准则辅助选阶调起来比较费劲。我个人对EEG日常分析的态度是主流场景优先用Welch法短数据或需要精细观察谱峰时用MultitaperAR模型更多出现在研究特定频段时变特性和做数据预测的场景里。如果只是想稳健地描述“这个被试的alpha峰在哪”真的不必一上来就上AR模型把Welch的窗长、重叠率调好效果足够稳定。2.6 各方法对比速查表为方便查阅这里给出一个简化版对比具体怎么选还是看数据量和你要回答的问题。方法核心原理方差水平频率分辨率适用场景周期图整段FFT再取模平方很大1/TT为数据总长快速预览正式分析不推荐Bartlett不重叠分段平均周期图中等取决于段长教学演示实际较少用Welch重叠分段、加窗、平均较小1/T_window窗长决定EEG日常分析首选Multitaper多个正交窗加权平均很小与NW设置相关短数据、尖峰谱成分AR模型拟合自回归系数后推导谱模型依赖理论上可以较高极短数据或时变参数场景3. PSD参数怎么设每个旋钮背后的理由3.1 窗长与频率分辨率一场看不见的博弈频率分辨率在最简单的非参数谱估计里约等于窗长的倒数Δf 1 / T_window。窗长4秒分辨率0.25Hz窗长2秒分辨率0.5Hz。并不是说0.25Hz和0.5Hz差多少但对于某些精细问题比如区分一个9.8Hz的峰和一个10.2Hz的峰0.5Hz的分辨率就可能会让它们糊在一起。EEG信号是非平稳的窗太长会把短时变化平均掉又引入了“这段数据里到底哪一段发生了什么”的问题。反过来窗太短又牺牲了频域精度。实际取舍的标准应该先看你关心的频段是什么。比如睡眠研究要关注0.5到4Hz的delta低频本来就低想把它分辨清楚窗长最好不低于2到4秒如果你只关心alpha或者beta那1到2秒的窗也能接受因为高频频段的相邻频率间隔通常不需要压得那么极限。还有一点容易被误解零填充zero-padding并不提高真实频率分辨率。给FFT补很多零频谱曲线确实变得更“细腻”但那只是插值效果真实的谱峰宽度仍由窗长决定。也就是说把NFFT设得再大也不能让4秒窗的0.25Hz真实分辨率变成0.1Hz。这个坑很多人都会踩你要明白FFT点数只是频谱采样密度不是分辨能力。3.2 重叠率、窗函数与零填充的细节重叠率最常见的默认值有50%和75%。50%重叠是随机平均效果与计算量之间最稳健的折中EEGLAB、MNE等软件的默认配置也基本落在这个区间。75%重叠能让平均段数更多、谱线更光滑但相邻段之间的相关性也会变高实际上并不会让方差再下降到直观想象的一半计算开销反而增加。我一般在处理大批量数据时用50%遇到某个被试的谱估计毛刺特别多、段数又少才临时提到75%试试。窗函数的作用更偏“修缮频谱泄漏”。矩形窗的旁瓣高能量会从感兴趣的频率泄漏到旁边去汉宁窗、汉明窗、Blackman窗的旁瓣更低但代价是主瓣比矩形窗宽一点。脑电分析里汉宁窗最常见原因就是它在旁瓣抑制和主瓣宽度之间平衡得好而且实现起来几乎是零成本。实际使用时直接选windowhann基本不会错。零填充则建议在MNE或SciPy里设NFFT略大于窗长即可。比如窗长1000点可以设nfft1024这样FFT效率更高频率轴采样点也更密集。记住它只是让曲线更好看不改变真实分辨率所以别在这种参数上过度纠结。3.3 采样率、分段与伪迹算PSD前必须做的准备采样率决定了奈奎斯特频率也就是你能看到的上限一般是采样率的一半。脑电研究的分析范围通常到45Hz或50Hz就足够了所以250Hz的采样率完全够用哪怕系统采集的是1000Hz计算PSD时也常会先降采样既省时间又不会损失有用信息。如果信号里还带着50Hz工频的话要么加notch滤波要么把分析上限设到45Hz以下否则PSD在50Hz附近会有一个突兀的尖峰。伪迹是PSD的头号杀手而且它带来的影响往往很“隐蔽”。眨眼和眼动会在前额区域产生大幅度的低频电位变化反映在PSD上就是低频段能量异常偏高甚至盖过真实的delta和theta肌电伪迹则会在高频段把能量抬起来。这会导致你计算出来的频段功率根本不是脑子自己发的电。所以正确顺序一定是先做坏段剔除必要时上ICA去掉眼电、心电成分然后再算PSD。千万不要图省事直接对原始信号一路Welch到底。分段方面静息态数据通常先切成若干段或者叫epoch每一段单独算PSD再平均这样既能做伪迹剔除又能保留段间变异性用于统计。段内建议至少做一次去均值和去线性趋势避免直流偏移和缓慢漂移在频谱里制造假能量。参考电极的选择也会影响PSD的绝对数值同一个项目内部保持一致就好跨研究对比时一定要确认参考方案相同。4. 从PSD到实用指标频段功率、相对功率与IAF4.1 频段绝对功率和相对功率怎么算拿到PSD之后下一步通常是把频段能量汇总成指标。绝对功率就是对某个频段的PSD做数值积分数学上等于求曲线下面积。Python里用numpy的trapz就可以import numpy as np from scipy import signal # 假设已经算好 f, psd bands { delta: (0.5, 4), theta: (4, 8), alpha: (8, 13), beta: (13, 30), gamma: (30, 45), } total_power np.trapz(psd, f) band_power {} band_rel_power {} for name, (lo, hi) in bands.items(): idx (f lo) (f hi) p np.trapz(psd[idx], f[idx]) band_power[name] p band_rel_power[name] p / total_power相对功率在脑电研究中更常用原因是它可以抵消掉一部分个体间的系统性差异比如颅骨厚度、头皮条件这些“传导路径”的影响。绝对功率阈值在个体之间差异很大直接拿来做组间比较经常会被个体差异干扰而相对功率把每个频段都放在个体总能量这个“分母”里归一化之后可比性就好很多。注意定义总功率时要统一分析带宽比如从0.5到45Hz报告相对功率时也要把这条带宽写清楚。这里有个小技巧如果主要关心的是alpha或theta这种窄频带相对变化可以顺手把全频带的相对功率也保留后面做统计时会发现它的稳健性比绝对功率高不少。当然绝对功率也有不可替代的作用在一些研究中它保留了真实幅值信息所以我的习惯是两个都算留下来备用。4.2 峰值频率与个体alpha频率IAF除频段功率外PSD峰值也是高频常用指标。比如在8到13Hz范围内找PSD最大值对应的频率得到的就是单个被试的alpha峰值频率也叫个体alpha频率IAF。不同人的IAF可以差出1到2Hz有些高频alpha型的人峰在11Hz甚至更高有些则在8到9Hz附近。研究认知任务或临床群体时按群体统一固定8到13Hz范围做功率累计往往不如先定位每个被试的IAF再做窄带分析因为每个人的峰位置不一样固定频段可能会混入旁边频段的能量。峰值检测看起来简单实现时却有两处坑。一是PSD曲线的毛刺可能会让峰值定位到伪峰上所以先对PSD做适度平滑或者用Multitaper让谱曲线变稳再找峰值。二是“1/f背景”的影响这个下面单独说。4.3 处理1/f背景别急着说“峰很显著”很多人的第一张PSD图都会看到一个明显现象低频能量高高频能量低整条曲线几乎呈反比地往下掉。这个形态被称作1/f背景它是脑电从低频到高频一种普遍的噪声基底反映了大规模神经活动的时间关联特性并不完全等同于某个“频段增强”。如果不把它和真正的谱峰分开很容易把低频段的背景抬高误读成delta功率异常。所以在做精细分析、尤其是组间比较时我会建议先做1/f背景拟合再关注周期性振荡成分。像specparam以前叫FOOOF这类开源工具就是干这个的先拟合并去掉1/f背景然后在残差里找真正的振荡峰输出峰值频率、带宽和额外功率。当然日常简单报告频段功率时不一定都要走到这一步但如果你发现两组人的频谱差距集中在低频且形态像1/f漂移那就要打个问号是不是背景噪声差异在作祟。5. Python实操完整跑一遍Welch PSD5.1 准备环境与模拟一段“脑电”为了让大家能直接复现我用Python造一段模拟EEG数据8秒长采样率250Hz里面包含一个10Hz的alpha节律、一个5Hz的theta节律再加一点白噪声。这样信号成分已知算出来的PSD峰在哪里心里有数比直接用真实数据更容易看出参数影响。import numpy as np from scipy import signal import matplotlib.pyplot as plt fs 250 duration 8 t np.arange(duration * fs) / fs # 合成信号 eeg (12 * np.sin(2 * np.pi * 10 * t) 6 * np.sin(2 * np.pi * 5 * t 0.8) 4 * np.random.randn(duration * fs))现实中你不会拿这种信噪比很漂亮的信号做分析但作为演示它足够清楚。实际数据里还会有眼电、工频、漂移这些乱七八糟的东西那是另一套预处理流程这里先把PSD这块讲明白。5.2 用scipy完整计算Welch PSD接下来用scipy的welch函数算PSDf, psd signal.welch( eeg, fsfs, npersegfs * 4, # 4秒窗对应频率分辨率约0.25Hz noverlapfs * 2, # 50%重叠 windowhann, nfft1024, # 零填充到1024点曲线更密 detrendlinear, # 去线性趋势 )我这里用4秒窗其实信号总长才8秒所以最多能分成4段左右再叠加50%重叠可以到6段左右平均效果基本够用。psd的返回值是每赫兹的功率密度f是频率轴。直接画图时我通常会先把数据转成dB再画plt.figure(figsize(8, 4)) plt.plot(f, 10 * np.log10(psd)) plt.xlabel(Frequency (Hz)) plt.ylabel(Power Spectral Density (dB)) plt.title(Welch PSD of simulated EEG) plt.grid(True, alpha0.3) plt.xlim(0, 45) plt.show()在模拟数据上你会看到大约5Hz和10Hz处两个明显的峰噪声底部摸起来比较平整体比单次周期图光滑很多。这就是Welch的“平均”功劳。5.3 在MNE中直接算Epoch级别的PSD如果处理的是真实EEG数据通常已经读成了Raw或Epochs对象MNE里计算PSD非常方便import mne # 假设 raw 已经做过滤波和剔除坏段 epochs mne.make_fixed_length_epochs(raw, duration4.0, overlap2.0) spectrum epochs.compute_psd( methodwelch, fmin1, fmax40, n_fft1024, n_overlap512, # 50%重叠注意这里是样本点数 )这里把数据切成4秒的epochepoch之间重叠2秒相当于在Welch之前又做了一层“分段”。compute_psd返回一个Spectrum对象可以用spectrum.plot(averageTrue)直接画出平均PSD曲线也可以得到每个channel每个frequency bin的数值矩阵供后续导出和统计用。需要提醒的是MNE里的n_fft单位是样本点不是秒。采样率250Hz时1024点约等于4.096秒所以这一段的分辨率大约在0.24Hz左右符合前面的预期。n_overlap512就是50%重叠。如果你在MNE中算出来的谱线和自己在scipy里算的略有差异多半是重叠率、窗类型或zero-padding数不完全一致的缘故不代表谁算错了。5.4 结果可视化与数据导出实际项目中PSD很少只画一条线更常见的做法是画多条件的平均谱线叠加图或者用热图展示所有通道的频谱地形。最基础的还是先把单通道谱线看顺畅确认没有异常尖峰和离谱的底噪再进入批量处理。数据导出可以直接用pandas把频率轴和PSD拼成DataFrame然后存成CSVimport pandas as pd df pd.DataFrame({freq: f, psd: psd}) df.to_csv(psd_result.csv, indexFalse)如果是MNE的Spectrum对象可以用spectrum.get_data()取到形状为(n_epochs, n_channels, n_freqs)的数组然后再按通道平均、导出。这一步得到的矩阵往往就是后面统计分析的输入保存时注意把被试ID、条件、通道名这些元信息一并留好省得回头手忙脚乱。6. 常见问题与排错记录6.1 高频问题速查表问题现象可能原因处理方法频谱曲线全是锯齿毛刺特别多分段太少、周期图直接裸用加大重叠率或换Multitaper低频能量异常爆炸眼电伪迹、基线漂移、未去趋势先去坏段/ICA去眼电做高通滤波50Hz或60Hz处出现尖峰工频干扰加notch滤波或将上限设到45Hz以下想要的相邻谱峰糊在一起窗长太短、频率分辨率不够增加窗长必要时降低低频关注范围高频段能量异常抬高肌电伪迹检查原始信号剔除肌电污染段不同epoch算出来PSD差异巨大数据本身波动大、伪迹未清干净先做伪迹剔除再增大平均次数峰值位置总在变1/f背景干扰、谱不光滑平滑或拟合1/f背景用Multitaper确认6.2 三条能救命的小经验第一条经验统一参数。全套数据的PSD计算参数一旦定下来就不要随便改尤其在做组间比较时。你可能会在某个被试身上发现4秒窗看起来“更好看”但如果你只给这批数据用4秒窗另一批用2秒窗那最后统计里混进去的就不是真实的组间差异而是参数差异。我习惯在项目开始前把参数写死之后连nfft都不去动。第二条经验先看单试次再看平均。很多新手直接画平均PSD看着光滑漂亮就直接用。但平均会掩盖掉个别epoch里的大伪迹这些伪迹偷偷贡献了低频或高频能量。我每次都会先挑几个通道画一部分单条PSD叠加图肉眼检查有没有明显的离群曲线。如果发现某条谱线远远跳出其他曲线的范围回去看原始信号多半能找到一段肌肉紧张或者电极松动。第三条经验解释频谱峰之前先排除非振荡因素。看到一个峰就说是alpha增强是最容易翻车的判断。首先要确认它的频率位置落在目标频段内其次看它是不是在多个通道上都出现再想想会不会是谐波、工频或者1/f背景被拟合出来的假象。通常我会同时画原始信号、滤波信号和PSD三个图一起看三者能互相验证才好下结论。6.3 一个容易翻车的统计陷阱还有一个统计层面的坑不仔细说会害很多人对PSD直接做参数检验前先看看数据是不是大致正态。PSD数值通常呈偏态分布尤其在低频段很多人直接拿原始PSD值去做t检验或者ANOVA结果很容易被极值带偏。一般解决办法是先取log或者开根号再做统计。MNE里甚至可以用参数robustTrue在计算时就已经对异常值做了稳健处理但到了统计建模那一步还是要主动检查分布形态。另外如果同时检验很多频点和很多通道多重比较的问题躲不开。除非你只是想画一个探索性的地形图否则做正式结论前要校正。常用手段包括FDR校正、基于簇的置换检验cluster-based permutation test后者在MNE里有现成实现。这个坑之所以值得单独提是因为它不在PSD计算本身却直接决定你的结论靠不靠谱。最后分享一个我自己的小习惯每次算完PSD我都会顺手把整段数据的平均波形画出来放在频谱图旁边一起看。频谱告诉你能量在哪时域波形提醒你数据本身质量怎么样两相验证很多低级错误都能提前暴露。PSD这块基石看似简单但要顺手、可信、能经得起审稿人追问水和细节都不少。上面这些方法对比和参数细节算是我这些年攒下的笔账希望能帮你少走一点弯路。下一篇如果没有意外应该会进时频分析也就是ERSP和相干性的世界到时候再看PSD这个基础怎么继续延伸。