嵌入式系统综合实践_第1页
嵌入式系统综合实践_第2页
嵌入式系统综合实践_第3页
嵌入式系统综合实践_第4页
嵌入式系统综合实践_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、嵌入式系统综合实践课程设计(论文)脉搏波心率测量算法设计 院(系)名称电子与信息工程学院 专业班级计算机666 学号1104010xx 学生姓名XX 指导教师XX 讲师起 止 时 间: 2014.12.292015.01.09课程设计(论文)任务及评语院(系):电子与信息工程学院 教研室:计算机科学与技术学 号1104010学生姓名专业班级计算机666课程设计(论文)题目脉搏波心率测量算法设计课程设计(论文)任务任务要求:采集得到了脉搏波数字形式的数据,单片机通过这些数据计算心跳次数。要求用Matlab设计心率计算方法,使其计算给定脉搏波数据(1组)反应的心率次数。技术要求:1、要求输入函数t

2、est(x),屏幕上出现脉搏波的心跳个数。2、在屏幕上画出计算心率各个过程原始数据的变化情况。3、分析把数据变化成什么样的形式才能用程序计算心率。指导教师评语及成绩平时成绩: 答辩成绩: 论文成绩: 总成绩: 指导教师签字: 年 月 日注:平时成绩占20%,答辩成绩占40%,论文成绩占40%。目 录第1章 绪论1算法研究的背景1算法研究的意义1开发工具1第2章 需求分析3主要研究内容32.2 算法性能需求3第3章 算法的选择与比较4心电基线漂移去除方法的比较研究4形态滤波43.1.2 FIR滤波4小波变换5中值滤波 - 小波变换5拟合基线法原理53.2 快速中值滤波的应用6第4章 算法设计与编

3、码8算法设计8编码设计与分析8第5章 设计结果与分析11脉搏波心率测量算法设计目的11脉搏波心率测量算法设计结果11脉搏波心率测量算法设计的分析14第6章 总结17参考文献18第1章 绪论算法研究的背景脉搏波信号处理算法的研究对于心血管疾病多参数检测技术的发展具有重大意义。近年来,脉搏波信号的特征提取已经成为人体健康监护领域的研究热点之一。通过脉搏波信号能够检测心血管功能的多项参数,具有无创、快速等特点,是防治心血管疾病的重要手段。目前,脉搏波信号的处理算法研究还小成熟,特别是信号的特征提取,使其在检测设备中的应用发展缓慢,开展该方而的研究具有重要的实际应用价值及社会意义。首先,对脉搏波信号特

4、点及波形特征进行了分析,在此基础上采用了基于数学形态学的脉搏波信号预处理算法,分别设计了加权组介形态滤波器去除脉冲噪声和抑制基线漂移,并进行了仿真研究,该算法能够有效去除噪声而小损伤原信号的特征。其次,针对脉搏波信号与振动系统的联系,建立了基于振动理论的脉搏波信号特征提取数学模型,在此基础上,提出了脉搏波信号特征提取算法,对该算法进行了数学分析,证明其物理可实现性,得到了相关参数的范围。并针对脉搏波信号的周期、波形和血压信号特征,定义了相关的特征提取向量,并给出具体实现过程中的信号运算数学表达式。运算量较小、耗费时间也较短,仿真实验结果表明该方法是有效实用的。最后,脉搏波心率测量算法设计,利用

5、实验系统采集到的脉搏波信号对算法进行验证,基于MATLAB对数据进行处理,得到最优算法。这将对心血管检测、数据分析有很大的帮助。1.2算法研究的意义从人体采集到的脉搏波信号,由于脉搏波信号信噪比比较低,给后续参数的准确测量带来了困难,所以对于噪声干扰的去除是非常重要而必须的。其中脉搏波信号中常见的噪声有工频干扰、基线漂移、肢体抖动、肌肉紧张而引起的干扰等,本文基于基线漂移法结合MATLAB对数据进行了实时的处理。用MATLAB计算了所给脉搏波信号的心跳次数。实现了MATLAB上对脉搏波信号的实时处理。1.3开发工具算法研究环境MatlabMATLAB (Matrix Laboratory ,矩

6、阵实验室) 是由美国Math Works公司开发的一种功能强、效率高、简单易学的可视化软件,覆盖面包括控制、通讯、金融、图像处理、建筑、生物学等几乎所有的行业与科学领域。除了经典的一些算法外, MATLAB 还提供了丰富的数据分析和处理功能模块, 如神经网络、小波分析、信号处理、图像处理、自动控制、模糊控制、系统仿真等,因此MATLAB是一种高效的编程软件。本文介绍利用MATLAB 软件作为技术平台,实现对统脉搏波快速、准确实时显示,而且实现方法简单有效,有一定的实用性。第2章 需求分析2.1主要研究内容从上面的分析可以看到,尽管脉搏波信号处理领域的研究取得了较大的进展,并且相关处理方法在一定

