gusucode.com > 信号处理工具箱 - signal源码程序 > signal\signal\signal\hilbert.m

    function y = hilbert(x)
%HILBERT Hilbert transform.
%   HILBERT(X) is the Hilbert transform of the real part
%   of vector X.  The real part of the result is the original
%   real data; the imaginary part is the actual Hilbert
%   transform.  See also FFT and IFFT.
%
%   If X is a signal matrix, HILBERT(X) transforms the columns
%   of X independently.

%   Author(s): C. Denham, 1-7-88
%   	   L. Shure, 11-19-88, 5-22-90 - revised
%   	   K. Creager, 3-19-92, modified to use power of 2 FFT
%   	   T. Krauss, 11-4-92, revised
%   Copyright (c) 1988-98 by The MathWorks, Inc.
%   $Revision: 1.1 $  $Date: 1998/06/03 14:42:52 $

%   Reference(s):
%     [1] Jon Claerbout, Introduction to Geophysical Data Analysis.

[r,c] = size(x);
if r == 1
	x = x.';   % make it a column
end;
[n,cc] = size(x);
m = 2^nextpow2(n);
y = fft(real(x),m);
if m ~= 1
   h = [1; 2*ones(fix((m-1)/2),1); ones(1-rem(m,2),1); zeros(fix((m-1)/2),1)];
   y(:) = y.*h(:, ones(1,cc) );
end
y = ifft(y,m);
y = y(1:n,:);
if r == 1
   y = y.';
end