我们正在做一个关于心电图信号提取的项目。我们得到了提取,它充满了噪声(50 hz)所以我们需要处理信号,我们建议通过 arduino 板处理它。我们需要使用 arduino 去噪.
我们如何使用 arduino 板进行心电图处理,哪个 arduino 板非常适合,成本更低,精度更高,而 arduino 应该很小?
我们正在做一个关于心电图信号提取的项目。我们得到了提取,它充满了噪声(50 hz)所以我们需要处理信号,我们建议通过 arduino 板处理它。我们需要使用 arduino 去噪.
我们如何使用 arduino 板进行心电图处理,哪个 arduino 板非常适合,成本更低,精度更高,而 arduino 应该很小?
有芯片可以为你做到这一点。如 ADS1294 等。
此类芯片的典型之处在于它们是差分放大器,可消除常见的调制解调器噪声,例如 50Hz。而不是陷波滤波器。尽可能多的所需信号在 50Hz 范围内。ECG 示意图非常标准,因为它们放大了右臂和左臂之间的差异,其中左腿是共模参考。他们进一步将偏移量注入右腿,以防止普通调制解调器偏移量饱和。Elektor 杂志最近的 2013 年 7 月/8 月刊对他们的心电图板进行了透彻的解释。这些在网上还有其他来源。
您不一定需要硬件过滤器。软件过滤器可以正常工作。Pan Tompkins 算法中的低通/高通滤波器仅使用整数数学运算,因此不会占用大量资源。
要实时做 Pan Tompkins,需要同时存储 13 个点的输入历史和低通历史。存储1个高通历史记录。这 13 个点可以存储在一个数组中,但我发现循环缓冲区非常好。我使用了CircularBuffer库,但还有其他实现。这是过滤的相关代码:
CircularBuffer<int,33> inp;
CircularBuffer<int,33> lpfout;
int raw;
int filt;
//preload buffers with zeros (this is pretty important)
for (int i = 0; i <= 32; i++) {
//sig = analogRead(A0);
inp.unshift(0);
lpfout.unshift(0);
}
raw = analogRead(A0);
inp.unshift(raw);
//lowpass filter
filt = 2*lpfout[0] - lpfout[1] + inp[0] - 2*inp[6] + inp[12];
lpfout.unshift(filt); // this becomes lpfout[0] for the next loop
//highpass filter
filt = hpfout1 - lpfout[0]/32 + lpfout[16] - lpfout[17] + lpfout[32]/32;
hpfout1 = filt;
//filt now holds the real time filtered signal
这段代码运行得很快。在最初的 Pan Tompkins 论文中,他们以 200 Hz 的频率对 ECG 进行采样,因此我将循环设置为通过串行端口以 200 Hz 的频率发送数据。我没有看到任何下降,所以 Arduino 跟上没有问题。