WJzhengdong 发表于 2010-12-1 14:59

求完整的EMD-HHT工具箱?

哪位同志有完整的正确的EMD-HHT的MATLAB工具箱,我自己在很多地方下载了一些,但是作出来的效果和某篇论文中的效果不同,自己对工具箱中的函数也做了简单的更改还是效果不是很理想。
基本上EMD-HHT分解用到了,这几个函数,emd(),emd_visu(),hhspecturm(),toimage(),disp_hhs().还有下载到一个plot-hht的工具箱,基本上还是有些问题的。但是发现的问题是下载的几个emd工具箱中toimage(),disp_hhs()函数的编写内容也不是一样的,效果基本上是一样的,但是我不太会修改。而且我希望disp_hhs画出的谱不是dB谱,而是幅值谱,该了半天也感觉不对尽。哪位有对这些函数修改好的正确的能给发一下吗?谢谢了

liu222bing 发表于 2010-12-1 15:48

我最近也在做这方面的东西,请问你的toimage函数是什么格式的?可以=toimage(A,fa,tt,length(tt));这样格式调用吗?

WJzhengdong 发表于 2010-12-1 16:20

function = toimage(A,f,t,splx,sply)是这样的。之前的一个和你的一样,不过发现这个还是有问题,里边的程序我还是没看懂。这个toimage到底是做了什么

hitdely 发表于 2010-12-7 21:03

=toimage(A,f,tt,length(tt));
disp_hhs(im,[],fs);
%TOIMAGEtransforms a spectrum made of 1D functions in an 2D image
%
% = TOIMAGE(A,f,t,splx,sply) transforms a spectrum made
% of 1D functions (e.g., output of "hhspectrum") in an 2D image
%
% inputs :   - A    : amplitudes of modes (1 mode per row of A)
%            - f    : instantaneous frequencies
%            - t    : time instants
%            - splx : number of columns of the output im (time resolution).
%                     If different from length(t), works only for uniform
%                     sampling.
%            - sply : number of rows of the output im (frequency resolution).
% outputs :- im   : 2D image of the spectrum
%            - tt   : time instants in the image
%            - ff   : centers of the frequency bins
%
% Examples : = toimage(A,f); = toimage(A,f,t); = toimage(A,f,sply);
%             = toimage(A,f,splx,sply); = toimage(A,f,t,splx,sply);
%
%
% See also
%emd, hhspectrum, disp_hhs
%
% G. Rilling, last modification 3.2007
% gabriel.rilling@ens-lyon.fr

function = toimage(A,f,varargin)


DEFSPL = 400;

error(nargchk(2,5,nargin));

switch nargin
case 2
    t = 1:size(A,2);
    sply = DEFSPL;
    splx = length(t);
case 3
    if isscalar(varargin{1})
      t = 1:size(A,2);
      splx = length(t);
      sply = varargin{1};
    else
      t = varargin{1};
      splx = length(t);
      sply = DEFSPL;
    end
case 4
    if isscalar(varargin{1})
      t = 1:size(A,2);
      sply = varargin{1};
      splx = varargin{2};
    else
      t = varargin{1};
      sply = varargin{2};
      splx = length(t);
    end
case 5
    t = varargin{1};
    splx = varargin{2};
    sply = varargin{3};
end
if isvector(A)
A = A(:)';
f = f(:)';
end


if issparse(A) || ~isreal(A) || length(size(A)) > 2
error('A argument must be a real matrix')
end
if issparse(f) || ~isreal(f) || length(size(f)) > 2
error('f argument must be a real matrix')
end
if any(size(f)~=size(A))
error('A and f matrices must have the same size')
end
if issparse(t) || ~isreal(t) || ~isvector(t) || length(t)~=size(A,2)
error('t argument must be a vector and its length must be the number of columns in A and f inputs')
end
if ~isscalar(splx) || ~isreal(splx) || splx ~= floor(splx) || splx <= 0
error('splx argument must be a positive integer')
end
if ~isscalar(sply) || ~isreal(sply) || sply ~= floor(sply) || sply <= 0
error('splx argument must be a positive integer')
end

if any(diff(diff(t))) && splx ~= length(t)
warning('toimage:nonuniformtimeinsants','When splx differs from length(t), the function only works for equally spaced time instants. You may consider reformating your data (using e.g. interpolation) before using toimage.')
end

f = min(f,0.5);
f = max(f,0);

indf = round(2*f*(sply-1)+1);
indt = repmat(round(linspace(1,length(t),splx)),size(A,1),1);
im = accumarray(,A(:),);

indt = indt(1,:);
tt = t(indt);
ff = (0:sply-1)*0.5/sply+1/(4*sply);

%DISP_HHSdisplay Hilbert-Huang spectrum
%
% DISP_HHS(im,t,inf)
% displays in a new figure the spectrum contained in matrix "im"
% (amplitudes in dB).
%
% inputs:- im: image matrix (e.g., output of "toimage")
%          - t (optional): time instants (e.g., output of "toimage")
%          - inf (optional): -dynamic range in dB (wrt max)
%            default: inf = -20
%          - fs: sampling frequency
%
% use:disp_hhs(im) ; disp_hhs(im,t) ; disp_hhs(im,inf)
%       disp_hhs(im,t,inf) ; disp_hhs(im,inf,fs) ; disp_hhs(im,[],fs)
%       disp_hhs(im,t,[],fs) ; disp_hhs(im,t,inf,fs)
%
%
% See also
%emd, hhspectrum, toimage
%
% G. Rilling, last modification 3.2007
% gabriel.rilling@ens-lyon.fr

function disp_hhs(varargin)

error(nargchk(1,3,nargin));
fs = 0;
inf = -20;
im = varargin{1};
t = 1:size(im,2);
switch nargin
case 1
    %raf
case 2
    if isscalar(varargin{2})
      inf = varargin{2};
    else
      t = varargin{2};
    end
case 3
    if isvector(varargin{2})
      t = varargin{2};
      inf = varargin{3};
    else
      inf = varargin{2};
      fs = varargin{3};
    end
case 4
    t = varargin{2};
    inf = varargin{3};
    fs = varargin{4};
end

if isempty(inf)
inf = -20;
end

if inf > 0
inf = -inf;
elseif inf == 0
error('inf must be nonzero')
end

M=max(max(im));

warning off
im = 10*log10(im/M);
warning on

figure

if fs == 0
imagesc(t,,im,);
ylabel('normalized frequency')
else
imagesc(t,,im,);
ylabel('频率')
end
set(gca,'YDir','normal')
xlabel('采样点')
title('Hilbert-Huang spectrum')

end

hitdely 发表于 2010-12-7 21:04

你试试这两个程序能用吗 在我这里好用 具体的作用你可以看看那个注释 大家多交流

ice_fire 发表于 2011-4-9 10:09

关注此问题

ccming 发表于 2011-4-9 17:17

xieixe louzhu

ccming 发表于 2011-4-10 11:42

谢谢楼主!

cartoonyjw 发表于 2011-9-7 21:15

我也要找个完整的hht工具箱,谁有共享一下啊{:{39}:}

李清志 发表于 2011-9-8 12:10

回复 9 # cartoonyjw 的帖子

我也想找啊。求助啊 啊。

zhangxiskd 发表于 2013-1-22 23:11

求完整的HHT工具箱啊
页: [1]
查看完整版本: 求完整的EMD-HHT工具箱?