我正在尝试从原始 ECG 数据中提取 R 峰值,并且某些样本似乎受到 EMG 的干扰。我用了biosppy提供的lib和python,biosppy.signal.ecg,好像这个lib有,
- 默认滤波器是带有 filtfilt 的 firwin,模式是带通 3-45Hz,滤波器阶数是 0.3 * sample_rate,在我的例子中,sample_rate 是 500Hz,阶数是 150
- R 峰提取算法是 PS Hamilton,《开源心电图分析软件文档》,EPLimited,2002
在 2 到 8 之间,R 峰似乎不正确。我不熟悉 DSP,我该怎么做才能从合成信号中获取原始 ECG?
我尝试了什么(我阅读了一些关于心电图过滤的论文)和遇到的问题,
- Baseline Wander,一些论文建议使用带有高通滤波器的firwin来去除这种噪声,频率可以是0.5Hz,我用firwin和butter都试过了,滤波后的信号比以前更平滑,但EMG仍然受到干扰存在
- 电力线干扰,大多数情况下带阻频率为50Hz或60Hz,由于firwin使用的频率从0.5Hz到45Hz,这种噪声也被过滤掉了
- EMG 噪声,一些论文提到使用移动平均来消除这种噪声,因为这种噪声很复杂并且可能与原始 ECG 重叠,有人建议使用 8 窗口移动平均。但在我的情况下,噪声持续很长时间,样本很多,即使窗口设置为 150,EMG 也存在
我想要的是在没有干扰的情况下获得陈旧的 R 峰?如果 EMG 不容易去除,我可以去除无效的 R 峰值并在检测到 R 峰值后进行插值,例如,
如果检测到的 R 峰是,
[439, 433, 433, 245, 193, 150, 414, 307, 135, 300, 432, 430, 429]
The first 3 and last 3 indices seem to be correct with the correct raw PQRST wave, but other indices are the invalid ones interfered by EMG, remove these indices, and insert 3 new indices with the value 433?
感谢您的热心帮助。