4677 字
23 分钟
ECG 心电图伪影去除:从信号处理视角的系统笔记

0 | 一页速览#

条目一句话概括关键公式/参数详见
伪影(artifact)不是信号源本身、而是被外界”强行加进来”的失真x(t) = s(t) + n(t)§1
四大来源生理/运动、环境/硬件、算法/重建、处理/压缩—§2
频域滤波用”筛子”按频率挖掉干扰(陷波/高通/低通)50 Hz 陷波;0.05–150 Hz 诊断带宽§3.1
ICA 盲源分离”鸡尾酒会”式把混合信号拆成独立成分,剔除伪影成分x = A·s§3.2
运动校正/配准把”拍歪的帧”对齐回标准坐标(主要用于影像)刚性/非刚性变换§3.3
插值与坏段替换”内容识别填充”:检测离群点,用邻域估算替换样条/线性插值§3.4
信号平均法时间锁定信号相干叠加,随机噪声相互抵消SNR 提升 ≈ √N§3.5
深度学习AI”修图师”学习含噪域 → 干净域的映射F(X) ≈ Y§3.6
核心原则去伪影是病态反问题:宁可保留少量伪影,绝不过度去除组合流水线 + QC§4

1 | 什么是”伪影”(Artifact)#

通俗比喻:长曝光拍夜景时手抖了一下,照片里出现一道不该有的光影;或者老式电视受旁边电钻干扰,屏幕出现雪花条纹。这些**“不是景物本身存在,而是被外界因素强行加进去的失真”**,就是伪影。

专业定义:在数据采集(ECG/EEG、CT/MRI、雷达等)、传输或算法重建过程中,由于设备限制、环境干扰、受试者运动或算法缺陷,导致最终数据中出现的非真实的、不代表目标信号本身特征的异常成分或结构。

本质(数据逻辑视角):伪影就是真实信号与噪声/干扰的线性或非线性叠加:

x(t) = s(t) + n(t)
│ └── 伪影/干扰项(工频、肌电、运动、硬件噪声……)
└───────── 真实心电活动(PQRST 波群)

去伪影的目标,就是把叠加的 n(t) 项解耦并剔除——而对 ECG 来说还有一条红线:s(t) 的形态(尤其 ST 段、T 波、QRS 高频成分)承载着诊断信息,去噪绝不能把它”洗掉”。

📌 用词说明:医学影像界习惯写”伪影”,生理信号(ECG/EEG)文献里更常写”伪迹”,英文同为 artifact,本文混用不区分。


2 | 伪影从哪里来:数据链路的四个环节#

从数据产生链路看,伪影主要来自四个环节(括号内为 ECG 中的典型对应):

① 生理/运动伪影(Motion / Physiological Artifacts)

  • ECG 例子:受试者活动、颤抖引起的运动伪影;呼吸(约 0.15–0.5 Hz)与电极极化电位变化引起的基线漂移;骨骼肌收缩产生的肌电伪影(EMG)——频谱宽、主要能量在 20 Hz 以上,与 QRS 高频成分重叠。
  • 底层逻辑:采集需要时间,期间信号源或传感器-皮肤界面发生了物理变化,采集到的数据被”错位/调制”,重建后出现漂移、毛刺或重影。

② 环境/硬件伪影(Environmental / Hardware Artifacts)

  • ECG 例子:50 Hz 工频干扰(中国电网 50 Hz,美/日等为 60 Hz,还带 100/150 Hz 谐波);电极接触不良、导联线微断产生的尖峰伪影;放大器底噪。
  • 底层逻辑:外部电磁场耦合进采集电路,或传感器底噪过大——在频域上表现为特定频率的尖峰(工频)或宽帯抬升(底噪)。

