声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

楼主: zhoupingwoo

[HHT] Hilbert边际谱程序(matlab)

  [复制链接]
发表于 2007-7-11 08:23 | 显示全部楼层


以前没处理过轴承信号,做的都是转子信号,所以一直没去做这个例子。
版主可以参考一下这篇文献:
《小波变换及经验模式分解方法在电机轴承早期故障诊断中的应用》
回复 支持 反对
分享到:

使用道具 举报

发表于 2007-7-11 08:27 | 显示全部楼层

回复 #107 zhlong 的帖子

我只是对于这个数据来说的,看看效果到底怎么样
发表于 2007-7-11 09:30 | 显示全部楼层
原帖由 zhlong 于 2007-7-11 07:34 发表
破凰的这段程序没有问题的,频率序列也可以和边际谱点数对应起来!

两位版主起的都很早啊,呵呵。我想把频率与边际谱对应起来。取了2048点,结果bjp算出来只有400了。模拟信号好像容易对应些
发表于 2007-7-11 09:39 | 显示全部楼层

回复 #109 form 的帖子

边际谱的点数取决于
[E,tt1]=toimage(A,fa,tt,length(tt));

这里面参数的设置。
发表于 2007-7-11 10:57 | 显示全部楼层

回复 #110 zhlong 的帖子

看来还是要研究啊 原以为会告一段落,没想到这是刚刚开始
发表于 2007-7-24 22:04 | 显示全部楼层
我运行破凰的程序怎么提示出错啊?
??? Undefined function or variable 'isscalar'.

Error in ==> C:\MATLAB6p5\work\HHT分析完整版\toimage.m
On line 50  ==>     if isscalar(varargin{1})
发表于 2007-7-27 13:21 | 显示全部楼层
clear;
fs=1000;    %fs为采样频率;
N=1000;     %采样点数
t=1/fs:1/fs:1;
y1=2*sin(60*pi*t);
y2=5*sin(90*pi*t);
y=[y1;y2;zeros(size(y1))]; %IMF集
%%%%%%%%%%%%%求边际谱
[A,fa,tt]=hhspectrum(y);
[E,tt1]=toimage(A,fa,tt);
% E=flipud(E);
for k=1:size(E,1)
    bjp(k)=sum(E(k,:))*1/fs;  
end
%f=(0:N-3)/N*(fs/2);
r=size(E,1);
f=((1:r)/(2*r))*(fs);
plot(f,bjp);
xlabel('频率 / Hz');
ylabel('幅值');
這是小弟對畫圖座標部份做的一些小小更改,不知是否正確,希望與大家討論,並得到指正
toimage的部份frequency resolution仍然維持預設的400(因為小弟分析的數據都是好幾萬點,如果再提高的話,電腦會跑不動),所以frequency resolution會比原來的998稍差一點,由於小弟第一次發文,還
不知道怎麼附圖請見諒
另外 想請問bjp(k)=sum(E(k,:))*1/fs;中乘上1/fs是為甚麼,小弟一時想不到,請大家幫忙了 謝謝
发表于 2007-7-27 16:40 | 显示全部楼层
isscalar是matlab自带函数,可能你的matlab太老。
%ISSCALAR True if array is a scalar.
%   ISSCALAR(S) returns logical true (1) if S is a 1 x 1 matrix
%   and logical false (0) otherwise.
%
%   See also ISVECTOR, ISNUMERIC, ISLOGICAL, ISCHAR, ISEMPTY.

%   Copyright 1984-2005 The MathWorks, Inc.
%   $Revision: 1.1.6.6 $  $Date: 2005/06/21 19:28:31 $
发表于 2007-8-7 10:01 | 显示全部楼层

计算的结果怎么不一样!!

我直接使用了破凰的程序:
clear;
fs=1000;    %fs为采样频率;
N=1000;     %采样点数
t=1/fs:1/fs:1;
y1=2*sin(60*pi*t);
y2=5*sin(90*pi*t);
y=[y1;y2;zeros(size(y1))]; %IMF集
%%%%%%%%%%%%%求边际谱
[A,fa,tt]=hhspectrum(y);
[E,tt1]=toimage(A,fa,tt,length(tt));
E=flipud(E);
for k=1:size(E,1)
    bjp(k)=sum(E(k,:))*1/fs;  
end
f=(0:N-3)/N*(fs/2);
plot(f,bjp);
xlabel('频率 / Hz');
ylabel('幅值');

但算出的结果如下图,这是怎么回事呢?
HHT结果.JPG
发表于 2007-8-7 10:05 | 显示全部楼层

回复 #115 mofei 的帖子

你的EMD程序是哪一版的?
发表于 2007-8-7 10:55 | 显示全部楼层

从下面的网址下载的

用到的函数都是从法国的Grilling提供的开源程序中下载的。
下载地址:http://perso.ens-lyon.fr/patrick.flandrin/emd.html
发表于 2007-8-7 11:28 | 显示全部楼层

回复 #117 mofei 的帖子

E=flipud(E);  去掉这一句
发表于 2007-8-7 12:15 | 显示全部楼层

回复 #117 mofei 的帖子

你现在用的一定不是新的啊,前面的讨论说起过这个问题
发表于 2007-8-7 14:47 | 显示全部楼层

去掉flipud后

去掉flipud后图像.JPG
发表于 2007-8-7 14:48 | 显示全部楼层
EMD算法是破凰推荐的网站下载的。难道是matlab的版本的问题吗?
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-4-24 05:35 , Processed in 0.151263 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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