脉搏波波形分析及其实现

中医学是中国五千年文化的一块瑰宝。随着电子技术的发展,脉诊仪已民用化。为了探索脉诊仪得到的脉搏波数据所蕴含的信息,与脉诊仪相关的一系列定量数学模型将在文章中建立起来,包括脉搏波物理模型、病灶分析模型、中药与方剂模型。这些模型会被计算机程序一一实现,通过波形可视化,频谱计算,结合数据库技术,自动推荐出适用方剂,最终得到可以和特定脉诊仪配套使用的脉搏波波形分析系统。

脉搏波与脉诊仪

美籍华人王维工教授在2006年出版了《气的乐章》一书,他从养生的角度,稍带学术地探讨了中医的基础理论。他便是能定位病灶的脉诊仪的设计人之一。人的心脏每时每刻都在跳动,这种跳动使血液在血管中波动循环。中医中手太阴肺经的列缺穴附近就能比较强烈的感觉到这种波动,古代医家大多数都是对这里进行脉诊测量的。

脉诊仪就是对脉搏波进行实时测量,并使用计算机对得到的数据进行自动分析,医生可以根据产生的结果对病人进行治疗。三部九候的脉诊方法得到的二十八脉象便是对脉搏波进行离散化分类,现代脉象的测量就是把古人脉诊的过程托管给机器操作。

 

后面我们将对脉诊仪的一整套体系展开调研。一方面通过使用Proteus等电路仿真软件,了解脉诊仪的硬件构造,探索其数据收集的原理;另一方面,为了让得到的数据更容易理解,我们还需要开发相应的软件对它们进行可视化,并能够自动分析得出数据供体的目前病理状态,再对这种状态通过打分的形式推荐一些相应的治疗方剂。

脉诊仪测量原理

压力传感器是一种将压力转换为电信号输出的传感器。电阻性质和物质弹性是压力传感器的理论基础。

电阻计算公式为

R=ρ*l/S

现在有一个理想的长方形片状电阻,长a宽b,电流是沿着长的方向(不妨设为左右方向)流过。当给电阻上下施加压力的时候,由于弹性形变,使得其宽减小了△b,则电阻长度变为ab/(b-Δb),因为△b大于0,所以变化后的电阻长度大于a,因为根据电阻计算公式R∝l,所以变化后的电阻阻值变大了。
由胡克弹性定理,有

F=-kΔb

其中k为电阻材质的弹性系数,则

Δb=-F/k

故电阻弹性形变后阻值为

R=ρ k/(kb+F)

在电阻两端加电压U,由欧姆定理

I=U/R

I=(U(kb+F))/ρk

所以在压力传感原理下的脉诊仪中,需要有一个能够弹性形变的电阻和一个电流计,压力传感器与电流放大电路相连,再加入电流计,我们只要记录电流计上的示数就可以得到脉搏波的波形数据了。

ARM平台与uClinux

嵌入式的技术正突飞猛进,ARM核已经十分普遍。目前小型脉诊仪还都需要与计算机进行交互,将传感器得到的数据送入电脑再进行处理。其实我们可以直接将脉诊的整个过程都集成在脉诊仪里,让它更加自动化,直接测量数据就能得出分析结果,并给出相应建议。
以上的设想,可以通过ARM核方便实现,因为Linux操作系统早已经被移植到了这一平台上。只要了解清楚ARM核的各项功能,配合开放源代码的uClinux,对数据处理和分析已经手到擒来。

脉搏信号模型

1948年,Claude Shannon在《Bell System Technical Journal》上发表了《AMathematical Theory of Communication 》的论文,建立了信息论学科。短短六十多年,它已经广泛应用于各个领域。通信系统以信息论为基础,它是完成信息传输过程的技术系统的总称。

当硬件传感器接收到脉搏跳动的压力后,会通过线路通信,将得到的压力以电压值的形式与计算机进行交互,一串数据样本就存储到计算机里了。对脉诊仪和计算机所组成的通信系统进行分析,不难得到压力值数据就是信号了,信道则主要是仪器和计算机间的连接线。

