代码运行
挑战赛要求
根据比赛要求,
As in recent challenges, the data have been divided into three sets:
- **Learning (training) set A**: includes noninvasive fetal ECG signals, as well as the reference annotations for them (for participants' use only; not used to score or rank challenge entries)
- **Open test set B**: noninvasive signals only (reference annotations withheld; for evaluation of challenge entries in events 4, 5, and 6)
- **Hidden test set C**: unpublished records (reserved for evaluation of open-source challenge entries in events 1, 2, and 3)
set-a是训练集,set-b是测试集
根据比赛模板文件的参数设计,知道ECG参数对应的是从四通道的csv文件中读取的矩阵。
运行代码
Podziemski[1]的代码
观察csv数据格式,读取时需要从第一列第二行之后读取
%这里以训练集a03.csv为例,csvread为matlab读取csv的方法
M = csvread('set-a-text\a03.csv',2,1)
读取csv,获得矩阵
执行方法
physionet2013(1,M)
后将结果与a03.fqrs.txt比较(仅展示前14行)
a03.fqrs.txt | physionet2013(double(1),M) | loss |
---|---|---|
91 | 95 | 4 |
591 | 595 | 4 |
1098 | 1103 | 5 |
1612 | 1616 | 4 |
2125 | 2134 | 9 |
2671 | 2666 | -5 |
3227 | 3270 | 43 |
3774 | 3779 | 5 |
4313 | 4319 | 6 |
4836 | 4844 | 8 |
5352 | 5357 | 5 |
5870 | 5875 | 5 |
6374 | 6380 | 6 |
6878 | 6883 | 5 |
再以测试集b00.csv,进行测试,可以看到如训练集一样,正常运行。
Varanini[2] 的代码
方法同上,读取csv转成矩阵,后作为参数传入方法中,
执行
physionet2013(1,M,'test')
以下为打印输出信息
---------------------------------------------------------
Program: FecgDetrFilt, record name: test
---------------------------------------------------------
Program: FecgICAm, record name: test
FastIca, cosh , deflationary
epsilon= 0.000100
Component= 1
numIt= 7, 0.000021
Component= 2
numIt= 34, 0.000098
Component= 3
numIt= 5, 0.000020
Component= 4
numIt= 3, 0.000000
---------------------------------------------------------
Program: FecgInterp, record name: test
---------------------------------------------------------
Program: FecgQRSmDet, record name: test
Number of detected mother QRSs= 101
RR mean= 0.594, stdev=0.036
---------------------------------------------------------
Program: FecgQRSmCanc, record name: test
Number of QRSs= 101
RR mean= 5.944755e-01, stdev=3.620722e-02
---------------------------------------------------------
Program: FecgICAf, record name: test
FastIca, cosh , deflationary
epsilon= 0.000100
Component= 1
numIt= 16, 0.000099
Component= 2
numIt= 7, 0.000032
Component= 3
numIt= 4, 0.000018
Component= 4
numIt= 3, 0.000000
---------------------------------------------------------
Program: FecgQRSfDet, record name: test
channel=1, meRR= 0.4620, madRR= 0.0051, maddRR= 0.0065, cfact= 0.0000, cFMsim= 0.0132
channel=2, meRR= 0.4577, madRR= 0.0156, maddRR= 0.0250, cfact= 0.0000, cFMsim= 0.0130
channel=3, meRR= 0.4881, madRR= 0.0248, maddRR= 0.0421, cfact= 0.0000, cFMsim= 0.0127
channel=4, meRR= 0.3027, madRR= 0.0268, maddRR= 0.0448, cfact= 0.0142, cFMsim= 0.0183
channel=1, chanIqf= 0.0248
channel=2, chanIqf= 0.0536
channel=3, chanIqf= 0.0796
channel=4, chanIqf= 0.1040
Selected channel=1
ans =
0.0995
0.6000
1.1073
1.6210
2.1385
2.6803
3.2363
3.7840
4.3235
4.8483
...
与ground truth比对(仅展示前14行)
a03.fqrs.txt | a03.fqrs.txt(/1000) | physionet2013(double(1),M) | loss |
---|---|---|---|
91 | 0.091 | 0.0995 | 0.0085 |
591 | 0.591 | 0.6 | 0.009 |
1098 | 1.098 | 1.1073 | 0.0093 |
1612 | 1.612 | 1.621 | 0.009 |
2125 | 2.125 | 2.1385 | 0.0135 |
2671 | 2.671 | 2.6803 | 0.0093 |
3227 | 3.227 | 3.2363 | 0.0093 |
3774 | 3.774 | 3.784 | 0.01 |
4313 | 4.313 | 4.3235 | 0.0105 |
4836 | 4.836 | 4.8483 | 0.0123 |
5352 | 5.352 | 5.3615 | 0.0095 |
5870 | 5.87 | 5.88 | 0.01 |
6374 | 6.374 | 6.3845 | 0.0105 |
6878 | 6.878 | 6.8883 | 0.0103 |
Podziemski[1]论文阅读
摘要
将检测到的RR间期峰值与胎儿头皮电极测量值进行比较。我们的算法侧重于检测胎儿QRS复合物中最突出的部分,即RS斜率。首先,我们去除远距离趋势,找到具有最优质胎儿心电图的两个通道。然后,我们定位具有所需特性(足够的振幅和斜率)的重极化。
内容
名词介绍
胎儿心电图(Fetal Electro Cardiogram,FECG):是胎心活动的客观指标,其作用是临床听诊和胎儿监护仪所不能取代的一种胎心观察法
母亲腹部心电图 mothers’ abdomen ECG(aECG)
目的
从具有低胎儿QRS幅度的信号检测胎儿QRS复杂位置,寻找一种将尽可能低的原始波形诱导的方法。
数据
aECG 4个通道,采样率为1kHz,持续时间为60秒。
具体模型
架构
算法侧重于检测胎儿QRS信号的最突出的一部分。
RS斜率(见图1)。它可以分为四个主要部分:
- 信号预处理(步骤1-5),
- 1-2 翻转,得到8个信号
- 3-4 过滤杂音
- 5 降频传到下一步
- RS斜率检测(6-9),
- 通过小步长的斜率检测,找到胎儿QRS的特征(RR间隔特征和RS斜率特征)
- 并用这些特征筛选胎儿信号
- 协方差信号增强(10-14),
- 通过信号的平均值与母体模板信号值相减,得到最后的结果
- 微调(15-17)。
- 删去不合理的信号
实验结果
在大赛上取得了好成绩
结论
可以通过处理图像斜率的方法来处理信号数据——一个思路。
Varanini[2] 论文阅读
摘要
预处理阶段:移除baseline和移除powerline干扰。用于母亲心电图提取的独立成分分析(ICA);母体QRS检测;使用通过加权奇异值分解(SVD)获得的PQRST近似值进行母体心电图取消;第二次ICA用于增强胎儿心电信号;胎儿 QRS 检测。
内容
名词介绍
独立成分分析(Independent Component Correlation Algorithm,ICA):在信号处理中,这是一种用于将多元信号分离为加性子分量的计算方法。
奇异值分解(Singular Value Decomposition,SVD):是线性代数中一种重要的矩阵分解,奇异值分解则是特征分解在任意矩阵上的推广。
PQRST
- P – Position/Provoking Factors,代表胸痛的位置和诱发因素
- Q – Quality,代表性质
- R – Radiation,代表放射,指的是放射痛
- S – Severity/Symptoms,代表胸痛的严重程度和伴随症状
- T – Time,代表时间
处理流程
- 预处理:移除 baseline和power line
移除指定信号之后的图
- 利用ICA 增强母体ECG信号
-
4 KHz and 母体QRS 检测
-
凭借SVD,使用QRST参考值移除母体ECG信号 (最下方是分离的结果)
-
ICA 增强胎儿ECG信号
-
利用RR序列的模型,改善胎儿QRS波谱
实验结果
挑战赛跑分第一名。
谢晓路[3]论文阅读
也是利用挑战赛数据,在2017年,实现检测胎儿R波的高效算法算法。
摘要
通过最小化误差函数构造人工序列,将人工序列与腹部混合信号作差从而自适应地滤除母亲心电信号的波形,以获得较清晰的胎儿心电波形,再经过基于k均值聚类的胎儿R波尖峰检测以及精筛选的步骤,获得正确的胎儿 R 波尖峰。
具体模型
架构
滤除母亲心电波形
构造人工序列 X ={x1,x2,…,xn}(其中,xi 为 第i个点的幅值).
我还是不知道怎么构造的人工序列
利用人工序列与腹部心电信号作差,从而滤除母亲心电波形。
胎儿R波尖峰初步检测,
胎儿R波尖峰精筛选,(就像Podziemski[1]中的微调“删去不合理的信号”和,Varanini[2] 的利用RR序列的模型改善波谱一样),这里利用RR间期均值来筛选R波尖峰。
实验结果
对于波峰幅值不明显和极端的ECG图像,会导致算法不能很好应用。
作者自述
Varanini等的算法在数据集上的平均运行时间略低于本研究提出的算法,但其平均灵敏度和平均阳性检测率较低,准确性无法保障.Podziemsk等的算法在平均灵敏度和平均阳性检测率上的成绩突出,但由于其平均运行时间较长,难以对胎儿R波进行实时提取,而本研究提出的算法平均运行时间短,准确率也处于较高水平.
结论
思路要是面向数据集的诸多特征(这里是针对波峰这个特征,说不定也可以根据波谷…),往往可以激发许多不同的思路。
参考内容
[1]Piotr Podziemski, & Jan Gieraltowski (2013). Fetal heart rate discovery: Algorithm for detection of fetal heart rate from noisy, noninvasive fetal ECG recordings Computing in Cardiology Conference.
[2]Maurizio Varanini, Gennaro Tartarisco, Lucia Billeci, Alberto Macerata, Giovanni Pioggia, & R. Balocchi (2013). A multi-step approach for non-invasive fetal ECG analysis Computing in Cardiology Conference.
[3]谢晓路, 王子叶, 陈干, 宋蕾, 王颖, & 张丽娟. (2017). 一种从母体腹部电极心电信号中检测胎心r波的算法. 厦门大学学报:自然科学版, 56(1), 6.
[4] matlab读取cvs文件的几种方法 - sgggr - 博客园 (cnblogs.com)
[5] 胎儿心电信号实时转换为胎儿胎音的计算机仿真转换方法与流程 (xjishu.com)
[6] PQRST评估法,轻松应对胸痛_PQRST评估_胸痛_心肌梗死_医脉通 (medlive.cn)
环境配置了,但是没用上 利用MATLAB读取PHYSIONET数据库的具体步骤_Sueyi166的博客-CSDN博客