论文阅读和代码复现:
《Combining Nonlinear Adaptive Filtering and Signal Decomposition for Motion Artifact Removal in Wearable Photoplethysmography》

基本介绍:

由于手腕运动造成的噪声:运动伪影,使得PPG方法的心率监测不准,去除运动伪影噪声在智能手表中是一个难点。

论文中使用的开源数据:PPG database used in 2015 IEEE Signal Processing Cup[1]

[1]Pace and Bricout, “Low Heart Rate Response of Children with Autism Spectrum Disorders in Comparison to Controls during Physical Exercise,” Physiology & Behavior, vol.141, pp.63-68, 2015.

目前已经有的研究:

  • 使用独立成分分析ICA

ICA有一个关键的统计独立或不相关假设[11]。因此,在许多实际场景中,将MA与PPG信号分离的结果并不令人满意。

[11]J. Yao and S. Warren, “A short study to assess the potential of independent component analysis for motion artifact separation in wearable pulse oximeter signals,” in Proc. 27th Annual Conf IEEE Engg. Medicine and Biology, pp. 3585-3588, 2005.

  • 使用自适应滤波

通过适当设计参考信号,在某些情况下可以达到令人满意的效果。然而,一个设计不好的参考信号会导致较差的MA去除性能。此外,原始PPG信号中的MA与参考信号之间的关系可能不是线性相关的,而是非线性相关的,当选择同步加速度信号作为参考信号时。

[12] Comtois Gary, Yitzhak Mendelson, and Piyush Ramuka, “A Comparative Evaluation of Adaptive Noise Cancellation Algorithms for Minimizing Motion Artifacts in a Forehead-Mounted Wearable Pulse Oximeter,” 29th Annual International Conference of the IEEE Engineering in Medicine and Biology Society, pp.1528-1531, 2007.
[13] A. B. Barreto, L. M. Vicente, and I. K. Persad, “Adaptive Cancellation of Motion Artifact in Photoplethysmographic Blood Volume Pulse Measurements for Exercise Evaluation,” Engineering in Medicine and Biology Society, IEEE 17th Annual Conference, vol.2, pp.983-984. 1995.
[14] Ram, M. Raghu, et al. “A novel approach for motion artifact reduction in PPG signals based on AS-LMS adaptive filter.” IEEE Transactions on Instrumentation and Measurement, pp. 1445-1457, 2012.
[15] Hyonyoung Han and Jung Kim, “Artifacts in wearable photoplethysmographs during daily life motions and their reduction with least meansquare based active noise cancellation method,” Computers in Biology and Medicine 42, pp. 387-393, 2012.
[16] Asada, H. Harry, Hong-Hui Jiang, and Peter Gibbs, “Active noise cancellation using MEMS accelerometers for motion-tolerant wearable bio-sensors,” Engineering in Medicine and Biology Society, 2004. IEMBS’04. 26th Annual International Conference of the IEEE. vol. 1, 2004.

  • 使用信号分解

信号分解[17],[18]最近被证明是一种有效的去除MA的方法。例如,在[17]中,作者使用奇异谱分析(SSA)将原始PPG分解为多个分量,然后使用同步加速度信号的信息来识别与MA相关的分量。去除这些分量后,利用剩余分量重构PPG信号,得到更清晰的PPG信号。同样,在[18]中,使用经验模态分解(EMD)将一个原始PPG信号分解为许多分量,并使用同步加速度信号的频谱进行频谱减法去除与MA相关的分量。然而,信号分解通常具有较大的计算量,这可能会阻碍其在低功耗可穿戴设备中的应用。

[17] Z. Zhang, Z. Pi, and B. Liu, “TROIKA: A general framework for heart rate monitoring using wrist-type photoplethysmographic signals during intensive physical exercise,” IEEE Transactions on Biomedical Engineering, vol. 62, no. 2, pp. 522-531, 2015.

[18] Y. Zhang, B. Liu, Z. Zhang, “Combining Ensemble Empirical Mode Decomposition with Spectrum Subtraction Technique for Heart Rate Monitoring Using Wrist-Type Photoplethysmography,” Biomedical Signal Processing and Control, vol. 21, pp. 119-125, 2015.

论文的算法方案

基本步骤:

1、PPG传感器和加速度传感器同时采集原始数据;并且对数据进行带通滤波处理,PPG数据的通带选择0.4-5.0 HZ;

2、A:Volterra RLS 非线性滤波算法处理PPG数据,其中的加速度数据作为Volterra RLS的参考信号;

