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