【HHT改进算法】NHT的matlab实现
2009年黄鄂在他的论文“On Instantaneous Frequency"中提出了一种改善瞬时频率出现负值的方法,称为“规范化”过程。基本思想是认为:IMF信号中的AM和FM会相互干扰,导致使用HT变换求出的瞬时频率中会出现负值。
他的解决方法就是:采用规范化过程,即模仿AM解调的过程,将IMF信号的AM调制信号通过“包络检波”的方法解调出来。
然后再对求出的FM信号用DQ法或者再应用Hilbert变换,这样能防止AM信号干扰瞬时频率。而通过“解调过程”的包络就代替原来Hilbert变换的幅值信号。
这种方法画出的频谱图要平滑很多。大家可以试试。
附件中实现了NHT。DQ法没有做。
用draw_nht可以实现画图。这个函数和nspab的用法很像。
nht函数中实现了规范化过程,返回信号是AM,瞬时频率,和FM信号
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
imf=emd(x);
draw_nht(imf(1:end-1,:),500,0,1400,8000);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
其实规范化过程,分解出AM,FM信号,可以激起我们对IMF信号本质的仔细考虑。
欢迎修改,拍砖。。。
[ 本帖最后由 zwnewton 于 2010-6-9 13:13 编辑 ]
回复 楼主 zwnewton 的帖子
你的nht程序中,再求瞬时频率的时候是不是不应该乘以采样频率啊 ?本身求出来的就已经是实际的瞬时频率了啊回复 楼主 zwnewton 的帖子
楼主介意直接将程序贴出吗?不然这边打开都是乱码!
谢谢
谢谢分享!!!!! 下了,学习一下,谢谢楼主! 多谢楼主,下来试试看,呵呵。另外问一下大家,有没有谁建了有关HHT或EMD的讨论群啊,希望大家都加进来一起讨论,共同进步。 下下来的两个文件是.php的,改为.m文件后里面是一些其他内容,不是代码啊,楼主可否发一份给我chlhsh@163.com,谢谢俄 学习 一下 才开始学习,在收集资料 用楼主分享的程序对仿真信号进行分解后得到的希尔伯特谱的谱线要平滑很多,非常感谢! 回复 1 # zwnewton 的帖子楼主,你好,我试了将第23行至第31行程序comment,即不对AM和FM信号进行滤波,得到的希尔伯特谱相对进行滤波后得到的谱要差很多,所以不禁要问究竟是规范化后确实能得到更精确的瞬时频率还是因为经验性地进行滤波使得谱线更加平滑,现在正在验证规范化后得到的瞬时频率与用F. Auger的instfreq.m函数求得的瞬时频率,两者哪个更加接近通过经典方法求得的瞬时频率。 回复 1 # zwnewton 的帖子
因为之前不进行规范化,而做适当的滤波也得到了效果不错的希尔伯特谱。 谢谢分享! 回复 13 # 梦泉 的帖子
很不错哦,学习了 感谢分享,我初学,正搜集资料。
页:
[1]
2