3、判断Volterra RLS滤波结果是否满足要求,根据相关性的阈值进行判断;

4、第3步的判断满足要求YES,则进入到步骤6,谱峰追踪算法;No则进入步骤5;

5、SSA进行进一步处理PPG数据,去除运动伪影;

6、谱峰追踪,原因是即使进行运动伪影的处理,在FFT算法处理PPG信号后,得到的频谱的最大幅值对应的频率不一定是心率值,运动伪影太强会导致出现多个谱峰,而且运动伪影造成的谱峰比心率峰值还要大的现象。这里需要使用机器学习算法或专家经验(例如两个时间窗之间的心率不会突变)进行谱峰选取;

7、最终计算得到心率值;

Volterra-RLS去除运动伪影算法原理

如图所示。基于RLS volterra的非线性自适应滤波系统框图。它有两个输入。一个是原始PPG信号s(k),包含感兴趣的信号s1(k)和加上干扰n(k)。另一个输入是加速度数据xk。对噪声进行过滤,以产生与n(k)尽可能接近的副本的输出n(k)。这个输出从主要输入s(k)中减去,得到系统输出ε(k)。

代码基本实现Volterra-RLS算法去除运动伪影:

算法流程参考:
Paulo S. R. Diniz (auth.) - 《Adaptive Filtering_ Algorithms and Practical Implementation》-Springer US (2013)

根据作者介绍可知,Volterra RLS算法和传统的RLS算法的区别就是输入 x ( k ) \pmb{x}(k) x(k)。其中 x ( k ) \pmb{x}(k) x(k)如下所示:其中N是指滤波器的阶数。

# -*- coding: utf-8 -*-
#
# Copyright (C) 2022 Emperor_Yang, Inc. All Rights Reserved
#
# @CreateTime    : 2022/12/31 8:00
# @Author        : Emperor_Yang
# @File          : volterra_rls.py
# @Software      : PyCharmimport numpy as np
import queueclass PPGAccData(object):def __init__(self):self._ppg = []self._acc = []def push_data(self, ppg_data, acc_data):assert (len(ppg_data) == len(acc_data))  # 保证ppg和acc数据是长度一致的self._ppg.append(ppg_data)self._acc.append(acc_data)def get_data(self, data_len):ppg_data = []acc_data = []current_ppg_data_len = len(self._ppg)if len(self._ppg) > data_len:ppg_data = self._ppg[-data_len: -1]acc_data = self._acc[-data_len: -1]else:for i in range(data_len - current_ppg_data_len):ppg_data.append(0)acc_data.append(0)ppg_data.append(self._ppg)acc_data.append(self._acc)return np.array(ppg_data), np.array(acc_data)N = 10  # 滤波算法的阶数
delta = 10  # signal power
matrix_size = (N + 1) * (N + 1) + (N + 1)
S_D_init = delta * np.ones((matrix_size, matrix_size))
x_init = np.zeros((matrix_size, 1))
w_init = np.zeros((matrix_size, 1))
lambda_value = 0.1  # (0, 1)ppg_acc_data = PPGAccData()
ppg_data, acc_data = ppg_acc_data.get_data(N)
x = x_init
S_D = S_D_init
w = w_initstop_flag = True  # 假设这个是数据采集标志位d = acc_data  # 参考加速度信号while stop_flag:e = d - np.transpose(x) @ wpha_matrix = S_D @ xS_D = 1 / lambda_value * (S_D - (pha_matrix @ np.transpose(pha_matrix) / lambda_value + np.transpose(pha_matrix) @ x))w = w + e @ S_D @ xy = np.transpose(w) @ xdelta_vector = d - yppg_data, acc_data = ppg_acc_data.get_data(N)# 构造x的数组index = 0for i in range(N):x[index] = ppg_data[-1 - i]index += 1for i in range(N):for j in range(N):x[index] = ppg_data[-1 - i] * ppg_data[-1 - i - j]index += 1# 构造d数组d = acc_data

