FFT na obrazach została zaimplementowana w klasie TransformataFo-uriera.java, jednakże, sama operacja FFT, znajduje się w Wielomian.java. Klasa TransformataFouriera.java jest interfejsem tłumaczącym zapis obrazu do postaci, na której możliwe jest wykonanie FFT i tłumaczącym wyniki z powrotem do formy graficznej. Odpowiada również za obliczenia amplirudy i fazy z wielomianu zespolinego. Właściwe obliczenia znajdują się w Wielomian.java. Jest to fragment kodu pisany na potrzeby innego projektu, jednakże po niewielkich modyfikacjach znakomicie sprawdza się również tu. Dodatkowo wykonuje operacje transformacji logarytmicznej, przed zapisaniem obrazu do bufora java.awt.BufferedImage. Klasa Wielomian operuje na liczbach zespolonych, ich implementacja znajduje się w klasie C.java.
public static Wielomian FFT(int n, Wielomian f, Vector<C> omega){ Wielomian ret = nuli; if (n==l){
ret = new Wielomian(O);
ret.setWspolczynnik(0, f.getWspolczynnik(O)); return ret;
> // if
// f = a(x~2) + x * b(x~2)
// a[k] = f[2k] k=0..n/2
// b[k] = f[2k+l] k=0..n/2 Wielomian a = new Wielomian(n/2 - 1); for (int i = 0; i<n/2; i++)
a. setWspolczynnik(i, f.getWspolczynnik(2*i));
Vector<C> va = new Vector<C>(); for (int i=0; i<(n/2)-l; i++)
va.add( (C)omega.elementAt(2*i+l));
Wielomian b = new Wielomian(n/2 -1); for (int i = 0; i<n/2; i++)
b. setWspolczynnik(i, f.getWspolczynnik(2*i+l));
Wielomian alfa = FFT(n/2, a, va);
Wielomian beta = FFT(n/2, b, va);
Wielomian gamma = new Wielomian(n-1);
// gammafi] = alfafi] + w~i * betafi] ;
// gamma [i+n/2] = alfafi] - w~i * beta [i] ; for (int i=0; i< n/2; i++){
C c = C.plus( alfa.getWspolczynnik(i),
C.mult((C)omega.elementAt(i), beta.getWspolczynnik(i))); gamma.setWspolczynnik(i, c);
c = C.minus( alfa.getWspolczynnik(i),
C.mult((C)omega.elementAt(i), beta.getWspolczynnik(i)));
16