Matlab Code for the Discrete Hankel Transform

Previous definitions of a Discrete Hankel Transform (DHT) have focused on methods to approximate the continuous Hankel integral transform without regard for the properties of the DHT itself. Recently, the theory of a Discrete Hankel Transform was proposed that follows the same path as the Discrete Fourier/ Continuous Fourier transform. This DHT possesses orthogonality properties which lead to invertibility and also possesses the standard set of discrete shift, modulation, multiplication and convolution rules. The proposed DHT can be used to approximate the continuous forward and inverse Hankel transform. This paper describes the matlab code developed for the numerical calculation of this DHT.


(1) Overview Introduction
There have been many attempts to define a Discrete Hankel Transform (DHT) in the literature, however prior work has focused on proposing methods to approximate the calculation of the continuous Hankel integral, for example as given in [1,2]. This stands in stark contrast to the approach taken with the Fourier transform where the Discrete Fourier Transform (DFT) is a transform in its own right, with its own mathematical theory of the manipulated quantities. An additional feature of a carefully derived DFT is that it can be used to approximate the continuous Fourier transform, with relevant sampling and interpolation theories that can be used. Recently, a DHT was proposed as a complete and orthogonal transform that possesses its own mathematical theory, including the standard set of shift, modulation, multiplication and convolution rules [3]. In addition, this DHT can be used to approximate the continuous Hankel transform in the same manner that the Discrete Fourier transform is known to be able to approximate the continuous Fourier transform.

Overview of the Discrete Hankel Transform The Continuous Hankel Transform
The forward Hankel transform of order n transforms a function f(r) in the spatial domain to a function F(ρ) in the spatial frequency domain and is given by [4, p. 5.6] (1) where J n (z) is the nth order Bessel function of the first kind. The inverse transform is given by (2) More on the continuous transform can be found in [4].

Discrete Hankel Transform
The nth order discrete Hankel transform (DHT) proposed in [3] is defined as the transformation of the discrete vector f to vector F given by (3) This discrete transform consists of taking an N -1 vector f and a (N -1) × (N -1) square matrix of Hankel order n, Y nN , to perform the matrix-vector multiplication and obtain the N -1 DHT vector F. If the DHT as defined in (3) is used to approximate the CHT, then the vector f represents the sampled function to be transformed and the vector F represents the discrete function in the transformed (Hankel) domain. The Y nN matrix in equation (3) is defined as having the m, k th entry given by (4) where j nk is the k th zero of the Bessel function of the first kind of order n [3]. Properties of the DHT as defined in equation (3) are shown in [3].
Since the core of the tested discrete transform is the transformation matrix Y nN , various properties have to be maintained. One of these properties is that the matrix Y nN possesses orthogonality properties, where Y nN Y nN = I. In order to preserve the requisite properties of Y nN and therefore of the DHT itself, the first Bessel zero used in computing the entries of the Y nN matrix is the first non-zero value of the Bessel zero of order n. If the Y nN matrix is not assembled following this rule, the matrix loses its orthogonality property and thus performing the discrete transform leads to improper results. If the DHT is used to approximate a CHT, then this restriction also applies to the discretization of the continuous function, as shall be discussed further below.
The inverse discrete Hankel transform f of the vector F is then given by (5) The discrete forward and inverse Hankel transforms as given in equations (3) and (5) have been shown to possess the standard set of shift, modulation, multiplication and convolution rules. In addition, this DHT can be used to approximate the continuous Hankel transform in the same manner that the Discrete Fourier transform is known to be able to approximate the continuous Fourier transform at certain discrete points.

Discrete Hankel Transform to approximate the Continuous Hankel Transform
Given a continuous function f(r) evaluated at the discrete points r nk in the space domain (1 ≤ k ≤ N -1), its nth order Hankel-transform function F(ρ) evaluated at the discrete points ρ nm (1 ≤ m ≤ N -1), can be approximately given by [3] (6) where α is a scaling factor to be discussed below, and Conversely, given a continuous function F(ρ) evaluated at the discrete points ρ nm in the frequency domain (1 ≤ m ≤ N -1), its nth order inverse Hankel transform function f(r) evaluated at the discrete points r nk (1 ≤ k ≤ N -1), can be approximately given by (7) For both the forward and inverse transforms, α is a scaling factor which depends on the function properties and shall be discussed further below. The choice of discretization points r nk and ρ nm is also discussed below. The full theory of the discrete Hankel transform is given in [3].

