目前PQRST网上现成的代码有两份[1][2]

我们采用[2],原因是[1]中采用了lowpass这个函数,

[3]中提到:"注意,只有2018年之后的matlab才有lowpass, bandpass 函数。"

只想说[1]的代码略坑,难不成为了lowpass重装matlab吗?划不来。

所以还是用[2]吧

------------------------------------------------------------------------------------------------------------------------------------------------------

说下PQRST啥意思?

其实就是给一堆数据,进行离散点拟合。

但是不能乱拟合,需要体现一些医学特征

所以可以把PQRST理解为一种"满足医学需要的曲线拟合"。

------------------------------------------------------------------------------------------------------------------------------------------------------

数据集来自[4]

完整代码如下(下面其实包含了三种滤波器,最后一部分才是PQRST模拟):

close all;clear;clc;
sig=load('ecg_60hz_200.dat');
% sig=load('100.dat');% data=importdata('/home/appleyuchi/桌面/心电信号处理算法设计/data4.txt');
% sig=data';
%
% TIME=linspace(0,18.68,1868);%时间N=length(sig);
fs=100;
t=[0:N-1]/fs;
figure(1);subplot(4,2,1);plot(sig)
title('Original Signal')
%%%           Low Pass Filter
b=1/32*[1 0 0 0 0 0 -2 0 0 0 0 0 1];
a=[1 -2 1];
sigL=filter(b,a,sig);
subplot(4,2,3);plot(sigL)
title('Low Pass Filter')
subplot(4,2,4);zplane(b,a)
%%%           High Pass Filter
b=[-1/32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1/32];
a=[1 -1];
sigH=filter(b,a,sigL);
subplot(4,2,5);plot(sigH)
title('High Pass Filter')
subplot(4,2,6);zplane(b,a)
%%%          Derivative Base Filter
b=[1/4 1/8 0 -1/8 -1/4];
a=[1];
sigD=filter(b,a,sigH);
subplot(4,2,7);plot(sigD)
title('Derivative Base Filter')
subplot(4,2,8);zplane(b,a)
%%%      be tavane 2 miresanim
sigD2=sigD.^2;
%%%      normalization
signorm=sigD2/max(abs(sigD2));
%%h=ones(1,31)/31;
sigAV=conv(signorm,h);
sigAV=sigAV(15+[1:N]);
sigAV=sigAV/max(abs(sigAV));
figure(2);plot(sigAV)
title('Moving Average filter')
%%
treshold=mean(sigAV);
P_G= (sigAV>0.01);
figure(3);plot(P_G)
title('treshold Signal')
figure;plot(sigL)
%%
difsig=diff(P_G);
left=find(difsig==1);
raight=find(difsig==-1);
%%%      run cancel delay%      6 sample delay because of LowPass filtering%      16 sample delay because of HighPass filtering
left=left-(6+16);
raight=raight-(6+16);
%%size(left)
size(raight)% P-QRS-t
for i=1:length(left);[R_A(i) R_t(i)]=max(sigL(left(i):raight(i)));R_t(i)=R_t(i)-1+left(i) %add offset[Q_A(i) Q_t(i)]=min(sigL(left(i):R_t(i)));Q_t(i)=Q_t(i)-1+left(i)[S_A(i) S_t(i)]=min(sigL(left(i):raight(i)));S_t(i)=S_t(i)-1+left(i)[P_A(i) P_t(i)]=max(sigL(left(i):Q_t(i)));P_t(i)=P_t(i)-1+left(i)[T_A(i) T_t(i)]=max(sigL(S_t(i):raight(i)));T_t(i)=T_t(i)-1+left(i)+47end
%%
figure;plot(t,sigL,t(Q_t),Q_A,'*g',t(S_t),S_A,'^k',t(R_t),R_A,'ob',t(P_t),P_A,'+b',t(T_t),T_A,'+r');
for i=1:((length(P_t))-1)HRV=P_t(i+1)-P_t(i)
end

------------------------------------------------------------------------------------------------------------------------------------------------------

运行结果如下:

注意,上述的PQRST代码适用信号有一个局限性,就是输入的数据"比较光滑比较密集",如下图中的Original Signal

-------------------------------------------------不适合情形--------------------------------------------------------------------------------------------

因为这种信号噪声没有滤除,所以不适合直接套用

-------------------------------------------------------故障分析-----------------------------------------------------------------------------------------------

另外注意,如果更换成自己的数据集报错的话。

原始信号不要有接入噪声,否则会导致[2]中程序报错:

Subscripted assignment dimension mismatch.

Error in PQRSTdetection (line 131)
    [R_A(i) R_t(i)]=max(sigL(left(i):right(i)));

这个原因是代码中有对离散序列进行微分的操作.

最终要求left中的每个数值小于right

下面是故障现场:

P_G =

Columns 1 through 20

1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1

Columns 21 through 40

1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1

Columns 41 through 60

 1     1     1     1     1     1     1     1     1     1     1     1     1     0     0     0     0     0     0     0(看到没?这里离散波形微分是-1)

....

也就是说P_G序列中必须上升沿先出现,上面的故障场景是下降沿先出现,

