C 有谁知道我如何用Kiss fft API替换fftw中的这些API吗?

C 有谁知道我如何用Kiss fft API替换fftw中的这些API吗?,c,signal-processing,fft,fftw,kissfft,C,Signal Processing,Fft,Fftw,Kissfft,有谁知道我如何用Kiss fft API替换fftw中的这些API吗 fftw_plan fftw_plan_dft_r2c_2d(int n0, int n1,double *in, fftw_complex *out,unsigned flags); fftw_plan fftw_plan_dft_c2r_1d(int n0,fftw_complex *in, double *out,unsigned flags); 对于第一种情况(2D实数到复数FFT),您需要使用tools/kiss\

有谁知道我如何用Kiss fft API替换fftw中的这些API吗

fftw_plan fftw_plan_dft_r2c_2d(int n0, int n1,double *in, fftw_complex *out,unsigned flags);
fftw_plan fftw_plan_dft_c2r_1d(int n0,fftw_complex *in, double *out,unsigned flags);
对于第一种情况(2D实数到复数FFT),您需要使用
tools/kiss\u fftndr.h
中的API:

kiss_fftndr_cfg  kiss_fftndr_alloc(const int *dims,int ndims,int inverse_fft,void*mem,size_t*lenmem);
void kiss_fftndr(
        kiss_fftndr_cfg cfg,
        const kiss_fft_scalar *timedata,
        kiss_fft_cpx *freqdata);
void kiss_fftndri(
        kiss_fftndr_cfg cfg,
        const kiss_fft_cpx *freqdata,
        kiss_fft_scalar *timedata);
kiss_fftr_cfg kiss_fftr_alloc(int nfft,int inverse_fft,void * mem, size_t * lenmem);
void kiss_fftr(kiss_fftr_cfg cfg,const kiss_fft_scalar *timedata,kiss_fft_cpx *freqdata);
void kiss_fftri(kiss_fftr_cfg cfg,const kiss_fft_cpx *freqdata,kiss_fft_scalar *timedata);
对于第二种情况(1D复数到实FFT),您需要使用
tools/kiss\u fftr.h
中的API:

kiss_fftndr_cfg  kiss_fftndr_alloc(const int *dims,int ndims,int inverse_fft,void*mem,size_t*lenmem);
void kiss_fftndr(
        kiss_fftndr_cfg cfg,
        const kiss_fft_scalar *timedata,
        kiss_fft_cpx *freqdata);
void kiss_fftndri(
        kiss_fftndr_cfg cfg,
        const kiss_fft_cpx *freqdata,
        kiss_fft_scalar *timedata);
kiss_fftr_cfg kiss_fftr_alloc(int nfft,int inverse_fft,void * mem, size_t * lenmem);
void kiss_fftr(kiss_fftr_cfg cfg,const kiss_fft_scalar *timedata,kiss_fft_cpx *freqdata);
void kiss_fftri(kiss_fftr_cfg cfg,const kiss_fft_cpx *freqdata,kiss_fft_scalar *timedata);
对于第一种情况(2D实数到复数FFT),您需要使用
tools/kiss\u fftndr.h
中的API:

kiss_fftndr_cfg  kiss_fftndr_alloc(const int *dims,int ndims,int inverse_fft,void*mem,size_t*lenmem);
void kiss_fftndr(
        kiss_fftndr_cfg cfg,
        const kiss_fft_scalar *timedata,
        kiss_fft_cpx *freqdata);
void kiss_fftndri(
        kiss_fftndr_cfg cfg,
        const kiss_fft_cpx *freqdata,
        kiss_fft_scalar *timedata);
kiss_fftr_cfg kiss_fftr_alloc(int nfft,int inverse_fft,void * mem, size_t * lenmem);
void kiss_fftr(kiss_fftr_cfg cfg,const kiss_fft_scalar *timedata,kiss_fft_cpx *freqdata);
void kiss_fftri(kiss_fftr_cfg cfg,const kiss_fft_cpx *freqdata,kiss_fft_scalar *timedata);
对于第二种情况(1D复数到实FFT),您需要使用
tools/kiss\u fftr.h
中的API:

kiss_fftndr_cfg  kiss_fftndr_alloc(const int *dims,int ndims,int inverse_fft,void*mem,size_t*lenmem);
void kiss_fftndr(
        kiss_fftndr_cfg cfg,
        const kiss_fft_scalar *timedata,
        kiss_fft_cpx *freqdata);
void kiss_fftndri(
        kiss_fftndr_cfg cfg,
        const kiss_fft_cpx *freqdata,
        kiss_fft_scalar *timedata);
kiss_fftr_cfg kiss_fftr_alloc(int nfft,int inverse_fft,void * mem, size_t * lenmem);
void kiss_fftr(kiss_fftr_cfg cfg,const kiss_fft_scalar *timedata,kiss_fft_cpx *freqdata);
void kiss_fftri(kiss_fftr_cfg cfg,const kiss_fft_cpx *freqdata,kiss_fft_scalar *timedata);

“timedata”和“freqdata”是“in”和“out”?这取决于您正在进行的是正向FFT还是反向FFT,但一般来说,任何
const
都是输入数据。因此,在第二种情况下,我不需要将kiss_fftr(…)作废;因为我在做逆傅立叶变换(c2r),对吗?还有一件事,你知道“kiss\u fft\u cpx”的大小吗?是的,在第二种情况下,你可能只需要
kiss\u fftri
-为了完整性,我把整个API放在那里。sizeof(kiss_fft_cpx)只是2*sizeof(kiss_fft_scalar)(它是一个复数,即实+虚)。sizeof(kiss\u fft\u scalar)将取决于编译方式,即是否使用定点。听起来,在进一步讨论之前,您确实需要正确阅读KissFFT文档。“timedata”和“freqdata”是“in”和“out”?这取决于您是在进行正向还是反向FFT,但一般来说,任何
const
都是输入数据。因此,在第二种情况下,我不需要取消kiss_fftr(…); 因为我在做逆傅立叶变换(c2r),对吗?还有一件事,你知道“kiss\u fft\u cpx”的大小吗?是的,在第二种情况下,你可能只需要
kiss\u fftri
-为了完整性,我把整个API放在那里。sizeof(kiss_fft_cpx)只是2*sizeof(kiss_fft_scalar)(它是一个复数,即实+虚)。sizeof(kiss\u fft\u scalar)将取决于编译方式,即是否使用定点。听起来你真的需要好好阅读KissFFT文档,然后再进一步。