![]() |
EPFLSTILOBMarcel LeuteneggerAbout MATLAB toolbox Hankel transform |
---|
MATLAB toolbox
Double class
Extended class
Single class
Flex99-12C correlator
Flex02-0xD correlator
Vector functions
MEX-Builder
Error function
Hankel transform
The Hankel transform of order n (1) transforms rotationally symetric inputs in a computationally efficient manner. In particular, the Hankel transform of order 0 is equivalent to the two-dimensional Fourier transform of a rotationally symetric input. This package contains four implementations of the Hankel transform (1) and the inverse Hankel transform (2), respectively.
![]() |
(1) |
![]() |
(2) |
![]() |
(3) |
hat
, ihat
The Hankel transform implements a direct integration of equation (1). The integration is performed as a matrix product of the integration kernel Jn with the integrand I = rhΔr.
![]() |
(4) |
The integrand is the product of the signal with the ring area between neighboring mid-points.
![]() |
(5) |
The algorithm does not require any particular sampling at the exception of respecting Shannon's sampling condition. For the Hankel transform, the signal h and the kernel need to be resolved along the radius r. For the inverse transform, the spectrum H and the kernel need to be resolved along the spatial frequency k.
ht
, iht
This implementation is equivalent to the previous implementation for order 0. The integration of the Bessel function is performed a priori for obtaining the integration kernel more accurately. Hence, only the signal h need to be resolved along the radius r for the Hankel transform. For the inverse transform, only the spectrum H need to be resolved along the spatial frequency k.
For instance, the Hankel transform of a constant signal h = 1
up to a radius R is obtained with H = ht(h,R,k)
.
This means that the signal needs a single sampling point, whereas the other functions request many points.
dht
, idht
The quasi-discrete Hankel transform [1] is equivalent to the discrete Fourier transform algorithm. The transform uses a square, unitary matrix as integration kernel (7). The product of the kernel with a scaled signal (9) yields a scaled spectrum (8) and vice versa.
The sampling points are given by the roots z of the Bessel function Jn. The position and frequency sampling points are
![]() |
(6) |
where R is the maximum radius. The unitary integration kernel is then
![]() |
(7) |
and the scaled signal and spectrum are
![]() |
and | ![]() |
(8) |
The forward and the inverse Hankel transform are then given by the matrix products |
|||
![]() |
and | ![]() |
(9) |
fht
, ifht
This implementation applies the Gardner transform [2] to the position and frequency variable r and k, respectively. The product kr gets the sum u + v in the transformed variables. Therefore, the Hankel transform turns into a convolution, which can be efficiently computed with Fourier transforms [3].
This package is freeware. The author reserves the right to modify any of the contained files.
You are allowed to distribute it as long as you deliver the entire, original package for free.
Path | File | Description | ||
---|---|---|---|---|
/ | dht.m | Quasi-discrete Hankel transform of integer order n | ||
dht.mat | Roots of Bessel functions of the first kind | |||
fht.m | Quasi fast Hankel transform of order n | |||
hat.m | Hankel transform of order n | |||
ht.m | Hankel transform of order 0 | |||
idht.m | Inverse quasi-discrete Hankel transform of integer order n | |||
ifht.m | Inverse quasi fast Hankel transform of order n | |||
ihat.m | Inverse Hankel transform of order n | |||
iht.m | Inverse Hankel transform of order 0 | |||
Readme.txt | Summary | |||
private/ | frdr.m | Integrand | ||
JnRoots.m | Roots of Bessel functions of the first kind |
Any warranty is strictly refused. Don't rely on any financial or technical support in case of malfunction or damage.
Comments are welcome. I will try to track reported problems and fix bugs.
Initial release.
Bug fix in FHT thanks to Mark W. Sprague.
Bug fix in DHT thanks to Nicolas Grisouard. Hankel transforms of order 1 or higher require to take care of the first root (zero) of the Bessel functions of the first kind when calculating the transformation kernel (avoid division by zero).
Downloading these files, you accept the copyright terms.
MATLAB is a registered trademark of The MathWorks, Inc.
© 2011 École Polytechnique Fédérale de Lausanne