7、程度上得到了应用,但是,目前的信号处理方法还不够成熟,比如准确性不高,对非线性信号处理效果不理想;数学原理复杂,计算量大,不适合嵌入式应用;实时处理能力差,不利于在实时监护系统中的应用。用Matlab计算所给脉搏波信号的心跳次数主要研究内容有:(1)分析原始脉搏波数据的特点,研究脉搏波数据的预处理方法,寻找一种新的更适于脉搏波信号特点的方法,有效去除高频脉冲噪声和基线漂移,并且不损失原信号的特征,为脉搏波的特征提取奠定基础。(2)研究脉搏波信号的特征提取算法,根据脉搏波信号特征提出一种新的简单易实现、计算量小且具有在线处理功能的特征提取算法,对算法进行数学分析,并设计算法的具体实现过程,给出信

8、号运算的数学表达式,分别实现脉搏波周期特征、波形特征与血压信号特征的提取,解决脉搏波的有效应用中存在的困难。(3) 脉搏波信号测量算法设计,要求输入函数test(x),屏幕上出现脉搏波的心跳个数。2.2 算法性能需求消除心电信号的基线漂移 ,是心电信号处理中的一个重要而又困难的问题 。 因为基线漂移严重时 ,往往使波形识别和参数测量成为不可能 ,甚至无法记录 。 发生基线漂移的原因有电极电阻变化 、电极的极化电位变化 、心电放大器的直流偏置漂移 、人体呼吸或其他肌肉缓慢运动等 。 基线漂移的频率很低 ,其范围为 0. 05 Hz至几 Hz,其主要分量在 0. 1 Hz左右 。而心电信号的 ST

9、段频率也很低 ,其最大值约为 0. 60. 7 Hz,两者的频谱非常接近 ,所以如果使用 高通滤波的方法消 除基线漂移 ,即 使采用 线性相位的滤波器 ,也常常会引 起 严重失真。对基线漂移纠 正方法的研究 ,在心电信号处理中有着重要意义 。本文通过研究快速中值滤波在滤波心电图信号基线漂移中的应用,以及心电基线漂移去除方法的算法比较,得出简单、精确度比较高的算法,进而基于MATLAB求出脉搏波的心跳个数。第3章 算法的选择与比较3.1心电基线漂移去除方法的比较研究基线漂移是心电信号幅值测量与形态分析(尤其是 ST段 ) 的重要影响因素 ,抑制基线漂移是正确获心电信息的前提 。滤波法和拟合基线法

10、是两类最常用的基漂抑制方法 。传统方法如小取心电信息的前提 。滤波法和拟合基线法是两类最常用的基漂抑制方法 。传统方法如小波分解、形态滤波、FIR 滤波、中值 滤波、基于全部数据的最小二乘拟合法 、基于基线上关键点的函数拟合法 等 ,都在心电基漂去除中得到了广泛的应用 ;近年来 ,新兴方法如自适应滤波 、经验模值分解 等也被尝试用于心电基漂去除的研究中 。然而 ,这些研究大多以定性分析为主 ,所分析的数据没有通用性 ,因此不便于在实际应用中对各种算法的取舍提供参考 ; 即便 有 些 研 究 使 用 M IT/B IH 数 据 库的样本 ,但由于 M IT /B IH 数据都包含基漂 、工频 、

11、运动伪迹等多种干扰 (实际的体表 ECG必然受噪声干扰 ) ,因此 ,不能定量比较各种算法对信噪比的改善程度 。这里依次阐述滤波法和拟合法的原理与特点。形态滤波形态运算包括腐蚀 、膨胀、 形态开和形态闭等。形态开可以抑制信号中的正脉冲噪声 ,而形态闭可以抑制信号中的负脉冲噪声 。通常使用形态开 、闭运算的级联形式来同时滤除信号中的正 、负脉冲噪声 。如果结构元素的宽度小于所有 ECG特征波形的宽度 ,则开 、闭运算后 , ECG的特征波形会被保留 ,而信号中宽度小于结构元素的干扰脉冲会被清除 。 另一方面 ,有基线漂移的 ECG信号可看成缓慢变化的“基漂 ”信号上叠加有宽度相对狭窄的ECG信号