③ 算法/重建伪影(Reconstruction Artifacts)

  • 例子:采样率不足违反奈奎斯特定理(fₛ < 2·f_max)造成的混叠(Aliasing);滤波器设计不当引入的相位/幅度失真;CT 金属植入物旁的放射状条纹;MRI 的 k 空间数据错位。
  • 底层逻辑:算法在逆向求解(如傅里叶逆变换)时,输入数据缺失或不满足算法假设,数学模型”强行脑补”出错误结构。ECG 中典型如:采样率过低时肌电高频噪声混叠回诊断带内,事后无法滤除。

④ 处理/压缩伪影(Processing Artifacts)

  • 例子:远程心电监护中有损压缩/降采样传输留下的失真;JPEG 图片放大后的”马赛克”。
  • 底层逻辑:有损压缩丢弃高频细节,解码时无法完美还原。

3 | 六大预处理去除方法#

按从传统信号处理到现代 AI 的顺序排列。每种方法给出:比喻 → 底层逻辑 → ECG 适用场景。

3.1 频域滤波法(Frequency Filtering)#

比喻:用不同网眼的筛子筛沙子,把特定大小的杂质(特定频率的噪声)筛掉。

底层逻辑:很多伪影在频域有明显特征。工频干扰固定在 50 Hz——用 FFT 把时域信号变换到频域即可看到一个尖峰,用**陷波滤波器(Notch Filter)**精准”挖掉” 50 Hz 及其谐波附近成分,再逆变换回时域。IIR 陷波器的传递函数(z 域):

1 − 2·cos(ω₀)·z⁻¹ + z⁻²
H(z) = ─────────────────────────────── ω₀ = 2π·50/fₛ
1 − 2r·cos(ω₀)·z⁻¹ + r²·z⁻² r → 1 时带宽越窄(Q = f₀/BW 越高)

ECG 三件套:

  • 陷波(Notch):50/60 Hz 工频及谐波,Q 取 30 左右(带宽约 1.7 Hz),尽量不误伤邻近的有用频率;
  • 高通(High-pass):截止约 0.5 Hz(监护级)去除基线漂移——⚠️ 诊断级/ST 段分析须放宽到 0.05 Hz,否则高通会扭曲 ST 段(详见 §4);
  • 低通(Low-pass):截止约 40 Hz(监护级)去除肌电毛刺——⚠️ 诊断级建议保留到 150 Hz(AHA/IEC 推荐的诊断带宽 0.05–150 Hz)。

工程实现一律用 filtfilt 做零相位滤波(前向滤一遍、反向再滤一遍,相位失真互相抵消)——ECG 诊断对波形形态敏感,普通单向滤波的相移会改变 ST/T 形态。

适用:工频干扰、基线漂移、肌电噪声、高频随机噪声。

3.2 独立成分分析(ICA,Independent Component Analysis)#

比喻:鸡尾酒会效应。嘈杂房间里多个麦克风录下所有人说话的混合声,ICA 能把混音分离成一条条独立”音轨”(音轨 1 是某人说话、音轨 2 是空调声),然后把”空调声”音轨直接静音。

底层逻辑:ICA 是一种盲源分离(Blind Source Separation, BSS)算法。假设多通道观测(如 12 导联 ECG 的多个电极)是若干统计独立源信号的线性混合:

x(t) = A · s(t) x:多导联观测 s:独立源(心电、运动、肌电……) A:未知混合矩阵

算法(如 FastICA)从 x 反推出分离矩阵,得到独立成分 IC;人工或自动识别出代表”运动/肌电/电极伪影”的成分,将其权重置零,再用逆变换重构干净信号。ECG 的经典应用还有胎儿心电(FECG)提取:把母体心电视为”伪影”,从腹导联中分离出胎儿心电。

适用:多导联 ECG 中的运动伪影、生理性伪影;EEG 中的眼电(EOG)/心电污染。⚠️ 前提是多通道——单导联信号无法直接做 ICA(可用多导联联合或先做嵌入重构)。

3.3 运动校正与空间配准(Motion Correction & Registration)#

