第二章:噪声类型与来源——知己知彼,百战不殆
做神经信号去噪,说白了就是一场「信号提纯」的战斗。你想想看,我们采集到的脑电信号,就像一杯被各种杂质污染的水——有生理活动带来的「生物杂质」,也有设备环境带来的「电子杂质」。我个人习惯,拿到一段信号后第一件事不是急着去噪,而是先问自己三个问题:这噪声从哪来?长什么样?怎么区分?
这一章,我们就来拆解这些「杂质」的真面目。
2.1 生理噪声:来自身体内部的「干扰源」
生理噪声,顾名思义,是人体自身活动产生的电信号。它们混在脑电里,有时候比脑电本身还强。我在项目中遇到过最头疼的情况——受试者打了个哈欠,眼电直接淹没了整个额叶通道的数据。
2.1.1 眼电噪声(EOG)
眼电是最常见的生理噪声。眼球本身就是一个电偶极子,角膜带正电,视网膜带负电。你眨眼、转动眼球,都会产生几十到几百微伏的电位变化。
- 幅度: 50-200 μV,比脑电(5-100 μV)大得多
- 频率: 0-10 Hz,主要集中在低频段
- 空间分布: 额叶电极(Fp1, Fp2, Fz)受影响最大
- 波形: 眨眼产生陡峭的尖峰,眼动产生缓慢的阶梯状偏移
嗯,这里要注意:眼电和低频脑电(比如δ波、θ波)在频域上高度重叠。你如果简单用高通滤波,很容易把有用的脑电也滤掉。我曾经吃过这个亏——为了去眼电,把受试者的慢波睡眠信号全干掉了,结果论文审稿人一眼就看出来了。
2.1.2 肌电噪声(EMG)
肌电是另一个「刺头」。你咬个牙、皱个眉、甚至脖子稍微动一下,肌肉收缩产生的电信号就会窜进来。
| 噪声类型 | 频率范围 | 幅度 | 典型场景 |
|---|---|---|---|
| 眼电(EOG) | 0-10 Hz | 50-200 μV | 眨眼、眼球转动 |
| 肌电(EMG) | 20-500 Hz | 10-100 μV | 咬牙、皱眉、颈部紧张 |
| 心电(ECG) | 0.5-40 Hz | 0.5-5 μV | 心跳、脉搏 |
肌电的麻烦在于它的频率范围太宽了。低频部分和β波、γ波重叠,高频部分又和噪声混在一起。我建议你记住一个经验法则:肌电的时域波形像「毛刺」,而脑电是「平滑的波动」。这个直觉在深度学习里很有用——很多CNN网络就是靠这个特征来区分信号的。
2.1.3 心电噪声(ECG)
心电噪声相对好处理一些。它幅度小(通常不到5 μV),而且有规律——跟着心跳节奏走。但如果你做的是高密度脑电(128导以上),或者电极靠近耳后、颈部,心电的R波尖峰就会很明显。
2.2 环境噪声:来自外部的「电子污染」
环境噪声比生理噪声更「机械」,但也更顽固。你想想看,我们实验室里到处都是电源线、显示器、手机信号...这些都会耦合到脑电信号里。
2.2.1 工频干扰(50/60 Hz)
工频干扰是每个做脑电的人都会遇到的噩梦。电网的交流电频率——中国和欧洲是50 Hz,美国是60 Hz——会通过电磁感应耦合到电极线和放大器里。
工频干扰的时频特征非常明显:
- 时域: 正弦波叠加在脑电上,幅度通常5-20 μV
- 频域: 在50 Hz(或60 Hz)处有一个尖锐的峰值
- 谐波: 有时还会出现100 Hz、150 Hz等谐波分量
2.2.2 电磁干扰(EMI)
电磁干扰的来源就多了——手机、WiFi路由器、荧光灯、电机...这些设备都会辐射电磁波,被脑电的导线和电极接收。
我个人习惯把电磁干扰分成两类:
- 窄带干扰: 比如手机信号(900 MHz、1800 MHz),虽然频率极高,但经过放大器后可能混叠到低频段
- 宽带干扰: 比如开关电源的噪声,覆盖很宽的频率范围,看起来像白噪声
2.3 噪声的时频域特征——深度学习能学什么?
好了,现在我们知道噪声长什么样了。但深度学习模型怎么区分信号和噪声呢?说白了,就是让模型学习到噪声在时域和频域上的「指纹」。
我画了一张图,帮你理清这个知识体系:
为什么深度学习在去噪上这么强?因为它能同时利用这三个维度的信息。举个例子:
- 时域上: 眼电的尖峰、肌电的毛刺、工频的正弦波,形态完全不同
- 频域上: 眼电低频、肌电高频、工频有固定峰值,频谱分布各异
- 时频域上: 噪声的时变特性——比如眨眼瞬间的突变——在时频谱上一目了然
最后说一个我踩过的坑。刚开始做这个方向时,我总想着用一个模型搞定所有噪声。结果呢?模型在训练集上表现完美,一上真实数据就崩了。后来我才明白——不同噪声的物理机制完全不同,你不能指望一个简单的CNN同时学会去眼电和去工频。现在的做法是:先识别噪声类型,再针对性去噪。这个思路,我们会在后面的章节详细展开。
嗯,这一章的内容就到这里。记住一句话:理解噪声,比去噪本身更重要。下一章,我们会把这些知识落地到代码里,看看怎么用Python把噪声可视化出来。