ABEL - Functions to compute the discrete ABEL transform:
abelalloc allocate and return a pointer to an Abel transformer
abelfree free an Abel transformer
abel compute the Abel transform
Function prototypes:
void *abelalloc (int n);
void abelfree (void *at);
void abel (void *at, float f[], float g[]);
Input:
ns number of samples in the data to be transformed
f[] array of floats, the function being transformed
Output:
at pointer to Abel transformer returned by abelalloc(int n)
g[] array of floats, the transformed data returned by
abel(*at,f[],g[])
Notes:
The Abel transform is defined by:
Infinity
g(y) = 2 Integral dx f(x)/sqrt(1-(y/x)^2)
|y|
Linear interpolation is used to define the continuous function f(x)
corresponding to the samples in f[]. The first sample f[0] corresponds
to f(x=0) and the sampling interval is assumed to be 1. Therefore, the
input samples correspond to 0 <= x <= n-1. Samples of f(x) for x > n-1
are assumed to be zero. These conventions imply that
g[0] = f[0] + 2*f[1] + 2*f[2] + ... + 2*f[n-1]
References:
Hansen, E. W., 1985, Fast Hankel transform algorithm: IEEE Trans. on
Acoustics, Speech and Signal Processing, v. ASSP-33, n. 3, p. 666-671.
(Beware of several errors in the equations in this paper!)
Authors: Dave Hale and Lydia Deng, Colorado School of Mines, 06/01/90