声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2592|回复: 14

[HHT] Hilbert谱和边际谱

[复制链接]
发表于 2014-4-16 20:23 | 显示全部楼层 |阅读模式

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

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

x
请问有哪位朋友用MATLAB文件交换中心由Alan Tan开发的plot_hht程序包画出了Hilbert谱和边际谱,求指导啊
回复
分享到:

使用道具 举报

发表于 2014-4-28 11:35 | 显示全部楼层
plothht.part2.rar (1 MB, 下载次数: 64)

plothht.part3.rar (365.04 KB, 下载次数: 28)

plothht.part1.rar (1 MB, 下载次数: 60)



发表于 2014-5-2 15:44 | 显示全部楼层

请问一下,运行显示未定义“x”怎么回事?
发表于 2014-5-2 15:52 | 显示全部楼层
振动非终结者 发表于 2014-5-2 15:44
请问一下,运行显示未定义“x”怎么回事?

把你程序贴出来看下
发表于 2014-5-2 20:38 | 显示全部楼层
chybeyond 发表于 2014-5-2 15:52
把你程序贴出来看下

function imf = emd(x)
% Empiricial Mode Decomposition (Hilbert-Huang Transform)
% imf = emd(x)
% Func : findpeaks

x   = transpose(x(:));
imf = [];
while ~ismonotonic(x)
   x1 = x;
   sd = Inf;
   while (sd > 0.1) | ~isimf(x1)
      s1 = getspline(x1);
      s2 = -getspline(-x1);
      x2 = x1-(s1+s2)/2;

      sd = sum((x1-x2).^2)/sum(x1.^2);
      x1 = x2;
   end

   imf{end+1} = x1;
   x          = x-x1;
end
imf{end+1} = x;

% FUNCTIONS

function u = ismonotonic(x)

u1 = length(findpeaks(x))*length(findpeaks(-x));
if u1 > 0, u = 0;
else,      u = 1; end

function u = isimf(x)

N  = length(x);
u1 = sum(x(1:N-1).*x(2:N) < 0);
u2 = length(findpeaks(x))+length(findpeaks(-x));
if abs(u1-u2) > 1, u = 0;
else,              u = 1; end

function s = getspline(x)

N = length(x);
p = findpeaks(x);
s = spline([0 p N+1],[0 x(p) 0],1:N);
就是从您上传的文件中解压出来的。我是新学的matlab,还不怎么会用。

发表于 2014-5-3 08:56 | 显示全部楼层
振动非终结者 发表于 2014-5-2 20:38
function imf = emd(x)
% Empiricial Mode Decomposition (Hilbert-Huang Transform)
% imf = emd(x)

x是你待分解的信号,使用前你需要定义或者导入信号x
发表于 2014-5-4 11:09 | 显示全部楼层
chybeyond 发表于 2014-5-3 08:56
x是你待分解的信号,使用前你需要定义或者导入信号x

我还是不太懂。能不能麻烦您给举个稍微简单点的例子。比如分解如下的信号:
x(t)=2*sin(2*pi*t)+3*sin(6*pi*t)+5*sin(10*pi*t)
我试着加了进去,不过又出现了新的问题。
发表于 2014-5-4 11:16 | 显示全部楼层
本帖最后由 chybeyond 于 2014-5-4 11:21 编辑
振动非终结者 发表于 2014-5-4 11:09
我还是不太懂。能不能麻烦您给举个稍微简单点的例子。比如分解如下的信号:
x(t)=2*sin(2*pi*t)+3*sin(6 ...

什么问题,plot_hht程序里边有例子,你运行[x,Fs] = wavread('Hum.wav');plot_hht(x(1:6000),1/Fs);

发表于 2014-5-9 09:51 | 显示全部楼层
求高手指点 运行时出现下面的警告 是什么问题?
??? Maximum recursion limit of 500 reached. Use set(0,'RecursionLimit',N)
to change the limit.  Be aware that exceeding your available stack space can
crash MATLAB and/or your computer.

Error in ==> fileparts
发表于 2014-5-9 09:54 | 显示全部楼层
将递归次数修改为1000次  set(0,'RecursionLimit',1000) 之后还是继续提示同样的警告 是要改到比1000还要大?
发表于 2014-5-9 10:00 | 显示全部楼层
改成7000,MATLAB直接崩溃掉了求有遇到同样问题的大神帮忙解决下~~~
发表于 2014-5-9 12:36 | 显示全部楼层
请大家注意编写Hilbert谱程序的时候,注意instfreq函数的调用。
发表于 2014-5-19 10:17 | 显示全部楼层
为什么用边际谱画出来的幅值和仿真信号的对不上
发表于 2014-6-6 09:46 | 显示全部楼层
提供的文件,很有帮助,谢谢
发表于 2015-3-26 22:02 | 显示全部楼层
我正在做的本科毕业论文就是基于Hilbert谱图的滚动轴承故障诊断
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-12-23 23:49 , Processed in 0.100254 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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