kissfft
Библиотека быстрого преобразования Фурье (FFT) на чистом C, основанная на принципе Keep It Simple, Stupid. Поддерживает типы данных float, double, Q16, Q32 и SIMD.
Подключение к проекту
conanfile.py
from conan import ConanFile
class Application(ConanFile):
settings = "os", "compiler", "arch", "build_type"
generators = "PkgConfigDeps", "CMakeDeps"
requires = ("kissfft/<version>@aurora",)
.spec файл
%define __provides_exclude_from ^%{_datadir}/%{name}/lib/.*$
%define __requires_exclude ^(libkissfft.*|libm.*)$
BuildRequires: conan
В секции %build:
CONAN_LIB_DIR="%{_builddir}/conan-libs/"
conan-install-if-modified --source-folder="%{_sourcedir}/.." --output-folder="$CONAN_LIB_DIR" -vwarning
PKG_CONFIG_PATH="$CONAN_LIB_DIR":$PKG_CONFIG_PATH
export PKG_CONFIG_PATH
CMakeLists.txt
include(FindPkgConfig)
pkg_check_modules(KISSFFT REQUIRED IMPORTED_TARGET kissfft-float)
target_link_libraries(${PROJECT_NAME} PRIVATE PkgConfig::KISSFFT)
Пример использования
Заголовочные файлы:
kiss_fft.h- одномерное комплексное БПФkiss_fftnd.h- многомерное БПФkiss_fftr.h- БПФ с оптимизацией для вещественных данныхkissfft.hh- шаблонная версия на C++
#include "kiss_fft.h"
#include <stdio.h>
int main() {
int nfft = 1024;
int is_inverse = 0;
kiss_fft_cfg cfg = kiss_fft_alloc(nfft, is_inverse, 0, 0);
kiss_fft_cpx in[nfft], out[nfft];
/* заполнить входные отсчёты */
for (int i = 0; i < nfft; i++) {
in[i].r = 0;
in[i].i = 0;
}
kiss_fft(cfg, in, out);
printf("DC component: %f + %fi\n", out[0].r, out[0].i);
kiss_fft_free(cfg);
return 0;
}