声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 22373|回复: 25

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

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

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

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

x
%对滤波后的数据进行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。所以来这里希望得到高手指点。如果能有程序给我更好!谢谢大家!
回复
分享到:

使用道具 举报

发表于 2007-4-20 17:24 | 显示全部楼层
hilbert,这个函数不就是么?
发表于 2007-4-20 18:19 | 显示全部楼层
在楼主的程序中已进行了hilbert变换, y是信号f06500进行hilbert变换后的模值。不知楼主还要什么hilbert变换的程序?
发表于 2007-4-20 20:40 | 显示全部楼层

回复 #1 suj568 的帖子

楼主究竟想到达什么目的!想怎么做?
发表于 2007-4-21 08:58 | 显示全部楼层
y=abs(imag(hilbert(f06500)));
 楼主| 发表于 2007-4-21 17:16 | 显示全部楼层

求教!

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

运行总是告之这个  是怎么回事呢?
 楼主| 发表于 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
 楼主| 发表于 2007-4-21 17:24 | 显示全部楼层
我是学气象的,毕业论文需要把这些文本里的数据进行希尔波变换,就可以了。所以不用太复杂。本来说是
matlab里就有这个函数,可是不知道是不是我安装的matlab有问题。
发表于 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


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

  1.     A = load('d:\shuju\hgt.2000stdf.txt');
  2.     if ~isstruct(A)
  3.         error('The mat file should contain a structure array!');
  4.     end
  5.     cFieldNames = fieldnames(A);
  6.     B = A.(cFieldNames{1});
复制代码
 楼主| 发表于 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.

希望继续得到你热心帮助! 给你们都舔麻烦了哈!
 楼主| 发表于 2007-4-21 20:10 | 显示全部楼层
%DISP_HHS  display 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,[0,0.5],im,[inf,0]);
  ylabel('normalized frequency')
else
  imagesc(t,[0,0.5*fs],im,[inf,0]);
  ylabel('frequency')
end
set(gca,'YDir','normal')
xlabel('time')
title('Hilbert-Huang spectrum')

以上是我在本论坛里“送给搞EMD或者HHT..... ”这个帖子里找到一个m文件
好像也是说希尔伯特变换的。我有个疑问,'Hilbert-Huang spectrum'与我想做的希尔伯特变换有没有什么区别?  请高手指教!
 楼主| 发表于 2007-4-21 20:18 | 显示全部楼层
%HHSPECTRUM  compute Hilbert-Huang spectrum
%
% [A,f,tt] = 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);
%[A,f,tt] = hhspectrum(imf(1:end-1,:));
%
%s = randn(10,512);
%[A,f,tt] = 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 [A,f,tt] = 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。

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


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


  1. A = load('d:\shuju\hgt.2000stdf.txt');
  2.     if ~isstruct(A)
  3.         error('The mat file should contain a structure array!');
  4.     end
  5.     cFieldNames = fieldnames(A);
  6.     B = A.(cFieldNames{1});
  7. y=abs(imag(hilbert(B)));
  8. save d:\shuju\hgt.2000stdhil.txt y -ascii
复制代码
发表于 2007-4-21 20:47 | 显示全部楼层
原帖由 suj568 于 2007-4-21 20:10 发表
%DISP_HHS  display 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基本概念和手上的程序先整理清楚,这样少走很多弯路,也不会到处碰壁
 楼主| 发表于 2007-4-21 23:41 | 显示全部楼层

回复 #14 eight 的帖子

呵呵 谢谢你给的忠告,只是时间不由人哈 ,导师让加快速度呢 。我还在弄数据 ,连图都还没有开始绘。不过实话 我自己现在到处弄了很多MATLAB的资料来看 ,也有希尔伯特变换的资料,不过毕竟刚开始,时间又紧,入门还是有点困难!!真心感谢你的帮助!不过最后有没有受益,都得感谢你热心帮助哦!!
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-29 12:17 , Processed in 0.064285 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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