00001 /** @file psVectorFFT.h 00002 * 00003 * @brief Contains FFT transform related functions for psVector 00004 * 00005 * @ingroup Transform 00006 * 00007 * @author Robert DeSonia, MHPCC 00008 * 00009 * @version $Revision: 1.1.1.1 $ $Name: $ 00010 * @date $Date: 2005/06/15 21:08:12 $ 00011 * 00012 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii 00013 */ 00014 00015 #ifndef PS_VECTOR_FFT_H 00016 #define PS_VECTOR_FFT_H 00017 00018 #include "psVector.h" 00019 00020 /// @addtogroup Transform 00021 /// @{ 00022 00023 /** Specify direction of FFT */ 00024 typedef enum { 00025 /// psImageFFT/psVectorFFT should perform a forward FFT. 00026 PS_FFT_FORWARD = 1, 00027 00028 /// psImageFFT/psVectorFFT should perform a reverse FFT. 00029 PS_FFT_REVERSE = 2, 00030 00031 /// psImageFFT/psVectorFFT should perform a reverse FFT with a real result. 00032 PS_FFT_REAL_RESULT = 4 00033 } psFFTFlags; 00034 00035 00036 /** Forward and reverse FFT calculations. 00037 * 00038 * This takes as input the vector of interest (in) and the direction 00039 * (direction), which is specified by an enumerated type psFftDirection. 00040 * The input vector may be of type psF32 or psC32, the result is always 00041 * psC32. If the input vector is psF32, the direction must be forward. 00042 * 00043 * @return psVector* the FFT transformation result 00044 */ 00045 psVector* psVectorFFT( 00046 psVector* out, ///< a psVector to recycle. If NULL, a new psVector is made. 00047 const psVector* in, ///< the vector to apply transform to 00048 psFFTFlags direction ///< the direction of the transform 00049 ); 00050 00051 /** extract the real portion of a complex vector 00052 * 00053 * @return psVector* real portion of the input vector. 00054 */ 00055 psVector* psVectorReal( 00056 psVector* out, ///< a psVector to recycle. If NULL, a new psVector is made. 00057 const psVector* in ///< the psVector to extract real portion from 00058 ); 00059 00060 /** extract the imaginary portion of a complex vector 00061 * 00062 * @return psVector* imaginary portion of the input vector. 00063 */ 00064 psVector* psVectorImaginary( 00065 psVector* out, ///< a psVector to recycle. If NULL, a new psVector is made. 00066 const psVector* in ///< the psVector to extract imaginary portion from 00067 ); 00068 00069 /** creates a complex vector from separate real and imaginary vectors 00070 * 00071 * @return psVector* resulting complex vector 00072 */ 00073 psVector* psVectorComplex( 00074 psVector* out, ///< a psVector to recycle. If NULL, a new psVector is made. 00075 const psVector* real, ///< the real vector 00076 const psVector* imag ///< the imaginary vector 00077 ); 00078 00079 /** computes the complex conjugate of a vector 00080 * 00081 * @return psVector* the complex conjugate of the 'in' vector 00082 */ 00083 psVector* psVectorConjugate( 00084 psVector* out, ///< a psVector to recycle. If NULL, a new psVector is made. 00085 const psVector* in ///< the psVector to compute conjugate of 00086 ); 00087 00088 /** computes the power spectrum of a vector 00089 * 00090 * @return psVector* the power spectrum of the 'in' vector 00091 */ 00092 psVector* psVectorPowerSpectrum( 00093 psVector* out, ///< a psVector to recycle. If NULL, a new psVector is made. 00094 const psVector* in ///< the psVector to power spectrum of 00095 ); 00096 00097 /// @} 00098 00099 #endif // #ifndef PS_VECTOR_FFT_H
1.4.1