Реализация rfftw2d_create_plan на С++

Я пытаюсь выполнить БПФ, используя библиотеку FFTW, доступную для С++. Поскольку доступно много вариантов FFTW, я пытаюсь реализовать fft, используя метод rfftwnd (поскольку мои данные реальны).

 #include<rfftw.h>
{
fftw_real a[width][2*(height/2+1)],b[width][2*(height/2+1)],c[width][height];
fftw_complex *A,*B,C[width][height/2+1];

rfftwnd_plan rp,rpin;
fftw_real scale = 1.0/(width*height);

const int H = height;
const int W= width;
rp = rfftw2d_create_plan(W,H,FFTW_REAL_TO_COMPLEX,FFTW_ESTIMATE);
rpin = rfftw2d_create_plan(width, height, FFTW_COMPLEX_TO_REAL,FFTW_ESTIMATE);

A = (fftw_complex*) &a[0][0];
B = (fftw_complex*) &b[0][0];
for(int i=0;i<width;i++)
{
    for (int j=0;j<height;j++)
    {
        a[i][j] = la(i,j);
    }
}
 }

Итак, я в основном пытаюсь реализовать fft на изображении, для этого мне нужно создать планы, как это предлагается в документации FFTW. Но когда я это делаю, я получаю сообщение об ошибке

 error: undefined reference to `rfftw2d_create_plan'

может кто-нибудь помочь, почему это происходит? Я что-то упустил здесь?


person serpentor    schedule 29.08.2014    source источник
comment
Если это новая разработка, вы можете начать с FFTW 3, поскольку FFTW 2 помечен как устаревший (см. страница загрузки FFTW)   -  person SleuthEye    schedule 29.08.2014


Ответы (1)


Это ошибка компоновщика, которая сообщает вам, что компоновщик не может найти указанную функцию, и наиболее вероятной причиной является то, что компоновщик не знает о библиотеке librfftw.a, которая содержит определение (см. этот вопрос и ответы для более подробной информации и, в частности, этот ответ).

Согласно этому разделу документации FFTW:

Программы, использующие RFFTWND, должны быть связаны с -lrfftw -lfftw -lm в системах Unix или с FFTW, RFFTW и стандартными математическими библиотеками в целом.

Итак, вы должны добавить эти необходимые флаги для компиляции.

person SleuthEye    schedule 29.08.2014