00001 /* 00002 00003 Hankel transform (Abel transform followed by FFT) 00004 Copyright (C) 1995 Colorado School of Mines. All rights reserved. 00005 Copyright (C) 2001 Jussi Laako 00006 00007 This program is free software; you can redistribute it and/or modify 00008 it under the terms of the GNU General Public License as published by 00009 the Free Software Foundation; either version 2 of the License, or 00010 (at your option) any later version. 00011 00012 This program is distributed in the hope that it will be useful, 00013 but WITHOUT ANY WARRANTY; without even the implied warranty of 00014 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00015 GNU General Public License for more details. 00016 00017 You should have received a copy of the GNU General Public License 00018 along with this program; if not, write to the Free Software 00019 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00020 00021 Source converted from cwplib (by Dave Hale and Lydia Deng / Colorado 00022 School of Mines). 00023 00024 References: 00025 Hansen, E. W., 1985, Fast Hankel transform algorithm: IEEE Trans. on 00026 Acoustics, Speech and Signal Processing, v. ASSP-33, n. 3, p. 666-671. 00027 (Beware of several errors in the equations in this paper!) 00028 00029 */ 00030 00031 00032 #include <dsp/DSPOp.hh> 00033 //#include <dsp/PFAFFT.hh> 00034 00035 00036 #ifndef HANKEL_HH 00037 #define HANKEL_HH 00038 00058 class clHankel 00059 { 00060 long lSize; 00061 long lFFTSize; 00062 float fOutScale0; 00063 float fOutScale1; 00064 double dOutScale0; 00065 double dOutScale1; 00066 clDSPAlloc A; 00067 clDSPAlloc B0; 00068 clDSPAlloc B1; 00069 clDSPAlloc GX; 00070 clDSPAlloc GK; 00071 clDSPOp DSP; 00072 //clPFAFFT FFT; 00078 void InitAbel (const float *); 00080 void InitAbel (const double *); 00087 void DoAbel (float *, const float *); 00089 void DoAbel (double *, const double *); 00093 void UninitAbel (); 00094 public: 00095 clHankel (); 00096 ~clHankel (); 00106 void Initialize (long, const float *); 00108 void Initialize (long, const double *); 00112 void Uninitialize (); 00124 void Process0 (float *, const float *); 00126 void Process0 (double *, const double *); 00138 void Process1 (float *, const float *); 00140 void Process1 (double *, const double *); 00141 }; 00142 00143 #endif