对ECG信号进行滤波处理

主要分为3个步骤:

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

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

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

# 用db5作为小波基,对心电数据进行9尺度小波变换
    coeffs = pywt.wavedec(sig, wavelet='db5', level=9)
    cA9, cD9, cD8, cD7, cD6, cD5, cD4, cD3, cD2, cD1 = coeffs

    # 阈值去噪
    threshold = (npr.median(npr.abs(cD1)) / 0.6745) * (npr.sqrt(2 * npr.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)

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