Discretization Points
In order to properly use the discrete transform to approximate the continuous transform, a function has to be discretized at specific sampling points. For a finite spatial range [0, R] and a Hankel transform of order n, these sampling points are given in the space domain as (8) For the finite frequency domain range [0, W ρ ] and a Hankel transform of order n, the sampling points are given by (9) It is important to note that as in the case of the computation of the transformation matrix Y nN , the first Bessel zero j n1 used in computing the discretization points is the first non-zero value.
The relationship , derived in [3], holds between the ranges in space and frequency. Choosing N determines the dimension (size) of the DHT and determines j nN . The determination of j nN (via choosing N) determines the range in one domain once the range in the other domain is chosen. In fact, any two of R, W ρ , j nN can be chosen but the third must follow from W ρ R = j nN . A similar relationship applies when using the Discrete Fourier Transform, any two of the range in each domain and the size of the DFT can be chosen independently.

Scaling Factor
The scaling factor α necessary for using the DHT to approximate the CHT depends on whether the function is space-limited or band-limited. Since it might be hard to determine if a function is space or band limited, the concept of effective limit is introduced. Therefore, a function defined as being "effectively limited in space by R" means that if r > R, then as r → ∞, f(r) → 0. In other words, the function can be made as close to zero as desired by selecting an R that is large enough. The same idea can be applied to the spatial frequency domain, where the effective domain would be denoted by W ρ . The conditions and corresponding scaling factors are listed in Table 1.
The detailed derivation of these scaling factors was shown in [3]. It can be observed that the scaling factors for the space-limited or frequency limited cases can be derived from each other via W ρ R = J nN .

Implementation and architecture
The software is based on the MATLAB programming language. The implementation of the discrete Hankel transform is decomposed into distinct functions. These functions consist of the various steps that have to be performed in order to properly execute the transform. These steps are as follows:  The steps are the same regardless of if the function is in the space or frequency domain and are summarized in Figure 1.
Furthermore, the Y nN transformation matrix is used for both the forward and inverse transform. Steps 2-3 only need to be performed if the function (vector) to be transformed is not already given as a set of discrete points. In the case of a continuous function in either the space or frequency domain, it is important to use the sampling points as proposed in equations (8), (9) and then to discretize the continuous function by evaluating at these points. Failing to do so results in the function not being properly transformed since there is a necessary relationship between the sampling points and the transformation matrix Y nN . In order to perform the steps listed above, several Matlab functions have been developed. These functions are listed in Table 2.
Additionally, the matlab script GuidetoDHT.m is included to illustrate the execution of the necessary computational steps.

Quality control
The software was tested by using the DHT to approximate the computation of both the continuous Hankel forward and inverse transforms and comparing the results with known (continuous) forward and inverse Hankel transform pairs. Different transform orders n were evaluated.
For the purpose of testing the accuracy of the DHT and IDHT, the dynamic error was used, defined as [6] (10) This error function compares the difference between the exact function values f(v) (evaluated from the continuous function) and the function values estimated via the discrete transform, f*(v), scaled with the maximum value of the discretely estimated samples. Equation (10) can be used to evaluate the computation of either forward or inverse Hankel transform via the DHT/IDHT and compared with known continuous Hankel relationships. The dynamic error uses the ratio of the absolute error to the maximum amplitude of the function on a log scale. Therefore, negative decibel errors imply an accurate discrete estimation of the true transform value. The transform was also tested for accuracy on itself. This is performed by consecutive forward and then inverse transformation in order to verify that the transforms themselves do not add errors. For this evaluation, the average absolute error was used.
The methodology of the testing is given in further detail in [7] and also in the theory paper, [3].

(3) Reuse potential
The Discrete Hankel Transform is applicable to many areas of scientific computation and potential reuse could be very high. Further details on applications can be found in [3].