用于心电图特征提取的实时小波分解和重建

信息处理 小波 即时的 载重吨 心电图
2022-02-02 09:48:13

我需要在 ECG 信号中定位 R 峰。我正在使用小波提取 QRS 复合波:
首先,我使用带有 Symlet 4 小波的最大重叠离散小波变换分解信号。这个小波类似于我想要检测的 QRS 复合波。然后我复制标度 4 和 5,因为这个波段最大化 QRS 能量。1-3 级小波系数和 5 级近似系数设置为零。然后我对这些修改后的系数执行小波逆变换。结果是时域中的信号主要包含 QRS 复合波,并且在 R 峰处具有非常高的幅度。
我只是在这个信号上使用一个峰值检测器来定位 R 峰值。

心电信号和小波重建

一切都在这里得到很好的解释:https ://mathworks.com/help/wavelet/ug/r-wave-detection-in-the-ecg.html

这是我使用的代码:

wt = modwt(rawECGsignal_buffer,5);
wtrec = zeros(size(wt));
wtrec(4:5,:) = wt(4:5,:);
filtered = imodwt(wtrec,'sym4');

据我了解,Symlet 4 是一个双正交小波,这意味着分解和重构可以实现为一组高通和低通 FIR 滤波器。 在此处输入图像描述

现在,我将实时心电图数据读入一个 5 秒的缓冲区,然后对缓冲区执行小波滤波(如上所述)。这似乎相当低效,因为当新数据进入时我必须再次过滤整个缓冲区。
是否有可能以允许实时过滤 ECG 信号而无需缓冲的方式实现这一点?
(即单个值输入→小波“过滤器”→单个过滤/重构值输出)

1个回答

现在,我将实时心电图数据读入一个 5 秒的缓冲区,然后对缓冲区执行小波滤波(如上所述)。这似乎相当低效,因为当新数据进入时我必须再次过滤整个缓冲区。

通过这种处理,您无法避免缓冲区上的过滤/重建步骤。

是否有可能以一种无需缓冲即可实时过滤心电图信号的方式实现这一点?(即单个值输入→小波“过滤器”→单个过滤/重构值输出)

是的。

对于块处理,您可以使用重叠添加重叠保存方法,它们也可以直接在时域中工作。

对于逐样本处理,可以从离散卷积的基本公式开始:

y[n]=k=0k<Nx[nk]h[k]

在哪里y是输出,x是输入和h是脉冲响应,或“滤波器系数”。

摆脱索引n, 移动输入x通过一个样本并将新获取的样本放在x. 您可以在 MATLAB 中使用circshift执行此操作。所以,这可能看起来像x=circshift(x,1);x[1]=input_value.

这现在让我们得到h系数。您可以在 MATLAB 中使用wfilters获取您正在使用的小波

这将涵盖 1 个过滤器的应用。对于分析和重建方向以及抽取/上采样步骤所需的所有级别,您将不得不重复执行此操作。

因此,总的来说,以这种方式对心电图进行去噪是非常苛刻的。典型的 QRS 探测器(可能添加了“脉冲滤波器”)是否无法提供足够稳健的 RR 序列?

希望这可以帮助。