@Author: J.Y.Liu
@Date: 2012.03.22
转载自匆匆往站 https://blog.csdn.net/prog_6103/article/details/9121237
摘要
中医学是中国五千年文化的一块瑰宝。随着电子技术的发展,脉诊仪已民用化。为了探索脉诊仪得到的脉搏波数据所蕴含的信息,与脉诊仪相关的一系列定量数学模型将在文章中建立起来,包括脉搏波物理模型、病灶分析模型、中药与方剂模型。这些模型会被计算机程序一一实现,通过波形可视化,频谱计算,结合数据库技术,自动推荐出适用方剂,最终得到可以和特定脉诊仪配套使用的脉搏波波形分析系统。目 录
1.概述
1.1 中医面临的压力
1.2 西医新的起点
1.3 信息时代与中医
1.4 脉搏波与脉诊仪
2.硬件部分
2.1 脉诊仪测量原理
2.2 ARM平台与uClinux
3.数学第一部分:基础模型
3.1 血液波动模型
3.2 脉搏信号模型
4.软件第一部分:脉搏波处理
4.1 信号数据文件的分析
4.2 病灶分析算法
5.数学第二部分:中医信息模型
5.1 中药经验模型
5.2 方剂统计模型
6.软件第二部分:药物治疗分析
6.1 数据库构建
6.2 方剂推荐算法
7.结论
参考文献
中医是华夏民族千年文化的结晶。2006年国内再次掀起了一场中医存留的大讨论。为何会出现这么一场争论呢?首先中医的哲学基础没有被接受。其实马克思主义的辩证法早在中医的平衡哲学就有所体现了,马克思只是替这种体系取了个名字并牵引到政治经济领域。中医的哲学抽象性比较高,但这并不代表它就不能被大众接受。拒绝的原因不胜其数,翻阅文献,不难发现一些重要线索:中医的起源目前没有明确记载,所传承的文化直接告诉我们所有经络和基础知识;古代酷刑经常拆解人体,给古代人体解剖学提供了极大的方便。
脉诊仪就是对脉搏波进行实时测量,并使用计算机对得到的数据进行自动分析,医生可以根据产生的结果对病人进行治疗。三部九候的脉诊方法得到的二十八脉象便是对脉搏波进行离散化分类,现代脉象的测量就是把古人脉诊的过程托管给机器操作。
后面我们将对脉诊仪的一整套体系展开调研。一方面通过使用Proteus等电路仿真软件,了解脉诊仪的硬件构造,探索其数据收集的原理;另一方面,为了让得到的数据更容易理解,我们还需要开发相应的软件对它们进行可视化,并能够自动分析得出数据供体的目前病理状态,再对这种状态通过打分的形式推荐一些相应的治疗方剂。
现在有一个理想的长方形片状电阻,长a宽b,电流是沿着长的方向(不妨设为左右方向)流过。当给电阻上下施加压力的时候,由于弹性形变,使得其宽减小了△b,则电阻长度变为ab/(b-Δb),因为△b大于0,所以变化后的电阻长度大于a,因为根据电阻计算公式R∝l,所以变化后的电阻阻值变大了。
由胡克弹性定理,有
嵌入式的技术正突飞猛进,ARM核已经十分普遍。目前小型脉诊仪还都需要与计算机进行交互,将传感器得到的数据送入电脑再进行处理。其实我们可以直接将脉诊的整个过程都集成在脉诊仪里,让它更加自动化,直接测量数据就能得出分析结果,并给出相应建议。
以上的设想,可以通过ARM核方便实现,因为Linux操作系统早已经被移植到了这一平台上。只要了解清楚ARM核的各项功能,配合开放源代码的uClinux,对数据处理和分析已经手到擒来。
首先,我们需要给出血液运动的基本模型,为硬件部分的实现提供可行性。众所周知,人体的血液是运行在血管内的。心脏在不停地向外泵血,它每跳动一次,都会喷射出一股血液,并以波的形式进行传播。而血管又是弹性的,所以在体表浅处如果有动脉血流经过,我们可以很容易通过触觉神经在其附近感觉到它的波动,它就是脉搏波了。伟大的祖先在几千年前就发现了这种存在。早在难经时就已经有了三部九候,到晋代王叔和在《脉经》中将脉象总结为二十四种,明代的李时珍将二十七种脉象的总结写在《濒湖脉学》里,后来李士材在《诊家正眼》中修订为二十八脉,就是现代脉象分类的雏形了。由此,我们便对脉象有了一个定性的认识。
为了对脉象进行数值测量,定性的知识是远远不够的,所以我们需要一个具体的数学模型去定量描述脉搏的跳动。目前,脉搏波的数学模型最成熟的要数弹性腔模型,而纯几何上我们可以使用三个高斯函数对脉搏波形进行拟合,而工程上则更注重实用性,所以工程师们发明了等效转换的方法,他们将血液循环系统等效成电子电路系统,然后通过计算电路的电阻、电感和电容来得到一组评估被测者身体状态的参数。深入浅出,这里我们只需要一个简单的公式说明人体血压存在,其实这并不复杂,高中的物理知识就能解决问题。以下,我们需要用到三个物理定理:
胡克弹性定理 F=-kx
F:弹性受力;k:弹性系数;x:弹性位移,即物体离平衡点的距离
力与压强关系定律 F=pS
F:压迫力;p:压强;S:受压物体与施压物体间的接触面积
流量与流速关系定律 Q=vA
Q:流体在单位时间内流过指定平面区域的体积;v:流体流过指定平面区域时的速度;A:指定平面区域的面积
我们对血管以及血液进行微元分析。取血管上某处dL长的部分,假设血管初始的半径是R0,这时血液在血管中衡定流动,则不会产生血压,且此时流量为Q0。射入血液后血管的半径就是一个变量R,血液流过区域的横截面就是半径为R的圆的面积了,最终代入基础的物理学公式,得
p=2k sqrt(πv/Q) |1- sqrt(Q0/Q)|
从上面的公式,我们可以得知,血管特定点的血压与血液流动的速率和血液流量有关。有了这个公式,我们不但有了机器测量脉搏波的数学基础,还可以合成各种脉搏波形,为后续理论分析脉搏波提供试验数据。
3.2 脉搏信号模型
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看成计算机程序的数组中某元素的序号,而ξ则是频率值。如果想知道一组数据经过离散傅立叶变换后1Hz谐波的权值,只需要查看计算机程序对应数组中第60号元素的值就可以了。
由于人体听力的范围一般在20Hz ~ 20000Hz,正常人通常是听不见自己的器官随着血液波动而发出声音的。实验证实,人体器官随着血液波动,其振动频率在0 ~ 16Hz。所以我们需要对得到的数据进行滤波,即把不需要的信息全部去处掉。由最近得到的公式,不难算出
定义k的最大值为K,则此时K=960。这个范围初步确定了进行离散傅立叶变换所需要的计算量。本节主要探讨了数据的前期处理,至于数据后期的自动分析,将在第五节进行详细讨论。
医管家多功能辨证仪有一套自带的软件包,它不但负责收集仪器传回的数据,还可以对数据进行常规的分析。但是该软件并没有提供相应的分析结果输出接口,所以数据处理还须要自己完成。
多次进行测量实验后发现,医管家多功能辨证仪配套软件包在执行测量任务后会在特定文件夹创建一个扩展名为DAT的文件,文件大小固定为219624字节。分析后发现,该文件存储了109800个16位整数,另加5个32位整数,存储着用户选取的一个周期波形的文件偏移量。
王维工教授在《气的乐章》最后一章中给出了一个年轻正常人脉搏波在频域下的参考标准值。以此为基础便很容易就能得到一些简单的病灶分析算法。
相关器官 能量振幅比率(%)
心脏 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,因为
利用第三节推出的公式
由于心谐波生肝谐波,肝谐波生肾谐波,肾谐波生脾谐波,依次类推,凭借着谐波频率倍数的关系,很容易就能将所有比率值找到,并得到最终的m。
接着我们就可以定义各个器官的状态e了,有
当代中药文献中充斥了大量的化学分析,各种有机物堆砌在一起,让人眼花缭乱。随着结构生物的迅猛发展,人们正在尝试建立物质更具体的模型。目前,我们对这些零散的模型只能望而却步,没有办法实际操作它们。一个是模型多而杂乱,没有一套统一的系统;另一方面由于势场函数计算的复杂性,导致很多模型必须要依赖高负荷的科学计算,这要有大型机或分布式网络的硬件支持,同时对可信计算的要求也非常高。不能从这些大规模药物的数据得到结果,我们就从另一个角度去思考中药。
现阶段我们只能以一个纯粹经验主义者的身份去分析中药。对古籍中药的描述进行概括,发现在大量文献记载中都有药物寒热、归经和味道。药物味道的分析会牵扯过多经络知识,所以这里我们仅对药物寒热和归经进行讨论。
我们将把重点先放在中药的一个基本假设上,并将其当作一个公理,贯穿在后面的理论中。假设(1)中药的寒热中,寒代表达到减少能量的效果,热则代表增加能量的效果;(2)归经则是指明药物会对哪种器官的谐波造成影响。在假设(1)中,寒热作为阴阳两种极端,我们所能和刚才的病灶分析中参数联系起来的,只有能量的强弱了,暂时并没有实验基础。而假设(2)则是背景的,因为药物归经后,说明吃的药物可以将血液很大程度地送到相应的器官,使得相应器官能得到比原先更多的氧气,于是缺氧的症状会相对减弱,器官的振动则会恢复正常,其谐波的能量也自然就改善了。
根据这两个假设,我们便可以建立起中药的数学模型,即一个表示药物治疗作用的向量
经过不少方剂的测试,我们发现方剂主要治疗对象所对应的p中的值是p中最大的元素。比如六味地黄丸滋补肝肾,方剂组成为熟地黄24g,山萸肉12g,干山药12g,泽泻9g,牡丹皮9g,茯苓9g,则
med(熟地黄) = (0,1,1,0,0,0,0,0,0,0,0,0)
med(山萸肉) = (0,1,1,0,0,0,0,0,0,0,0,0)
med(干山药) = (0,0,1,1,1,0,0,0,0,0,0,0)
med(泽泻) = (0,0,1,0,0,0,0,1,0,0,0,0)
med(牡丹皮) = (1,1,1,0,0,0,0,0,0,0,0,0)
med(茯苓) = (1,0,1,1,0,0,0,0,0,0,0,0)
p(六味地黄丸) = (18,45,75,21,12,0,0,9,0,0,0,0)
p中肝对应的值为45和肾对应的75分别为整个向量中第二大和最大的数。
再举一个例子,达原饮开达膜原,辟秽化浊,方剂组成为槟榔6g,厚朴3g,草果仁1.5g,知母3g,芍药3g,黄芩3g,甘草1.5g
med(槟榔) = (0,0,0,0,0,1,0,0,1,0,0,0)
med(厚朴) = (0,0,0,1,1,1,0,0,1,0,0,0)
med(草果仁) = (0,0,0,1,0,1,0,0,0,0,0,0)
med(知母) = (0,0,1,0,1,1,0,0,0,0,0,0)
med(芍药) = (0,1,0,1,0,0,0,0,0,0,0,0)
med(黄芩) = (0,0,0,1,1,1,1,0,1,0,1,0)
med(甘草) = (1,0,0,1,1,1,0,0,0,0,0,0)
p(达原饮) = (1.5,3,3,12,10.5,18,3,0,9,0,3,0)
辟秽化浊可以看出对脾胃影响较大,脾对应的值是12,胃对应的为18,是p中最大的两个;对于开达膜原,虽然不是特别清楚它的含义,但从p来看,很可能是在说改善肺部的状况,因为批紧接着就是肺的10.5。
数据库的结构设计得相当简单,药物表就是存储序号ID、药物名称NAME、药物寒热MILD、药物归经的十二个布尔型变量HT, LR, KI, SP, LU, ST, GB, BL, LI, TB, SI, PC。方剂表则更为简洁,有序号ID、方剂名称NAME,方剂组成PRESCRIPT,其中方剂组成存储的是一个字符串。这个字符串中,一个药物有3个值,分别对应药物序号、药物用量和一个无用的预留值,以逗号隔开;每个药物间的数据用分号分割。
考虑到这是一个软件原型,并没有特别大量的数据,于是数据库使用的是轻量级的SQLite实现。它不需要任何安装和配置,所以在原型演示上有利;它操作起来方便快捷,易于上手;它使用SQL语句查询数据,所以可以很容易将它更换成正规的数据库,即可移植性很高。
数据收集方面,库中直接选用了全国高等中医药院校规划教材系列的《中药学》和《方剂学》。其中《中药学》中几乎所有中药都收录在了数据库中,共计478味中药;《方剂学》提供了68种配方,都是每种类型中比较有代表性的。
最终通过得到的全部数学模型,将其一一转化为计算机程序。通过Microsoft Visual Studio 2005集成开发环境,使用C#语言,开发出一个与脉诊仪配套使用的脉搏波分析软件。最终通过得到的全部数学模型,将其一一转化为计算机程序。通过Microsoft Visual Studio 2005集成开发环境,使用C#语言,开发出一个与脉诊仪配套使用的脉搏波分析软件。
[1] 王唯工. 气的乐章[M]. 人大出版社, 2006
[2] 罗志昌, 张松, 杨益民. 脉搏波的工程分析与临床应用[M]. 科学出版社, 2006
[3] 王唯工. 水的漫舞[M]. 中国人民大学出版社, 2007
[4] 李家邦. 中医学[M]. 第六版. 人民卫生出版社, 2005
[5] 潘欣祥, 马芳杰. 神奇养生[M]. 南方出版社, 2008
[6] Wikipedia. Pressure Sensor[OL/A]. http://en.wikipedia.org/wiki/Pressure_sensor, 访问时间:2012.01
[7] Rodger E. Ziemer, William H. Tranter. Principles of Communications[M]. Wiley, 2009
[8] Gallica Fourier, Jean Baptiste Joseph. Oeuvres de Fourier[M]. Gauthier-Villars, 1888
[9] Wikipedia. Fourier Seris[OL/A]. http://en.wikipedia.org/wiki/Fourier_series, 访问时间:2012.03
[10] Wikipedia. Fourier Transform[OL/A]. http://en.wikipedia.org/wiki/Fourier_transform, 访问时间:2012.03
[11] Gerald Kaiser. A Friendly Guide to Wavelets[M]. Birkhäuser, 1994
[12] 黄载禄, 殷蔚华, 黄本雄. 通信原理[M]. 科学出版社, 2007
[13] Colin Ware. Information Visualization - Perception for Design[M]. 2nd ed. Elsevier, 2004
[14] Wikipedia. RGB Color Model[OL/A].
http://en.wikipedia.org/wiki/RGB_color_model, 访问时间:2012.03
[15] 周仁郁. 中医药数学模型[M]. 中国中医药出版社, 2006
[16] 万德光, 肖崇厚. 中药化学[M]. 上海科学技术出版社, 1997
[17] 高学敏. 中药学[M]. 中国中医药出版社, 2002
[18] 邓中甲. 方剂学[M]. 中国中医药出版社, 2003
[19] 邓中甲. 方剂学[M]. 上海科学技术出版社, 2008