12、,如果结构元素的宽度大于所有ECG特征波形 ( PQRSTU 波 ) 的宽度 ,则形态运算就能够从含噪信号中分离出基线漂移信号 。3.1.2 FIR滤波N 阶 FIR 滤波器在 Z平面内有 NR个零点 ,其收敛域总是包括单位圆 ,因此 F IR 滤波器总是稳定的 。系数对称的 F IR 滤波器能够保持线性相位 ,这是 ECG除噪所需要的 ,但需注意 N阶偶对称或奇对称的 F IR 滤波器有 N /2点延时 。F IR滤波的原理简单 、无累积误差 , 适于实时场合 ,但幅频失真一般比较明显 。小波变换信号的小波变换相当于信号在不同尺度的带通和低通滤波,可分解得到信号的逼近分量和细节分量 。基线漂

13、移主要为低频分量 ,在小波重构的过程中 ,只要将高尺度的逼近分量置零 ,就得到了去除基漂的信号。在信号采样频率一定的情况下 ,对于某一确定小波 ,其不同尺度下的频率中心和窗宽都是确定的 ,由此可确心和窗宽都是确定的 ,由此可确定去除基线漂移的小波变换的最佳分解尺度 。形态运算 - 小波变换 形态滤波能够简单提取基漂的轮廓 ,但产生了一种近似矩形或梯形的波动 ,这是形态运算设置门限而带来的截断误差 ,可考虑用小波分解对粗糙的基漂进行平滑 。形态滤波与小波分解的联合算法是 : 首先用形态滤波提取粗糙的基漂信号 ;再通过小波分解将粗糙的基漂分解在 N 个尺度上 ,重构时只保留2 Hz以下的逼近分量和

14、细节分量 ,这样就获得了平滑的基漂 ,进而获得滤除基漂干扰的信号 。综合算法中 ,形态滤波得到了有显著失真的粗糙基漂 ,小波分解与重构过程则实现了对粗糙基漂的平滑处理 。中值滤波 - 小波变换类似形态滤波 ,中值滤波能够粗略地提取基漂轮廓 ,但也产生了一种“台阶状 ”失真 , 这是中值运算所产生的截断误可首先用中值滤波提取粗糙的基漂信号 ,然后用小波分解重构方法再进一步对基漂进行平滑差 。原理类似形态滤波与小波分解的综合算法。拟合基线法原理基线拟合分为整体拟合和分段拟合两种 。整体法是在得到全部参考点后再拟合基线 , 不能实时实现 。分段拟合具有简洁 、快速的特点 ,适用于实时场合 。李惠军等

15、 对分段 3次函数校正和抛物线校正给出了较透彻的分析 ,由于其方法是在每个心拍的 TP段上选取一个参考点的坐标及其导数 ,故这里称其为“导数法 ”。为了更细致的刻画基漂 ,也可每个心拍的 TP段上选取 3 个“基准点 ”坐标 ,不计算导数 ,本文称之为“坐标法 ”。直观上 ,这 3点的最佳位置应该是 : TP段起点 (即本心拍的 T波终点 ) , TP段终点 (即下一个心拍的 P波起点 ) , TP段的中点 。一方面 ,室性早搏等情况下不存在 P波 ;另一方面 ,由于噪声的影响 , P波的准确定位有时比较困难 。因此 ,为了提高可行性和可信度 ,这里根据 R 波的峰点位置和 RR 间期来确定