论文阅读和复现:去除PPG运动伪影的IEEE论文相关推荐

  1. Adaptive Spectrum Noise Cancellation (自适应频谱噪声消除 ,ASNC)去除强运动伪影

    文章: A Novel Adaptive Spectrum Noise Cancellation Approach for Enhancing Heartbeat Rate Monitoring in ...

  2. ICA独立成分分析去除脑电伪影

    今天分享的这篇利用独立成分分析ICA去除EEG伪影是翻译自jung大神的一篇文章. 目录 1 介绍 2 方法 3 实验数据样本 1 介绍 眼动,眨眼,肌肉,心脏和线的噪音会严重污染脑电图活动,这在脑电 ...

  3. [论文阅读] (23)恶意代码作者溯源(去匿名化)经典论文阅读:二进制和源代码对比

    <娜璋带你读论文>系列主要是督促自己阅读优秀论文及听取学术讲座,并分享给大家,希望您喜欢.由于作者的英文水平和学术能力不高,需要不断提升,所以还请大家批评指正,非常欢迎大家给我留言评论,学 ...

  4. 【行人重识别】centroids-reid论文阅读、复现、以及自己的应用

    先说下我为什么要看这篇,最近打开market1501 paper with code,发现这篇文章排名第一,rank1 98.3%.这个分数也太高了吧.看了下,居然没有rerank?惊到我了,没有re ...

  5. 《Single Image Haze Removal Using Dark Channel Prior》论文阅读及复现番外(使用导向滤波估计更加精细的透射率)

    前言 之前写过这篇论文的复现,https://blog.csdn.net/just_sort/article/details/84110518 ,但是当时估算透射率的时候没有用softmating或者 ...

  6. 【论文阅读及复现】(1998)无网格线探索布线算法 + Python代码实现

    文章目录 一.摘要 二.单层无网格线探索算法 2.1 形式描述 2.1.1 探索线 2.1.2 探索过程 2.1.3 绕障偏移量 2.2 变量说明 2.3 启发式规则 2.3.1 I型绕障 2.3.2 ...

  7. 【论文阅读及复现】(2017)Densely Connected Convolutional Networks + Pytorch代码实现

    文章目录 一.摘要 二.Dense Net 网络结构 三.Dense Block 四.PyTorch-GPU代码实现 论文来源:(2017)Densely Connected Convolutiona ...

  8. paperswithcode 论文阅读与代码复现

    Machine Learning论文阅读与复现 神奇宝贝 1.丰富的论文合集 2.丰富的数据集 3.方法合集 4.论文解析 要是有一个cs科研er不知道这个宝藏网站,我都会伤心的,OK?https:/ ...

  9. (二十二:2020.11.09)论文学习之《CT中伪影的识别和规避》

    脚踏实地地解决CT的伪影问题(一)<Artifacts in CT: Recog-nition and Avoidance> 讲在前面 摘要 介绍 物理伪影 一.Beam Hardenin ...

最新文章

  1. 《深入Java虚拟机》笔记
  2. django language_Django基础学习-创建第一个Django项目
  3. python怎么换行输入而不执行_关于在IDLE中怎么换行继续敲写代码而不执行语句...
  4. QDoc命名事物Naming Things
  5. 《Outlook时间整理术》一创建和使用自己的文件夹结构
  6. ip在线代理网页联合早报_一次免费代理ip的爬取实战
  7. DICOM协议资料汇集
  8. 天池学习赛:工业蒸汽量预测5——特征优化
  9. python画3d图-Python 绘制酷炫的三维图步骤详解
  10. c#字符编码,System.Text.Encoding类,字符编码大全:如Unicode编码、GB18030、UTF-8,UTF-7,GB2312,ASCII,UTF32,Big5
  11. 360奇云的架构演进之路
  12. 百度网盘破解版Pandownload开发者被抓
  13. Win10开机任务栏卡死
  14. 利用python爬取甲骨文图片及其对应的汉字含义,共1062个甲骨文,百度云下载
  15. Netlogon 特权提升漏洞(CVE-2020-1472)原理分析与验证
  16. php输出问号,所有特殊字符都是PHP / HTML中的问号
  17. excel单元格内换行
  18. java 线程耗尽_关于线程耗尽导致请求超时系统假死的思考
  19. xampp mysql ssl_xampp搭建https服务器
  20. 解决adb无法连接夜神模拟器的问题

热门文章

  1. 链霉亲和素包被的荧光微球/二甲氨基磁珠,氨基磁珠,羧基磁珠,交联磁珠,光滑表面磁珠,聚苯乙烯磁性微球,磁珠,荧光微球玻片
  2. 计算机病毒学课本,计算机病毒实验教程
  3. 常用的网站安全检查站点
  4. 计算机基础第二章ppt,计算机应用基础 第二章.ppt
  5. android:exported needs to be explicitly specified for element <activity#com.tamsiree.rxui.activity.x
  6. hackinglab基础关--第七关
  7. 用PS制作一款立体水晶徽章
  8. 简单的Nginx代理配置
  9. css 三角形怎么制作
  10. 基于FPGA的VGG16卷积神经网络加速器