comp.lang.idl-pvwave archive
Messages from Usenet group comp.lang.idl-pvwave, compiled by Paulo Penteado

Home » Public Forums » archive » Hankel (Fourier-Bessel) Transform
Show: Today's Messages :: Show Polls :: Message Navigator
E-mail to friend 
Return to the default flat view Create a new topic Submit Reply
Re: Hankel (Fourier-Bessel) Transform [message #88180 is a reply to message #25914] Wed, 26 March 2014 09:25 Go to previous messageGo to previous message
Mats Löfdahl is currently offline  Mats Löfdahl
Messages: 263
Registered: January 2012
Senior Member
Den tisdagen den 24:e juli 2001 kl. 21:03:48 UTC+2 skrev William Thompson:
> Georg.Pabst@nrc.ca (Georg Pabst) writes:
>
>> Hi,
>
>> I'm looking for the Hankel (Fourier-Bessel) Transform, i.e.,
>> int(0,infinity) f(t)*BesselJ(t*r)t dt being implemented in IDL.
>
>> There is a paper "Siegman A. 1980. Quasi fast Hankel transform. Opt.
>> Lett. 1, 13-15" and one can also find the code in Fortran or C...
>
>> Thanks,
>> Georg
>
> Here's an old program that I think might be what you need.
>
> Bill Thompson
>
>
>
> FUNCTION HANKEL,F
> ;
> ; This function returns the Hankel transform of the argument.
> ;
> S = SIZE(F)
> IF S(0) NE 1 THEN BEGIN
> PRINT,'*** Variable must be a one-dimensional array, name= F, routine HANKEL.'
> RETURN,F
> ENDIF
> ;
> X = INDGEN(F)
> K = ( 2. * !PI / FLOAT(N_ELEMENTS(X)) ) * X
> SC = 0.*X + 1.
> IF N_ELEMENTS(SC) GT 3 THEN BEGIN
> SC(0) = 3.D0 / 8.D0
> SC(1) = 7.D0 / 6.D0
> SC(2) = 23.D0 / 24.D0
> ENDIF
> ;
> H = BES0( K # X ) # ( K * F * SC )
> ;
> RETURN,H
> END

So this thread is from 2001 but it is all I found by googling for "Hankel transform IDL"...

I tried to use the HANKEL function given above but I couldn't make it work. The X=INDGEN(F) makes no sense to me. Should it be X=INDGEN(n_elements(F))? I tried that and as I can't find the BES0 function, I substituted beselj(K # X, 0). This gave me some output, but it completely failed my test of using the same function to compute the inverse Hankel transform and thus getting the original function back. So maybe my changes were all wrong.

So, does anyone know of a useful implementation for IDL? Or C? I just want to convolve some circularly symmetrical functions, but I want to do it as part of a model fitting problem so it would be great if I could save some time by not doing 2D FFTs.

In a response to the post above, Craig commented that it can be done with the discrete Fourier transform. That sounds easy. Is it?
[Message index]
 
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Previous Topic: CGMAP_GRID: Lattitude lines
Next Topic: IDL Indexing 2D->3D

-=] Back to Top [=-
[ Syndicate this forum (XML) ] [ RSS ] [ PDF ]

Current Time: Sun Oct 12 13:54:15 PDT 2025

Total time taken to generate the page: 1.20100 seconds