Алгоритмы дискретного и быстрого преобразования Фурье

Функции

int dspl_dft (double *xR, double *xI, int n, double *yR, double *yI)
 Дискретное преобразование Фурье. Подробнее...
 
int dspl_fft (double *xR, double *xI, int n, void *pdspl, double *yR, double *yI)
 Быстрое преобразование Фурье Подробнее...
 
int dspl_goertzel (double *xR, double *xI, int n, int *ind, int k, double *yR, double *yI)
 Алгоритм Герцеля для расчета отдельных спектральных отсчетов дискретного преобразования Фурье. Подробнее...
 
int dspl_ifft (double *xR, double *xI, int n, void *pdspl, double *yR, double *yI)
 Обратное Быстрое преобразование Фурье Подробнее...
 
int dspl_pwelch (double *xR, double *xI, int n, int win_type, double win_param, int npsd, int noverlap, void *pdspl, double fs, double *ppsd, double *pfrq)
 

Подробное описание

Алгоритмы дискретного и быстрого преобразования Фурье используют функции из библиотеки FFTW

Функции

◆ dspl_dft()

int dspl_dft ( double *  xR,
double *  xI,
int  n,
double *  yR,
double *  yI 
)

Дискретное преобразование Фурье.

Функция рассчитывает \( n \)-точечное дискретное преобразование Фурье вещественного или комплексного сигнала \( x(m) \), \( m = 0 \ldots n-1 \).

\[ Y(k) = \sum_{m = 0}^{n-1} x(m) \cdot \exp \left( -j \cdot \frac{2\pi}{n} \cdot m \cdot k \right), \]

где \( k = 0 \ldots n-1 \).

Аргументы
[in]xRУказатель на вектор реальной части входного сигнала \(x(m)\), \( m = 0 \ldots n-1 \).
Размер вектора [n x 1].

[in]xIУказатель на вектор мнимой части входного сигнала \(x(m)\), \( m = 0 \ldots n-1 \). Размер вектора [n x 1].
Этот указатель может быть NULL если входной сигнал чисто вещественный.

[in]nРазмер ДПФ \(n\) (размер векторов входного сигнала и результата ДПФ).

[out]yRУказатель на вектор реальной части результата ДПФ \(Y(k)\), \( k = 0 \ldots n-1 \). Размер вектора [n x 1].
Память должна быть выделена.

[out]yIУказатель на вектор реальной части результата ДПФ \(Y(k)\), \( k = 0 \ldots n-1 \). Размер вектора [n x 1].
Память должна быть выделена.

Возвращает
DSPL_OK если ДПФ рассчитана успешно.
В противном случае код ошибки:
DSPL_ERROR_PTR если xR == NULL или yR == NULL или yI == NULL.
DSPL_ERROR_SIZE если n < 1.
Автор
Бахурин Сергей. www.dsplib.org
Заметки
Данная функция выполняет расчет ДПФ наивным методом и требует \( n^2 \) комплексных умножений.
Для увеличения скорости расчета рекомендуется использовать алгоритмы быстрого преобразования Фурье dspl_fft.
Примеры:
dft_freq_fig1.c и dft_freq_fig4.c.

◆ dspl_fft()

int dspl_fft ( double *  xR,
double *  xI,
int  n,
void *  pdspl,
double *  yR,
double *  yI 
)

Быстрое преобразование Фурье

Функция рассчитывает БПФ использованием функции библиотеки FFTW.

Аргументы
[in]xRУказатель на вектор реальной части входного сигнала.
Размер вектора [n x 1].

[in]xIУказатель на вектор мнимой части входного сигнала.
Размер вектора [n x 1].
Этот указатель может быть NULL если входной сигнал чисто вещественный.

[in]nРазмер БПФ (размер входных и выходных векторов).

[in]pdsplУказатель на объект DSPL.
Объект DSPL это внутренняя структура, которая хранит необходимые данные для алгоритмов библиотеки.
Объект DSPL должен быть однократно заполнен функцией dspl_obj_create после связывания с DSPL, и должен быть очищен функцией dspl_obj_free перед выходом.

[out]yRУказатель на вектор реальной части БПФ.
Размер вектора [n x 1].
Память должна быть выделена заранее.

