科学网

 找回密码
  注册
科学网 标签 HHT

tag 标签: HHT

相关帖子

版块 作者 回复/查看 最后发表

没有相关内容

相关日志

30、既有瞬时频率估计方法啧言
baishp 2012-11-30 14:33
30、既有瞬时频率估计方法啧言
关于瞬时频率估计,前面虽说暂时放一下,但心中始终还是念念不忘,因为这是一道绕不过去的坎。在网上多次搜索、了解其现状。感觉是关注这件事的人很多,方法很多,但问题也很多。在网上能找到的方法,简单归结如下: 相位差分法 相位建模法 Teager能量算子法 跨零点法 求根估计法 反余弦法 时频分布法(谱峰检测法?) Shekel方法 Teager-Kaiser方法 解析信号法(HHT法) 其中有些只适用于单分量信号估计,有些可适用于多分量信号估计。由于单分量信号是多分量信号的特例,所以后者包括前者。 这些方法,有些我目前只能找到其名字,找不到原理论述;有些可以找到原理论述,但绝大多数方法都找不到现成的程序(收费网站内情况未知)。可以说,这些方法大多都只是用来写写文章、做做脑保健操而已,实际使用的人很少。如网上找到的一则“反余弦法瞬时频率估计”程序(见“附一”),它把分析信号的幅值都“规一化”了,因此它只能处理理想中的“平稳信号”,不能处理现实中的“非平稳信号”。 比较起来,现在使用解析信号法(HHT)估计瞬时频率的人是最多的,大有“众望所归”的趋势。此方法就是本人在前几篇博文中使用的方法。可是,它存在的问题,我在博文《18、关于IMF分量瞬时频率跳变问题的研究》也说的很详细了。既然现在最流行、影响最大的瞬时频率估计法都是这样,因此我有理由对其它所有瞬时频率估计方法,都感到没有信心。 解析信号法(HHT)估计瞬时频率用的是hhspectrum函数,hhspectrum函数是通过调用时频工具箱中的instfreq函数来进行瞬时频率估计的。时频工具箱中还有一个使用AR(2)模型进行瞬时频率估计的函数ifestar2(因为除却注释部分,程序正文很短,所以我把它也附在后面,方便阅读。见“附二”)。 现在来看看用ifestar2函数估计脉搏序列各IMF的瞬时频率: imfMBrd=emd(MB2917_rd); imfMBrd=imfMBrd'; lx=size(imfMBrd,1); for i=1:size(imfMBrd,2)-1; x=imfMBrd(:,i); =ifestar2(x); M{i,1}=fnorm; M{i,2}=t; M{i,3}=rejratio; end fid1=figure(1); set(fid1,'position', ) li=6; lj=1; for i=1:li for j=1:lj n=(i-1)*lj+j; s(n)=subplot(li,lj,n); set(s(n),'position', ); plot(M{n,2},M{n,1}) xlim( ) title( ) end end 运行 得 图30-1 fid2=figure(2); set(fid2,'position', ) li=7;% lj=1; for i=1:li for j=1:lj n=(i-1)*lj+j; s(n)=subplot(li,lj,n); set(s(n),'position', ); plot(M{n+6,2},M{n+6,1}) xlim( ) title( ) end end 运行得 图30-2 可见,IMF除了第10、第13分量以外,瞬时频率都有很严重的“跳变”,比HHT法更严重。从接近“0Hz”频率的地方跳到“0.5Hz”附近,如果都是这样还比较好区分,但那些比“0.25Hz”稍高的频率,你怎么知道它是否经过跳变呢?如果不是,那多大的频率是由负频跳变而来?界限在哪里?从物理意义来讲,正频率与负频率是截然不同的频率,一个是正向旋转所形成,一个是负向旋转所形成。频率表示方法,这是人类创造的理论,不管现实如何,用“0.49Hz”来表示“-0.01Hz”,这就叫“削足适履”。 以前多次讲过,现实信号的频率,一般情况下应该是连续、光滑的,所以我们的频率表示方法好不好,也应该以此为最高准则,是正频率就表示为正频率,是负频率就表示为负频率。除非能证明现实信号频率的确发生了跳变,否则频率表示当中出现了“跳变”,都是不对的。 下面将前面两张图的时间轴放大看看: fid3=figure(3); set(fid3,'position', ) li=6; lj=1; for i=1:li for j=1:lj n=(i-1)*lj+j; s(n)=subplot(li,lj,n); set(s(n),'position', ); stem(M{n,2},M{n,1}) xlim( ) title( ) end end 运行 得 图30-3 fid4=figure(4); set(fid4,'position', ) li=7; lj=1; for i=1:li for j=1:lj n=(i-1)*lj+j; s(n)=subplot(li,lj,n); set(s(n),'position', ); stem(M{n+6,2},M{n+6,1}) xlim( ) title( ) end end 图30-4 可以看到,图30-3的第1、第2分量频率、图30-4的第1分量频率,都有采样点上没有频率值的情况发生(不是“0Hz”情况哦)。其实每一个分量中都有这样的“瞬时频率无定义点”,只是因为在同一个绘图窗口将它们都绘出来不方便,所以就免了。 for i=1:size(imfMBrd,2)-1; lf(i)=length(M{i,1}) lt(i)=length(M{i,2}) rj(i)=M{i,3} end lf lt rj lf = Columns 1 through 7 33143345893484334901349453496134980 Columns 8 through 13 349933499335001350003499935001 lt = Columns 1 through 7 33143345893484334901349453496134980 Columns 8 through 13 349933499335001350003499935001 rj = Columns 1 through 8 0.94690.9882 0.9955 0.9971 0.9984 0.9989 0.9994 0.9998 Columns 9 through 13 0.99981.0000 1.0000 0.9999 1.0000 lf、lt是各IMF分量作了频率估算的频率点、采样点长度,rj是作了频率估算的采样点长度占整个采样点长度的比例。 这是由ifestar2函数中的indices = find(den0)造成的。与“反余弦法瞬时频率估计”一样,它能作频率估算的地方,它就作了估算;它无法作估算的地方,它就搁那不管了。这是什么态度嘛! 附一:网上找到的“反余弦法瞬时频率估计”程序代码 function = faacos(data, dt) % The function FAACOS generates an arccosine frequency and amplitude % of previously normalized data(n,k), where n is the length of the % time series and k is the number of IMFs. % % FAACOS finds the frequency by applying % the arccosine function to the normalized data and % checking the points where slope of arccosine phase changes. % Nature of the procedure suggests not to use the function % to process the residue component. % % Calling sequence- % = faacos(data, dt) % % Input- % data - 2-D matrix of IMF components % dt - time increment per point % Output- % f - 2-D matrix f(n,k) that specifies frequency % a - 2-D matrix a(n,k) that specifies amplitude % % Used by- % FA % Kenneth Arnold (NASA GSFC) Summer 2003, Initial %----- Get dimensions = size(data); %----- Flip data if necessary flipped=0; if (npts nimf) flipped=1; data=data'; = size(data); end %----- Input is normalized, so assume that amplitude is always 1 a = ones(npts,nimf); %----- Mark points that are above 1 as invalid (Not a Number) data(find(abs(data)1)) = NaN; %----- Process each IMF for c=1:nimf %----- Compute "phase" by arccosine acphase = acos(data(:,c)); %----- Mark points where slope of arccosine phase changes as invalid for i=2:npts-1 prev = data(i-1,c); cur = data(i,c); next = data(i+1,c); if (prev cur cur next) | (prev cur cur next) acphase(i) = NaN; end end %----- Get phase differential frequency acfreq = abs(diff(acphase))/(2*pi*dt); %----- Mark points with negative frequency as invalid acfreq(find(acfreq0)) = NaN; %----- Fill in invalid points using a spline legit = find(~isnan(acfreq)); if (length(legit) npts) f(:,c) = spline(legit, acfreq(legit), 1:npts)'; else f(:,c) = acfreq; end end %----- Flip again if data was flipped at the beginning if (flipped) f=f'; a=a'; end end 附二 时频工具箱中瞬时频率估计函数ifestar2 function =ifestar2(x,t); %IFESTAR2 Instantaneous frequency estimation using AR2 modelisation. % =IFESTAR2(X,T) computes an estimate of the % instantaneous frequency of the real signal X at time %instant(s) T. The result FNORM lies between 0.0 and 0.5. This %estimate is based only on the 4 last signal points, and has %therefore an approximate delay of 2.5 points. % %X : real signal to be analyzed. %T : Time instants (must be greater than 4) %(default : 4:length(X)). %FNORM : Output (normalized) instantaneous frequency. %T2 : Time instants coresponding to FNORM. Since the %algorithm can not always give a value, T2 is %different of T. % RATIO : proportion of instants where the algorithm yields %an estimation % %Examples : % =fmlin(50,0.05,0.3,5); x=real(x); =ifestar2(x); % plot(t,if(t),t,if2); % % N=1100; =fmconst(N,0.05); deter=real(deter); % noise=randn(N,1); NbSNR=101; SNR=linspace(0,100,NbSNR); % for iSNR=1:NbSNR, % sig=sigmerge(deter,noise,SNR(iSNR)); % =ifestar2(sig); % EQM(iSNR)=norm(if(t)-if2)^2 / length(t) ; % end; % subplot(211); plot(SNR,-10.0 * log10(EQM)); grid; % xlabel('SNR'); ylabel('-10 log10(EQM)'); % subplot(212); plot(SNR,ratio); grid; % xlabel('SNR'); ylabel('ratio'); % % See also INSTFREQ, KAYTTH, SGRPDLAY. %F. Auger, April 1996. % This estimator is the causal version of the estimator called % "4 points Prony estimator" in the article "Instantaneous %frequency estimation using linear prediction with comparisons %to the dESAs", IEEE Signal Processing Letters, Vo 3, No 2, p %54-56, February 1996. %Copyright (c) 1996 by CNRS (France). % % This program is free software; you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation; either version 2 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA if (nargin == 0), error('At least one parameter required'); end; = size(x); if (xcol~=1), error('X must have only one column'); end x = real(x); if (nargin == 1), t=4:xrow; end; = size(t); if (trow~=1), error('T must have only one row'); elseif min(t)4, error('The smallest value of T must be greater than 4'); end; Kappa = x(t-1) .* x(t-2) - x(t ) .* x(t-3) ; psi1 = x(t-1) .* x(t-1) - x(t ) .* x(t-2) ; psi2 = x(t-2) .* x(t-2) - x(t-1) .* x(t-3) ; den = psi1 .* psi2 ; indices = find(den0); arg=0.5*Kappa(indices)./sqrt(den(indices)); indarg=find(abs(arg)1); arg(indarg)=sign(arg(indarg)); fnorm = acos(arg)/(2.0*pi); rejratio = length(indices)/length(t); t = t(indices); end (本文首发于: http://blog.sina.com.cn/s/blog_6ad0d3de01016a4n.html 首发时间:2012-06-07 20:40:45)
个人分类: 斤斤计较|4023 次阅读|0 个评论
19、(一)生理信号imf分量平均周期的估计与分析
baishp 2012-11-29 22:48
19、(一)生理信号imf分量平均周期的估计与分析
瞬时频率估计暂时放一下。我现在最想知道的是生理信号中各分量的平均周期(频率),因为这对于确定我们身体生理现象的“扰动源”很重要。 现在根据体温信号序列TW486012的imf分量imf_TW486012中极值点的位置与数量,来估计一下各分量的(算术)平均周期(频率)。 %以下是根据峰值点位置与数量估计平均周期 P=cell(size(imf_TW486012,1)-1,2); for i=1:size(imf_TW486012,1)-1 = findpeaks(imf_TW486012(i,:)); if length(P{i,2})1 T_peak(i)=(P{i,2}(end)-P{i,2}(1))/(length(P{i,2}-1)); end subplot(5,3,i) stem(P{i,2},P{i,1}) end 运行,得: 图19-1 峰值点 %以下是根据谷值点位置与数量估计平均周期 B=cell(size(imf_TW486012,1)-1,2); for i=1:size(imf_TW486012,1)-1 = findpeaks(-imf_TW486012(i,:)); B{i,1}=-B{i,1}; if length(B{i,2})1 T_bottom(i)=(B{i,2}(end)-B{i,2}(1))/(length(B{i,2}-1)); end subplot(5,3,i) stem(B{i,2},B{i,1}) end 运行,得: 图19-2 谷值点 %以下将前述两种方法得到的平均周期再取平均,作为最终结果 for i=1:min(length(T_peak),length(T_bottom)) T_m_TW(i)=(T_peak(i)+T_bottom(i))/2; end if length(T_peak)length(T_bottom) T_m_TW(length(T_peak))=T_peak(end); else T_m_TW(length(T_bottom))=T_bottom(end); end %平均周期取倒数得平均频率 subplot(1,2,1) bar(T_m_TW) f_m_TW=1./T_m_TWsubplot(1,2,2); bar(f_m_TW) 运行,得: 图19-3 平均周期与平均频率 图左边是平均周期,右边是平均频率。它与上一篇文章中的图18-1中红线表示的(算术)平均频率应该是一致的,只是排除了跳变频率的影响。由于上面求平均周期的过程中不考虑能量分布的情况,下面求出各分量的方差,作为各分量的平均能量(功率)。 %各分量方差 for i=1:size(imf_TW486012,1)-1 Var_TW(i)=var(imf_TW486012(i,:)); end bar(Var_TW) 运行,得: 图19-4 各分量方差 将各imf分量之平均周期T_m_TW、平均频率f_m_TW、方差Var_TW数值截图如下: 图19-5 平均周期T_m_TW、平均频率f_m_TW、方差Var_TW数值截图 将上面第一列平均周期换算成更通俗易懂的表达方式,分别约为: 9.4小时; 20.0小时; 1天8.7小时; 2天2.6小时; 3天7.7小时; 5天14.4小时; 10天8.6小时; 21天12.1小时; 43天21.9小时; 86天16.8小时; 178天15.7小时; 1年56天15.3小时 1年364天9.3小时 4年262天18.7小时 (1年按365.2422天、8765.8小时计算); 首先说明,这是一道生理信号用一种处理方式得到的结果,目前它只具有参考价值。最终的确认,还需要用多种方式对多道信号进行处理,并结合实际情况中多种信息来源,才能完成的。 但是上面的数据,还是有一些地方,很值得玩味。最显著的地方,是第二个分量。它的能量是各分量中最大的,它的周期,几乎严格等于20个小时。20个小时是个什么数呢?稍具天干地支、命理八字常识的人,马上就会想到“时干”。因为“时干”的周期正是20个小时(10个时干,甲、乙、丙、丁、戊、己、庚、辛、壬、癸各占一个时辰)。这是偶然的巧合吗?我很难相信是巧合。 没有出现“1天”(24小时)的周期,很奇怪。也许在高阶信号处理或别种生理信号处理中会出现吧。 命理八字中每个字对应一个周期。就上述数据来看,目前只有“20小时”这一个分量周期与八字中的8个周期之一相吻合。但是另外还有一个分量周期“1年364天9.3小时”很有深意。它极其接近“2年”整数。从统计学上来讲,这一点点误差基本上可以忽略不计。在天干地支、命理八字中,“2年”是个什么数呢?稍具天干地支、命理八字常识的人,马上又会想到“阴年阳年”的概念。这在八字理论中是个非常重要的概念,无论“天干”还是“地支”都有“阴、阳”的区别。排大运的时候必须考虑命主的出生年份是“阴年”还是“阳年”,以确定“大运”是正转还是反转。一阴一阳完成一次振荡,周期正好是2年。这个还是巧合吗?我仍旧很难相信是巧合。 另外还有两分量周期“86天16.8小时”、“178天15.7小时”,分别很接近3个“塑望月”平均周期88天14.2小时、6个“塑望月”平均周期177天零44分。它们之间有没有必然关系呢? 没有出现1个塑望月平均周期29天12.7小时及恒星月平均周期27天7.7小时。其实女人的月经周期也并不完全等于上述两个周期的。“天人感应”可能也跟发电机、电动机定子、转子“电磁感应”一样,存在一个“超前、滞后”关系吧。 也没有出现PSI周期学说中的“23天、28天、33天”周期。 其它分量周期以后慢慢考查其意义吧。应该指出一点,前述越大的分量周期,其统计误差越大。而且受EMD分解方法中端点发散效应影响,误差更大。最后的(第14个)分量的方差出现大幅反弹,极可能是由端点发散效应引起的,而非实际方差。 (本文首发于: http://blog.sina.com.cn/s/blog_6ad0d3de010125f5.html 首发时间:2012-01-06 13:46:51)
个人分类: 斤斤计较|4784 次阅读|0 个评论
18、关于IMF分量瞬时频率跳变问题的研究
baishp 2012-11-29 00:23
18、关于IMF分量瞬时频率跳变问题的研究
问题是这样被发现和引起的:我打算求出各信号各IMF分量的瞬时频率的一些特征参数(尤其是平均频率),以便比较这些分量是不是同一物理量引起的。先求TW486012各IMF分量瞬时频率f_imf_TW486012的平均频率。根据时频分析理论,信号谱的平均频率等于信号瞬时频率的时间平均mtf_imf_TW486012。 mtf_imf_TW486012=sum(f_imf_TW486012.*A_imf_TW486012.^2)'./sum(A_imf_TW486012.^2)'; plot(mtf_imf_TW486012) 见图18-1蓝线部分。横轴是IMF分量序号。 图18-1 imf_TW486012瞬时频率的平均频率 (附带说一下:对于这种平均频率的计算方式,为什么一定要按照信号能量的分布密度来进行加权计算,我不是太明白。因为瞬时频率与瞬时幅值是两个独立的变量,求一个变量的时间平均却一定要与另一个变量扯上关系,逻辑上好象说不通。虽然理论上可以证明,此时间平均频率等于信号总谱的平均频率。当只能得到信号总谱时,平均频率用信号能量的分布密度来表征是可以理解的。但已经得到了瞬时频率,就没有必要考虑与能量分布的关系了。) 另外再计算一组纯粹由瞬时频率函数本身确定的平均频率。为了以示区别,就把它叫做瞬时频率的算术平均吧。程序如下: mf_imf_TW486012=mean(f_imf_TW486012)'; hold on plot(mf_imf_TW486012,'r-') 曲线见图18-1红线部分。 它们不是单调下降的。这很奇怪哦。什么原因使得低频分量的平均频率反而上升了呢?回过头去再稍微看一下 图14-2 f_imf_TW486012,很容易注意到图中象“谱线”一样的跳变的“高频”成分。放大曲线,可以看到并不全是“谱线”,有些高频成分还存在着一个区间。对,就是这些跳变的“高频”成分拉高了它们的平均频率!它们是不符合工程实际情况的。实际的瞬时频率,变化应该是比较连续、缓慢的。 必须得找出原因,解决这个问题。网上搜索,没看到相关的文献、帖子;把它发到论坛里去讨论、请教,一直都没有人回复。不知道他们是不屑于我这个问题呢,还是看不懂我这个问题。没办法,只好自己慢慢研究、琢磨。 IMF分量瞬时频率的计算,主要用到了两个工具箱里的两个函数:EMD工具箱里的hhspectrum函数、时频工具箱里的instfreq函数。hhspectrum函数的主要作用就是求出IMF分量的解析信号,然后根据此解析信号调用instfreq函数,求出其瞬时频率。 先用sptool放大看一看f_imf_TW486012频率跳变点附近的情况。第5个分量的一个频率跳变点: 图18-2 f_imf_TW486012第5个分量频率跳变点位置 再看看解析信号对应于频率跳变点附近的情况: hil_imf_TW486012=hilbert(imf_TW486012'); 复信号装入sptool之后,可以直接查看它的实部、虚部、幅值与相位函数。 图18-3 imf_TW486012第5个分量(亦即解析信号的实部)对应于其频率跳变点位置 图18-4 imf_TW486012第5个分量的解析信号的虚部对应于其频率跳变点位置 咋一看,这虚部信号上下包络线对称,局部均值似等于0,好象是一基本模式函数IMF。但再看看图中标尺所示的两个局部极大值点,其值都小于0,说明虚部信号并不是真正的基本模式函数IMF。 图18-5 hil_imf_TW486012第5个分量第45100_45143点包括频率跳变点的一段数据 通过数据可以更加清楚地看出解析信号在频率跳变点处的变化情况。那么,虚部信号局部极大值小于0是否必定会发生频率跳变呢? 图18-6 imf_TW486012第4个分量解析信号虚部某小于0的局部极大值 图18-7 上述小于0的局部极大值对应的瞬时频率位置没有发生频率跳变 图18-8 imf_TW486012第5个分量的解析信号的相位函数对应于其频率跳变点位置 再看imf_TW486012第5个分量解析信号的相位函数。可以看出,在频率跳变点处,相位函数发生了递减的情况。由于瞬时频率等于相位函数的导数,这说明此处出现了负频率。如果瞬时频率确定是正频率的话,那么除了在+pi变为-pi处之外,相位函数应该是单增函数才对。 图18-9 f_imf_TW486012第4个分量频率跳变点位置 虚部局部极大(小)值小(大)于0处,瞬时频率不一定会发生跳变,那么瞬时频率发生跳变的地方,是不是一定会发生虚部局部极大(小)值小(大)于0的情况呢?图图18-9为第4个分量一个频率跳变点。 图18-10 imf_TW486012第4个分量(亦即解析信号的实部)对应于其频率跳变点位置 图18-11 imf_TW486012第4个分量的解析信号的虚部对应于其频率跳变点位置 可以看出,并没有发生虚部信号局部极大(小)值小(大)于0的情况。 图18-12 hil_imf_TW486012第4个分量的解析信号第26476_26500点包括频率跳变点的一段数据 从具体的数据可以更清楚地了解瞬时频率跳变点处的情况。 图18-13 imf_TW486012第4个分量的解析信号的相位对应于其频率跳变点位置 相位函数仍然存在递减区间。 图18-14 f_imf_TW486012第14个分量频率跳变点位置 再看f_imf_TW486012第14个分量频率跳变点位置。 图18-15 imf_TW486012第14个分量的解析信号实部对应于其频率跳变点位置 实部。 图18-16 imf_TW486012第14个分量的解析信号虚部对应于其频率跳变点位置 虚部。 图18-17 imf_TW486012第14个分量的解析信号的相位对应于其频率跳变点位置 相位。 通过上面的分析,除了相位递减与频率跳变存在必然关系外,似乎很难再找出其它的必然关系。 上面几个频率跳变点,还有一个共同点,那就是其实部、虚部数据都极度接近0。那么是不是幅值靠近0的地方就必定会发生频率跳变呢?将信号幅值按升序排列,同时让瞬时频率跟着幅值重新排列,就可以看出上面问题的答案。 Af= ; srAf=sortrows(Af); subplot(1,2,1) plot(srAf(:,1)) subplot(1,2,2) plot(srAf(:,2)) 运行,得: 图18-18 imf_TW486012第4个分量解析信号幅值按升序排列 咋一看,频率跳变点好象的确集中在幅值靠近0的地方。但将上面右图的左侧部分横轴放大,就可以看出,幅值靠近0的地方并不一定就是频率跳变点。见图18-19。 图18-19 imf_TW486012第4个分量瞬时频率跟随升序幅值重新排列 招数都用尽了,还是找不出一个扼要的方法解决问题。最后一招,就是头痛医头脚痛医脚的笨办法,根据频率跳变处的波形特点,编长程序消除此频率跳变。 程序如下: g=0.071893186; d=0.33; h=0.35; nf_imf_TW486012=f_imf_TW486012; M=cell(size(nf_imf_TW486012,1)-1,2); df_imf_TW486012=diff(f_imf_TW486012)'; for i=1:size(nf_imf_TW486012,1)-1 a=1;b=1; for j=2:size(nf_imf_TW486012,2)-1 if df_imf_TW486012(i,j-1)*df_imf_TW486012(i,j)0, if nf_imf_TW486012(i,j)g, if df_imf_TW486012(i,j)d, M{i,1}(a)=j; a=a+1; elseif df_imf_TW486012(i,j-1)-d, M{i,2}(b)=j; b=b+1; end end end end for k=1:length(M{i,1}) for l=1:length(M{i,2}) mnf=mean(nf_imf_TW486012(i,M{i,1}(k)+1:M{i,2}(l)-1)); if mnfh nf_imf_TW486012(i,M{i,1}(k)+1:M{i,2}(l)-1)=nf_imf_TW486012(i,M{i,1}(k)+1:M{i,2}(l)-1)-0.5; end end end end %上面只解决了数据中段(从第3个(含)至倒数第3个(含)数据之间的 %频率跳变问题。对于从第1、第2个数据就已经处于高频位,以及在倒数 %第2、倒数第1个数据都未回归低频位的跳频问题,需下面程序部分解决。 h1_end=0.48; d1_end=0.45; nf_imf_TW486012=nf_imf_TW486012';%行变列 dnf_imf_TW486012=diff(nf_imf_TW486012); =min(dnf_imf_TW486012); =max(dnf_imf_TW486012); for i=1:size(nf_imf_TW486012,2)-1 if Cmin(i)-d1_end if mean(nf_imf_TW486012(1:Imin(i),i))h1_end nf_imf_TW486012(1:Imin(i),i)=nf_imf_TW486012(1:Imin(i),i)-0.5; end end if Cmax(i)d1_end if mean(nf_imf_TW486012(Imax(i)+1:end,i))h1_end nf_imf_TW486012(Imax(i)+1:end,i)=nf_imf_TW486012(Imax(i)+1:end,i)-0.5; end end end for k=1:14 subplot(5,3,k) plot(nf_imf_TW486012(:,k)) end 运行,得: 图18-20 f_imf_TW486012消除频率跳变现象之后的瞬时频率nf_imf_TW486012 可以看到都没有频率跳变了。再看看图18-2与图18-9两处频率跳变点局部情况: 图18-21 图18-2消除跳变之后的局部波形 图18-22 图18-9消除跳变之后的局部波形 曲线变得连续、光滑了。 问题虽然解决了,但是用这种笨办法解决,心中总觉不甘。再研究研究。 先把消除频率跳变现象之后的瞬时频率nf_imf_TW486012的频率跳变点数据序号都找出来。将nf_imf_TW486012的局部极小值都找出来,其中最小的那几个就是频率跳变点。 nf4_imf_TW486012=nf_imf_TW486012(:,4); nf4=-nf4_imf_TW486012; =findpeaks(nf4,'sortstr','ascend'); nf4c=fliplr(nf4c);%跳频点放到序列最前面 nf4cn=fliplr(nf4cn); %找出解析信号虚部负极大值与正极小值序号 ihil_imf_TW486012=imag(hil_imf_TW486012); ihtw4=ihil_imf_TW486012(:,4); =findpeaks(ihtw4,'sortstr','ascend'); ihtw4=-ihtw4; =findpeaks(ihtw4,'sortstr','ascend'); ihtw4c=-ihtw4c; nf4c=nf4c';nf4cn=nf4cn';ihtw4p=ihtw4p';ihtw4pn=ihtw4pn';ihtw4c=ihtw4c';ihtw4cn=ihtw4cn';%行变列 将上面6列数据放在一起观察,见图18-23。 图18-23 图中第1、2列前5个点是频率跳变点;第3、4列前11个点是虚部负极大值点;第5、6列前10个点是虚部正极小值点。可以看出,在5个频率跳变点中,有3个是信号虚部负极大值点,且最靠近0处;有1个是信号虚部正极小值点,且与0值只隔了一个数据。 初步结论:虚部存在负极大值点与正极小值点,且它们极度靠近0,是发生频率跳变的主要原因。 但上面的数据,有两处例外。先看看最右边一列粉色方框标示的、序号为48568的数据点是怎么回事。它是虚部正极小值点,且极度靠近0。但它没有被列入频率跳变点。用sptool放大观察原信号局部,见图18-24。 图18-24 原来这也是一个堪称频率跳变的点。因为它的波形,不符合我程序中的搜索条件 if df_imf_TW486012(i,j-1)*df_imf_TW486012(i,j)0,所以没有被我的程序列为频率跳变点。但它的高度也超过了0.5的一半0.25。从图18-23数据的“同类相聚”性来说,它无疑也是一个频率跳变点。需要修改的是我的搜索条件。 再看看图18-23中的第1个频率跳变点,nf_imf_TW486012中序号为26493的点。它在虚部极大值点中紧挨着0,但是是正的,不符合我的“初步结论”的条件。可以看出,这个数据点是个罕有的例子(紧挨着0的正极大值),碰巧被我在图18-11中引用到。所以不能援引它来说明“在负(正)极大(小)值点之外也有很多地方发生频率跳变”。 现在把瞬时频率计算过程中,包含这个数据点的一段数据,调出来看一看。可以分步了解跳变频率是怎样产生的。instfreq函数计算瞬时频率的主要语句是fnormhat=0.5*(angle(-x(t+1).*conj(x(t-1)))+pi)/(2*pi)。所以要看这项计算中具体数据的变化情况。 hiltw4=hil_imf_TW486012(:,4); tt=2:size(hil_imf_TW486012,1)-1; x=-hiltw4(tt+1).*conj(hiltw4(tt-1)); angx=angle(x); f_angx=0.5*angx/(2*pi); %f_imf_TW486012=0.25+f_angx 运行,打开hiltw4、x、f_angx变量,将包含序号26493数据点的一段数据截图。见下。 图18-25 x、f_angx的长度比hiltw4要短2个点,所以x、f_angx的26494、就是hiltw4的26495。注意这是原解析信号hiltw4实部负极小值点,而它的虚部正极大值点是26492。 还可以将这一小段数据作图,可以更直观。 plot(hiltw4(26490:26496),'-bo') grid hold on plot(x(26489:26495),'-g*') plot(10.*x(26489:26495),'-r*')%x(26489:26495)变化范围太小,看不清楚。扩大10倍看。 图18-26 上图横轴是实部,纵轴是虚部。可以看出,这一小段数据,解析信号(右边蓝线)首先在第4象限(26490点),然后跳到第1象限,再回到第4象限,再跳到第3象限,最后再回到第4象限。将此轨迹看成一个闭合曲线的话,原点正好被排除在此闭合曲线之外。这就是发生频率跳变的根本原因。至于x=-hiltw4(tt+1).*conj(hiltw4(tt-1)),它只是解析信号的一个映射。当解析信号上面的特征具备后,x产生跳变就是必然的了。图中左边红(绿)线首先在第3象限(26489点),然后跳入第1象限(26492、26493点),再跳入第2象限(26494点),并在此形成最大相位角(注意此曲线各点相位角就相当于各点瞬时频率),最后回到第3象限。整个轨迹避开了第4象限。 通过上面的分析,现在基本上可以得出如下的结论:当利用信号IMF分量的解析信号对分量进行瞬时频率估计时,需要对解析信号的虚部进行“IMF化”处理,使其也成为一个IMF基本模式函数,并与原分量构成一新的复信号。它们的过0点需要按下面的顺序排列:实部降0点-虚部降0点-实部升0点-虚部升0点-实部降0点……。当复信号模值较大时,此条件基本上可自然满足;但当模值极靠近0时,需要对信号特别处理才可以满足。此处“降0点”“升0点”表示信号从局部极大值降到局部极小值、局部极小值升到局部极大值时所经过的0点。 对信号作这样的处理,是基于信号处理的结果,要尽量符合现实情况的要求。瞬时频率应该是连续的,光滑的。这种思想与最初建立EMD分解、HHT变换的思想是一致的。经典的Hilbert变换,是从信号的全局处理角度提出的,因此其构建的目标函数是复信号的频谱没有负频率成分。现在进入到时频分析时代,这一目标函数也应该改变了。 上面的结论主要来自于对信号数据中段(从第3个(含)至倒数第3个(含)数据之间)的 频率跳变点的分析。至于数据两端的频率跳变,我相信信号虚部经过“IMF化”处理之后,也会得到相应的改变。具体情况如何,以后再研究。 (本文首发于: http://blog.sina.com.cn/s/blog_6ad0d3de0100zxfq.html 首发时间:2011-11-03 13:57:00)
个人分类: 斤斤计较|5343 次阅读|0 个评论
16、求边际谱_生理信号的HHT变换(四)
baishp 2012-11-29 00:06
16、求边际谱_生理信号的HHT变换(四)
下面来看看所谓的“边际谱”。“边际谱”就是在Hilbert谱的时频平面上,各频率点振幅在时间总体上的累积,也就是频率相同、总时长上所有振幅的叠加。 (1)脉搏MB291712的边际谱: 先看看MB291712由包括残余项在内的Hilbert谱计算得到的边际谱: =toimage(A_imf_MB291712,f_imf_MB291712); %E_cimf_MB291712表示由各IMF分量及残余项计算所得到的Hilbert谱 bjp_cimf_MB291712=zeros(1,size(E_cimf_MB291712,1)); for k=1:size(E_cimf_MB291712,1); bjp_cimf_MB291712(k)=sum(E_cimf_MB291712(k,:))/size(E_cimf_MB291712,2); end plot(Cenf_imf_MB291712,20*log10(bjp_cimf_MB291712)) 运行,得: 图16-1 bjp_cimf_MB291712 再看看MB291712由只有IMF分量但不包括残余项在内的Hilbert谱计算得到的边际谱: E_imf_MB291712,t_imf_MB291712,Cenf_imf_MB291712]=toimage(A_imf_MB291712(1:13,:),f_imf_MB291712(1:13,:)); %E_imf_MB291712表示由各IMF分量但不包括残余项计算所得到的Hilbert谱 bjp_imf_MB291712=zeros(1,size(E_imf_MB291712,1)); for k=1:size(E_imf_MB291712,1); bjp_imf_MB291712(k)=sum(E_imf_MB291712(k,:))/size(E_imf_MB291712,2); end plot(Cenf_imf_MB291712,20*log10(bjp_imf_MB291712)) 运行,得: 图16-2 bjp_imf_MB291712 比起图16-1来,仅仅在0频率(或包括紧挨0频率的低频处),谱线降低了很多,其余地方完全相同。 (2)体温TW486012的边际谱: =toimage(A_imf_TW486012,f_imf_TW486012); %E_cimf_TW486012表示由TW486012各IMF分量及残余项计算所得到的Hilbert谱 bjp_cimf_TW486012=zeros(1,size(E_cimf_TW486012,1)); for k=1:size(E_cimf_TW486012,1); bjp_cimf_TW486012(k)=sum(E_cimf_TW486012(k,:))/size(E_cimf_TW486012,2); end plot(Cenf_imf_TW486012,20*log10(bjp_cimf_TW486012)) 运行,得: 图16-3 bjp_cimf_TW486012 (3)收缩压GY291712的边际谱: =toimage(A_imf_GY291712,f_imf_GY291712); %E_cimf_GY291712表示由GY291712各IMF分量及残余项计算所得到的Hilbert谱 bjp_cimf_GY291712=zeros(1,size(E_cimf_GY291712,1)); for k=1:size(E_cimf_GY291712,1); bjp_cimf_GY291712(k)=sum(E_cimf_GY291712(k,:))/size(E_cimf_GY291712,2); end plot(Cenf_imf_GY291712,20*log10(bjp_cimf_GY291712)) 运行,得: 图16-4 bjp_cimf_GY291712 (4)舒张压DY291712的边际谱: =toimage(A_imf_DY291712,f_imf_DY291712); %E_cimf_DY291712表示由DY291712各IMF分量及残余项计算所得到的Hilbert谱 bjp_cimf_DY291712=zeros(1,size(E_cimf_DY291712,1)); for k=1:size(E_cimf_DY291712,1); bjp_cimf_DY291712(k)=sum(E_cimf_DY291712(k,:))/size(E_cimf_DY291712,2); end plot(Cenf_imf_DY291712,20*log10(bjp_cimf_DY291712)) 运行,得: 图16-5 bjp_cimf_DY291712 (5)均压JY291712的边际谱: =toimage(A_imf_JY291712,f_imf_JY291712); %E_cimf_JY291712表示由JY291712各IMF分量及残余项计算所得到的Hilbert谱 bjp_cimf_JY291712=zeros(1,size(E_cimf_JY291712,1)); for k=1:size(E_cimf_JY291712,1); bjp_cimf_JY291712(k)=sum(E_cimf_JY291712(k,:))/size(E_cimf_JY291712,2); end plot(Cenf_imf_JY291712,20*log10(bjp_cimf_JY291712)) 运行,得: 图16-6 bjp_cimf_JY291712 (6)差压CY291712的边际谱: =toimage(A_imf_CY291712,f_imf_CY291712); %E_cimf_CY291712表示由CY291712各IMF分量及残余项计算所得到的Hilbert谱 bjp_cimf_CY291712=zeros(1,size(E_cimf_CY291712,1)); for k=1:size(E_cimf_CY291712,1); bjp_cimf_CY291712(k)=sum(E_cimf_CY291712(k,:))/size(E_cimf_CY291712,2); end plot(Cenf_imf_CY291712,20*log10(bjp_cimf_CY291712)) 运行,得: 图16-7 bjp_cimf_CY291712 每条曲线形状都大同小异,我还是耐着性子把它们做完了。真无聊……不过我也真伟大啊……把曲线放大还是各不相同的。它的性质其实就相当于各信号的功率谱,只不过计算方法特别而已。姑存勿论…… (本文首发于: http://blog.sina.com.cn/s/blog_6ad0d3de0100zk0f.html 首发时间:2011-09-17 11:22:04)
个人分类: 斤斤计较|4768 次阅读|0 个评论
15、求Hilbert谱_生理信号的HHT变换(三)
baishp 2012-11-28 23:45
15、求Hilbert谱_生理信号的HHT变换(三)
HHT-EMD工具箱里有一个toimage函数,用来计算信号的Hilbert谱。它是将各IMF分量及残余项的振幅在同一时频点上进行叠加,它表示了信号能量在时频平面上的分布状况。由于各IMF分量及残余项的瞬时频率的取值范围是连续的,所以toimage函数将频率取值范围进行了离散化。另有一个disp_hhs函数,用来显示信号的三维Hilbert谱,它用颜色来表示振幅数值差别。 先来看看MB291712的Hilbert谱。 =toimage(A_imf_MB291712,f_imf_MB291712); %E_cimf_MB291712表示由各IMF分量及残余项计算所得到的Hilbert谱 disp_hhs(E_cimf_MB291712); 运行,得: 图15-1 E_cimf_MB291712 就象一片蓝天上布满了点点繁星,也可以说这张图什么也看不出来。 E_cimf_MB291712是一个400*35002的矩阵,可知toimage将频率离散成400个频率点。查看Cenf_imf_MB291712数值,是由0.000625hz到0.49938hz,每隔0.00125hz取一个值(这里hz是广义频率,即单位采样时间的圆频率)。就是网格分割时频平面后,各网格的中心频率。通过查看E_cimf_MB291712的具体数值,可知第一行(最低频)数值远远大于其余行数值。它主要是残余项的振幅。 将残余项剔除,看看各IMF分量合成的Hilbert谱。 =toimage(A_imf_MB291712(1:13,:),f_imf_MB291712(1:13,:)); %E_imf_MB291712表示由各IMF分量但不包括残余项计算所得到的Hilbert谱 disp_hhs(E_imf_MB291712); 运行,得: 图15-2 E_imf_MB291712(无残余项) 只是低频部分颜色丰富了一些。还是看不出什么东西。画一张局部Hilbert谱吧。仍旧取图14-13的时频范围。图14-13的频率范围是从0.01~0.03hz。查了一下Cenf_imf_MB291712,上述频率范围大约对应于其第8~25个数据。 disp_hhs(E_imf_MB291712(8:25,30001:30500), ); 运行,得: 图15-3 E_imf_MB291712(8:25,30001:30500) 上图的频率轴刻度是错的。懒得改了。 图14-13 对比图14-13,可以看出大致相同的曲线形状,只是图15-3曲线要粗糙得多。这是频率离散化的结果。另:理论上图15-3是所有IMF分量振幅叠加的结果;14-13只是单个IMF分量振幅形成的。 将上述频率范围扩大一些再画一张Hilbert谱图吧: disp_hhs(E_imf_MB291712(1:100,30001:30500), ); 运行,得: 图15-4 E_imf_MB291712(1:100,30001:30500) 绘图的目的是为了从直觉上对比不同对象在某种相同的条件下的不同表现形式,从而找到影响这些对象的因素。上面的Hilbert谱图达不到这个目的。所以其它的生理信号Hilbert谱图不再画了。 (本文首发于: http://blog.sina.com.cn/s/blog_6ad0d3de0100ziz7.html 首发时间:2011-09-16 12:23:56)
个人分类: 斤斤计较|4582 次阅读|0 个评论
14、求各IMF振幅与瞬时频率_生理信号的HHT变换(二)
baishp 2012-11-28 23:36
14、求各IMF振幅与瞬时频率_生理信号的HHT变换(二)
下面求各信号序列之各基本模式分量IMF之瞬时振幅与瞬时频率。 (1)对TW486012各IMF分量求取瞬时振幅与瞬时频率。 =hhspectrum(imf_TW486012); %A_imf_TW486012是TW486012各个IMF分量的瞬时振幅组成的矩阵,f_imf_TW486012是TW486012各个IMF分量对应的瞬时频率向组成的矩阵。 运行,A_imf_TW486012、f_imf_TW486012分别得到一个15*58318的矩阵。 前14行分别是IMF分量瞬时振幅与瞬时频率,最后一行分别是对应残余项的瞬时振幅与瞬时频率。58318是时间长度,比原始信号序列少两个采样点。 %A_imf_TW486012各IMF分量瞬时振幅图 for k=1:14 subplot(5,3,k) plot(A_imf_TW486012(k,:)) end 运行,得: 图14-1 A_imf_TW486012 %f_imf_TW486012各IMF分量瞬时频率图 for k=1:14 subplot(5,3,k) plot(f_imf_TW486012(k,:)) end 运行,得: 图14-2 f_imf_TW486012 (2)对GY291712各IMF分量求取瞬时振幅与瞬时频率。 =hhspectrum(imf_GY291712); %A_imf_GY291712是GY291712各个IMF分量的瞬时振幅组成的矩阵,f_imf_GY291712是GY291712各个IMF分量对应的瞬时频率组成的矩阵。 运行,A_imf_GY291712、f_imf_GY291712分别得到一个12*35002的矩阵。 前11行分别是IMF分量瞬时振幅与瞬时频率,最后一行分别是对应残余项的瞬时振幅与瞬时频率。35002是时间长度,比原始信号序列少两个采样点。 %A_imf_GY291712各IMF分量瞬时振幅图 for k=1:11 subplot(4,3,k) plot(A_imf_GY291712(k,:)) end 运行,得: 图14-3 A_imf_GY291712 %f_imf_GY291712各IMF分量瞬时频率图 for k=1:11 subplot(4,3,k) plot(f_imf_GY291712(k,:)) end 运行,得: 图14-4 f_imf_GY291712 (3)对DY291712各IMF分量求取瞬时振幅与瞬时频率。 =hhspectrum(imf_DY291712); %A_imf_DY291712是DY291712各个IMF分量的瞬时振幅组成的矩阵,f_imf_DY291712是DY291712各个IMF分量对应的瞬时频率组成的矩阵。 运行,A_imf_DY291712、f_imf_DY291712分别得到一个13*35002的矩阵。 前12行分别是IMF分量瞬时振幅与瞬时频率,最后一行分别是对应残余项的瞬时振幅与瞬时频率。35002是时间长度,比原始信号序列少两个采样点。 %%A_imf_DY291712各IMF分量瞬时振幅图 for k=1:12 subplot(4,3,k) plot(A_imf_DY291712(k,:)) end 运行,得: 图14-5 A_imf_DY291712 %%f_imf_DY291712各IMF分量瞬时频率图 for k=1:12 subplot(4,3,k) plot(f_imf_DY291712(k,:)) end 运行,得: 图14-6 f_imf_DY291712 (4)对JY291712各IMF分量求取瞬时振幅与瞬时频率。 =hhspectrum(imf_JY291712); %A_imf_JY291712是JY291712各个IMF分量的瞬时振幅组成的矩阵,f_imf_JY291712是JY291712各个IMF分量对应的瞬时频率组成的矩阵。 运行,A_imf_JY291712、f_imf_JY291712分别得到一个14*35002的矩阵。 前13行分别是IMF分量瞬时振幅与瞬时频率,最后一行分别是对应残余项的瞬时振幅与瞬时频率。35002是时间长度,比原始信号序列少两个采样点。 %%A_imf_JY291712各IMF分量瞬时振幅图 for k=1:13 subplot(5,3,k) plot(A_imf_JY291712(k,:)) end 运行,得: 图14-7 A_imf_JY291712 %%f_imf_JY291712各IMF分量瞬时频率图 for k=1:13 subplot(5,3,k) plot(f_imf_JY291712(k,:)) end 运行,得: 图14-8 f_imf_JY291712 (5)对CY291712各IMF分量求取瞬时振幅与瞬时频率。 =hhspectrum(imf_CY291712); %A_imf_CY291712是CY291712各个IMF分量的瞬时振幅组成的矩阵,f_imf_CY291712是CY291712各个IMF分量对应的瞬时频率组成的矩阵。 运行,A_imf_CY291712、f_imf_CY291712分别得到一个14*35002的矩阵。 前13行分别是IMF分量瞬时振幅与瞬时频率,最后一行分别是对应残余项的瞬时振幅与瞬时频率。35002是时间长度,比原始信号序列少两个采样点。 %%A_imf_CY291712各IMF分量瞬时振幅图 for k=1:13 subplot(5,3,k) plot(A_imf_CY291712(k,:)) end 运行,得: 图14-9 A_imf_CY291712 %%f_imf_CY291712各IMF分量瞬时频率图 for k=1:13 subplot(5,3,k) plot(f_imf_CY291712(k,:)) end 运行,得: 图14-10 f_imf_CY291712 (6)对MB291712各IMF分量求取瞬时振幅与瞬时频率。 =hhspectrum(imf_MB291712); %A_imf_MB291712是MB291712各个IMF分量的瞬时振幅组成的矩阵,f_imf_MB291712是MB291712各个IMF分量对应的瞬时频率组成的矩阵。 运行,A_imf_MB291712、f_imf_MB291712分别得到一个14*35002的矩阵。 前13行分别是IMF分量瞬时振幅与瞬时频率,最后一行分别是对应残余项的瞬时振幅与瞬时频率。35002是时间长度,比原始信号序列少两个采样点。 %%A_imf_MB291712各IMF分量瞬时振幅图 for k=1:13 subplot(5,3,k) plot(A_imf_MB291712(k,:)) end 运行,得: 图14-11 A_imf_MB291712 %%f_imf_MB291712各IMF分量瞬时频率图 for k=1:13 subplot(5,3,k) plot(f_imf_MB291712(k,:)) end 运行,得: 图14-12 f_imf_MB291712 以上各信号序列各IMF分量都有瞬时振幅与瞬时频率两列向量,可以用多种方法画出它们的时间-瞬时频率-振幅三维图,即所谓的时频图来。但数据太多,画在一张图上将会是乱糟糟、黑乎乎的一团,什么东西也看不出来。下面随意选取MB291712的第5个IMF分量的一小段数据,画一张三维时频图。 t30001_30500= ; stem3(t30001_30500,f_imf_MB291712(5,30001:30500),A_imf_MB291712(5,30001:30500)) 运行,得: 图14-13 MB291712的第5个IMF分量的第30001~30500组数据时频图 将上图旋转一下,得: 图14-14 图14-13之旋转图 图14-15 图14-13之旋转图 (本文首发于: http://blog.sina.com.cn/s/blog_6ad0d3de0100zggw.html 首发时间:2011-09-14 16:07:03)
个人分类: 斤斤计较|5540 次阅读|0 个评论
13、EMD分解_生理信号的HHT变换(一)
baishp 2012-11-28 23:17
13、EMD分解_生理信号的HHT变换(一)
在我十多年前刚开始测量生理信号并思考如何样来研究的时候,那时候就想到多个复变函数合成的模型。因为看传统文化的书籍,中医或易经易学,牵涉到定量部分的内容,思考一下就知道,千言万语,无非讲的就是一个高度非线性、非平稳复变函数合成的问题(当然同时含有模式识别的问题)。只是古代文化环境、用词,与现代科技术语天差地别,所以初看不容易搞清楚事情的本质。 后来有了matlab软件,知道有一个Hilbert变换函数,就对信号数据作了一下Hilbert变换,想看看变换得到的解析信号的相位与自己身体种种感觉、症状的关系。结果与实际相差太大,只能放弃。 近年来现代信号处理学科高速发展。其中基于EMD(经验模式分解)的 Hilbert-Huang变换(HHT),由于能够分解出具有物理意义的分量,较之以往只能在数学框架内实现分解的信号处理方式,是一种本质性的飞跃,因此现在在很多领域都得到了很好的应用。它也可以说是最符合我事先设想的一项信号处理技术。现在就来研究一下生理信号的Hilbert-Huang变换。 将我2010年10月10日~2011年6月11日共245天的体温、血压及脉搏观测数据,合并以前的观测数据整理,得到1998年2月20日~2011年6月11日共4860天的体温信号序列TW486012、2003年6月17日~2011年6月11日共2917天的收缩压信号序列GY291712、舒张压信号序列DY291712、脉搏信号序列MB291712(都没有0均值化)。 绘制一下各信号序列图: subplot(2,2,1)%绘制子图 plot(TW486012) subplot(2,2,2) plot(GY291712) subplot(2,2,3) plot(DY291712) subplot(2,2,4) plot(MB291712) 运行,得: 图13-1 至2011年6月11日为止的各信号序列图 下面先对各信号序列作EMD分解。 这里说明一下,我用的HHT-EMD工具箱,是网上已经得到广泛认可并得到广泛流传的、由G.Rilling编写的HHT-EMD函数工具箱。 (1)对体温序列TW486012作EMD分解 imf_TW486012=emd(TW486012); 运行后得到一个15*58320的矩阵imf_TW486012。这表示TW486012分解成了14个基本模式分量(或称“本征模函数”,intrisic mode function,简称imf)与1个残余项。58320是信号序列(时间)长度。 看看各IMF分量图: %TW486012的IMF分量图 for k=1:15 subplot(5,3,k) plot(imf_TW486012(k,:)) end 运行,得: 图13-2 体温序列TW486012的IMF分量 (2)对收缩压序列GY291712作EMD分解 imf_GY291712=emd(GY291712); 运行后得到一个12*35004的矩阵imf_GY291712。这表示GY291712分解成了11个基本模式分量(IMF)与1个残余项。35004是序列(时间)长度。 %GY291712的IMF分量图 for k=1:12 subplot(4,3,k) plot(imf_GY291712(k,:)) end 运行,得: 图13-3 收缩压信号序列GY291712的IMF分量 (3)对舒张压序列DY291712作EMD分解 imf_DY291712=emd(DY291712); 运行后得到一个13*35004的矩阵imf_DY291712。这表示DY291712分解成了12个基本模式分量(IMF)与1个残余项。35004是序列(时间)长度。 %DY291712的IMF分量图 for k=1:13 subplot(5,3,k) plot(imf_DY291712(k,:)) end 运行,得: 图13-4 舒张压序列DY291712的IMF分量 (4)对均压序列JY291712作EMD分解 JY291712=(GY291712+DY291712)/2; CY291712=(GY291712-DY291712)/2; 看看均压JY291712、差压CY291712的基本模式分量。之所以总是要把这两个变量数据拿来研究,目的还是要找出影响血压变化的最直接的因素。 imf_JY291712=emd(JY291712); 运行后得到一个14*35004的矩阵imf_JY291712。这表示JY291712分解成了13个基本模式分量(IMF)与1个残余项。35004是序列(时间)长度。 %JY291712的IMF分量图 for k=1:14 subplot(5,3,k) plot(imf_JY291712(k,:)) end 运行,得: 图13-5 均压序列JY291712的IMF分量 (5)对差压序列CY291712作EMD分解 imf_CY291712=emd(CY291712); 运行后得到一个14*35004的矩阵imf_CY291712。这表示CY291712分解成了13个基本模式分量(IMF)与1个残余项。35004是序列(时间)长度。 %CY291712的IMF分量图 for k=1:14 subplot(5,3,k) plot(imf_CY291712(k,:)) end 运行,得: 图13-6 差压序列CY291712的IMF分量 (6)对脉搏序列MB291712作EMD分解 imf_MB291712=emd(MB291712); 运行后得到一个14*35004的矩阵imf_MB291712。这表示MB291712分解成了13个基本模式分量(IMF)与1个残余项。35004是序列(时间)长度。 %MB291712的IMF分量图 for k=1:14 subplot(5,3,k) plot(imf_MB291712(k,:)) end 运行,得: 图13-7 脉搏序列MB291712的IMF分量 (本文首发于: http://blog.sina.com.cn/s/blog_6ad0d3de0100zhfb.html 首发时间:2011-09-13 12:21:54)
个人分类: 斤斤计较|5330 次阅读|0 个评论

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-6-2 14:14

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部