毕
业论文
论文题目(中文)数字信号处理算法研究--基于人体脉搏信号
论文题目(外文)Research on Digital Signal Processing Algorithm-- based
数字信号处理算法研究
--基于人体脉搏信号
中文摘要
脉搏信号是一种较为常见的生物医学信号, 是人体重要的动力学信号之一, 脉搏信号在相当程度上可以反映人体心血管的生理状态信息, 它能反映人体心脏器官以及血液循环系统的生理情况变更, 在临床健康观察和疾病诊断中位置非常的重要。因此脉搏信号的处理和分析在医学界受到了广泛的关注和重视。随着电子技术与计算机技术的快速发展, 将人体脉搏信号转化为电信号进行处理与分析, 实现智能化的脉搏检测与分析技术, 已是生物医学工程范畴的发展目标。
具体研究工作为:
(1) 通过采用一款pulsesensor 基于光电反射式模拟传感器用于测量脉
搏、心率来检测人体模拟脉搏信号。
(2) 再通过Arduino 等单片机将模拟脉搏信号转换为数字信号通过USB
上传到电脑上。
(3) 最后通过matlab 对其进行滤波处理消除噪声干扰,得到正确脉搏信
号。
(4) 处理后发现了脉搏信号可以反映人体的生理特性。
关键词:人体脉搏信号 数字信号处理 滤波器
本科生毕业论文数字信号处理算法研究--基于人体脉搏信号
Research on Digital Signal Processing Algorithm
-- based on human pulse signal
Abstract
Pulse signal is a common biomedical signal, is one of the important dynamic signals of the human body, the pulse signal to a certain extent, reflects the human cardiovascular physiological status information, it can reflect the human heart organs and blood circulation system physiological changes, It is very important in clinical health observation and disease diagnosis. Pulse signal processing and analysis in the medical world has been widely concerned and attention. With the development of electronic technology and computer technology, the human pulse signal into electrical signals for detection and analysis, to achieve intelligent pulse detection and analysis technology, biomedical engineering is the direction of development.Specific research work:
(1) to detect the pulse signal of human body by measuring the pulse and heart rate by using a pulsesensor based analog sensor.
(2) and then through the Arduino microcontroller analog pulse signal into digital signal through the USB upload to the computer.
(3) Finally, through matlab to filter it to eliminate noise interference, get the correct pulse signal.
(4) after treatment found that the pulse signal can reflect the physiological characteristics of the human body.
Keywords: human pulse signal, digital signal processing, filter
3
目录
中文摘要 ....................................................................................................................... 2
ABSTRACT . ................................................................................................................. 3
第一章 本文研究目的 .............................................................................................. 5
第二章 滤波器的设计 ................................................................................................. 6
2.1 噪声类型................................................................................................................. 6
2.1.1
2.1.2
2.1.3 基线漂移、人体呼吸等低频干扰,频率小于1Hz ; .................................... 6 工频干扰,是固定频率的干扰,频率为50Hz (可选); ............................ 6 其他一些干扰信号,主要是高频干扰。 ....................................................... 6
2.2 滤波器的性能比较 ............................................................................................... 6
2.3 滤波器的设计......................................................................................................... 7
第三章 信号分析 ......................................................................................................... 9
3.1 信号预处理............................................................................................................. 9
3.2 脉搏信号的时域特征提取................................................................................... 14
3.2.1 引言 . ................................................................................ 错误!未定义书签。
3.2.2 传统的脉搏波特征提取方法 . ........................................................................ 15
3.2.3 极值法提取脉搏时域信号 . ............................................................................ 16
3.2.4 计算脉搏周期 . .................................................................................................... 18
3.2.5 潮波和重搏波的提取 . ........................................................................................ 20
3.3 滤波前后频谱图对比........................................................................................... 20
3.4 脉搏信号频域特征提取....................................................................................... 22
第四章 结论 ............................................................................... 错误!未定义书签。
第五章 谢辞 ............................................................................... 错误!未定义书签。
第六章 参考文献 ....................................................................................................... 24
第七章 注释 ............................................................................................................... 25
第八章 附录 ............................................................................................................... 26
8.1 脉搏信号传感器简介 ......................................................................................... 26
8.2 传感器参数说明 .................................................................................................. 26
8.3 传感器原理说明 .................................................................................................. 27
8.4 A RDUINO 单片机介绍 ............................................................................................. 28
本科生毕业论文数字信号处理算法研究--基于人体脉搏信号
第一章 本文研究目的
生理信号能够很好的反映出人体各子系统的生理状态和病理改变, 广泛地应用于很多种临床病症的检测和诊断之中。通过传感器采集脉搏信号, 采用数字信号处理的一些方法, 可以分析出人体生理特征。本文主要讨论如何提取出脉搏信号以及对脉搏信号的初步分析。
自从1775年以来, 一位来自瑞士的数学家尤拉, 他初次定量的从流体力学的角度钻研过人体脉搏信号的传播规律。近年来一些国外的研究人员对人体脉搏信号和中医诊脉理论的研究也发生了很深的兴趣, 他们是为了开展无创伤的诊疗技术和减少医疗资费。这说明了研究人体脉搏信号已经成为医疗方向的前沿课题之一。
脉搏波传播的现代分析是从20世纪50年代开始的, 之后一些国内外研究学者在动脉管段中建立了脉搏波的线性化模型, 并发展了弹性腔模型模型。在此基础上讨论了动脉脉搏流的传播规律。
国外学者侧重于研究模型而国内学者则更倾向于信号的检测与分析。由于中医的诊脉原理, 自20世纪70年代以,许多的中国科学研究人员将脉搏信号的各种特征信息与诊疗各种疾病建立起一些联系, 其中许多是将脉搏信号的波速与心血管生理状况相结合去研究。但是脉搏信号包含大量的信息, 包括时域方面的信息和频域方面信息, 单一的波速并不能反映人体各方面的生理问题。于是就又有很多学者转向对脉搏信号进行波形方面的分析, 并取得了很大的成果。
国内一些学者从80年代以来, 致力于对脉搏信号在频域方面进行分析, 对脉搏信号做快速傅里叶变换, 然后可以把脉搏信号频谱图画出来,从而提取人体生理病理的信息, 初步取得了有意义的结果。
从前的脉搏诊断系统的软件开发大部分是使用一些高级语言(如c++等)来实现的,需要很多专业知识以及编程经验的支撑,开发周期比较长,难度比较大。 于是想到采用Matlab 作为数学工具,可以把采集到的信号直接进行处理,获得到脉博信号的参数,该软件的功能和工具箱很丰富,可处理各种数字信号,解决实际工程问题,实现起来简单高效。本文通过Matlab 编程实现对采集到的脉搏数据信号直接处理, 可快速、准确地获得脉搏信号的特征。
5
第二章 滤波器的设计
2.1 噪声类型
人体的脉搏信号是一种很微弱的信号,且具有较低的信噪比,常人的脉博信号的频率范围是在0-20Hz 之间,且大约99%的能量分布在0-10Hz 之间,在检测和采集脉搏信号时,由于仪器、人体活动等方面存在影响,所采集到的信号中通常包括干扰信号和脉搏信号,其中最主要的干扰信号有:
(1)基线漂移、人体呼吸等低频干扰,频率小于1Hz ;
(2)工频干扰,是固定频率的干扰,频率为50Hz (可选);
(3)其他一些高频干扰信号。
2.2滤波器的性能比较
数字滤波器有两种,一种是无限冲激响应数字滤波器(IIR ),另一种是有限冲激响应数字滤波器(FIR )。
IIR 数字滤波器虽然能够用很低的阶数得到较高的选择性,而且幅频特性也比较好,但是相位曲线却不是严格的线性。相比IIR ,FIR 数字滤波器却能够得到相对严格的线性相位,但是如果想要取得很高的选择性,FIR 却只能用较高的阶数;要实现同样的滤波器性能指标,FIR 数字滤波器所需要的阶数能够比IIR 数字滤波器高5-10倍,这样看来成本就会非常的高,而且信号的延时也很大。综合以上的分析我们进而选用IIR 数字滤波器。
滤波器类型主要有Chebysheve I型滤波器、Chebysheve Ⅱ型滤波器、椭圆滤波器、Butterworth 滤波器,他们均能够实现低通、高通、带通、带阻滤波器的设计,但是特点不同,需要根据性能方面不同的需求来决定使用哪种类型滤波器。
其中Chebysheve I型滤波器通带内是等波纹的,阻带内是单调的;Chebysheve Ⅱ型滤波器通带是内单调的,然而阻带内却是等波纹的;Butterworth
本科生毕业论文数字信号处理算法研究--基于人体脉搏信号 滤波器在通带内的幅频响应曲线最为平滑,然而截止频率的坡度变小了;椭圆滤波器虽然在阻带和通带内均为等波纹的,但下降的坡度很大,并且还能以更低的阶数来达到和其他两类滤波器相同的性能指标。
设计滤波器时要根据实际情况去考虑相位失真和截止特性的要求。截止特性越好,相位失真就越严重,不能同时满足以上两种要求。
2.3
设计滤波器
Matlab 的信号工具箱为我们提供了可以直接设计IIR 数字滤波器的函数,我们只需调用这些函数就能够非常便捷地设计出满足我们需要的数字滤波器,常用数字滤波器的函数如下:
(1)Butterworth 数字滤波器设计:
调用格式:
[N,Wn] =buttord(Wp, Ws, Rp, Rs);
[b,a]=butter(N,Wn,’ftype ’) ;
参数:
Wp 为通带截止频率,Ws 为阻带截止频率,Rp 为通带内最大衰减,Rs 为阻带内最小衰减,通过以上性能指标能够计算出Butterworth 滤波器所需的阶数N 和截止频率Wn 。
然后通过阶数N 和截止频率Wn 又能够计算Butterworth 滤波器的分子和分母系数的系数,其中b 为分子系数的矩阵,a 为分母系数的矩阵,可以通过设置ftype 来设置滤波器的类型,默认不写为低通,high 为高通,bandpass 为带通,stop 为带阻。
(2)ChebyshevⅠ型数字滤波器设计:
调用格式:
[N,Wn]=cheb1ord(Wp,Ws,Rp,Rs);
[b,a] = cheby1(N,Rp,Wn,'ftype') ;
(3)ChebyshevⅡ数字滤波器设计:
调用格式:
7
[N,Wn]=cheb2ord(Wp,Ws,Rp,Rs);
[b,a] = cheby2(N,Rp,Wn,'ftype') ;
(4)椭圆滤波器设计:
[N,Wn]=ellipord(Wp,Ws,Rp,Rs);
[b,a] =ellip(N,Rp,Rs,Wp);
在MatLab 的帮助文档总又以上几种滤波器的具体使用方法,必要时可以去查阅。
(5)零相位数字滤波
调用格式:
y = filtfilt(b,a,x);
具体受用方式为y = filtfilt(b,a,x),这样就可以把输入信号x 做前向和反向的处理,就是零相位的数字滤波。b 、a 分别为滤波器传递函数的分子和分母系数矩阵。
本实验中采集脉搏信号的采样频率为1000Hz ,可以采用以下几种滤波器:
(1)为了消除基线漂移、人体呼吸等低频干扰我们需要选用Chebysheve Ⅱ型高通滤波器,但是IIR 数字滤波器本身会存在相位失真,因设计了零相位Chebysheve Ⅱ型高通滤波器进行去噪。Chebysheve Ⅱ高通滤波器的参数Wp=1.4/(fs/2),Ws=0.8/(fs/2),Rp=0.8,Rs=20。
(2)50Hz 的固定工作频率在频域中只是一个点,因而就需要带阻滤波器应该具有好的截止特性,前面说过Chebysheve Ⅱ型滤波器有良好的截止特性,并且在其通带内也是单调的,采用零相位的Chebysheve Ⅱ型滤波器滤除工作频率的干扰。跟前一个方法相同采用零相位滤波器去噪。Chebysheve Ⅱ带阻滤波器的参数为:Wp=[48,52]/(fs/2),Ws=[49,51]/(fs/2),Rp=1,Rs=40。
特别说明,本文采用的信号采集系统基本上不存在这个固定50Hz 的工作频率干扰,因此可以省略Chebysheve Ⅱ带阻滤波器。
(3)由于Butterworth 滤波器通带内幅频特性比较平滑,信号经过后衰也就会相对的减小,所以选择Butterworth 低通滤波器用于滤除其他一些高频干扰信号。还是采用零相位滤波器进行去噪。Butterworth 低通滤波器的参数为:
本科生毕业论文数字信号处理算法研究--基于人体脉搏信号 Wp=55/(fs/2),Ws=80/(fs/2),Rp=2,Rs=20。
第三章 信号分析
3.1 信号去噪处理
如图3.1是通过自己设计的采集系统采集到的一段脉搏信号:
图3.1采集到的脉搏原始信号
明显能看出该信号具有一定的噪声干扰,所以想要对这段脉搏信号做出比较准确的分析,就必须对其进行必要的滤波处理。
这里所设计的Chebysheve Ⅱ型高通滤波器和Chebysheve Ⅱ型带阻滤波器还有Butterworth 型低通滤波器幅频响应曲线, 如图3.2和3.3和3.4:
9
图3.2Chebysheve Ⅱ型高通滤波器幅频响应
图3.3Chebysheve II型带阻滤波器幅频响应
本科生毕业论文数字信号处理算法研究--基于人体脉搏信号
图3.4Butterworth 型低通滤波器幅频响应
将图3.1中的含有噪声的脉搏信号分别通过所设计的ChebysheveII 型高通滤波器和Butterworth 低通滤波器滤后,借以滤除噪声干扰信号。经过滤波后的脉搏信号如图3.5。
图3.5去除噪声后的脉搏信号
从时域图3.5中也能够比较明显的看出信号中所包含的基线漂移等低频干扰信号已经基本去除,接下来就可以对其进行进一步的时域分析。
设计滤波器及去噪程序代码:
11
%ChebysheveII高通型滤波器设计;
fs = 1000;
wp=1.4/(fs/2);%通带截止频率;
ws=0.8/(fs/2);%阻带截止频率;
rp=0.8;%通带波纹系数;
rs=20;%阻带波纹系数;
[N,wc]=cheb2ord(wp,ws,rp,rs);
[num,den]=cheby2(N,rp,wc,'s');
[H,W]=freqz(num,den);
plot(fs*W/(2*pi),abs(H));
xlabel('频率');
ylabel('幅度');
title('ChebysheveII型高通滤波器幅频响应');
x1=filtfilt(num,den,x);%通过零相位滤波器滤除干扰信号;
grid on;
figure;
plot(x1);
title('ChebysheveII型高通滤波器滤波后的脉搏信号');
xlabel('时间/ms');
ylabel('幅度');
grid on;
%ChebysheveII型带阻滤波器设计;
fs = 1000;
wp2=[48,52]/(fs/2);%通带截止频率;
ws2=[49,51]/(fs/2);%阻带截止频率;
rp2=1;%通带波纹系数;
rs2=40;%阻带波纹系数;
本科生毕业论文数字信号处理算法研究--基于人体脉搏信号
[N2,wc2]=cheb2ord(wp2,ws2,rp2,rs2);
[num2,den2]=cheby2(N2,rp2,wc2,'s');
[H2,W2]=freqz(num2,den2);
plot(fs*W2/(2*pi),abs(H2));
xlabel('频率');
ylabel('幅度');
title('ChebysheveII型带阻滤波器幅频响应');
x2=filtfilt(num2,den2,x1);%通过零相位滤波器滤除干扰信号;
grid on;
figure;
plot(x2);
title('ChebysheveII型带阻滤波器滤波后的脉搏信号');
xlabel('时间/ms');
ylabel('幅度');
grid on;
%Butterworth低通滤波器设计;
fs=1000;%采样频率 1000
wp3=55/(fs/2);%设置通带截止频率;
ws3=80/(fs/2);%设置阻带截止频率;
rp3=2;%通带波纹系数;
rs3=20;%阻带波纹系数;
[N3,wc3]=buttord(wp3,ws3,rp3,rs3);
[num3,den3]=butter(N3,wc3);
[H3,W3]=freqz(num3,den3);
figure;
plot(fs*W3/(2*pi),abs(H3));
title('Butterworth低通滤波器幅频响应');
13
xlabel('频率');
ylabel('幅度');
grid on;
x3=filtfilt(num3,den3,x2);%通过零相位滤波器滤除干扰信号;
figure;
plot(x3);
title('Butterworth低通滤波器滤波后的脉搏信号');
xlabel('时间/ms');
ylabel('幅度');
grid on;
3.2 脉搏信号时域特征
3.2.1 脉搏信号的特征点
我们可以通过对采集到的脉搏信号进行深入的波形分析, 这样就需了解标准的脉搏信号所表现出来的出的标准的波形, 如图3.7就是标准的脉搏信号波形, 在图3.7中A 点和G 点是主动脉的开放点, 我们可以理解为脉搏波的一个起点和一个终点,A 点到G 点的时间是个脉搏的周期T, 主波BB ′, 潮波DD ′, 重搏波FF ′。AB 段为脉搏波的升支(上升沿), BG 段为脉搏波的降支(下降沿)。这些信息全部都可以与心血管的生理信息相关联起来,因此这些生理信息也是能够从脉搏波中相对应的提取出来, 还有就是在脉搏波中会又一些生理意义很明确的特征点,比如主波、潮波、重搏波等, 我们的目标就是要准确的提取出这些特征点, 这些特征点对医学研究也是具有相当重要的价值。
本科生毕业论文数字信号处理算法研究--基于人体脉搏信号
图3.7 标准脉搏信号波形图
3.2.2 传统的脉搏波特征提取方法
通过我的调查发现,至今为止,研究学者们提出了一些提取方法,基本上都可以准确的提取出脉搏信号的时域特征。其中包括两种比较经典的方法,一是阈值法,二是自适应的算术平均法。
(1) 阈值法
这里我们假设脉搏波信号为x(n) , 然后设定一个阈值,经过我的调查发现大部分学者认为虽然每个脉搏波的波峰会有所波动,但是它们总是波动于一个固定的范围内,基本上不会超过最大的波形高度的0.3倍,我们取实际高度的0.4倍为参考阈值。
处理时要把x(n)中高于我们设定的阈值的点记录下来, 相反的低于该阈值的点记为0, 经过这样处理后就能够得出一系列的点的结果为记录为y(n)(长度与x(n)一致)。
然后对y(n)用差分法,目的是区分出前面所说的脉搏信号的上升支和下降支, 再从相邻的上升支中找到最大值点和最小值点,从而也就能确定出主波峰(最大值点)和始射点(最小值点)。
说明:从前人的实验结果来看阈值法求出的波形结果会出现很大的误差,
他
15
们分析出原因在于一些高血压患者的脉搏波的潮波波峰很高,很可能会超过它的主波波峰, 也就是图3.7中D 点或者F 点会高于B 点,再加上如果脉搏信号上都会有干扰的存在, 就会与预期目的产生很大的偏差,达不到我们想要的准确的特征。
(2) 自适应的算术平均算法
还是假设我们的脉搏信号的采集结果是x(n),然后在x(n)中我们取出连续的脉搏信号的N 个采样值点并求出这些点的算术平均值, 把这个平均值当作该N 个采样点的取值代表。同样的用差分法区分出脉搏波的上升支与下降支, 进而就能够找出相邻的上升支的最大值点和最小值点 ,从而能够找到主波峰与始射点。
根据前人的实验结果能够得出脉搏信号通过算术平均计算以后虽然平滑度有所提升, 误差相对阈值法也有明显的改善, 但是N 的值不太好确定, 如果N 取太大, 信号的平滑度较好, 但灵敏度会降低;相反的如果N 取太小, 虽然提高了灵敏度, 但平滑度又下降了, 就会增大误差。
如果我们想要得出较为理想的N 值, 那么就必须对采集到脉搏信号做很多了的实验和对比, 可以看出这样就不具有明显的有效性。
3.2.3 极值法提取脉搏时域信号
(1) 极值法的基本思想
根据上面的两种脉搏波特征提取算法的优缺点, 容易看出如果要提取出脉搏波的特征信息, 其实就是求出脉搏信号的极值点。
因此,极值法其实就是一次性把所有的脉搏信号的极大值点全部都提取出来, 然后再在这些极大值点中依次分离出脉搏信号的时域特征点。
(2) 算法流程
具体算法流程为:
步骤1把采集到的脉搏信号假设为x(n) ,找出其所有的极大值点一般一个脉搏信号周期内存在4个极大值点;
本科生毕业论文数字信号处理算法研究--基于人体脉搏信号 步骤2去除极大值中的噪声点, 从而即可在所有的极大值点中找出标准脉搏波上的极大值, 这个点就是主波峰;
步骤3两个主波峰之间的差值就是脉搏信号的周期T (根据该周期即可算出脉率P=60/T);
步骤4把我们第一次在所有极大值点中选出的极大值点去掉, 即去掉所有的主波峰,再从剩下的极大值点中取出最大值点和次极大值点, 也就是潮波和重搏波了。
脉搏信号的极大值点的提取流程如图3.8所示。
假设脉搏信号为一数组x(i),i为数组的下标, 范围是从1到N,N 为x(i)的长度。
17
图3.8 脉搏极大值点的提取流程
3.2.4计算脉搏周期
假设脉搏信号的极大值点为数组x(i),遍历整个x(i)找出脉搏信号的峰值。 流程如图3.9
所示。
本科生毕业论文数字信号处理算法研究--基于人体脉搏信号
图3.9计算脉搏周期流程
这里我们设定的脉搏信号的采样频率为1000Hz, 采集的时间为10000ms, 人体的脉搏跳动平均在30~200次/分钟, 那么也就是说10000ms 内存在5~30个脉搏完整周期。
我们都知道每个脉搏周期必有一个峰值, 进而我们可以求出脉搏峰值数,
200 * 10 / 60 = 33,
所以找到33个脉搏峰值后即可停止脉搏主波峰的寻找。
我们把脉搏主波峰之间相隔的最少采样点个数定义为最小间距D,
也就是相
19
邻的脉搏周期之间的最小采样点的个数。有定义可知D=10*1000/33=300
脉搏峰值高度之间的最小差距定义为最小高距差H ,并把其假定为0.2。 我们可以根据以上两个条件,即主波峰的间距要大于最小间距300,或者相邻的波峰之间的高度差需要小于最小的高距差0.2。
如果不能满足以上的两个条件就可以判断其为噪声点。去掉噪声点后就可以相对准确地提取所需的脉搏信号的特征。
等到脉搏信号的极值点数组x(i)全部遍历完成亦或是找到了最多300个脉搏波的峰值(基本上常人的脉搏信号不可能是300个)。找到了脉搏的峰值点就能够求出脉搏的周期,相邻的峰值之间的采样点个数乘以采样时间。
3.2.5潮波和重搏波的提取
我们在去噪时很有可能会把潮波去掉, 因此余下的最大值的个数也就是潮波个数, 同理重博波个数也好确定, 潮波和重博波的算法流程图与主波的提取流程呢类似, 这里就不再详述。
实际上潮波和重博波是脉搏信号中极大值点把主波峰去除后的最大值点和次大值点。
3.3 滤波前后频谱图对比
将含有噪声的脉搏信号变换到频域中,借以观察滤波前信号所含有的频率成分,如图3.10:
本科生毕业论文数字信号处理算法研究--基于人体脉搏信号
图3.10含有噪声脉搏信号频谱图
图3.11滤除干扰后脉搏信号频谱图
在频域中从频谱图3.10和频谱图3.11中对比可以大致看出,在某一低频段内信号幅度有所下降,而这个恰好是信号中所含的基线漂移和呼吸干扰信号。
代码:
figure;
N=length(x);
plot((-N/2:N/2-1)*fs/N,abs(fftshift(fft(x,N)))*2/N) %绘制信号的频谱,横轴对应实际频率
xlabel('频率
(Hz)');
21
ylabel('幅度');
title('含有噪声脉搏信号频谱图');
grid on;
3.4 脉搏信号频域特征
功率谱能够反应出随机信号的各频率成分功率能量分布,因此频域分析主要就是对脉搏信号进行功率谱分析。
Welch 法的基本原理:当我们把数据进行分段时,需要使分出的每一段有部分的重叠,然后用一个相对合适的窗函数把每一段数据做一下平滑处理,最后把各段谱求平均值。
Welch 法可以有效减小方差和偏差,它采用加窗交叠求出功率谱。一般情况下都能接近一致估计的要求,因此采用Welch 法是比较可靠的方法。
对信号加以不同的窗函数,功率谱的估计的质量也是不同的。Hanning 窗的主瓣相比于矩形窗包括更多的能量,因而它可以使功率谱的主瓣宽度相对较窄,分辨率也就会较高。因此我们选择Hanning 窗。
在Matlab 中用函数pwelch 能够实现使用Welch 法对信号进行功率谱的估计。 其调用格式为:
[Pxx,F] = pwelch(x,window,noverlap,nfft,fs)
参数说明:
x 为是我们输入的有限长的信号(这里是脉搏信号);
window 用于指定采用的窗函数(boxcar, hamming, blackman);
noverlap 为重叠点数;
nfft 为设定FFT 算法的长度;
fs 为采样频率;
Pxx 为输出的功率谱估计值;
F 为为得到的频率点;
功率谱估计如图3.12
本科生毕业论文数字信号处理算法研究--基于人体脉搏信号
图3.12 Welch法海明窗功率谱估计
功率谱估计程序代码:
s1=x3;
s2=s1-mean(s1); %去基频直流分量;
Nfft=512; %设定FFT 算法的长度;
w=hanning(Nfft); %采用hanning 窗;
fs=1000; %采样频率;
noverlap=256; %重叠点数
[p,f]=pwelch(s2,w,noverlap,Nfft,fs);
Pxx=10*log10(p);%用分贝表示;
plot(f,Pxx);
xlabel('频率(Hz)');
ylabel('功率谱(dB)');
title('Welch法海明窗功率谱估计');
grid on;
[z2,f2]=max(Pxx);%求功率谱最大值时, 对应频率最大值;
23
第六章 参考文献
《脉搏波信号时域特征提取与算法的研究》
《脉搏波时、频域特征提取与识别技术研究》
《数字信号处理教程(第四版)》
《Pulse Sensor中文使用说明书V4.4》
《ArduBlock 零基础编程套件》
本科生毕业论文数字信号处理算法研究--基于人体脉搏信号
第七章 注释
脉搏(英语:Pulse )为体表可触摸到的动脉搏动。人体循环系统由心脏、血管、血液所组成,负责人体氧气、二氧化碳、养分及废物的运送。血液经由心脏的左心室收缩而挤压流入主动脉,随即传递到全身动脉。动脉为富有弹性的结缔组织与肌肉所形成管路。当大量血液进入动脉将使动脉压力变大而使管径扩张,在体表较浅处动脉即可感受到此扩张,即所谓的脉搏。
数字信号处理,简称DSP ,是面向电子信息学科的专业基础课,它的基本概念、基本分析方法已经渗透到了信息与通信工程,电路与系统,集成电路工程,生物医学工程,物理电子学,导航、制导与控制,电磁场与微波技术,水声工程,电气工程,动力工程,航空工程,环境工程等领域。
25
第八章 附录
8.1脉搏信号传感器简介
PulseSensor 是一种用于脉搏心率测量的光电反射式模拟传感器。将其佩戴于手指、耳垂等处,通过导线连接可将采集到的模拟信号传输给Arduino 、51等单片机转换为数字信号,本文使用的是Andrino 。通过Andrino 可以将转换后的数字信号以串口方式保存记录,从而通过MATLAB 软件即可对其进行适当的处理。PulseSensor 是一款开源硬件,目前国外官网上已有其对应的Andrino 程序和上位机Processing 程序,其适用于心率方面的科学研究和教学演示,也非常适合于二次开发。但是本文只是用其来采集脉搏信号。
传感器实物图如下:
正面(手指接触面) 反面(非手指接触面)
8.2传感器参数说明
电路板直径:16mm
电路板厚度:
1.2mm
本科生毕业论文数字信号处理算法研究--基于人体脉搏信号
LED 峰值波长:515nm
供电电压:3.3-5V
检测信号类型:光反射信号(PPG )
输出信号类型:模拟信号
信号放大倍数:330倍
输出信号大小:0-VCC
电流大小:0-4mA (5V 以下)
8.3传感器原理说明
传统的脉搏测量方法有主要有三种:一是从心电信号中提取;二是通过测量血压时压力传感器检测到的波动来测量脉率;三是光电容积法。前两种方法提取信号都会限制病人的活动,如果长时间使用会增加病人生理和心理上的不舒适感。而光电容积法脉搏测量作为监护测量中普遍的方法之一,其具有方法简单、佩戴方便、可靠性高等特点。
光电容积法的基本原理是利用人体组织在血管搏动时造成透光率不同来进行脉搏测量的。其使用的传感器由光源和光电变换器两部分组成,通过绑带或夹子固定在病人的手指或耳垂上。光源一般采用对动脉血中氧和血红蛋白有选择性的一定波长(500nm-700nm )的发光二极管。当光束透过人体外周血管,由于动脉搏动充血使其容积变化,然后导致这束光的透光率发生变化,此时由光电转换器接收经人体组织反射的光线,将光线转换为电信号并将其放大和输出。由于脉搏信号是随心脏的搏动而周期性变化的信号,动脉血管的容积也会产生周期性的变化,因此光电变换器的电信号变化周期就是脉搏信号的变化。
根据相关文献和实验结果,能够反映出皮肤浅部微动脉信息所需的光波波长为560nm ,适合用来提取脉搏信号。本传感器采用了峰值波长为515nm 的绿光LED ,型号为AM2520,而光接收器采用了APDS-9008,这是一款环境光感受器,感受峰值波长为565nm ,两者的峰值波长相近,灵敏度较高。此外,由于脉搏信号的频带一般在0.05-200Hz 之间,信号幅度都很小,一般都是毫伏级的水平,容易受到各种的信号干扰。于是在传感器后面使用了低通滤波器和由运放MCP6001构成的放大器,将信号放大了330 倍,同时采用分压电阻设置直流偏置电压为电源
27
电压的1/2,使放大后的信号可以很好地被单片机的AD 转换模块采集到。
整个心率传感器的结构如下图:
特别说明,由于传感器使用的是固定倍数的放大器,而人体生理信号是微弱信号,细微的差异会导致放大后的信号产生巨大的差别。当人体的脉搏信号较强时,放大后的信号有可能达到或超过电源电压,从而出现削顶失真现象,此时只要稍微改变手指与传感器的接触力度,就会使波形恢复正常。
8.4 Arduino单片机介绍
单片机实物图如下:
Arduino 是源自意大利的一个开放源代码的硬件项目平台,该平台包括一块具备简单I/O功能的电路板以及一套程序开发环境软件。Arduino 可以用来开发交互产品,比如它可以读取大量的开关和传感器信号,并且可以控制电灯、电机和其他各式各样的物理设备元件;Arduino 也可以开发出与PC 相连的周边装置,
本科生毕业论文数字信号处理算法研究--基于人体脉搏信号 能在运行时与PC 上的软件进行通信,本文就是采用的串口通信方式对脉搏信号进行采集。
Arduino 有A0-A5 共计6 个模拟接口,这6个接口也可以算作为接口功能复用, 除模拟接口功能以外,这6个接口可作为数字接口使用,编号为D14—D19。
本设计将脉搏信号传感器发出的模拟电压信号转化为数字信号值,然后通过串口方式采集到PC 上,最后通过MATLAB 对其进行处理。
按照以下电路图连接实物图:
图中用R2器替代脉搏信号传感器。
这里使用的是模拟A0 接口。
29
主程序:
void setup()
{
Serial.begin(115200);// 设置波特率
}
void loop()
{
Serial.println(analogRead(A0));//输出串口数值 delayMicroseconds(1000);//延时1ms
}
毕
业论文
论文题目(中文)数字信号处理算法研究--基于人体脉搏信号
论文题目(外文)Research on Digital Signal Processing Algorithm-- based
数字信号处理算法研究
--基于人体脉搏信号
中文摘要
脉搏信号是一种较为常见的生物医学信号, 是人体重要的动力学信号之一, 脉搏信号在相当程度上可以反映人体心血管的生理状态信息, 它能反映人体心脏器官以及血液循环系统的生理情况变更, 在临床健康观察和疾病诊断中位置非常的重要。因此脉搏信号的处理和分析在医学界受到了广泛的关注和重视。随着电子技术与计算机技术的快速发展, 将人体脉搏信号转化为电信号进行处理与分析, 实现智能化的脉搏检测与分析技术, 已是生物医学工程范畴的发展目标。
具体研究工作为:
(1) 通过采用一款pulsesensor 基于光电反射式模拟传感器用于测量脉
搏、心率来检测人体模拟脉搏信号。
(2) 再通过Arduino 等单片机将模拟脉搏信号转换为数字信号通过USB
上传到电脑上。
(3) 最后通过matlab 对其进行滤波处理消除噪声干扰,得到正确脉搏信
号。
(4) 处理后发现了脉搏信号可以反映人体的生理特性。
关键词:人体脉搏信号 数字信号处理 滤波器
本科生毕业论文数字信号处理算法研究--基于人体脉搏信号
Research on Digital Signal Processing Algorithm
-- based on human pulse signal
Abstract
Pulse signal is a common biomedical signal, is one of the important dynamic signals of the human body, the pulse signal to a certain extent, reflects the human cardiovascular physiological status information, it can reflect the human heart organs and blood circulation system physiological changes, It is very important in clinical health observation and disease diagnosis. Pulse signal processing and analysis in the medical world has been widely concerned and attention. With the development of electronic technology and computer technology, the human pulse signal into electrical signals for detection and analysis, to achieve intelligent pulse detection and analysis technology, biomedical engineering is the direction of development.Specific research work:
(1) to detect the pulse signal of human body by measuring the pulse and heart rate by using a pulsesensor based analog sensor.
(2) and then through the Arduino microcontroller analog pulse signal into digital signal through the USB upload to the computer.
(3) Finally, through matlab to filter it to eliminate noise interference, get the correct pulse signal.
(4) after treatment found that the pulse signal can reflect the physiological characteristics of the human body.
Keywords: human pulse signal, digital signal processing, filter
3
目录
中文摘要 ....................................................................................................................... 2
ABSTRACT . ................................................................................................................. 3
第一章 本文研究目的 .............................................................................................. 5
第二章 滤波器的设计 ................................................................................................. 6
2.1 噪声类型................................................................................................................. 6
2.1.1
2.1.2
2.1.3 基线漂移、人体呼吸等低频干扰,频率小于1Hz ; .................................... 6 工频干扰,是固定频率的干扰,频率为50Hz (可选); ............................ 6 其他一些干扰信号,主要是高频干扰。 ....................................................... 6
2.2 滤波器的性能比较 ............................................................................................... 6
2.3 滤波器的设计......................................................................................................... 7
第三章 信号分析 ......................................................................................................... 9
3.1 信号预处理............................................................................................................. 9
3.2 脉搏信号的时域特征提取................................................................................... 14
3.2.1 引言 . ................................................................................ 错误!未定义书签。
3.2.2 传统的脉搏波特征提取方法 . ........................................................................ 15
3.2.3 极值法提取脉搏时域信号 . ............................................................................ 16
3.2.4 计算脉搏周期 . .................................................................................................... 18
3.2.5 潮波和重搏波的提取 . ........................................................................................ 20
3.3 滤波前后频谱图对比........................................................................................... 20
3.4 脉搏信号频域特征提取....................................................................................... 22
第四章 结论 ............................................................................... 错误!未定义书签。
第五章 谢辞 ............................................................................... 错误!未定义书签。
第六章 参考文献 ....................................................................................................... 24
第七章 注释 ............................................................................................................... 25
第八章 附录 ............................................................................................................... 26
8.1 脉搏信号传感器简介 ......................................................................................... 26
8.2 传感器参数说明 .................................................................................................. 26
8.3 传感器原理说明 .................................................................................................. 27
8.4 A RDUINO 单片机介绍 ............................................................................................. 28
本科生毕业论文数字信号处理算法研究--基于人体脉搏信号
第一章 本文研究目的
生理信号能够很好的反映出人体各子系统的生理状态和病理改变, 广泛地应用于很多种临床病症的检测和诊断之中。通过传感器采集脉搏信号, 采用数字信号处理的一些方法, 可以分析出人体生理特征。本文主要讨论如何提取出脉搏信号以及对脉搏信号的初步分析。
自从1775年以来, 一位来自瑞士的数学家尤拉, 他初次定量的从流体力学的角度钻研过人体脉搏信号的传播规律。近年来一些国外的研究人员对人体脉搏信号和中医诊脉理论的研究也发生了很深的兴趣, 他们是为了开展无创伤的诊疗技术和减少医疗资费。这说明了研究人体脉搏信号已经成为医疗方向的前沿课题之一。
脉搏波传播的现代分析是从20世纪50年代开始的, 之后一些国内外研究学者在动脉管段中建立了脉搏波的线性化模型, 并发展了弹性腔模型模型。在此基础上讨论了动脉脉搏流的传播规律。
国外学者侧重于研究模型而国内学者则更倾向于信号的检测与分析。由于中医的诊脉原理, 自20世纪70年代以,许多的中国科学研究人员将脉搏信号的各种特征信息与诊疗各种疾病建立起一些联系, 其中许多是将脉搏信号的波速与心血管生理状况相结合去研究。但是脉搏信号包含大量的信息, 包括时域方面的信息和频域方面信息, 单一的波速并不能反映人体各方面的生理问题。于是就又有很多学者转向对脉搏信号进行波形方面的分析, 并取得了很大的成果。
国内一些学者从80年代以来, 致力于对脉搏信号在频域方面进行分析, 对脉搏信号做快速傅里叶变换, 然后可以把脉搏信号频谱图画出来,从而提取人体生理病理的信息, 初步取得了有意义的结果。
从前的脉搏诊断系统的软件开发大部分是使用一些高级语言(如c++等)来实现的,需要很多专业知识以及编程经验的支撑,开发周期比较长,难度比较大。 于是想到采用Matlab 作为数学工具,可以把采集到的信号直接进行处理,获得到脉博信号的参数,该软件的功能和工具箱很丰富,可处理各种数字信号,解决实际工程问题,实现起来简单高效。本文通过Matlab 编程实现对采集到的脉搏数据信号直接处理, 可快速、准确地获得脉搏信号的特征。
5
第二章 滤波器的设计
2.1 噪声类型
人体的脉搏信号是一种很微弱的信号,且具有较低的信噪比,常人的脉博信号的频率范围是在0-20Hz 之间,且大约99%的能量分布在0-10Hz 之间,在检测和采集脉搏信号时,由于仪器、人体活动等方面存在影响,所采集到的信号中通常包括干扰信号和脉搏信号,其中最主要的干扰信号有:
(1)基线漂移、人体呼吸等低频干扰,频率小于1Hz ;
(2)工频干扰,是固定频率的干扰,频率为50Hz (可选);
(3)其他一些高频干扰信号。
2.2滤波器的性能比较
数字滤波器有两种,一种是无限冲激响应数字滤波器(IIR ),另一种是有限冲激响应数字滤波器(FIR )。
IIR 数字滤波器虽然能够用很低的阶数得到较高的选择性,而且幅频特性也比较好,但是相位曲线却不是严格的线性。相比IIR ,FIR 数字滤波器却能够得到相对严格的线性相位,但是如果想要取得很高的选择性,FIR 却只能用较高的阶数;要实现同样的滤波器性能指标,FIR 数字滤波器所需要的阶数能够比IIR 数字滤波器高5-10倍,这样看来成本就会非常的高,而且信号的延时也很大。综合以上的分析我们进而选用IIR 数字滤波器。
滤波器类型主要有Chebysheve I型滤波器、Chebysheve Ⅱ型滤波器、椭圆滤波器、Butterworth 滤波器,他们均能够实现低通、高通、带通、带阻滤波器的设计,但是特点不同,需要根据性能方面不同的需求来决定使用哪种类型滤波器。
其中Chebysheve I型滤波器通带内是等波纹的,阻带内是单调的;Chebysheve Ⅱ型滤波器通带是内单调的,然而阻带内却是等波纹的;Butterworth
本科生毕业论文数字信号处理算法研究--基于人体脉搏信号 滤波器在通带内的幅频响应曲线最为平滑,然而截止频率的坡度变小了;椭圆滤波器虽然在阻带和通带内均为等波纹的,但下降的坡度很大,并且还能以更低的阶数来达到和其他两类滤波器相同的性能指标。
设计滤波器时要根据实际情况去考虑相位失真和截止特性的要求。截止特性越好,相位失真就越严重,不能同时满足以上两种要求。
2.3
设计滤波器
Matlab 的信号工具箱为我们提供了可以直接设计IIR 数字滤波器的函数,我们只需调用这些函数就能够非常便捷地设计出满足我们需要的数字滤波器,常用数字滤波器的函数如下:
(1)Butterworth 数字滤波器设计:
调用格式:
[N,Wn] =buttord(Wp, Ws, Rp, Rs);
[b,a]=butter(N,Wn,’ftype ’) ;
参数:
Wp 为通带截止频率,Ws 为阻带截止频率,Rp 为通带内最大衰减,Rs 为阻带内最小衰减,通过以上性能指标能够计算出Butterworth 滤波器所需的阶数N 和截止频率Wn 。
然后通过阶数N 和截止频率Wn 又能够计算Butterworth 滤波器的分子和分母系数的系数,其中b 为分子系数的矩阵,a 为分母系数的矩阵,可以通过设置ftype 来设置滤波器的类型,默认不写为低通,high 为高通,bandpass 为带通,stop 为带阻。
(2)ChebyshevⅠ型数字滤波器设计:
调用格式:
[N,Wn]=cheb1ord(Wp,Ws,Rp,Rs);
[b,a] = cheby1(N,Rp,Wn,'ftype') ;
(3)ChebyshevⅡ数字滤波器设计:
调用格式:
7
[N,Wn]=cheb2ord(Wp,Ws,Rp,Rs);
[b,a] = cheby2(N,Rp,Wn,'ftype') ;
(4)椭圆滤波器设计:
[N,Wn]=ellipord(Wp,Ws,Rp,Rs);
[b,a] =ellip(N,Rp,Rs,Wp);
在MatLab 的帮助文档总又以上几种滤波器的具体使用方法,必要时可以去查阅。
(5)零相位数字滤波
调用格式:
y = filtfilt(b,a,x);
具体受用方式为y = filtfilt(b,a,x),这样就可以把输入信号x 做前向和反向的处理,就是零相位的数字滤波。b 、a 分别为滤波器传递函数的分子和分母系数矩阵。
本实验中采集脉搏信号的采样频率为1000Hz ,可以采用以下几种滤波器:
(1)为了消除基线漂移、人体呼吸等低频干扰我们需要选用Chebysheve Ⅱ型高通滤波器,但是IIR 数字滤波器本身会存在相位失真,因设计了零相位Chebysheve Ⅱ型高通滤波器进行去噪。Chebysheve Ⅱ高通滤波器的参数Wp=1.4/(fs/2),Ws=0.8/(fs/2),Rp=0.8,Rs=20。
(2)50Hz 的固定工作频率在频域中只是一个点,因而就需要带阻滤波器应该具有好的截止特性,前面说过Chebysheve Ⅱ型滤波器有良好的截止特性,并且在其通带内也是单调的,采用零相位的Chebysheve Ⅱ型滤波器滤除工作频率的干扰。跟前一个方法相同采用零相位滤波器去噪。Chebysheve Ⅱ带阻滤波器的参数为:Wp=[48,52]/(fs/2),Ws=[49,51]/(fs/2),Rp=1,Rs=40。
特别说明,本文采用的信号采集系统基本上不存在这个固定50Hz 的工作频率干扰,因此可以省略Chebysheve Ⅱ带阻滤波器。
(3)由于Butterworth 滤波器通带内幅频特性比较平滑,信号经过后衰也就会相对的减小,所以选择Butterworth 低通滤波器用于滤除其他一些高频干扰信号。还是采用零相位滤波器进行去噪。Butterworth 低通滤波器的参数为:
本科生毕业论文数字信号处理算法研究--基于人体脉搏信号 Wp=55/(fs/2),Ws=80/(fs/2),Rp=2,Rs=20。
第三章 信号分析
3.1 信号去噪处理
如图3.1是通过自己设计的采集系统采集到的一段脉搏信号:
图3.1采集到的脉搏原始信号
明显能看出该信号具有一定的噪声干扰,所以想要对这段脉搏信号做出比较准确的分析,就必须对其进行必要的滤波处理。
这里所设计的Chebysheve Ⅱ型高通滤波器和Chebysheve Ⅱ型带阻滤波器还有Butterworth 型低通滤波器幅频响应曲线, 如图3.2和3.3和3.4:
9
图3.2Chebysheve Ⅱ型高通滤波器幅频响应
图3.3Chebysheve II型带阻滤波器幅频响应
本科生毕业论文数字信号处理算法研究--基于人体脉搏信号
图3.4Butterworth 型低通滤波器幅频响应
将图3.1中的含有噪声的脉搏信号分别通过所设计的ChebysheveII 型高通滤波器和Butterworth 低通滤波器滤后,借以滤除噪声干扰信号。经过滤波后的脉搏信号如图3.5。
图3.5去除噪声后的脉搏信号
从时域图3.5中也能够比较明显的看出信号中所包含的基线漂移等低频干扰信号已经基本去除,接下来就可以对其进行进一步的时域分析。
设计滤波器及去噪程序代码:
11
%ChebysheveII高通型滤波器设计;
fs = 1000;
wp=1.4/(fs/2);%通带截止频率;
ws=0.8/(fs/2);%阻带截止频率;
rp=0.8;%通带波纹系数;
rs=20;%阻带波纹系数;
[N,wc]=cheb2ord(wp,ws,rp,rs);
[num,den]=cheby2(N,rp,wc,'s');
[H,W]=freqz(num,den);
plot(fs*W/(2*pi),abs(H));
xlabel('频率');
ylabel('幅度');
title('ChebysheveII型高通滤波器幅频响应');
x1=filtfilt(num,den,x);%通过零相位滤波器滤除干扰信号;
grid on;
figure;
plot(x1);
title('ChebysheveII型高通滤波器滤波后的脉搏信号');
xlabel('时间/ms');
ylabel('幅度');
grid on;
%ChebysheveII型带阻滤波器设计;
fs = 1000;
wp2=[48,52]/(fs/2);%通带截止频率;
ws2=[49,51]/(fs/2);%阻带截止频率;
rp2=1;%通带波纹系数;
rs2=40;%阻带波纹系数;
本科生毕业论文数字信号处理算法研究--基于人体脉搏信号
[N2,wc2]=cheb2ord(wp2,ws2,rp2,rs2);
[num2,den2]=cheby2(N2,rp2,wc2,'s');
[H2,W2]=freqz(num2,den2);
plot(fs*W2/(2*pi),abs(H2));
xlabel('频率');
ylabel('幅度');
title('ChebysheveII型带阻滤波器幅频响应');
x2=filtfilt(num2,den2,x1);%通过零相位滤波器滤除干扰信号;
grid on;
figure;
plot(x2);
title('ChebysheveII型带阻滤波器滤波后的脉搏信号');
xlabel('时间/ms');
ylabel('幅度');
grid on;
%Butterworth低通滤波器设计;
fs=1000;%采样频率 1000
wp3=55/(fs/2);%设置通带截止频率;
ws3=80/(fs/2);%设置阻带截止频率;
rp3=2;%通带波纹系数;
rs3=20;%阻带波纹系数;
[N3,wc3]=buttord(wp3,ws3,rp3,rs3);
[num3,den3]=butter(N3,wc3);
[H3,W3]=freqz(num3,den3);
figure;
plot(fs*W3/(2*pi),abs(H3));
title('Butterworth低通滤波器幅频响应');
13
xlabel('频率');
ylabel('幅度');
grid on;
x3=filtfilt(num3,den3,x2);%通过零相位滤波器滤除干扰信号;
figure;
plot(x3);
title('Butterworth低通滤波器滤波后的脉搏信号');
xlabel('时间/ms');
ylabel('幅度');
grid on;
3.2 脉搏信号时域特征
3.2.1 脉搏信号的特征点
我们可以通过对采集到的脉搏信号进行深入的波形分析, 这样就需了解标准的脉搏信号所表现出来的出的标准的波形, 如图3.7就是标准的脉搏信号波形, 在图3.7中A 点和G 点是主动脉的开放点, 我们可以理解为脉搏波的一个起点和一个终点,A 点到G 点的时间是个脉搏的周期T, 主波BB ′, 潮波DD ′, 重搏波FF ′。AB 段为脉搏波的升支(上升沿), BG 段为脉搏波的降支(下降沿)。这些信息全部都可以与心血管的生理信息相关联起来,因此这些生理信息也是能够从脉搏波中相对应的提取出来, 还有就是在脉搏波中会又一些生理意义很明确的特征点,比如主波、潮波、重搏波等, 我们的目标就是要准确的提取出这些特征点, 这些特征点对医学研究也是具有相当重要的价值。
本科生毕业论文数字信号处理算法研究--基于人体脉搏信号
图3.7 标准脉搏信号波形图
3.2.2 传统的脉搏波特征提取方法
通过我的调查发现,至今为止,研究学者们提出了一些提取方法,基本上都可以准确的提取出脉搏信号的时域特征。其中包括两种比较经典的方法,一是阈值法,二是自适应的算术平均法。
(1) 阈值法
这里我们假设脉搏波信号为x(n) , 然后设定一个阈值,经过我的调查发现大部分学者认为虽然每个脉搏波的波峰会有所波动,但是它们总是波动于一个固定的范围内,基本上不会超过最大的波形高度的0.3倍,我们取实际高度的0.4倍为参考阈值。
处理时要把x(n)中高于我们设定的阈值的点记录下来, 相反的低于该阈值的点记为0, 经过这样处理后就能够得出一系列的点的结果为记录为y(n)(长度与x(n)一致)。
然后对y(n)用差分法,目的是区分出前面所说的脉搏信号的上升支和下降支, 再从相邻的上升支中找到最大值点和最小值点,从而也就能确定出主波峰(最大值点)和始射点(最小值点)。
说明:从前人的实验结果来看阈值法求出的波形结果会出现很大的误差,
他
15
们分析出原因在于一些高血压患者的脉搏波的潮波波峰很高,很可能会超过它的主波波峰, 也就是图3.7中D 点或者F 点会高于B 点,再加上如果脉搏信号上都会有干扰的存在, 就会与预期目的产生很大的偏差,达不到我们想要的准确的特征。
(2) 自适应的算术平均算法
还是假设我们的脉搏信号的采集结果是x(n),然后在x(n)中我们取出连续的脉搏信号的N 个采样值点并求出这些点的算术平均值, 把这个平均值当作该N 个采样点的取值代表。同样的用差分法区分出脉搏波的上升支与下降支, 进而就能够找出相邻的上升支的最大值点和最小值点 ,从而能够找到主波峰与始射点。
根据前人的实验结果能够得出脉搏信号通过算术平均计算以后虽然平滑度有所提升, 误差相对阈值法也有明显的改善, 但是N 的值不太好确定, 如果N 取太大, 信号的平滑度较好, 但灵敏度会降低;相反的如果N 取太小, 虽然提高了灵敏度, 但平滑度又下降了, 就会增大误差。
如果我们想要得出较为理想的N 值, 那么就必须对采集到脉搏信号做很多了的实验和对比, 可以看出这样就不具有明显的有效性。
3.2.3 极值法提取脉搏时域信号
(1) 极值法的基本思想
根据上面的两种脉搏波特征提取算法的优缺点, 容易看出如果要提取出脉搏波的特征信息, 其实就是求出脉搏信号的极值点。
因此,极值法其实就是一次性把所有的脉搏信号的极大值点全部都提取出来, 然后再在这些极大值点中依次分离出脉搏信号的时域特征点。
(2) 算法流程
具体算法流程为:
步骤1把采集到的脉搏信号假设为x(n) ,找出其所有的极大值点一般一个脉搏信号周期内存在4个极大值点;
本科生毕业论文数字信号处理算法研究--基于人体脉搏信号 步骤2去除极大值中的噪声点, 从而即可在所有的极大值点中找出标准脉搏波上的极大值, 这个点就是主波峰;
步骤3两个主波峰之间的差值就是脉搏信号的周期T (根据该周期即可算出脉率P=60/T);
步骤4把我们第一次在所有极大值点中选出的极大值点去掉, 即去掉所有的主波峰,再从剩下的极大值点中取出最大值点和次极大值点, 也就是潮波和重搏波了。
脉搏信号的极大值点的提取流程如图3.8所示。
假设脉搏信号为一数组x(i),i为数组的下标, 范围是从1到N,N 为x(i)的长度。
17
图3.8 脉搏极大值点的提取流程
3.2.4计算脉搏周期
假设脉搏信号的极大值点为数组x(i),遍历整个x(i)找出脉搏信号的峰值。 流程如图3.9
所示。
本科生毕业论文数字信号处理算法研究--基于人体脉搏信号
图3.9计算脉搏周期流程
这里我们设定的脉搏信号的采样频率为1000Hz, 采集的时间为10000ms, 人体的脉搏跳动平均在30~200次/分钟, 那么也就是说10000ms 内存在5~30个脉搏完整周期。
我们都知道每个脉搏周期必有一个峰值, 进而我们可以求出脉搏峰值数,
200 * 10 / 60 = 33,
所以找到33个脉搏峰值后即可停止脉搏主波峰的寻找。
我们把脉搏主波峰之间相隔的最少采样点个数定义为最小间距D,
也就是相
19
邻的脉搏周期之间的最小采样点的个数。有定义可知D=10*1000/33=300
脉搏峰值高度之间的最小差距定义为最小高距差H ,并把其假定为0.2。 我们可以根据以上两个条件,即主波峰的间距要大于最小间距300,或者相邻的波峰之间的高度差需要小于最小的高距差0.2。
如果不能满足以上的两个条件就可以判断其为噪声点。去掉噪声点后就可以相对准确地提取所需的脉搏信号的特征。
等到脉搏信号的极值点数组x(i)全部遍历完成亦或是找到了最多300个脉搏波的峰值(基本上常人的脉搏信号不可能是300个)。找到了脉搏的峰值点就能够求出脉搏的周期,相邻的峰值之间的采样点个数乘以采样时间。
3.2.5潮波和重搏波的提取
我们在去噪时很有可能会把潮波去掉, 因此余下的最大值的个数也就是潮波个数, 同理重博波个数也好确定, 潮波和重博波的算法流程图与主波的提取流程呢类似, 这里就不再详述。
实际上潮波和重博波是脉搏信号中极大值点把主波峰去除后的最大值点和次大值点。
3.3 滤波前后频谱图对比
将含有噪声的脉搏信号变换到频域中,借以观察滤波前信号所含有的频率成分,如图3.10:
本科生毕业论文数字信号处理算法研究--基于人体脉搏信号
图3.10含有噪声脉搏信号频谱图
图3.11滤除干扰后脉搏信号频谱图
在频域中从频谱图3.10和频谱图3.11中对比可以大致看出,在某一低频段内信号幅度有所下降,而这个恰好是信号中所含的基线漂移和呼吸干扰信号。
代码:
figure;
N=length(x);
plot((-N/2:N/2-1)*fs/N,abs(fftshift(fft(x,N)))*2/N) %绘制信号的频谱,横轴对应实际频率
xlabel('频率
(Hz)');
21
ylabel('幅度');
title('含有噪声脉搏信号频谱图');
grid on;
3.4 脉搏信号频域特征
功率谱能够反应出随机信号的各频率成分功率能量分布,因此频域分析主要就是对脉搏信号进行功率谱分析。
Welch 法的基本原理:当我们把数据进行分段时,需要使分出的每一段有部分的重叠,然后用一个相对合适的窗函数把每一段数据做一下平滑处理,最后把各段谱求平均值。
Welch 法可以有效减小方差和偏差,它采用加窗交叠求出功率谱。一般情况下都能接近一致估计的要求,因此采用Welch 法是比较可靠的方法。
对信号加以不同的窗函数,功率谱的估计的质量也是不同的。Hanning 窗的主瓣相比于矩形窗包括更多的能量,因而它可以使功率谱的主瓣宽度相对较窄,分辨率也就会较高。因此我们选择Hanning 窗。
在Matlab 中用函数pwelch 能够实现使用Welch 法对信号进行功率谱的估计。 其调用格式为:
[Pxx,F] = pwelch(x,window,noverlap,nfft,fs)
参数说明:
x 为是我们输入的有限长的信号(这里是脉搏信号);
window 用于指定采用的窗函数(boxcar, hamming, blackman);
noverlap 为重叠点数;
nfft 为设定FFT 算法的长度;
fs 为采样频率;
Pxx 为输出的功率谱估计值;
F 为为得到的频率点;
功率谱估计如图3.12
本科生毕业论文数字信号处理算法研究--基于人体脉搏信号
图3.12 Welch法海明窗功率谱估计
功率谱估计程序代码:
s1=x3;
s2=s1-mean(s1); %去基频直流分量;
Nfft=512; %设定FFT 算法的长度;
w=hanning(Nfft); %采用hanning 窗;
fs=1000; %采样频率;
noverlap=256; %重叠点数
[p,f]=pwelch(s2,w,noverlap,Nfft,fs);
Pxx=10*log10(p);%用分贝表示;
plot(f,Pxx);
xlabel('频率(Hz)');
ylabel('功率谱(dB)');
title('Welch法海明窗功率谱估计');
grid on;
[z2,f2]=max(Pxx);%求功率谱最大值时, 对应频率最大值;
23
第六章 参考文献
《脉搏波信号时域特征提取与算法的研究》
《脉搏波时、频域特征提取与识别技术研究》
《数字信号处理教程(第四版)》
《Pulse Sensor中文使用说明书V4.4》
《ArduBlock 零基础编程套件》
本科生毕业论文数字信号处理算法研究--基于人体脉搏信号
第七章 注释
脉搏(英语:Pulse )为体表可触摸到的动脉搏动。人体循环系统由心脏、血管、血液所组成,负责人体氧气、二氧化碳、养分及废物的运送。血液经由心脏的左心室收缩而挤压流入主动脉,随即传递到全身动脉。动脉为富有弹性的结缔组织与肌肉所形成管路。当大量血液进入动脉将使动脉压力变大而使管径扩张,在体表较浅处动脉即可感受到此扩张,即所谓的脉搏。
数字信号处理,简称DSP ,是面向电子信息学科的专业基础课,它的基本概念、基本分析方法已经渗透到了信息与通信工程,电路与系统,集成电路工程,生物医学工程,物理电子学,导航、制导与控制,电磁场与微波技术,水声工程,电气工程,动力工程,航空工程,环境工程等领域。
25
第八章 附录
8.1脉搏信号传感器简介
PulseSensor 是一种用于脉搏心率测量的光电反射式模拟传感器。将其佩戴于手指、耳垂等处,通过导线连接可将采集到的模拟信号传输给Arduino 、51等单片机转换为数字信号,本文使用的是Andrino 。通过Andrino 可以将转换后的数字信号以串口方式保存记录,从而通过MATLAB 软件即可对其进行适当的处理。PulseSensor 是一款开源硬件,目前国外官网上已有其对应的Andrino 程序和上位机Processing 程序,其适用于心率方面的科学研究和教学演示,也非常适合于二次开发。但是本文只是用其来采集脉搏信号。
传感器实物图如下:
正面(手指接触面) 反面(非手指接触面)
8.2传感器参数说明
电路板直径:16mm
电路板厚度:
1.2mm
本科生毕业论文数字信号处理算法研究--基于人体脉搏信号
LED 峰值波长:515nm
供电电压:3.3-5V
检测信号类型:光反射信号(PPG )
输出信号类型:模拟信号
信号放大倍数:330倍
输出信号大小:0-VCC
电流大小:0-4mA (5V 以下)
8.3传感器原理说明
传统的脉搏测量方法有主要有三种:一是从心电信号中提取;二是通过测量血压时压力传感器检测到的波动来测量脉率;三是光电容积法。前两种方法提取信号都会限制病人的活动,如果长时间使用会增加病人生理和心理上的不舒适感。而光电容积法脉搏测量作为监护测量中普遍的方法之一,其具有方法简单、佩戴方便、可靠性高等特点。
光电容积法的基本原理是利用人体组织在血管搏动时造成透光率不同来进行脉搏测量的。其使用的传感器由光源和光电变换器两部分组成,通过绑带或夹子固定在病人的手指或耳垂上。光源一般采用对动脉血中氧和血红蛋白有选择性的一定波长(500nm-700nm )的发光二极管。当光束透过人体外周血管,由于动脉搏动充血使其容积变化,然后导致这束光的透光率发生变化,此时由光电转换器接收经人体组织反射的光线,将光线转换为电信号并将其放大和输出。由于脉搏信号是随心脏的搏动而周期性变化的信号,动脉血管的容积也会产生周期性的变化,因此光电变换器的电信号变化周期就是脉搏信号的变化。
根据相关文献和实验结果,能够反映出皮肤浅部微动脉信息所需的光波波长为560nm ,适合用来提取脉搏信号。本传感器采用了峰值波长为515nm 的绿光LED ,型号为AM2520,而光接收器采用了APDS-9008,这是一款环境光感受器,感受峰值波长为565nm ,两者的峰值波长相近,灵敏度较高。此外,由于脉搏信号的频带一般在0.05-200Hz 之间,信号幅度都很小,一般都是毫伏级的水平,容易受到各种的信号干扰。于是在传感器后面使用了低通滤波器和由运放MCP6001构成的放大器,将信号放大了330 倍,同时采用分压电阻设置直流偏置电压为电源
27
电压的1/2,使放大后的信号可以很好地被单片机的AD 转换模块采集到。
整个心率传感器的结构如下图:
特别说明,由于传感器使用的是固定倍数的放大器,而人体生理信号是微弱信号,细微的差异会导致放大后的信号产生巨大的差别。当人体的脉搏信号较强时,放大后的信号有可能达到或超过电源电压,从而出现削顶失真现象,此时只要稍微改变手指与传感器的接触力度,就会使波形恢复正常。
8.4 Arduino单片机介绍
单片机实物图如下:
Arduino 是源自意大利的一个开放源代码的硬件项目平台,该平台包括一块具备简单I/O功能的电路板以及一套程序开发环境软件。Arduino 可以用来开发交互产品,比如它可以读取大量的开关和传感器信号,并且可以控制电灯、电机和其他各式各样的物理设备元件;Arduino 也可以开发出与PC 相连的周边装置,
本科生毕业论文数字信号处理算法研究--基于人体脉搏信号 能在运行时与PC 上的软件进行通信,本文就是采用的串口通信方式对脉搏信号进行采集。
Arduino 有A0-A5 共计6 个模拟接口,这6个接口也可以算作为接口功能复用, 除模拟接口功能以外,这6个接口可作为数字接口使用,编号为D14—D19。
本设计将脉搏信号传感器发出的模拟电压信号转化为数字信号值,然后通过串口方式采集到PC 上,最后通过MATLAB 对其进行处理。
按照以下电路图连接实物图:
图中用R2器替代脉搏信号传感器。
这里使用的是模拟A0 接口。
29
主程序:
void setup()
{
Serial.begin(115200);// 设置波特率
}
void loop()
{
Serial.println(analogRead(A0));//输出串口数值 delayMicroseconds(1000);//延时1ms
}