比喻:连拍照片里有的拍歪了,用软件把歪的照片旋转、平移,与第一张标准照完全对齐后再叠加。

底层逻辑:提取解剖特征点或计算互信息(Mutual Information),通过刚性变换(平移、旋转)或非刚性变换(局部形变)求出变换矩阵,把位移帧”扭”回标准坐标系。

适用:fMRI、PET 等影像中的头动/体动;MRI 心脏电影成像的心电门控(用 R 波触发采集,本质是”时间轴上的运动对齐”)。对 ECG 而言,空间配准没有直接对应物——它的近亲是 §3.5 信号平均前的逐拍对齐(beat registration):以 R 波峰为锚点把每个心搏平移对齐后再叠加。

3.4 插值与坏段替换(Interpolation & Replacement)#

比喻:修图软件的”内容识别填充”——照片上有污点,软件读取周围像素自动填补。

底层逻辑:某段数据因硬件故障彻底损坏(电极脱落产生极大离群点 outlier)时,直接滤波反而会把坏值”抹开”污染邻近数据。正确做法:先检测并标记坏段 → 再用周围正常数据估算替换(线性插值、样条插值;EEG 坏电极用球面样条插值)。

ECG 特有技巧:肢体导联满足 Einthoven 定律 II = I + III,某一肢体导联损坏时可直接用另外两导代数重建,比时间轴插值更保真。

适用:电极失效、导联线接触不良、突发脉冲/尖峰噪声(spike artifacts)。

3.5 信号平均法(Signal Averaging)#

比喻:一段充满杂音的录音,循环播放 100 次并叠加——杂音随机、正负抵消,而目标声音固定,叠加后杂音消失、声音变清晰。

底层逻辑:真实响应是 时间锁定(time-locked) 且相干的,随机噪声不相干。对 N 次重复采集逐点求平均,噪声功率降为 1/N,信噪比按平方根律提升:

SNR(N次平均) ≈ √N · SNR(单次) N = 100 → 提升 10 倍

ECG 的经典应用:心室晚电位(VLP,信号平均心电图 SAECG)和希氏束电图——目标信号埋在 µV 级、比噪声低得多,只能靠几百次心搏的对齐平均”捞”出来(对齐即 §3.3 提到的逐拍配准)。EEG 中的事件相关电位(ERP)同理。

适用:任何可重复触发、时间锁定的微弱信号提取。⚠️ 前提:信号必须严格时间锁定,且伪影与信号不相关——周期性伪影(如与心率同步的搏动性干扰)平均不掉。

3.6 深度学习去伪影(Deep Learning-based Artifact Removal)#

比喻:雇一位看过几百万张”破损图 vs 完美图”对比的 AI 修图师——给它一张带伪影的图,它凭经验”脑补”出最真实的原貌。

底层逻辑:用 CNN、GAN 或 Transformer 做监督训练:含伪影数据为输入 X,干净数据为标签 Y,网络学习非线性映射 F(X) ≈ Y。ECG 常见做法是去噪自编码器(干净 ECG → 加伪影 → 网络重建干净版)或端到端 GAN;影像领域则可直接在 k 空间或图像域做伪影抑制(金属伪影 MAR、低剂量 CT 降噪)。

适用:传统方法难以建模的复杂伪影(严重运动伪影、多伪影叠加)。⚠️ 两大风险:需要成对训练数据(干净 ECG 真值难得,常靠仿真加噪);生成式网络可能”脑补出并不存在的结构”——在临床语境下,一个被 AI 抹平的病理性 Q 波或 ST 抬高是灾难性的,因此输出必须过 QC 与医生复核。


4 | 核心原则与”陷阱”#

从底层逻辑看,去伪影本质是一个病态反问题(ill-posed inverse problem):真实信号与伪影一旦混合(频谱重叠、统计相关),数学上就不存在 100% 完美的分离。因此工程实践必须遵循:

