suj568 发表于 2007-4-20 16:18

如何在matlab上实现希尔伯特变换?求程序!!

%对滤波后的数据进行hilbert变换
load d:\0920\01-06\f06500.txt
size(f06500)
y=abs(hilbert(f06500));
save d:\0920\01-06\06500hil.txt y -ascii

之前自己得到一个将数据进行希尔伯特变换的程序,是在matlab上运行的,但是运行不了。具体问题不懂。自己一直没有用过matlab。所以来这里希望得到高手指点。如果能有程序给我更好!谢谢大家!

zhlong 发表于 2007-4-20 17:24

hilbert,这个函数不就是么?

songzy41 发表于 2007-4-20 18:19

在楼主的程序中已进行了hilbert变换, y是信号f06500进行hilbert变换后的模值。不知楼主还要什么hilbert变换的程序?

zhangnan3509 发表于 2007-4-20 20:40

回复 #1 suj568 的帖子

楼主究竟想到达什么目的!想怎么做?

fay1014 发表于 2007-4-21 08:58

y=abs(imag(hilbert(f06500)));

suj568 发表于 2007-4-21 17:16

求教!

:@Q
??? Error: File: h.m Line: 3 Column: 9
Unexpected MATLAB expression.

运行总是告之这个是怎么回事呢?

suj568 发表于 2007-4-21 17:19

我做了修改 ,高手帮看看有什么问题哈!!谢谢咯!!

%对滤波后的数据进行hilbert变换
load d:\shuju\hgt.2000stdf.txt
size(hgt.2000stdf)
y=abs(imag(hilbert(hgt.2000stdf)));
save d:\shuju\hgt.2000stdhil.txt y -ascii

suj568 发表于 2007-4-21 17:24

我是学气象的,毕业论文需要把这些文本里的数据进行希尔波变换,就可以了。所以不用太复杂。本来说是
matlab里就有这个函数,可是不知道是不是我安装的matlab有问题。

eight 发表于 2007-4-21 17:44

原帖由 suj568 于 2007-4-21 17:19 发表
%对滤波后的数据进行hilbert变换
load d:\shuju\hgt.2000stdf.txt
size(hgt.2000stdf)
y=abs(imag(hilbert(hgt.2000stdf)));
save d:\shuju\hgt.2000stdhil.txt y -ascii

建议阅读最基本的语法书,以下是提示:

    A = load('d:\shuju\hgt.2000stdf.txt');
    if ~isstruct(A)
      error('The mat file should contain a structure array!');
    end
    cFieldNames = fieldnames(A);
    B = A.(cFieldNames{1});

suj568 发表于 2007-4-21 19:52

回复 #9 eight 的帖子

强悍哈!我是个门外汉啦!什么都不懂 ,现学编程也不现实,论文时间是不允许的!不过还是感谢你给我提示。呵呵 很抱歉我看不懂!我做了一下的修改:
%对滤波后的数据进行hilbert变换
A = load('d:\shuju\hgt.2000stdf.txt');
    if ~isstruct(A)
      error('The mat file should contain a structure array!');
    end
    cFieldNames = fieldnames(A);
    B = A.(cFieldNames{1});
size(hgt.2000stdf)
y=abs(imag(hilbert(hgt.2000stdf)));
save d:\shuju\hgt.2000stdhil.txt y -ascii

得到的结果是:
??? Error: File: h.m Line: 8 Column: 9
Unexpected MATLAB expression.

希望继续得到你热心帮助! 给你们都舔麻烦了哈!

suj568 发表于 2007-4-21 20:10

%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('frequency')
end
set(gca,'YDir','normal')
xlabel('time')
title('Hilbert-Huang spectrum')

以上是我在本论坛里“送给搞EMD或者HHT..... ”这个帖子里找到一个m文件
好像也是说希尔伯特变换的。我有个疑问,'Hilbert-Huang spectrum'与我想做的希尔伯特变换有没有什么区别?请高手指教!

suj568 发表于 2007-4-21 20:18

%HHSPECTRUMcompute Hilbert-Huang spectrum
%
% = HHSPECTRUM(x,t,l,aff) computes the Hilbert-Huang spectrum
%
% inputs:
%   - x   : matrix with one signal per row
%   - t   : time instants
%   - l   : estimation parameter for instfreq (integer >=1 (1:default))
%   - aff : if 1, displays the computation evolution
%
% outputs:
%   - A   : instantaneous amplitudes
%   - f   : instantaneous frequencies
%   - tt: truncated time instants
%
% calls:
%   - hilbert: computes the analytic signal
%   - instfreq : computes the instantaneous frequency
%   - disprog : displays the computation evolution
%
%Examples:
%
%s = randn(1,512);
%imf = emd(s);
% = hhspectrum(imf(1:end-1,:));
%
%s = randn(10,512);
% = hhspectrum(s,1:512,2,1);
%
% rem: need the Time-Frequency Toolbox (http://tftb.nongnu.org)
%
% See also
%emd, toimage, disp_hhs
%
% G. Rilling, last modification 3.2007
% gabriel.rilling@ens-lyon.fr

function = hhspectrum(x,t,l,aff)

error(nargchk(1,4,nargin));

if nargin < 2

t=1:size(x,2);

end

if nargin < 3

l=1;

end

if nargin < 4

aff = 0;

end

if min(size(x)) == 1
        if size(x,2) == 1
                x = x';
                if nargin < 2
                        t = 1:size(x,2);
                end
        end
        Nmodes = 1;
else
        Nmodes = size(x,1);
end

lt=length(t);

tt=t((l+1):(lt-l));

for i=1:Nmodes

an(i,:)=hilbert(x(i,:)')';
f(i,:)=instfreq(an(i,:)',tt,l)';
A=abs(an(:,l+1:end-l));

if aff
        disprog(i,Nmodes,max(Nmodes,100))
end

end

是另外一个m 文件,hhspectrum.m。

越看越晕呼!哦呵呵~~~

eight 发表于 2007-4-21 20:41

原帖由 suj568 于 2007-4-21 19:52 发表
强悍哈!我是个门外汉啦!什么都不懂 ,现学编程也不现实,论文时间是不允许的!不过还是感谢你给我提示。呵呵 很抱歉我看不懂!我做了一下的修改:
%对滤波后的数据进行hilbert变换
A = load('d:\shuju\hgt. ...

大哥,你还是先看看基础书好吧,如果按照你所写的,那我得到的B有何用啊?


A = load('d:\shuju\hgt.2000stdf.txt');
    if ~isstruct(A)
      error('The mat file should contain a structure array!');
    end
    cFieldNames = fieldnames(A);
    B = A.(cFieldNames{1});
y=abs(imag(hilbert(B)));
save d:\shuju\hgt.2000stdhil.txt y -ascii

eight 发表于 2007-4-21 20:47

原帖由 suj568 于 2007-4-21 20:10 发表
%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. ...

建议先把HHT基本概念和手上的程序先整理清楚,这样少走很多弯路,也不会到处碰壁

suj568 发表于 2007-4-21 23:41

回复 #14 eight 的帖子

呵呵 谢谢你给的忠告,只是时间不由人哈 ,导师让加快速度呢 。我还在弄数据 ,连图都还没有开始绘。不过实话 我自己现在到处弄了很多MATLAB的资料来看 ,也有希尔伯特变换的资料,不过毕竟刚开始,时间又紧,入门还是有点困难!!真心感谢你的帮助!不过最后有没有受益,都得感谢你热心帮助哦!!
页: [1] 2
查看完整版本: 如何在matlab上实现希尔伯特变换?求程序!!