Diskuze: Použití FFTW3

C++ C a C++ Použití FFTW3

Avatar
drob.cl
Člen
Avatar
drob.cl:

Ahoj, snažím se napsat Matlabovskou funkci hilbert () v C++ a narazil jsem na problém při použití fft (používám fftw3). Je to psáno i v dokumentaci, ale po vytvoření plánu a spuštění mi to vrací místo n prvků jen n/2+1, což já potřebuji n - tak jak to vrací matlabovská fce fft(). Je u knihovny FFTW3 nějaká možnost jak toho docílit?

Vstup je jedno-dimenzionální pole realných dat.

Jak to používám:

vector<double> * d = new vector<double>(data, data+size);
const int dsize = d->size();

fftw_plan p;
fftw_complex *out;

out = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * d->size());

p = fftw_plan_dft_r2c_1d(2*(dsize/2+1), &(*d)[0], out, FFTW_ESTIMATE);
fftw_execute(p);
 
Odpovědět 7.11.2014 18:40
Avatar
coells
Redaktor
Avatar
Odpovídá na drob.cl
coells:

Pokud si přečteš dokumentaci, pak se dozvíš, že fftw_plan_dft­_r2c_1d očekává reálný vstup a využívá hermitovské symetrie výstupních hodnot - pro reálný vstup jsou druhá polovina pole komplexní konjugát první části. Takže není nic snazšího, než si druhou část pole dopočítat.

A nebo můžeš použít funkci fftw_plan_dft_1d, která očekává n komplexních vstupních hodnot a výsledkem bude n komplexních výstupních hodnot.

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět 7.11.2014 19:33
Avatar
drob.cl
Člen
Avatar
Odpovídá na coells
drob.cl:

Mohl by jsi mě nasměrovat na to dopočítání? Angličtina není má nejsilnější stránka a nějak to nemohu dohledat. Díky

 
Nahoru Odpovědět 8.11.2014 8:54
Avatar
coells
Redaktor
Avatar
Odpovídá na drob.cl
coells:

http://www.fftw.org/fftw3.pdf - kapitoly 2.1 a 2.3

Použij funkci fftw_plan_dft_1d z příkladu kapitoly 2.1, protože pro IFT v hilbertově funkci budeš mít data, která nebudou hermitovsky redundantní. A také si dej pozor na ortonormalitu transformace, nezapomeň, že DFT je pouze ortogonální.

 
Nahoru Odpovědět 8.11.2014 11:47
Avatar
drob.cl
Člen
Avatar
Odpovídá na coells
drob.cl:

Nakonec jsem to převedl na complex a pustil na to tu fftw_plan_dft_1d. Otázkou možná je, jestli by to dopočítávání nebylo efektivnější?.

 
Nahoru Odpovědět 8.11.2014 11:47
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.