[out]yIУказатель на вектор мнимой части БПФ.
Размер вектора [n x 1].
Память должна быть выделена заранее.

Возвращает
DSPL_OK если БПФ рассчитано успешно.
В противном случае код ошибки:
DSPL_ERROR_PTR если xR == NULL или yR == NULL или yI == NULL.
DSPL_ERROR_SIZE если n<1.
Автор
Бахурин Сергей. www.dsplib.org
Примеры:
win_spectral_leakage.c.

◆ dspl_goertzel()

int dspl_goertzel ( double *  xR,
double *  xI,
int  n,
int *  ind,
int  k,
double *  yR,
double *  yI 
)

Алгоритм Герцеля для расчета отдельных спектральных отсчетов дискретного преобразования Фурье.

Данный алгоритм позволяет расчитать k спектральных отсчетов n-точечного ДПФ, заданных вектором индексов ind.

Аргументы
[in]xRУказатель на вектор реальной части входного сигнала.
Размер вектора [n x 1].

[in]xIУказатель на вектор мнимой части входного сигнала.
Размер вектора [n x 1].
Указатель может быть NULL если входной сигнал вещественный.

[in]nРазмер вектора входного сигнала.

[in]indУказатель на вектор индексов спектральных отсчетов для расчета которых будет использоваться алгоритм Герцеля.
Размер вектора [k x 1].

[in]kРазмер вектора индексов спектральных отсчетов ind.

[out]yRУказатель на вектор реальной части спектральных отсчетов, соответствующих номерам ind.
Размер вектора [k x 1].
Память должна быть выделена.

[out]yIУказатель на вектор мнимой части спектральных отсчетов, соответствующих номерам ind.
Размер вектора [k x 1].
Память должна быть выделена.

Возвращает
DSPL_OK Функция выполнена успешно.
В противном случае код ошибки:
DSPL_ERROR_PTR Ошибка указателя. Указатели xR, ind, yR и yI не могут быть NULL.
DSPL_ERROR_SIZE Ошибка размера массива. Параметры n и k должны быть больше единицы.
Заметки
Алгоритм Герцеля эффективен когда необходимо расчитать несколько спектральных отсчетов сигнала большой длительности.

Однако, размер k вектора индексов ind может быть произвольным, в том числе больше длины сигнала n. В этом случае некоторые спектральные отсчеты будут повторяться, но это не повлечет за собой ошибки выполнения.

Значения индексов спектральных отсчетов ind также могут быть произвольными целыми, в том числе и отрицательными. В этом случае будут расчитаны спектральные отсчеты с индексами по модулю n.

Автор
Бахурин Сергей. www.dsplib.org
Примеры:
goertzel_dtmf.c.

◆ dspl_ifft()

int dspl_ifft ( double *  xR,
double *  xI,
int  n,
void *  pdspl,
double *  yR,
double *  yI 
)

Обратное Быстрое преобразование Фурье

Функция рассчитывает обратное быстрое преобразование Фурье с использованием функции библиотеки FFTW.

Аргументы
[in]xRУказатель на вектор реальной части входного спектра.
Размер вектора [n x 1].

[in]xIУказатель на вектор мнимой части входного спектра.
Размер вектора [n x 1].
Этот указатель может быть NULL если входной сигнал чисто вещественный.

[in]nРазмер ОБПФ (размер входных и выходных векторов).

[in]pdsplУказатель на объект DSPL.
Объект DSPL это внутренняя структура, которая хранит необходимые данные для алгоритмов библиотеки.
Объект DSPL должен быть однократно заполнен функцией dspl_obj_create после связывания с DSPL, и должен быть очищен функцией dspl_obj_free перед выходом.

[out]yRУказатель на вектор реальной части ОБПФ.
Размер вектора [n x 1].
Память должна быть выделена заранее.

[out]yIУказатель на вектор мнимой части ОБПФ.
Размер вектора [n x 1].
Этот параметр может быть NULL.
Функция вернет только реальную часть ОБПФ в этом случае.

Возвращает
DSPL_OK если БПФ рассчитано успешно.
В противном случае код ошибки:
DSPL_ERROR_PTR если xR == NULL или yR == NULL.
DSPL_ERROR_SIZE если n<1.
Автор
Бахурин Сергей. www.dsplib.org