16、TP段的 3 个插值点。几种滤波方法中 , 综合滤波算 法的 误差( STD )最小 、SNR改善最多 ,但效果仍不理想 。究其原因 ,基漂是变化的 ,而滤波算法的自适应性不强。形态运算的时间消耗较大 ,而且结构子越长 ,时耗越大 。结构子长度主要和信号的采样率联系 ,采样率越大 ,则结构子越长 。因此 ,在实时性要求较高的场合 ,应避免使用形态方法 。中值运算需要进行排序操作 ,时间消耗较大 ,因此中值滤波也不适合在实时场合使用 。改善的信噪比 ( SNR )和均方差 ( STD ) 成反相关 ,即信噪比的改善越高 ,则输出信号与理论信号的差别就越小 。线性相关系数 r与改善的 SNR(或

17、STD )的变换趋势并不完全一致 , 反映了两个信号交流分量变化趋势的一致性程度 ,而 STD则反映了两个信号的差别大小 , SNR 反映了信号能量与噪声能量的比值。3.2 快速中值滤波的应用中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术,被广泛应用于去除脉冲噪声。自1970年被提出以来 ,因其具有良好的边缘保持特性和滤除脉冲噪声的能力 ,被广泛用于数字图像处理。中值滤波的定义:信号()= 0,1,N-1),取长度为 L = 2M + 1 (M 为正整数)的滤波窗口,设在第 n时刻输入信号序列在窗口中的采样点为x (nM), ,X (r1),X(n+M)。此时的输出为:y(

18、n) = medx(n) ,x(n) x(n+ )(1 .1-1 )其中,me d表示对窗口内所有数按从小到大排序后取中值的运算。由公式(1.1-1 )可以看出,中值滤波的主要运算是对窗口内的数据进行排序,然后取中值,对分查找流程图如图3.1所示。图3.1 对分查找所以对窗口内数据的排序速度决定了中值滤波算法的处理速度。假设原始心电数据序列长 度为N,表示为(X(0),X(1),X(N一1),滤波窗口长度为2M+ l,表示为 (w (0),w (1),w (2M),中值滤波算法共需要N -2 M 次对长度为2M+ 1的心电数据进行排序。有序序列w中元素的删除和内插如图3.2所示。由数据结构中的

19、知识可知,对n个元素进行排序时,所需的比较次数在理论上 的最小:O (n log,r)。数据元素间的比较次数是影响排序速度的一个重要因素。 当原始心电信号数据序列较长或滤波窗口宽度较大时,传统中值滤波算法需要大量的计算时间。图3.2 元素的删除和内插第4章 算法设计与编码对脉搏波心率测量可以通过Matlab软件设计算法,算法包括对脉搏数据通过图形的方式显示出来,从图形中可以直观的看出脉搏的波形图,并且可以观察到每个波形的峰值,其峰值就是每次的心跳次数。这只是通过肉眼观察到的数据,那利用Matlab软件可以准确的将脉搏心跳次数显示在屏幕上,这就需要对原始图形进行处理,处理思路就是将弧形脉搏波改变

20、为纯净的倒三角,最后通过一个计数函数对每个倒三角进行个数,并将所得值显示在屏幕上。编码设计与分析1脉搏波低通处理:该阶段主要是对脉搏波波形进行处理,主要设计了低通滤波function y=low_pass(x,f1,f3,rp,rs,Fs)和切比雪夫滤波器,最后可以通过plot()来查看滤波后的曲线,设计代码如下:function y=low_pass(x,f1,f3,rp,rs,Fs)%低通滤波%使用注意事项:通带或阻带的截止频率的选取范围是不能超过采样率的一半%即,f1,f3的值都要小于 Fs/2%x:需要带通滤波的序列% f 1:通带截止频率% f 3:阻带截止频率%rp:边带区衰减DB

21、数设置%rs:截止区衰减DB数设置%FS:序列x的采样频率% rp=0.1;rs=30;%通带边衰减DB值和阻带边衰减DB值% Fs=2000;%采样率%wp=2*pi*f1/Fs;ws=2*pi*f3/Fs;% 设计切比雪夫滤波器;n,wn=cheb1ord(wp/pi,ws/pi,rp,rs);bz1,az1=cheby1(n,rp,wp/pi);%查看设计滤波器的曲线h,w=freqz(bz1,az1,256,Fs);h=20*log10(abs(h);figure;plot(w,h);title('所设计滤波器的通带曲线');grid on;y=filter(bz1,a

22、z1,x);%对序列x滤波后得到的序列yend2微分处理:该阶段是对图形变换处理,其目的主要在于准确求出不规则电脉冲随幅度变化的速率变化,通过常用的数学函数的微分变换,以及实现这种变换所用的微分器和实验装置,在双踪示波器屏幕上能够显示出速率变化图形。这种图形,在医学上对研究肌肉和神经电脉冲是非常有用的。设计代码如下:function diff2 = diff2( y1 )y2=low_pass(y1,100,500,0.1,30,4000);y3=diff(y2);diff2=diff(y3);figure(3);plot(diff2);end3.设定阀值:在进行了一次微分后形成的脉搏波图形中

23、有许多高低不齐的弧线,为了便于计算脉搏心跳数,需要设定一个阀值使成为一个纯净的倒三角,倒三角一个周期不存在唯一点能用>0或<0,到了设定阀值就需要调整。计算机通过识别倒三角的个数最终确定脉搏波心跳次数。设计代码如下:for i=1:899;x2(i)=0; else if (x2(i)<0) x2(i)=x2(i); end endend;4.图形输出:在Matlab中对脉搏波图形输出语句有plot()和figure(),这两个语句是成对出现的,将这两个语句放在指定的位置就可以显示相应的图形。设计代码如下:figure(1);plot(x2);5.脉搏波心跳计数:该过程是对处

24、理后的图形进行计算峰值个数,通过两次微分之后输出的图形如图4.1所示,系统会根据图形来作出判断,当遇到有0变为1的时候系统会调用计数器count_pulse,并且count_pulse值加一,在这之前需要设置一个范围来去掉后期振荡。设计代码如下:%count0=0;%数0计数count_pulse=0;for i=1:898;%去掉后期振荡 if x3(i)=0 && x3(i+1)<0; count_pulse=count_pulse+1; end end result=count_pulse; % 显示结果 两次微分图第5章 设计结果与分析脉搏波心率测量算法设计目的脉

25、搏波心率测量算法设计是为了方便对人体心率的计算,是一种智能化的将人体心跳直观的显示出来,在医学方面提高了对心跳数据的处理,是可靠性很高的一种设计方发。它是在医学方面很重要和复杂的工作,而对测量设计可靠性保证具有极其重要的意义。目前的条件下,脉搏波心率测量算法设计在未来相当长的一段时间内仍然是在医学上很实用的方法。不足的设计会隐含着太多的错误,过度的设计则浪费人力物力。因此再设计算法的时候只是对脉搏图形化并且能够显示心跳个数。脉搏波心率测量算法设计结果根据第四章的内容可以将每个过程合并在一起,这样就形成了对脉搏波心率测量的算法了,并将代码放在test.m中,设计代码如下:function res

26、ult=test(x)%有返回值 返回心跳次数x1=low_pass(x,100,500,0.1,30,4000); %脉搏波低通处理x2=diff(x1); %一次微分x2=x2(100:999);%去掉前期的振荡figure(1);plot(x2);for i=1:899;x2(i)=0; else if (x2(i)<0) x2(i)=x2(i); end endend;x3=diff(x2); %二次微分 使=0 <0后 的点成为 标定点 figure(2);plot(x3);%count0=0;%数0计数count_pulse=0;for i=1:898;%去掉后期振荡

27、if x3(i)=0 && x3(i+1)<0; count_pulse=count_pulse+1; end end result=count_pulse; % 显示结果运行结果:>>plot(x)>>test(x)ans= 6以上代码就是计算心率的代码,在执行代码之前还需要将原始脉搏波数据输入到MATLAB中,并且设置变量为x,该代码对所有输入的脉搏波数据都可以进行计算数。然后在MATLAB中输入plot(x)函数就可以输出脉搏波数据的原始图形,如图5.1所示: 脉搏波数据的原始图形如果要计算脉搏波心跳次数则需要输入函数test(x)来显示出最

28、终的结果,其中还会输出两个类似图5.1的图形,两个图形所表示的含义是第一次微分和第二次微分后图形。第一次微分的图形如图5.2所示,它是经过脉搏低通处理后,然后进行一次微分,通过这个图可以看出它原始图相比较更能体现出脉搏的形状。第二次微分的图形如图5.3所示,它是在第一次微分图的基础上在此进行一次微分,发现改图与第一次微分后的图形峰值个数不相同,说明有错误,因此需要对程序进行改变。 第一次微分图 第二次微分图的分析为了达到题目要求,要对test.m进行改变。主要改变了在第一次微分后设置的阀值,并且在进行第二次微分之前加了一个图形输出语句figure(10)、plot(x2),这样就可以观察修改完

29、阀值后的倒三角图形,如图5.4所示。function result=test(x)%有返回值 返回心跳次数x1=low_pass(x,100,500,0.1,30,4000); %脉搏波低通处理x2=diff(x1); %一次微分x2=x2(100:999);%去掉前期的振荡figure(1);%输出一次微分图形plot(x2);for i=1:899;x2(i)=0; else if (x2(i)>0.7) end endend;figure(10);%输出设完阀值后的图形plot(x2);x3=diff(x2); %二次微分 使=0 <0后 的点成为 标定点 figure(2)

30、;%输出二次微分后的图形plot(x3);%count0=0;%数0计数count_pulse=0;for i=1:898;%去掉后期振荡 if x3(i)=0 && x3(i+1)>0; count_pulse=count_pulse+1; end end result=count_pulse; % 显示结果运行结果:>>test(x)ans = 8 修改阀值后的倒三角 修改后的二次微分图,从图中可以看出它与原始图的峰值个数相同,并且符合设计要求。将原始数据以图形的方式显示,在通过两次微分后得到最终的图形图5.5。而计算心率通过count_pulse来计数,然后对

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论