“宁可保留少量伪影,也绝不能过度去除而破坏真实信号。” ——避免”把脏水泼了,连孩子也泼了”(over-correction)

ECG 场景下的四个典型陷阱:

  1. 高通截止过高 → ST 段失真:用 0.5 Hz 甚至更高截止的高通去基线漂移,会把缓慢的 ST 段一并”拉斜”,直接影响心肌梗死/缺血的判读。诊断级必须用 0.05 Hz(或改用中值滤波/样条估计基线再减除)。
  2. 低通截止过低 → 高频信息被抹平:QRS 终末的心室晚电位藏在 40–250 Hz 的高频低幅成分里,40 Hz 低通会把它整个抹掉(EEG 中对应 Gamma 波被过度低通抹平);QRS 幅度与上升速度也会被钝化。
  3. 把真实生理信号当伪影删:室性早搏(PVC)、房颤等异位搏动是病理信号,不是伪影——去噪流程若把它们当 outlier”修复”掉,等于销毁诊断证据。同理,ICA 成分判读错误可能把 QRS 主成分置零。
  4. 过度校正引入新伪影:过度的运动校正/插值会引入人为平滑;陷波 Q 值过低(带宽过宽)会啃掉 50 Hz 附近的真实 QRS 频谱成分。

因此专业流程是多种方法的组合流水线,且每一步配严格的质量控制(QC)指标:

原始 ECG(含伪影)
→ ① 坏段/尖峰检测 + 插值替换 (先修坏值,防止污染后续滤波)
→ ② 陷波滤波 去 50 Hz 工频
→ ③ 带通滤波 去基线漂移 + 肌电
→ ④ ICA 盲源分离 剔除运动/生理伪影(多导联时)
→ ⑤ 质量控制 QC 残差检查 + 目视复查 + 与原始信号对比
→ 干净 ECG(进入诊断/模型)

顺序有讲究:插值放在最前,是因为滤波对离群点极其敏感。


5 | 六大方法总对比#

方法底层原理最擅长对付前提/局限ECG 典型场景
频域滤波(陷波/带通)频域特征差异,H(z) 选择性衰减工频 50/60 Hz、基线漂移、肌电伪影与信号频谱须可分;截止不当伤及 ST/高频所有 ECG 预处理的第一步
ICA 盲源分离统计独立源线性混合 x=A·s,成分置零重构运动伪影、眼电(EEG)、母体心电(FECG)需多通道;成分判读依赖经验,可能误删12 导联去运动伪影、胎儿心电提取
运动校正/配准特征点/互信息 + 刚性/非刚性变换对齐影像中的头动/体动主要面向图像体积;ECG 无直接对应MRI 心电门控、平均前的逐拍 R 波对齐
插值/坏段替换离群检测 + 邻域估算(样条/代数重建)电极脱落、尖峰脉冲、坏导联只适合局部损坏;大面积坏段无法凭空恢复尖峰缝合;Einthoven 定律重建坏肢体导联
信号平均时间锁定相干叠加,噪声不相干抵消埋于噪声下的微弱诱发响应信号须可重复触发且严格对齐;周期性伪影无效心室晚电位 SAECG、希氏束电图
深度学习监督学习非线性映射 F(X)≈Y(CNN/GAN/Transformer)复杂、非线性、多源叠加的伪影需成对数据;黑盒可能”脑补”假结构,须 QC严重运动伪影修复、端到端去噪

附录 A | 术语速查与纠错表#