◆ dspl_pwelch()

int dspl_pwelch ( double *  xR,
double *  xI,
int  n,
int  win_type,
double  win_param,
int  npsd,
int  noverlap,
void *  pdspl,
double  fs,
double *  ppsd,
double *  pfrq 
)

Оценка спектральной плотности мощности (СПМ) случайного процесса методом Уэлча.

СПМ есть среднее периодограм нормированное к мощности входного сигнала.

Аргументы
[in]xRУказатель вектор реальной части входного сигнала.
Размер вектора [n x 1].

[in]xIУказатель вектор мнимой части входного сигнала.
Размер вектора [n x 1].
Этот указатель может быть NULL если СПМ рассчитывается для вещественного процесса.

[in]nРазмер выборки входного сигнала (размер векторов xR и xI).

[in]win_typeКомбинация флагов для задания типа оконной функции.
Для задания типа окна используется комбинация битовых масок DSPL_WIN_MASK | DSPL_WIN_SYM_MASK.
Маска DSPL_WIN_MASK задает тип оконной функции. Может принимать следующие значения:
Значение DSPL_WIN_MASK Описание
DSPL_WIN_BARTLETT Непараметрическое окно Бартлетта
DSPL_WIN_BARTLETT_HANN Непараметрическое окно Бартлетта-Ханна
DSPL_WIN_BLACKMAN Непараметрическое окно Блэкмана
DSPL_WIN_BLACKMAN_HARRIS Непараметрическое окно Блэкмана-Харриса
DSPL_WIN_BLACKMAN_NUTTALL Непараметрическое окно Блэкмана-Натталла
DSPL_WIN_COS Непараметрическое косинус-окно
DSPL_WIN_FLAT_TOP Непараметрическое окно с максимально плоской вершиной
DSPL_WIN_GAUSSIAN Параметрическое окно Гаусса
DSPL_WIN_HAMMING Непараметрическое окно Хемминга
DSPL_WIN_HANN Непараметрическое окно Ханна
DSPL_WIN_LANCZOS Непараметрическое окно Ланкзоса
DSPL_WIN_NUTTALL Непараметрическое окно Натталла
DSPL_WIN_RECT Непараметрическое прямоугольное окно
Маска DSPL_WIN_SYM_MASK задает симметричное или периодическое окно:
Значение DSPL_WIN_SYM_MASK Описание
DSPL_WIN_SYMMETRIC Симметричное окно (по умолчанию)
DSPL_WIN_PERIODIC Периодическое окно


[in]win_paramПараметр окна.
Данный параметр применяется только для параметрических оконных функций.
Для непараметрических окон игнорируется.
[in]npsdРазмер оценки СПМ в частотной области.
Задает количество спектральных отсчетов СПМ и длину временного окна для оценки периодограмм.

[in]noverlapВеличина перекрытия периодограмм при усреднении.
Параметр должен принимать значения от 1 до npsd.

[in]pdsplУказатель на объект DSPL.
Объект DSPL это внутренняя структура, которая хранит необходимые данные для алгоритмов библиотеки.
Объект DSPL должен быть однократно заполнен функцией dspl_obj_create после связывания с DSPL, и должен быть очищен функцией dspl_obj_free перед выходом.

[in]fsЧастота дискретизации входного сигнала (Гц).

[out]ppsdУказатель на вектор СПМ.
Размер вектора [npsd x 1].
Память должна быть выделена.

[out]pfrqУказатель на вектор частоты соответствующей отсчетам СПМ.
Размер вектора [npsd x 1].
Память должна быть выделена.

Возвращает
DSPL_OK если СПМ рассчитана успешно.
В противном случае код ошибки:
DSPL_ERROR_PTR если xR == NULL или pdspl == NULL или ppsd == NULL.
DSPL_ERROR_SIZE если n<1 или npsd<1.
DSPL_ERROR_OVERLAP ошибка задания параметра noverlap. Данный параметр должен быть от 1 до npsd.
DSPL_ERROR_FS параметр частоты дискретизации дожен быть положительным.
Автор
Бахурин Сергей. www.dsplib.org
Примеры:
hilbert_fft.c.

Oбнаружили ошибку в тексте? Выделите ее мышкой и нажмите