24 #include "cheetah/utils/ConvolvePlan.h" 37 , _c(fftwf_alloc_complex(npts))
39 if(_c ==
nullptr)
throw std::bad_alloc();
40 _d=fftwf_alloc_complex(npts);
43 throw std::bad_alloc();
45 _fwda = fftwf_plan_dft_r2c_1d(npts, _a, _c, FFTW_MEASURE);
46 if(_fwda ==
nullptr) {
49 throw std::bad_alloc();
51 _fwdb = fftwf_plan_dft_r2c_1d(npts, _b, _d, FFTW_MEASURE);
52 if(_fwdb ==
nullptr) {
55 fftwf_destroy_plan(_fwda);
56 throw std::bad_alloc();
58 _bwd = fftwf_plan_dft_c2r_1d(npts, _c, _output, FFTW_MEASURE);
62 fftwf_destroy_plan(_fwda);
63 fftwf_destroy_plan(_fwdb);
64 throw std::bad_alloc();
66 _scale = (float) npts;
69 ConvolvePlan::~ConvolvePlan()
73 fftwf_destroy_plan(_fwda);
74 fftwf_destroy_plan(_fwdb);
75 fftwf_destroy_plan(_bwd);
83 for(i = 0; i < _npts; ++i) {
84 for(j = 0; j < 2; ++j) {
85 _c[i][j] *= _d[i][j]/_scale;
Some limits and constants for FLDO.
ConvolvePlan(std::size_t npts, float *a, float *b, float *output)
fast convolution of two data sets a and b of length npts output = a * b