术语正确理解常见误区/易混
伪影 / 伪迹(artifact)非目标本身的异常成分;影像界写”伪影”,生理信号界多写”伪迹”不要与”噪声”完全混同:噪声偏随机本底,伪影常有明确来源与结构
工频干扰(powerline interference)中国 50 Hz、美/日等 60 Hz,含 100/150 Hz 谐波不是所有高频毛刺都是工频;工频在频谱上是尖峰
陷波滤波器(notch filter)极窄带阻的特例,Q = f₀/BW与一般带阻(band-stop)混淆;Q 过低会误伤邻近有用频率
混叠(aliasing)fₛ < 2·f_max 时高频折叠回低频采样后再滤波已无法挽救,必须在 ADC 前用抗混叠模拟滤波
基线漂移(baseline wander)<0.5 Hz 慢波动,源于呼吸/电极极化/出汗与直流偏置(DC offset)不同:偏置是常数,漂移是慢变量
肌电伪影(EMG artifact)宽谱,主要能量 >20 Hz,与 QRS 高频成分重叠不能靠”更狠的低通”解决而不付出形态代价
室性早搏(PVC)等异位搏动真实病理信号最危险的误区:把它当伪影/outlier 删掉
盲源分离(BSS)与 ICAICA 是实现 BSS 的主流方法之一(假设源统计独立)二者不是并列关系;ICA 解的顺序/符号/幅度均不确定
信噪比提升 √NN 次平均 SNR ×√N不是 ×N;且要求噪声不相关、信号时间锁定
零相位滤波(filtfilt)前向+反向各滤一次,相位失真抵消、幅频平方单向滤波的相移会扭曲 ST/T 形态,诊断级 ECG 应避免
Einthoven 定律肢体导联 II = I + III可用于坏导联代数重建,注意是同一时刻的瞬时值关系
心室晚电位(VLP)QRS 终末 40–250 Hz 高频低幅成分分析 VLP 时禁止 40 Hz 低通
病态反问题(ill-posed)解不唯一/不连续,需先验与正则化任何去伪影方法都是”估计”而非”还原真相”
k 空间MRI 原始频域数据矩阵属影像域概念,与 ECG 无对应物,跨领域阅读时勿套用

附录 B | Python 最小可运行示例(scipy)#

import numpy as np
from scipy import signal as sg
fs = 500 # 采样率 (Hz)
x = np.load('ecg_raw.npy') # 原始单导联 ECG (mV)
# ① 尖峰/坏段检测 + 线性插值(务必放在滤波之前,防止坏值被"抹开")
bad = np.abs(x) > 2.5 # 幅值阈值法,实际可加梯度/统计判据
idx = np.where(bad)[0]
x[bad] = np.interp(idx, np.where(~bad)[0], x[~bad])
# ② 50 Hz 陷波(Q=30 → 带宽约 1.7 Hz),零相位
b, a = sg.iirnotch(50.0, Q=30.0, fs=fs)
x = sg.filtfilt(b, a, x)
# ③ 带通:0.5 Hz 高通去基线漂移 + 40 Hz 低通去肌电(监护级配置)
# ⚠️ 诊断级/ST 分析:高通改 0.05 Hz、低通改 150 Hz;VLP 分析禁低通
b, a = sg.butter(2, 0.5 / (fs / 2), btype='highpass'); x = sg.filtfilt(b, a, x)
b, a = sg.butter(4, 40 / (fs / 2), btype='lowpass'); x = sg.filtfilt(b, a, x)
# ④ 多导联时:ICA 去运动伪影(示意)
# from sklearn.decomposition import FastICA
# ica = FastICA(n_components=X.shape[1], whiten='unit-variance')
# S = ica.fit_transform(X) # X: (采样点, 导联数)
# S[:, k_artifact] = 0 # 识别出的伪影成分置零
# X_clean = ica.inverse_transform(S) # 重构
# ⑤ QC:残差检查 + 与原始信号目视对比,确认 ST/T 形态未失真
residual = x - ... # 与原信号对比,人工/指标复核后再进入诊断流程

笔记整理自与 AI 的对话(信号处理视角的伪影科普),并针对 ECG 场景做了扩充与校对。

ECG 心电图伪影去除:从信号处理视角的系统笔记
https://fuwari.vercel.app/posts/研0笔记/ecg伪影去除/
作者
一天一夜
发布于
2026-09-25
许可协议
CC BY-NC-SA 4.0