从0开始学心电信号处理(2)——心电信号的预处理

目录

一、心电信号噪声

二、心电信号预处理


一、心电信号噪声

        EGG信号具有微弱、低幅值、低频、随杋性的特点,很容易被噪声干扰,而噪声可能来自生物体内,如呼吸、肌肉颤抖,也可能因为接触不良而引起体外干扰。是ECG信号主要的三种噪声为工频干扰、肌电干扰和基线漂移3,也是在滤波过程中急需被抑制去除的噪声干扰。

(1)工频干扰:是由采集心电信号的设备周身的供电环境引起的电磁干扰,幅值低,噪声频率为50Hz左右,其波形很像一个正弦信号,该噪声常常会淹没有用的心电信号,也会影响P波和T波的检测。

(2)肌电干扰:在心电图采集过程中,因为人体运动肌肉不自主颤抖造成,这种干扰无规律可言,波形形态会急速变化,频率很高,并且分布很广,范围在0-2000Hz内,能量集中在30-300Hz内,持续时间一般为50ms,肌电干扰与心电信号会重合在一起,这会导致有用的心电信号细微的变化很可能被忽视。

3)基线漂移:属于低频干扰,频率分布在0.15-0.3Hz内,由于电极位置的滑动变化或者人体的呼吸运动造成心电信号随时间缓慢变化而偏离正常基线位置产生基线漂移,幅度和频率都会时刻变化着。心电信号中的PR波段和ST波段非常容易受到影响产生失真。

二、心电信号预处理

        小波变换(Wavelet Transform, WT)可以进行时频变换,是对信号进行时域以及频域分析的最为理想工具。本例子对含噪心电信号采用基于小波变换的去噪处理方法,分为以下3个步骤:

(1)由于噪声和信号混杂在一起,首先选择一个小波基函数,由于噪声和信号混杂在一起,所以要用小波变换对含噪心电信号进行某尺度分解得到各尺度上的小波系数。

(2)心电信号经过小波变换尺度分解后,幅值比较大的小波系数就是有用的信号,幅值比较小的小波系数就是噪声,根据心电信号和夹杂噪声的频率分布,对各尺度上的小波系数进行阈值处理,把小于阈值的小波系数置零或用阈值函数处理。

(3)分别处理完小波尺度分解后的低频系数和高频系数,再重构信号。

小波变换和小波阈值去噪,请参考:https://blog.csdn.net/JK198310/article/details/8520439

import wfdb
import pywt
import matplotlib.pyplot as plt
import numpy as np
print("正在读取 " + 100 + " 号心电数据...")
record = wfdb.rdrecord('ecg_data/' + '100', channel_names=['MLII'], sampto=1500)
data = record.p_signal.flatten()
# 用db5作为小波基,对心电数据进行9尺度小波变换
coeffs = pywt.wavedec(data=data, wavelet='db5', level=9)
cA9, cD9, cD8, cD7, cD6, cD5, cD4, cD3, cD2, cD1 = coeffs
# 阈值去噪
threshold = (np.median(np.abs(cD1)) / 0.6745) * (np.sqrt(2 * np.log(len(cD1))))
## 将高频信号cD1、cD2置零
cD1.fill(0)
cD2.fill(0)
## 将其他中低频信号按软阈值公式滤波
for i in range(1, len(coeffs) - 2):
    coeffs[i] = pywt.threshold(coeffs[i], threshold)

# 小波反变换,获取去噪后的信号
rdata = pywt.waverec(coeffs=coeffs, wavelet='db5')

plt.figure(figsize=(20, 4))
plt.plot(data)
plt.show()
plt.figure(figsize=(20, 4))
plt.plot(rdata)
plt.show()

  • 6
    点赞
  • 94
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
心电信号预处理过程可以分为以下几个步骤: 1. 数据清洗和去噪:首先对原始心电信号进行数据清洗,去除可能存在的异常值和噪声。可以使用滤波器等技术来降低噪声的影响。 2. R波峰检测:对去噪后的心电信号进行R波峰检测,找到每个心跳周期的R波峰位置。可以使用各种算法,如峰值检测、阈值检测等方法来实现。 3. 心率计算:将R波峰的位置转换为心率值,可以通过计算R-R间期的倒数来得到心率值。 4. 信号质量评估:对处理后的心电信号进行质量评估,判断信号的可靠性和准确性。可以使用各种指标,如信噪比、幅度范围等来评估信号质量。 5. 特征提取:对心电信号进行进一步的分析,提取P波、Q波、S波和T波等特征。可以使用各种特征提取算法,如小波变换、时域特征提取等方法来提取特征。 6. 心脏相位计算:计算心脏的相位信息,包括心房相位和心室相位。可以使用相位计算算法来计算心脏的相位信息。 7. 数据存储:将处理后的信号、心率值、信号质量等信息存储到DataFrame中,方便后续的分析和使用。 以上是心电信号预处理的一般步骤,具体的实现可以根据具体的需求和算法来进行。\[1\] \[2\] #### 引用[.reference_title] - *1* [心电信号预处理](https://blog.csdn.net/weixin_46163097/article/details/130122206)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [心电图信号分类预测——Task3 特征提取](https://blog.csdn.net/m0_46668150/article/details/114991090)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [基于Python心电信号检测与处理](https://blog.csdn.net/qq_42078934/article/details/121070501)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值