脉搏波是一种波,那么物理中研究波动的知识同样适用于它。为了让拥有时间和波幅二维空间的脉搏波更具细节性,很自然地联想到数学上的级数。其中,傅立叶级数最令人印象深刻,它将一个函数拆解为许多小谐波的组合,使函数拥有了更多细节。更具广泛性地讨论,傅立叶变换便产生了。由于傅立叶变换要求函数具有一定的收敛性,奥地利数学家Johann Radon在1917年提出了著名的拉东变换,而其最常用的形式则是Haar小波,它延续了傅立叶变换在数据分析上的出色表现,并消除了傅立叶变换原有的限制性。傅立叶级数在经常使用之后,就逐渐演化成更通用的傅立叶变换。为了简化模型,这里采用高效易用的傅立叶变换X(k) = sum(x(n)*exp(-2πikn/N)), n=0,1,..,N-1去处理数据。

医管家多功能辨证仪在实验中使用,全文中所有实测数据都是通过它进行采集的。它每秒采集压力值样本量为1830,就是有∆x=1/1830;该仪器每次共收集N=109800个数据。所以最终有

ξ=k/60

这个公式在实现傅立叶变换时很有用,可以将k看成计算机程序的数组中某元素的序号,而ξ则是频率值。如果想知道一组数据经过离散傅立叶变换后1Hz谐波的权值,只需要查看计算机程序对应数组中第60号元素的值就可以了。
由于人体听力的范围一般在20Hz ~ 20000Hz,正常人通常是听不见自己的器官随着血液波动而发出声音的。实验证实,人体器官随着血液波动,其振动频率在0 ~ 16Hz。所以我们需要对得到的数据进行滤波,即把不需要的信息全部去处掉。由最近得到的公式,不难算出

k∈{[0,960]∩Z}

定义k的最大值为K,则此时K=960。这个范围初步确定了进行离散傅立叶变换所需要的计算量。

病灶分析算法

王维工教授在《气的乐章》最后一章中给出了一个年轻正常人脉搏波在频域下的参考标准值。以此为基础便很容易就能得到一些简单的病灶分析算法。

相关器官 能量振幅比率(%)

心脏 100.000000
肝脏 80.388410
肾脏 53.670830
脾脏 41.030000
肺脏 22.520010
胃脏 17.643980
胆脏 12.482200
膀胱 6.949338
大肠 3.963352
三焦 2.626356
小肠 1.791302
心包 1.183306

这十二组参考标准值可以用一个向量s来表示,令表示人体状态的这组值为m。要得到m,必须从离散傅立叶变换后的数据中取值,如何得到每个谐波的值呢?心谐波的频率当然是脉搏波的频率,因为最初的数据文件提供了一个周期中五个点的文件偏移量,每个数据之间间隔了1/1830秒,所以很容易得到一个脉搏波的周期T,那么自然就得到了其频率f,因为

f=1/T

利用第三节推出的公式

ξ=k/60

可以得到数据在数组中存储的位置,从而得到心谐波能量振幅比率。
由于心谐波生肝谐波,肝谐波生肾谐波,肾谐波生脾谐波,依次类推,凭借着谐波频率倍数的关系,很容易就能将所有比率值找到,并得到最终的m。

接着我们就可以定义各个器官的状态e了,有

e(i)=(m(i)-s(i))/s(i) ,i=心,肝,肾,脾,肺,胃,胆,膀胱,大肠,三焦,小肠,心包

当器官的e值大于0时,器官能量有剩余;当器官的e值小于0时,器官能量不足。按照《气的乐章》中的理论,器官能量有剩余是暂时可以不用处理的,我的思考是,在一定范围可以,大于一个阈值就应该算是上火或者其他情况了。最要注意的就是器官能量不足,说明它们已经开始缺血了,缺血意味这循环不通畅,氧气不能及时送到器官,细菌很多是厌氧的,于是它们便可以大量繁殖。当然,值得注意的是这样计算的话,心谐波永远不会得出有问题,所以这是这个算法最大的弊端。这就是病灶分析算法。

@Author: J.Y.Liu

@Date: 2012.03.22