merged AI doc, some new pages

This commit is contained in:
2026-03-12 14:46:57 +03:00
parent 07ae277f9e
commit ed13838237
206 changed files with 14088 additions and 5152 deletions

View File

@@ -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