X = hilbert(data) computes the hilbert transform of data(:) not a N
dimensionnal Hilbert transform.
Please find attached a function which is intended to compute the N dimensionnal
Hilbert transform obtained applying
the 1D hilbert transform to all columns then to all rows, ....
This function exploits the ability of fft to compute all fft along a given
dimension with a single call.
Serge
Le 08/02/2016 17:51, Lester Anderson a écrit :
So what would the syntax be for doing a column run Hilbert, and row run Hilbert?
It does sound like the suggesting would do what I think it is meant to.
X = hilbert(data) // does compute pretty fast!
At the moment I have used the netCDF code to read in GMT (net CDF)
data, which is a 601 x 601 matrix (x,y). So in order to do the column
and row method is it necessary to transpose the matrix, e.g. x = x' ?
Thanks for any pointers
On 5 February 2016 at 19:02, Tim Wescott <t...@wescottdesign.com> wrote:
Any time you go from 1D to 2D you suddenly end up with more than one way
to do things, so I'm pretty sure that "how would one..." should really
be worded "how would YOU...", or perhaps "how would someone in this
field...".
It sounds like you want to keep things rectilinear, so it may be best to
just apply the transform column-by-column and row-by-row. That SHOULD
work, and if you do it as matrix operations it should be pretty fast in
Scilab.
On Fri, 2016-02-05 at 12:52 +0000, Lester Anderson wrote:
Hi Serge,
I am working with grid data, so looking for the 2D Hilbert, the
results I think should appear similar to doing a directional
derivative, where X highlights features with N-S trends and E-W for Y.
Lester
On 5 February 2016 at 12:24, Serge Steer <serge.st...@inria.fr> wrote:
Le 05/02/2016 10:56, Lester Anderson a écrit :
Hello
A quick query. How would one define the Hilbert transform of a grid
for X and Y directions; looking for two solutions Hx and Hy (for the
real values).
Can you explain more precisely what you expect?
Do you want to apply Hilbert transform to each column and to each rows or
to perform a 2D Hilbert transform?
Serge
Thanks
Lester
_______________________________________________
users mailing list
users@lists.scilab.org
http://lists.scilab.org/mailman/listinfo/users
_______________________________________________
users mailing list
users@lists.scilab.org
http://lists.scilab.org/mailman/listinfo/users
_______________________________________________
users mailing list
users@lists.scilab.org
http://lists.scilab.org/mailman/listinfo/users
--
Tim Wescott
www.wescottdesign.com
Control & Communications systems, circuit & software design.
Phone: 503.631.7815
Cell: 503.349.8432
_______________________________________________
users mailing list
users@lists.scilab.org
http://lists.scilab.org/mailman/listinfo/users
_______________________________________________
users mailing list
users@lists.scilab.org
http://lists.scilab.org/mailman/listinfo/users
function x = hilbertND(x)
// Marple, S.L., "Computing the discrete-time analytic signal via FFT,"
// IEEE Transactions on Signal Processing, Vol. 47, No.9 (September
// 1999), pp.2600-2603
// http://ieeexplore.ieee.org/iel5/78/16975/00782222.pdf?arnumber=782222
if type(x)<>1 then
error(msprintf(gettext("%s: Wrong type for input argument #%d: Array of
floating point numbers expected.\n"),"hilbert",1))
end
if x==[] then return;end
if ~isreal(x,0) then
error(msprintf(gettext("%s: Input argument #%d must be
real.\n"),"hilbert",1));
end
d=size(x);
for k=1:size(d,'*')
n=d(k)
if k<>1 then
x=permute(x,[k,1]);
end
dp=size(x)
x=matrix(x,d(k),-1)
x = fft(real(x),-1,1);
h=zeros(x)
no2 = int(n/2);
if ((2*no2) == n) then // n is even
h([1,no2+1],:) = 1;
h(2:no2,:) = 2;
else // n is odd
h(1,:) = 1;
h(2:(n+1)/2,:) = 2;
end
x = fft(x.*h,1,1);
x=matrix(x,dp)
if k<>1 then x=permute(x,[k,1]);end
end
endfunction
_______________________________________________
users mailing list
users@lists.scilab.org
http://lists.scilab.org/mailman/listinfo/users