使用MATLAB实现联合熵算法.doc
上传人:yy****24 上传时间:2024-09-10 格式:DOC 页数:5 大小:125KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

使用MATLAB实现联合熵算法.doc

使用MATLAB实现联合熵算法.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

地理与生物信息学院2011/2012学年第二学期实验报告课程名称:医学信号处理实验名称:联合熵算法实现班级学号:1111111111学生姓名:AAAAAAAAAA指导教师:BBBBBBBBBB日期:2012年7月一、实验目的和要求实现联合熵算法并能够在Matlab平台上编写出程序,用联合熵算法分析医学信号并得出结果。二、实验准备可以熟练使用Matlab进行编程。三、实验内容1、在matlab平台上实现基本尺度熵算法时间序列转换成符号序列符号动力学在分析时间序列复杂性方面显示着明显的有用性。考虑一个心跳时间序列X,X={,,,,,,},表示第个心跳间期。我们把HRV序列X转换成符号序列S={,,,,,,},()。具体的转换依据方程:(1)这里。代表心跳间期的平均值,是一个特殊参数,取。示意图构建替代序列先取原始时间序列X的替代时间序列Y:根据Schreiber等人提出的打乱相位法,将原始时间序列X进行傅立叶变换得到其功率谱。将此功率谱中各频率成分的相位随机的改变,然后进行逆傅立叶变换,这样得到的数据序列就是原始时间序列的替代数据Y。求联合熵对于原始时间序列X和其替代时间序列Y之间的联合熵可表示为:这里代表的是“三位字”的总状态个数(),代表X序列在第个状态且Y序列在第个状态()的几率。实验结果实现代码:clear;yf=textread('**********.txt');N=1000;random=fix(rand(1)*10000);X(1:N)=yf(random:(random-1+N),2)*100+1100;F=fft(X);F=F(randperm(numel(F)));Y=ifft(F);Y=abs(Y);fork=1:3X1(1:N-2,k)=X(k:N+k-3);Y1(1:N-2,k)=Y(k:N+k-3);endu1=mean(X);u2=mean(Y);a=0.05;fori=1:N-2fork=1:3ifX1(i,k)>(1+a)*u1S1(i,k)=1;elseifX1(i,k)>u1S1(i,k)=0;elseifX1(i,k)>(1-a)*u1S1(i,k)=2;elseS1(i,k)=3;endendSX(i)=100*S1(i,1)+10*S1(i,2)+S1(i,3);endfori=1:N-2fork=1:3ifY1(i,k)>(1+a)*u2S2(i,k)=1;elseifY1(i,k)>u2S2(i,k)=0;elseifY1(i,k)>(1-a)*u2S2(i,k)=2;elseS2(i,k)=3;endendSY(i)=100*S2(i,1)+10*S2(i,2)+S2(i,3);endPX=hist(SX,unique(SX))/(N-2);PY=hist(SY,unique(SY))/(N-2);s=0;fori=1:length(PX)forj=1:length(PY)L(i,j)=PX(i)*PY(j);endendH=-sum(sum(L.*log2(L)))输出结果:对‘Apb_100_5.68.txt’的数据进行采样分析,求得其联合熵为:H=4.6804;对‘nsrdb-16265.Txt’的数据进行采样分析,得出其联合熵为:H=6.4747;对‘Vpc_105_15.44.txt’的数据进行采样分析,得出其联合熵为:H=4.8907。从以上几组数据可以得出结论:健康人具有较高的熵值,说明健康人的HRV序列具有最复杂的动态波动,揭示了该类人神经系统自律控制强,心脏电活动总体的动力学复杂性强。具有心脏健康问题的人有明显降低的熵值,说明随着疾病等原因导致心脏衰竭,,神经系统自律控制能力有了一定的下降,心脏电活动总体的动力学复杂性削弱。五、实验小结:用联合熵的方法,通过计算原始时间序列和其替代时间序列之间的联合熵值,来量化原始生理时间序列的动力学复杂性。在证明联合熵方法有效的基础上,将其应用到生理时间序列---心率变异性信号。该方法可以清楚的区分和定量不同的心跳间期序列,揭示生理系统所蕴藏的动力学特征。用联合熵方法来考察短时心率变异性信号的非随机程度,该方法可以有效的揭示心室对心室纤维性颤动响应的非随机模式。在编程计算过程中,傅里叶变换时,采用FFT函数,反傅里叶变换,可以采用IFFT,打乱相位可以采用函数F=F(randperm(numel(F))),在打乱相位后进行反傅里叶变换时,新产生的序列会有虚数存在,这里采取了