《matlab心电信号R波检测精品资料.doc》由会员分享,可在线阅读,更多相关《matlab心电信号R波检测精品资料.doc(29页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、生物医学信号处理实习报告学生姓名:学号:实验室名称:项目名称:心电信号的R波检测项目内容:1) 总结常用的QRS波检测算法;2) 选择一种QRS波检测算法,理解该检测算法;3) 编写程序,检测不含噪声的模拟ECG信号中R波4) 对模拟ECG信号加高斯噪声生成含噪声的模拟ECG信号;5) 利用前面编写的QRS波检测算法,检测含噪声模拟ECG信号的R波;6) 分别检测不含噪声和含噪声的心率失常ECG信号(任务一中得到的MIT-BIH数据)原理(写出具体的计算公式) 心电信号是体表电极测量的心电电压幅度随时间变化的函数,属于时域波形信号,虽然从人体体表不同部位的不同导联上所测得的心电波形各异,且不同
2、个体的心电信号存在差异,但所有正常的心电波形周期均可划分为P波!P一R段!QRS波群!S一T段!T波等几个主要部分,且每个特征子波段都代表着一定的生理学意义,如图(2一1)所示如果心脏发生了病变,就会使得心电信号在周期和波形形态上发生某些畸变,有关的心电图学专著二中给出了大量心脏病变的心电图示例,足以说明心电波形的复杂多变性和电生理机理的复杂性由于ECG信号容易受到各种噪声干扰的影响和其本身波形形态的复杂多变,一般情况下,直接利用ECG信号的时域波形进行信号分类和疾病诊断比较困难,更多的是要对时域ECG信号进行某种变换或处理,提取ECG信号的变换域特征进行分析和判断体表心电图时域波形信号的幅度
3、范围一般在IOuV一4mv之间,典型值为lmv左右从时域波形中可以看出,ECG信号特征段的分界处是波形上的拐点,即波形变化起伏最大的点,这也是ECG信号波形检测与定位时最关注的点,关于心电信号中典型波段及特征点所代表的生理学意义将在下一节中进行较为详细的论述图1-1标准的心电波形图 不同导联所记录的心电图,在波形表现上会有所不同,但一个正常的心电波形周期图基本上都是由一个P波,一个QRS披群,一个T波以及过渡期所组成有时在T波后,还会出现一个小的U波心电信号的这些特征波形和过渡期均代表着一定的生理学意义,现以MLH导联的正常心电图波形为例,如图(1一l)所示,对心电波形的主要组成及其特点进行简
4、要介绍。 (1)P波:也叫心房去极波,反映的是左右两心房去极化过程的电位变化波形一般圆钝光滑,历时0.08一0.11:,波幅不超过0.25mV两心房复极化过程所产生的电位变化称为Ta波,它通常与P一R段!QRS波群或S一T段重叠在一起,且波幅很低,在心电图上不易辨认。 (2)P一R间期(或称P一Q间期):是P波起点到QRS波群起点之间的时间间隔,反映了自心房除极开始至心室除极开始的一段时间正常成人的P一R间期为0.12一0.20:若超过0.205,一般表明有房室传导阻滞的发生P一R间期的长短与年龄及心率有关。 (3)QRS波群:反映两心室去极化过程的电位变化典型的QRS波群包括三个紧密相连的电
5、位波动:第一个向下的波称为Q波;紧接着是向上!高而尖峭的R波;最后是向下的S波在不同导联中,这三个波不一定都出现,各波的幅度变化也较大历时约0.06一0.105。 (4)S一T段:指QRS波群终点与T波起点之间的线段,一般与零电位基线平齐在这段时期内,因心室各部分都已全部进入除极化状态,但尚未开始复极,故心室各部分之间没有电位差存在,心电曲线恢复到基线水平但若有冠状动脉供血不足或心肌梗死等情况发生时,S一T段常会偏离基线,并超过一定的幅度范围。 (5)T波:反映两心室复极化过程的电位变化波形圆钝,升降支并不完全对称,波形的前支较长而后支较短,占时约0.05一0.255T波方向应与QRS波群的主
6、波方向一致在以R波为主的导联中,其波幅应不低于本导联R波的1/10。 (6)Q一T间期:指从QRS波群起点到T波终点之间的时间,它代表心室开始去极化到全部复极化完毕所需的时间这一间期的长短与心率密切相关心率越快,Q一T间期越短:反之,则Q一T间期越长正常的Q一T间期依心率!年龄及性别不同而有所不同.当心率为75次/分时,Q一T间期为0.30一0.405分析Q一T间期的变化,对疾病的早期诊断和分析抗心律失常药物对心脏的影响,可起到一定的辅助作用由于Q一T间期受心率的影响比较大,临床上经常采用修正的Q一T间期,即采用Bazett公式计算: (7)U波:T波后0.02一0.04:可能会出现一个与T波
7、方向一致的低宽U波,其成因和生理意义目前尚不十分清楚。 本文注重于QRS波的检测,而在查阅一些文献资料以后,发现QRS波的检测主要分为基于小波变换的心电信号ORS波检测与基于EMO与Marr小波变换的心电信号ORS波检测两种。 基于小波变换的心电信号ORS波检测 小波变换可以分为连续小波变换(CWT)、离散栅格小波变换(DWT)和离散序列的小波变换(DSwT)。信号x(t)的小波变换定义式是:其中是基本小波又称母小波函数是母小波经过移位和伸缩所生的一组函数,称之为小波基函数,a是尺度因子,它实现对母小波函数的伸缩变换,b是时移变量,它实现对母小波函数的移位变换,以确定对信号分析的时间中心在连续
8、小波变换中,a、b、t均是连续变量,而在离散小波变换中,需对它们进行离散化,常取当时就称之为二进离散小波变换,然而取时,在实际信号分析中有时显得尺度跳跃跨度太大,当希望尺度a在aO的范围内取任意值进行分析时就需要进行连续小波变换下面将根据心电信号的连续小波变换模极大值线检测和定位R波峰。 心电信号的R波峰是奇异点,而且它具有较大的幅度和较高的斜率等典型特征,根据基于小波变换的信号奇异性检测理论可知,每个R波的位置都对应于小波变换的模极大值的汇聚点,所以本算法首先对心电信号作连续小波变换并对信号按照心动周期进行分段,以便分别对一个心动周期内的波形进行奇异性分析,然后分别在每一个心动周期内检测模极
9、大值点,它们的连线就是模极大值线由此确定R波的位置,并剔除李氏指数为负对应为噪声产生的模极值线以及应用不应期策略减少噪声干扰,提高检测准确率。 具体算法实现步骤如下: (1)对给定的心电信号作连续小波变换,小波基选用Haar小波,分解尺度a=32分解后得到的小波系数可在一个尺度一时间平面上以灰度图的形式表示。 (2)对心电信号按心动周期进行分段,分段算法是首先对尺度一时间图按尺度a的方向进行累加,从而得到在尺度方向上小波变换的积分值随时间变化的曲线对于Haar小波而言,该曲线在R波之前有一个波峰,R波之后有一个波谷再分别选其正!负极大值的一半作为正负闭值,对积分值随时间变化的曲线进行闭值化处理
10、,并令大于正阂值的点为+l,小于负阂值的点为一1,在两者之间的点等于0,这样在每一个R波位置的之前就有一个+l,之后有一个一1,两者之间的区域为0把某一个一1位置和其后出现的第一个+l位置这一段数据的中点定为心动周期的分割点,从而实现了信号的分段,每一段都包括一个心动周期,而其R波在该段的中部。 (3)对每个心动周期段信号的尺度一时间图,分别找出在每一个尺度下的正的极大值点和负的极大值点,将其连成线得到正!负模极大值线由每条正!负模极大值线的斜率求出该点对应的李氏指数,根据李氏指数判据剔除李氏指数小于O和大于1所对应的模极值线。 (4)因为信号的连续小波变换的模极值线有可能出现中断现象,所以需
11、对每一条正!负模极大值线进行直线拟合,以分别求出它们在尺度a二0的时间位置,若在a=0时正。负模极大值并不收敛于同一个点,则取二者的平均值作为R波的初步位置。 (5)在初步确定为R波的位置对应10ms时间范围内,检测原信号的极值点,并将其最终确定为R波位置。 (6)应用不应期判据由于心肌细胞除极化和复极化需要一个过程,存在一个绝对不应期,所以除了室颤和室扑外一般人的心率小于300次/分。一个QRS波群产生以后,其后一定时间间隔内都不会出现另一个QRS波群,我们把这个时间间隔称为不应期本算法中的不应期设置为Zooms所以检测到一个R波后将其后Zooms内的模极值都忽略,这样可以避免很多由噪声干扰
12、所引起的误检。 基于EMO与Marr小波变换的心电信号ORS波检测 针对常规的基于EMD的QRS波检测算法在信号存在严重高频干扰的情况下会出现较多错检导致检测准确率较低的问题,本文将基于离散小波变换的QRS波检测算法与EMD方法相结合,提出一种基于EMD分解与Marr小波变换的心电信号QRS波检测新算法,来克服以上算法的不足,即尝试利用EMD分解法将非平稳心电信号分解为一系列具有不同特征尺度的IMF分量,然后利用Marr小波变换对相应低阶IMF分量叠加得到的重构信号进行奇异性分析,从而实现对原始心电信号QRS波的准确检测和定位。 EMD分解: EMD分解的低阶本征模态分量中包含原信号的骤变部分
13、,而高阶本征模态分量中包含缓变部分。在心电信号中,对于高瞬时幅频的QRS波群自然就被分配到低阶高频模态分量中,而且R波的局部特征在第一、二本征模函数分量中得到了明显体现。但EMD算法中包含局部求极值!样条插值!边界效应处理等步骤,其计算量相当可观,使得处理速度非常缓慢,而且目前没有快速算法,因此无法满足实时动态检测的要求而且每分解出一个本征模函数分量,计算量将增大一倍,所以本文根据心电信号的时频特性和检测的实时性要求,提出只对心电信号作三层经验模式分解处理,然后将分解得到的第一、二、三本征模函数分量直接相加重构得到一个新信号,通过对此新信号进行奇异性分析来实现QRS波的检测和定位,这样不仅可以
14、有效抑制基线漂移,高幅P波!T波以及伪差信号等低频干扰以及边界效应,而且还能将处理速度提高几倍。但是由第一、二、三模函数分量相加所构成的信号中往往还会包含QRS波带宽以外的频率分量,所以直接对它进行阂值判决的R波检测算法的正确检测率必然不高,而且容易受到高频噪声的干扰,抗干扰能力较差,但是把它作为定位R波的预处理信号是不错的选择另外EMD分解中筛选过程的中止准则常用方差,但也可根据信号特点手动设定筛选次数研究发现,筛选次数小,QRS波在本征模函数域对应的分量越不明显;而筛选次数越多,中心频率越大,特别是运算量成倍增长通过反复实验尝试,本研究通过对心电数据进行8次筛选,以极小的分解损失换取高的计
15、算速度,而且丝毫不影响QRS波的提取效果。 小波基的选取 由前面的讨论可知,在基于离散小波变换的QRS检测中,定位算法及检测效果与小波基函数的选择密切相关,Marr小波(又称Mexicanhat小波)具有良好的连续性、对称性以及指数衰减性,并且还具有一阶消失矩等性质,非常适合对信号进行奇异性检测。Marr小波的母函数是高斯函数的二阶导数与常数的乘积,表达式为: 因为它像墨西哥帽的截面,所以也常称之为墨西哥帽小波。Marr小波函数属于二次微分小波,在时域和频域都有很好的局部化,并且满。由于Marr小波函数具有无限光滑性以及无穷次可微,并且不对单独的噪声点敏感,再加上其独特的时域性质,能使包含信息
16、的特征点特别突出,因此本文选用Marr小波基进行R波峰值奇异点检测,应具有良好的定位特性和分析精度根据Marr小波基函数,计算得到相应的小波分解低通和高通滤波器的系数l和h,如下图2-1所示:根据人和气就可以利用Mallat算法递归计算出信号的小波变换。图2-1 基于Marr小波变换的R波峰值奇异点定位 由前面的讨论可知,信号x(t)的所有奇异点在尺度一时间平面的模极大值线上,且其小波变换在充分接近于零时,其模极大值点就是信号的突变点。由于Marr小波是二次微分小波,而且图形是以原点左右对称的,因此原始信号的奇异点在其小波变换的各层细节信号上仍然保持为极大值,这就使得对原始心电信号R波峰值奇异
17、点的检测可以转化为对特征尺度上细节信号的极大值点的检测相比之下,Marr小波能克服采用一次微分小波检测信号奇异点时存在的以下缺陷:(l)一次微分小波检测算法需通过检测小波模极大值对的过零点来定位信号奇异点,而过零点易受到噪声干扰,使得定位精度的稳定性难以保证。(2)一次微分小波变换算法中需借助于一对相邻的模极值点位置及两者之间的斜率间接确定R波位置,并且还要根据特征尺度进行时移修正,其计算过程相对比较复杂和繁琐。 而我们以软件为主的方法实现QRS波的检测滤波之后的信号一般经过一些变换以提高QRS波的份量,进而采用一系列阈值进行判别,这些阈值有固定阈值法,也有可变阈值法。前者由于可能的干扰或高P
18、、高T波的存在,若其滤波后超过其阈值便会产生假阳性(FP,falsepositive)结果;另外,当心律失常或QRS波幅度变小,阈值设置过高,会导致漏检产生假阴性(FN,falsenegative)结果。由于固定阈值的这些缺点,有研究者提出了用可变阈值检测,以提高检测的精确率,所采用的可变阈值包括幅度阈值、斜率阈值和时间间隔阈值等。编写的源程序: Q波和S波通常是低幅高频波,一般Q波位于S波之前,S波位于R波之后 ,由于他们是一般向下的波,所以他们的峰值点和极值是对应的。因次在检测到R波向左和向右分别搜寻到极值点,对应的就是Q波和S波。而现在我们只需要检测到R波,所以就不需要检测Q波与S波的极
19、值点了。 具体程序如下:ECG-R波检测:clear all;clc; z=textread(ECG.txt);ECG=z(:,1);input=ECG(1:256);rate=ECG(100); sig=input;lensig=length(sig);wtsig1=cwt(sig,6,mexh);lenwtsig1=length(wtsig1);wtsig1(1:20)=0;wtsig1(lenwtsig1-20:lenwtsig1)=0;y=wtsig1;yabs=abs(y); %? sigtemp=y;siglen=length(y);sigmax=;for i=1:siglen-2
20、 if (y(i+1)y(i)&y(i+1)y(i+2)|(y(i+1)y(i)&y(i+1)thr rvalue=rvalue;sigmax(i,2); end;end;rvalue_1=rvalue; %排除误检,如果相邻两个极大值间距小于0.4,则去掉幅度较小的一个lenvalue=length(rvalue);i=2;while i=lenvalue if (rvalue(i)-rvalue(i-1)*rateyabs(rvalue(i-1) rvalue(i-1)=; else rvalue(i)=; end; lenvalue=length(rvalue); i=i-1; end;
21、 i=i+1;end; lenvalue=length(rvalue);%在原信号上精确校准for i=1:lenvalue if (wtsig1(rvalue(i)0) k=(rvalue(i)-5):(rvalue(i)+5); a,b=max(sig(k); rvalue(i)=rvalue(i)-6+b; else k=(rvalue(i)-5):(rvalue(i)+5); a,b=min(sig(k); rvalue(i)=rvalue(i)-6+b; end;end; %打印纠正及校准前后的R波信号figure(2);subplot(2,1,1),plot(1:lensig,wt
22、sig1,rvalue_1,wtsig1(rvalue_1),r.);title(ECG纠正及校准前的R波信号);subplot(2,1,2),plot(1:lensig,sig,rvalue,sig(rvalue),r.);title(ECG纠正及校准后的R波信号); NOISYECG-R波检测:clear all;clc; z=textread(NOISYECG.txt);ECG=z(:,1);input=ECG(1:256);rate=ECG(100); sig=input;lensig=length(sig);wtsig1=cwt(sig,6,mexh);lenwtsig1=lengt
23、h(wtsig1);wtsig1(1:20)=0;wtsig1(lenwtsig1-20:lenwtsig1)=0;y=wtsig1;yabs=abs(y); %? sigtemp=y;siglen=length(y);sigmax=;for i=1:siglen-2 if (y(i+1)y(i)&y(i+1)y(i+2)|(y(i+1)y(i)&y(i+1)thr rvalue=rvalue;sigmax(i,2); end;end;rvalue_1=rvalue; %排除误检,如果相邻两个极大值间距小于0.4,则去掉幅度较小的一个lenvalue=length(rvalue);i=2;wh
24、ile i=lenvalue if (rvalue(i)-rvalue(i-1)*rateyabs(rvalue(i-1) rvalue(i-1)=; else rvalue(i)=; end; lenvalue=length(rvalue); i=i-1; end; i=i+1;end; lenvalue=length(rvalue);%在原信号上精确校准for i=1:lenvalue if (wtsig1(rvalue(i)0) k=(rvalue(i)-5):(rvalue(i)+5); a,b=max(sig(k); rvalue(i)=rvalue(i)-6+b; else k=(
25、rvalue(i)-5):(rvalue(i)+5); a,b=min(sig(k); rvalue(i)=rvalue(i)-6+b; end;end; %打印纠正及校准前后的R波信号figure(2);subplot(2,1,1),plot(1:lensig,wtsig1,rvalue_1,wtsig1(rvalue_1),r.);title(NOISYECG纠正及校准前的R波信号);subplot(2,1,2),plot(1:lensig,sig,rvalue,sig(rvalue),r.);title(NOISYECG纠正及校准后的R波信号);结论(画出要求的图形): ECG-R波检测
26、所获得的结果如下图3-1与图4-1所示:图3-1图4-1 而NOISYECG-R波检测所获得的结果如下图5-1与图6-1所示:图5-1图6-1总结: 实习报告分数:指导教师:附录资料:matlab画二次曲面一、螺旋线1.静态螺旋线a=0:0.1:20*pi;h=plot3(a.*cos(a),a.*sin(a),2.*a,b,linewidth,2);axis(-50,50,-50,50,0,150);grid onset(h,erasemode,none,markersize,22);xlabel(x轴);ylabel(y轴);zlabel(z轴);title(静态螺旋线); 2.动态螺旋线
27、t=0:0.1:10*pi;i=1;h=plot3(sin(t(i),cos(t(i),t(i),*,erasemode,none);grid onaxis(-2 2 -2 2 0 35)for i=2:length(t) set(h,xdata,sin(t(i),ydata,cos(t(i),zdata,t(i); drawnow pause(0.01)endtitle(动态螺旋线);(图略) 3.圆柱螺旋线t=0:0.1:10*pi;x=r.*cos(t);y=r.*sin(t);z=t;plot3(x,y,z,h,linewidth,2);grid onaxis(square)xlabe
28、l(x轴);ylabel(y轴);zlabel(z轴);title(圆柱螺旋线) 二、旋转抛物面b=0:0.2:2*pi;X,Y=meshgrid(-6:0.1:6);Z=(X.2+Y.2)./4;meshc(X,Y,Z);axis(square)xlabel(x轴);ylabel(y轴);zlabel(z轴);shading flat;title(旋转抛物面)或直接用:ezsurfc(X.2+Y.2)./4) 三、椭圆柱面load clownezsurf(2*cos(u),4*sin(u),v,0,2*pi,0,2*pi)view(-105,40) %视角处理shading interp %
29、灯光处理colormap(map) %颜色处理grid on %添加网格线axis equal %使x,y轴比例一致xlabel(x轴);ylabel(y轴);zlabel(z轴);shading flat;title(椭圆柱面) %添加标题四、椭圆抛物面b=0:0.2:2*pi;X,Y=meshgrid(-6:0.1:6);Z=X.2./9+Y.2./4;meshc(X,Y,Z);axis(square)xlabel(x轴);ylabel(y轴);zlabel(z轴);shading flat;title(椭圆抛物面)或直接用:ezsurfc(X.2./9+Y.2./4)五、双叶双曲面ezs
30、urf(8*tan(u)*cos(v),8.*tan(u)*sin(v),2.*sec(u),-pi./2,3*pi./2,0,2*pi)axis equalgrid onaxis squarexlabel(x轴);ylabel(y轴);zlabel(z轴);shading flat;title(双叶双曲面)六、双曲柱面load clownezsurf(2*sec(u),2*tan(u),v,-pi/2,pi/2,-3*pi,3*pi)hold on %在原来的图上继续作图ezsurf(2*sec(u),2*tan(u),v,pi/2,3*pi/2,-3*pi,3*pi)colormap(ma
31、p)shading interpview(-15,30)axis equalgrid onaxis equalxlabel(x轴);ylabel(y轴);zlabel(z轴);shading flat;title(双曲柱面)七、双曲抛物面(马鞍面)X,Y=meshgrid(-7:0.1:7);Z=X.2./8-Y.2./6;meshc(X,Y,Z);view(85,20)axis(square)xlabel(x轴);ylabel(y轴);zlabel(z轴);shading flat;title(双曲抛物面)或直接用:ezsurfc(X.2./8-Y.2./6) 八、抛物柱面X,Y=meshg
32、rid(-7:0.1:7);Z=Y.2./8;h=mesh(Z);rotate(h,1 0 1,180) %旋转处理%axis(-8,8,-8,8,-2,6);axis(square)xlabel(x轴);ylabel(y轴);zlabel(z轴);shading flat;title(抛物柱面)或直接用:ezsurfc(Y.2./8) 九、环面ezmesh(5+2*cos(u)*cos(v),(5+2*cos(u)*sin(v),2*sin(u),0,2*pi,0,2*pi)axis equalgrid onxlabel(x轴);ylabel(y轴);zlabel(z轴);shading f
33、lat;title(环面)十、椭球ezsurfc(5*cos(u)*sin(v),(3*sin(u)*sin(v),4*cos(v),0,2*pi,0,2*pi)axis equalgrid onxlabel(x轴);ylabel(y轴);zlabel(z轴);shading flat;title(椭球)十一、单叶双曲面ezsurf(4*sec(u)*cos(v),2.*sec(u)*sin(v),3.*tan(u),-pi./2,pi./2,0,2*pi)axis equalgrid onxlabel(x轴);ylabel(y轴);zlabel(z轴);shading flat;title(
34、单叶双曲面)十二、旋转单叶双曲面load clownezsurf(8*sec(u)*cos(v),8.*sec(u)*sin(v),2.*tan(u),-pi./2,pi./2,0,2*pi)colormap(map)view(-175,30)%alpha(.2) %透明处理axis equalgrid onaxis squarexlabel(x轴);ylabel(y轴);zlabel(z轴);shading flat;title(旋转单叶双曲面)十三、圆柱面subplot(1,2,1)ezsurf(2*cos(u),2*sin(u),v,0,2*pi,0,2*pi)grid onshadin
35、g interpaxis equalxlabel(x轴);ylabel(y轴);zlabel(z轴);title(圆柱面)subplot(1,2,2)cylinder(30)shading interpaxis squaretitle(调用cylinder函数所得圆柱面)十四、二次锥面clc,clear;P=1,0,0; 0,cos(45*pi/180),sin(45*pi/180); 0,-sin(45*pi/180),cos(45*pi/180);for k2 = 1:31 for k1 = 1:31 x(k1,k2) = (k2-1)*cos ( (k1-1)*12*pi/180); y(k1,k2) = (k2-1)*sin ( (k1-1)*12*pi/180); z(k1,k2) = sqrt(x(k1,k2)2+y(k1,k2)2); Vxyz = P*x(k1,k2),y(k1,k2),z(k1,k2); x1(k1,k2)=Vxyz(1); y1(k1,k2)=Vxyz(2); z1(k1,k2)=Vxyz(3); endendsurf(x,y,z)hold on;surf(x1,y1,z1);shading flat;