声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3759|回复: 12

[HHT] 请教:为什么用instfreq.m计算出的瞬时频率会出现突变?

[复制链接]
发表于 2009-9-2 22:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
首先谢谢各位的关注和帮助。我所用的程序就是从论坛下载的HHT的程序,为了看下瞬时频率的效果,用instfreq.m函数对程序中给出的示例信号进行了计算,程序如下,其中前半部分就是emd_fmsin.m中生成示例信号的程序:

N = 2000;% # of data samples
T = 1:4:N;
t = 1:N;
p = N/2;% period of the 2 sinusoidal FM's

% sinusoidal FM 1
fmin1 = 1/64;% min frequency
fmax1 = 1.5*1/8;% max frequency
x1 = fmsin(N,fmin1,fmax1,p,N/2,fmax1);

% sinusoidal FM 1
fmin2 = 1/32;% min frequency
fmax2 = 1.5*1/4;% max frequency
x2 = fmsin(N,fmin2,fmax2,p,N/2,fmax2);

% logon
f0 = 1.5*1/16;% center frequency
x3 = amgauss(N,N/2,N/8).*fmconst(N,f0);
a1 = 1;
a2 = 1;
a3 = 1;
x = real(a1*x1+a2*x2+a3*x3);
x = x/max(abs(x));

[imf,ort,nbits] = emd(x,t);
emd_visu(x,t,imf,1);

%求解瞬时频率
for i=1:(size(imf,1)-1)
    an(i,:)=hilbert(imf(i,:)')';
    f(i,:)=instfreq(an(i,:)')';
    A=abs(an(:,2:end-1));
end
        
figure(2)
plot(f(1,:),'r')
hold on;
plot(f(2,:),'g')
hold on;
plot(f(3,:),'k')
hold off;

程序运行后的结果如下,问题是,为什么第三个IMF分量的频率会出现突变,并且高于前两个分量的频率,这明显是错的,希望各位多多指教,是我对程序理解错误,还是我的程序有问题呢?谢谢了~

IMF分量

IMF分量

瞬时频率

瞬时频率
回复
分享到:

使用道具 举报

 楼主| 发表于 2009-9-3 12:08 | 显示全部楼层
都没有人理我吗?帮帮忙啊,谢谢各位了,小弟刚开始学习HHT啊~~
发表于 2009-9-3 17:18 | 显示全部楼层
模态混叠太厉害了  建议用下eemd
http://rcada.ncu.edu.tw/
 楼主| 发表于 2009-9-5 14:32 | 显示全部楼层
可是,如果是单纯的模态混叠问题的话,为什么第三个IMF分量里会出现那么高的频率呢?原始信号中应该不会出现这么高的频率成分啊?
发表于 2009-9-8 10:29 | 显示全部楼层

回复 楼主 lixiaoming_eric 的帖子

你好,我也是刚开始学习HHT,从本网站上下载的程序,我的emd怎末就不能显示分解的结果呢?一般用什么样的输出语句才能显示imf分量呢?imf = emd(x);imf = emd(x,'stop',[0.1,0.5,0.05],'maxiterations',100);不行吗?
 楼主| 发表于 2009-9-9 10:17 | 显示全部楼层

回复 5楼 aprilcat 的帖子

显示IMF分量是在分解完以后用emd_visu(x,t,imf,1);来显示分解结果的。
发表于 2009-9-10 11:34 | 显示全部楼层

回复 6楼 lixiaoming_eric 的帖子

问题解决了,非常感谢。不过说是没有instfreq这个函数,我不知道在哪里可以找到?也不知道怎末写这个程序呢?
 楼主| 发表于 2009-9-14 15:43 | 显示全部楼层

回复 7楼 aprilcat 的帖子

有的啊,如果是在论坛上下的程序,应该是有的。
发表于 2009-9-15 11:11 | 显示全部楼层

回复 8楼 lixiaoming_eric 的帖子

找是找到了,就是不能运行。
?? Input argument "L" is undefined.

Error in ==> instfreq at 46
if L<1,

Error in ==> hhspectrum at 45
  f(i,:)=instfreq(an(i,:)',tt,l)';

Error in ==> Untitled at 18
[A,f,tt]=hhspectrum(imf);   没明白是怎末回事。L的定义是在这个函数的开始吗?应该定义成什么形式呢?
 楼主| 发表于 2009-9-15 13:37 | 显示全部楼层

回复 9楼 aprilcat 的帖子

l只是函数的一个系数而已啊,当l=1时计算的是归一化频率,用的时候只要保持系统默认值就好了~
发表于 2011-7-14 08:57 | 显示全部楼层
回复 10 # lixiaoming_eric 的帖子

请问一下emd里面用到的归一化频率是怎么定义的?
发表于 2011-7-23 20:32 | 显示全部楼层
我也同问到底归一化频率是怎么回事呢?
发表于 2011-8-16 19:33 | 显示全部楼层
高手指点归一化频率的含义
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-9-21 17:30 , Processed in 0.080680 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表