Есть ли кто-нибудь, кто знает, как я могу заменить эти API из fftw на API Kiss-fft?

Есть ли кто-нибудь, кто знает, как я могу заменить эти API из fftw на API Kiss-fft?

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);

person Mohammadreza Seifikar    schedule 29.07.2013    source источник


Ответы (1)


В первом случае (2D реальное-сложное БПФ) вам нужно использовать API в tools/kiss_fftndr.h:

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);

Для второго случая (одномерное комплексное преобразование в реальное БПФ) вам необходимо использовать API в tools/kiss_fftr.h:

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);
person Paul R    schedule 30.07.2013
comment
timedata и freqdata входят и выходят? - person Mohammadreza Seifikar; 30.07.2013
comment
Это зависит от того, делаете ли вы прямое или обратное БПФ, но в целом все const является входными данными. - person Paul R; 30.07.2013
comment
поэтому во втором случае мне не нужно выполнять void kiss_fftr(...); потому что я делаю обратный Фурье (c2r), верно? - person Mohammadreza Seifikar; 30.07.2013
comment
еще одна вещь, так что вы знаете, каков размер kiss_fft_cpx? - person Mohammadreza Seifikar; 30.07.2013
comment
Да, во втором случае вы, вероятно, просто хотите kiss_fftri — я положил туда весь API для полноты картины. sizeof(kiss_fft_cpx) - это просто 2*sizeof(kiss_fft_scalar) (это комплексное число, т.е. реальное + мнимое). sizeof(kiss_fft_scalar) будет зависеть от того, как вы компилируете, то есть используете ли вы FIXED_POINT или нет. Похоже, вам действительно нужно правильно прочитать документацию KissFFT, прежде чем идти дальше. - person Paul R; 30.07.2013
comment
@PaulR Давно не виделись! Судя по всему, вы человек GOTO для all-things-FFT в Stackoverflow. Пожалуйста, позвольте мне поковырять вас в другой задаче. У меня другой вопрос, связанный с kissfft. Вы не возражаете взглянуть на это? Вот ссылка. - person karlphillip; 18.05.2020
comment
@karlphillip: извините, я на самом деле не эксперт ни в kissfft, ни в Python - я потратил некоторое время на изучение kissfft для конкретной задачи, но это было давным-давно (кажется, в 2013 году!), так что я, вероятно, закончил дата сейчас. Хорошей новостью является то, что автор kissfft зависает на StackOverflow, поэтому вы можете обратиться к нему за помощью: stackoverflow.com /users/3343/mark-borderding - person Paul R; 18.05.2020