merged AI doc, some new pages
This commit is contained in:
@@ -1,10 +1,9 @@
|
||||
/*! \file pifft.h
|
||||
* \ingroup Math
|
||||
* \ingroup FFTW
|
||||
* \~\brief
|
||||
* \~english FFT, IFFT and Hilbert transformations
|
||||
* \~russian БПФ, ОБПФ и преобразования Гильберта
|
||||
*/
|
||||
//! \~\file pifft.h
|
||||
//! \~\ingroup Math
|
||||
//! \~\ingroup FFTW
|
||||
//! \~\brief
|
||||
//! \~english FFT, IFFT and Hilbert transformations
|
||||
//! \~russian БПФ, ОБПФ и преобразования Гильберта
|
||||
/*
|
||||
PIP - Platform Independent Primitives
|
||||
Class for FFT, IFFT and Hilbert transformations
|
||||
@@ -64,16 +63,37 @@
|
||||
|
||||
# include "pip_fftw_export.h"
|
||||
|
||||
//! \~\ingroup Math
|
||||
//! \~\ingroup FFTW
|
||||
//! \~\brief
|
||||
//! \~english Double-precision FFT helper that stores the last transform result.
|
||||
//! \~russian Вспомогательный класс БПФ двойной точности, сохраняющий результат последнего преобразования.
|
||||
class PIP_EXPORT PIFFT_double {
|
||||
public:
|
||||
//! \~english Constructs an empty transformer.
|
||||
//! \~russian Создает пустой объект преобразования.
|
||||
PIFFT_double();
|
||||
|
||||
//! \~english Calculates complex FFT for the input signal.
|
||||
//! \~russian Вычисляет комплексное БПФ для входного сигнала.
|
||||
PIVector<complexd> * calcFFT(const PIVector<complexd> & val);
|
||||
//! \~english Calculates FFT for a real-valued input signal.
|
||||
//! \~russian Вычисляет БПФ для вещественного входного сигнала.
|
||||
PIVector<complexd> * calcFFT(const PIVector<double> & val);
|
||||
//! \~english Calculates inverse FFT for a complex spectrum.
|
||||
//! \~russian Вычисляет обратное БПФ для комплексного спектра.
|
||||
PIVector<complexd> * calcFFTinverse(const PIVector<complexd> & val);
|
||||
//! \~english Calculates the analytic signal using a Hilbert transform.
|
||||
//! \~russian Вычисляет аналитический сигнал с помощью преобразования Гильберта.
|
||||
PIVector<complexd> * calcHilbert(const PIVector<double> & val);
|
||||
//! \~english Returns magnitudes of the last calculated result.
|
||||
//! \~russian Возвращает модули последнего вычисленного результата.
|
||||
PIVector<double> getAmplitude() const;
|
||||
//! \~english Returns real parts of the last calculated result.
|
||||
//! \~russian Возвращает действительные части последнего вычисленного результата.
|
||||
PIVector<double> getReal() const;
|
||||
//! \~english Returns imaginary parts of the last calculated result.
|
||||
//! \~russian Возвращает мнимые части последнего вычисленного результата.
|
||||
PIVector<double> getImag() const;
|
||||
|
||||
private:
|
||||
@@ -118,16 +138,37 @@ private:
|
||||
void ftbase_ffttwcalc(PIVector<double> * a, int aoffset, int n1, int n2);
|
||||
};
|
||||
|
||||
//! \~\ingroup Math
|
||||
//! \~\ingroup FFTW
|
||||
//! \~\brief
|
||||
//! \~english Single-precision FFT helper that stores the last transform result.
|
||||
//! \~russian Вспомогательный класс БПФ одинарной точности, сохраняющий результат последнего преобразования.
|
||||
class PIP_EXPORT PIFFT_float {
|
||||
public:
|
||||
//! \~english Constructs an empty transformer.
|
||||
//! \~russian Создает пустой объект преобразования.
|
||||
PIFFT_float();
|
||||
|
||||
//! \~english Calculates complex FFT for the input signal.
|
||||
//! \~russian Вычисляет комплексное БПФ для входного сигнала.
|
||||
PIVector<complexf> * calcFFT(const PIVector<complexf> & val);
|
||||
//! \~english Calculates FFT for a real-valued input signal.
|
||||
//! \~russian Вычисляет БПФ для вещественного входного сигнала.
|
||||
PIVector<complexf> * calcFFT(const PIVector<float> & val);
|
||||
//! \~english Calculates inverse FFT for a complex spectrum.
|
||||
//! \~russian Вычисляет обратное БПФ для комплексного спектра.
|
||||
PIVector<complexf> * calcFFTinverse(const PIVector<complexf> & val);
|
||||
//! \~english Calculates the analytic signal using a Hilbert transform.
|
||||
//! \~russian Вычисляет аналитический сигнал с помощью преобразования Гильберта.
|
||||
PIVector<complexf> * calcHilbert(const PIVector<float> & val);
|
||||
//! \~english Returns magnitudes of the last calculated result.
|
||||
//! \~russian Возвращает модули последнего вычисленного результата.
|
||||
PIVector<float> getAmplitude() const;
|
||||
//! \~english Returns real parts of the last calculated result.
|
||||
//! \~russian Возвращает действительные части последнего вычисленного результата.
|
||||
PIVector<float> getReal() const;
|
||||
//! \~english Returns imaginary parts of the last calculated result.
|
||||
//! \~russian Возвращает мнимые части последнего вычисленного результата.
|
||||
PIVector<float> getImag() const;
|
||||
|
||||
private:
|
||||
@@ -172,8 +213,14 @@ private:
|
||||
void ftbase_ffttwcalc(PIVector<float> * a, int aoffset, int n1, int n2);
|
||||
};
|
||||
|
||||
//! \~english Default FFT helper alias based on double precision.
|
||||
//! \~russian Псевдоним стандартного FFT-помощника на базе двойной точности.
|
||||
typedef PIFFT_double PIFFT;
|
||||
//! \~english Double-precision FFT helper alias.
|
||||
//! \~russian Псевдоним FFT-помощника двойной точности.
|
||||
typedef PIFFT_double PIFFTd;
|
||||
//! \~english Single-precision FFT helper alias.
|
||||
//! \~russian Псевдоним FFT-помощника одинарной точности.
|
||||
typedef PIFFT_float PIFFTf;
|
||||
|
||||
# ifndef CC_VC
|
||||
@@ -193,25 +240,44 @@ _PIFFTW_H(float)
|
||||
_PIFFTW_H(double)
|
||||
_PIFFTW_H(ldouble)
|
||||
|
||||
//! \~\ingroup Math
|
||||
//! \~\ingroup FFTW
|
||||
//! \~\brief
|
||||
//! \~english Thin wrapper over libfftw3 plans for a selected scalar type.
|
||||
//! \~russian Тонкая обертка над планами libfftw3 для выбранного скалярного типа.
|
||||
template<typename T>
|
||||
class PIFFTW {
|
||||
public:
|
||||
//! \~english Constructs the backend object for the selected precision.
|
||||
//! \~russian Создает внутренний объект для выбранной точности.
|
||||
explicit PIFFTW() {
|
||||
p = 0;
|
||||
newP(p);
|
||||
}
|
||||
//! \~english Destroys the backend object and its cached plans.
|
||||
//! \~russian Уничтожает внутренний объект и его кэшированные планы.
|
||||
~PIFFTW() { deleteP(p); }
|
||||
|
||||
//! \~english Calculates complex FFT for the input signal.
|
||||
//! \~russian Вычисляет комплексное БПФ для входного сигнала.
|
||||
inline const PIVector<complex<T>> & calcFFT(const PIVector<complex<T>> & in) { return PIVector<complex<T>>().resize(in.size()); }
|
||||
//! \~english Calculates FFT for a real-valued input signal.
|
||||
//! \~russian Вычисляет БПФ для вещественного входного сигнала.
|
||||
inline const PIVector<complex<T>> & calcFFT(const PIVector<T> & in) { return PIVector<complex<T>>().resize(in.size()); }
|
||||
//! \~english Calculates inverse FFT for a complex spectrum.
|
||||
//! \~russian Вычисляет обратное БПФ для комплексного спектра.
|
||||
inline const PIVector<complex<T>> & calcFFTinverse(const PIVector<complex<T>> & in) { return PIVector<complex<T>>().resize(in.size()); }
|
||||
|
||||
//! \~english Operation kind for precomputed FFTW plans.
|
||||
//! \~russian Тип операции для заранее подготовленных планов FFTW.
|
||||
enum FFT_Operation {
|
||||
foReal,
|
||||
foComplex,
|
||||
foInverse
|
||||
foReal /** \~english Forward transform for real input \~russian Прямое преобразование для вещественного входа */,
|
||||
foComplex /** \~english Forward transform for complex input \~russian Прямое преобразование для комплексного входа */,
|
||||
foInverse /** \~english Inverse complex transform \~russian Обратное комплексное преобразование */
|
||||
};
|
||||
|
||||
//! \~english Prepares and caches a plan for the specified signal size and operation.
|
||||
//! \~russian Подготавливает и кэширует план для указанного размера сигнала и операции.
|
||||
inline void preparePlan(int size, FFT_Operation op) {}
|
||||
|
||||
private:
|
||||
@@ -250,6 +316,8 @@ inline void PIFFTW<float>::deleteP(void *& _p) {
|
||||
_p = 0;
|
||||
}
|
||||
|
||||
//! \~english Single-precision FFTW wrapper.
|
||||
//! \~russian Обертка FFTW одинарной точности.
|
||||
typedef PIFFTW<float> PIFFTWf;
|
||||
|
||||
|
||||
@@ -279,6 +347,8 @@ inline void PIFFTW<double>::deleteP(void *& _p) {
|
||||
_p = 0;
|
||||
}
|
||||
|
||||
//! \~english Double-precision FFTW wrapper.
|
||||
//! \~russian Обертка FFTW двойной точности.
|
||||
typedef PIFFTW<double> PIFFTWd;
|
||||
|
||||
|
||||
@@ -308,6 +378,8 @@ inline void PIFFTW<ldouble>::deleteP(void *& _p) {
|
||||
_p = 0;
|
||||
}
|
||||
|
||||
//! \~english Extended-precision FFTW wrapper.
|
||||
//! \~russian Обертка FFTW расширенной точности.
|
||||
typedef PIFFTW<ldouble> PIFFTWld;
|
||||
|
||||
# endif
|
||||
|
||||
Reference in New Issue
Block a user