【问题标题】:Is there anybody who knows how I can replace these APIs from fftw by Kiss-fft APIs?有谁知道我如何用 Kiss-fft API 替换 fftw 中的这些 API?
【发布时间】:2013-07-29 12:04:00
【问题描述】:

有谁知道我如何用 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);

【问题讨论】:

    标签: c signal-processing fft fftw kissfft


    【解决方案1】:

    对于第一种情况(2D 实数到复数 FFT),您需要使用tools/kiss_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);
    

    对于第二种情况(一维复数到实数 FFT),您需要使用tools/kiss_fftr.h 中的 API:

    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,但通常任何const 都是输入数据。
    • 所以在第二种情况下我不需要 void Kiss_fftr(...);因为我在做逆傅立叶 (c2r) ,对吧?
    • 还有一件事,所以你知道“kiss_fft_cpx”的大小是多少?
    • 是的,在第二种情况下,您可能只需要kiss_fftri - 为了完整性,我将整个 API 放在那里。 sizeof(kiss_fft_cpx) 只是 2*sizeof(kiss_fft_scalar) (它是一个复数,即实数 + 虚数)。 sizeof(kiss_fft_scalar) 将取决于您的编译方式,即您是否使用 FIXED_POINT。听起来您确实需要在进一步阅读之前正确阅读 KissFFT 文档。
    猜你喜欢
    • 1970-01-01
    • 2014-06-17
    • 2020-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-14
    相关资源
    最近更新 更多