Odwrotna FFT

0

Witam poszukuje algorytmu odwrotnej transformaty Fourniera najlepiej cooleya-tukeya lub sposobu na przerobienie tego co już mam żeby działało w drugą stronę.

void FFT(double w,double[] y,ref double[] Y)
        {
            int m = (int)(y.Length/2);
            if (y.Length == 1)
            {
                Y[0] = y[0];
            }
            else   
            {
                double[] b = new double[m];
                double[] c = new double[m];
                for(int k=0;k<m;k++)
                {            
                    b[k]=y[2*k];
                    c[k]=y[2*k+1];
                }
                double w2=w*w;
                double[] B = new double[m];
                double[] C = new double[m];
                FFT(w2,b,ref B);
                FFT(w2,c,ref C);
                double wk=1;
                double X;
                double T;
                for(int k=0;k<m;k++)
                {

                    X=B[k]; 
                    T=wk*C[k];
                    Y[k]=(X+T)/2;
                    Y[k+m]=(X-T)/2;
                    wk = wk * w;
                }
            }
        }
0

Naprawdę nie zawracał bym wam tutaj głowy gdybym był w stanie zrozumieć to co wyszukuje google. Wiem tylko że między fft a ifft jest bardzo mała różnica. Współczynnik skrętu jest inny o ile dobrze pamiętam. Tylko nie mam pojęcia gdzie to zmienić w podanym kodzie.

0

A czy ten twój kod jest w ogóle prawidłowy?
Transformata Furiera wymaga by się pojawił jakiś sinus i/lub cosinus a u ciebie tego nie widzę!
Inwersja wykonywana jest przez zmianę znaku przed sinusem (przed cosinusem nie bo to funkcja parzysta).

0

No sam go niestety nie wymyśliłem źródło:

http://www-users.mat.umk.pl/~joanka/zajecia/fourier/zima2001/wyklad2.pdf

Przekonam się czy jest prawidło gdy zdołam to odwrócić.
Próbowałem też skorzystać z gotowej biblioteki Exocortex.DSP.dll ale wywala mi błąd że index wykracza poza granice tablicy.

0

zdecydowanie jest, źle! W Numerical recipes jest sinus. Najprawdopodobniej w twoim algorytmie w powinno być zespolone i być równe exp(-i minmalnyKontWRadianach).
Transformata odwrotna jest osiągana przez wstawienie wartości sprzężonej do w czyli exp(i minmalnyKontWRadianach).

W sumie jak to double zamienisz na jakiś typ zespolony (wszystkie argumenty) to powinno być dobrze.

0

Konkretne pytanie wymaga konkretnych odpowiedzi.
http://www.alglib.net/fasttransforms/fft.php

1 użytkowników online, w tym zalogowanych: 0, gości: 1