就会导致后面的left和right变量不存在left<right 的关系(故障时会有left>right),从而最终导致PQRST图形窗口无法绘制。
------------------------------------------------------------------------------------------------------------------------------------------------------

Reference:

[1]ECG SIGNAL PQRST PEAK DETECTION

[2]ECG P QRS T wave detecting matlab code

[3]MATLAB 低通滤波器 low pass filter

[4]http://people.ucalgary.ca/~ranga/enel563/SIGNAL_DATA_FILES/

心电信号的PQRST模拟matlab代码(转载+自己调研汇总)相关推荐

  1. Matlab心电信号的PQRST模拟-实验报告

    心电信号处理算法设计-实验要求 data4 是一段实际采样得到的心电数据, 采样频率为 100Hz, 波形如下图所示.设计相应的算法, 计算心率, 单位为: 次/分钟.可能会用到的知识为数字滤波器的设 ...

  2. 基于指数平滑对心电信号进行PQRST模拟(第二种方案)

    基于指数平滑对心电信号进行PQRST模拟,对下面的流程中的橙色部分进行实现. 第一种方案流程请见[1] 最终结果如下: 上述圆圈处是异常信号(幅度异常,以及与其他心拍距离异常),删除. 局部放大效果如 ...

  3. 根据心电信号计算心率的matlab代码

    先说说现有的资料: [1][2]弄了FIR1还有hamming窗,搞得老麻烦了,扔一边先. --------------------------------------------------自己另外 ...

  4. 信号相角位移量的计算与信号位移计算-附Matlab代码

    一.初始相角的位移量 在信号处理中正弦信号经常表示为 x ( n ) = A cos ⁡ ( 2 π f 0 n / f s + θ ) x\left( n \right)=A\cos (2\pi { ...

  5. V2G汽车的蒙特卡洛模拟matlab代码,可以从电网充电也可以向电网放电

    V2G汽车的蒙特卡洛模拟matlab代码,可以从电网充电也可以向电网放电. 充电开始时刻.放电时刻.日行驶里程等参数可以自己设置,易于修改. _:3120644246447334浪迹天涯

  6. V2G汽车的蒙特卡洛模拟matlab代码,可以从电网充电也可以向电网放电。 充电开始时刻、放电时刻、日行驶里程等参数可以自己设置,易于修改。

    V2G汽车的蒙特卡洛模拟matlab代码,可以从电网充电也可以向电网放电. 充电开始时刻.放电时刻.日行驶里程等参数可以自己设置,易于修改. :4720644246447334浪迹天涯

  7. 心电图数据读取matlab程序,心电信号的提取及matlab编程.doc

    MIT-BIH ECG 信号的数据读取方法和Matlab程序 收藏 ? ? 最近在写一篇基于小波变换的ECG信号压缩算法的论文,遇到了怎样获取ECG信号测试数据的问题,在百度和专业论坛里搜索了一番,发 ...

  8. Hilbert变换求信号的包络线及MATLAB代码

    一.Hilbert变换表达式 Hilbert变换是信号与的卷积,表达式如下: 由于本质是卷积,因此可以从"线性系统","调幅-调频"等角度思考.进一步可参考如下 ...

  9. 【雷达】基于核聚类实现雷达信号在线分选附matlab代码

    1 内容介绍 雷达信号分选是现代雷达侦察设备必须具备的功能‚它是利用测得的雷达信号参数‚将随机交迭的雷达信号分离成独立的雷达信号列‚为最终的雷达信号识别打下牢固的基础.在现代战争中‚雷达侦察接收机所处 ...

最新文章

  1. mysql重置auto_increment字段
  2. android jni 返回java类
  3. Spring 提供几种配置方式来设置元数据?
  4. Angular getOrCreateInjectable的实现原理调试
  5. MAC下搭建java的开发环境
  6. java创建类的三个步骤_3个简单步骤即可测试Java 8
  7. mysql如何优化性能优化_如何优化性能?MySQL实现批量插入以优化性能的实例详解...
  8. MS SQLSERVER中如何快速获取表的记录总数
  9. Myeclipse修改jdk版本流程
  10. 【Remoting-4】
  11. WORD打印时显示错误,未定义标签?
  12. Java实现搭积木_Java搭积木游戏
  13. Halo博客 -- ③ 本地运行
  14. 黑客帝国神级影评,转至豆瓣。 — — 哲思。
  15. 什么是时延?(延迟)
  16. 从零开始搭建ROS小车(绪论)
  17. python 逆序_python中逆序
  18. 工作一年了,小贺和大家说说心里话
  19. Marshmallow 快速文档
  20. 类似QQ管家会员页面的jquery轮换效果

热门文章

  1. Selenium WebDriver- 使用Frame中的HTML源码内容操作Frame
  2. 生成javascript正则表达式语法图
  3. mysql查看数据库和表的占用空间大小
  4. 返回值与返回引用的问题
  5. 软件开发过程(CMMI/RUP/XP/MSF)是与非?
  6. 主机Ping扫描自动化工具
  7. base64报错与已下载模块,但import失败解决
  8. Kali Linux2使用基础
  9. js 事件委托深入浅出
  10. java 根据客户端重定向_Java Web笔记 - 转发与重定向的区别与在FireBug客户端的表现...