Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function [ x , xx] = FFTDIT( x )
- N = length(x);
- xc = x;
- LiczbaBitow=log2(N); % liczba bitów numerów próbek %
- for n=0:N-1; % kolejne próbki %
- ncopy=n; % stary numer próbki (kopia) %
- nr=0; % nowy numer próbki (inicjalizacja) %
- for m=1:LiczbaBitow % po wszystkich bitach %
- if (rem(n,2)==0) % czy jedynka na LSB- mlodszej pozycji %
- n=n/2; % jeśli nie, przesuń w prawo %
- else
- nr=nr+2^(LiczbaBitow-m); % dodaj 2^(LiczbaBitow-m) %
- n=(n-1)/2; % odejmij jedynkę, przesuń w prawo %
- end
- end
- y(nr+1)=x(ncopy+1); % skopiuj we właściwe miejsce %
- end
- x = y;
- for e = 1 : log2(N) % KOLEJNE ETAPY
- SzerokoscMotylka = 2^(e-1); % szerokość motylka
- LiczbaBlokow = N/(2^e); % liczba bloków
- MlodszyBit = 2^(e-1); % liczba motylków w bloku
- OdlegloscMiedzyBlokami = 2^e; % odległość między blokami
- W = exp(-1i*2*pi/2^e); % podstawa bazy Fouriera
- for b = 1 : LiczbaBlokow % KOLEJNE BLOKI
- for m = 1 : MlodszyBit % KOLEJNE MOTYLKI
- g = (b-1)*OdlegloscMiedzyBlokami + m; % indeks górnej próbki motylka
- d = g + SzerokoscMotylka; % indeks dolnej próbki motylka
- xgora = x(g); % skopiowanie górnej próbki
- xdol = x(d)*W^(m-1); % korekta dolnej próbki
- x(g) = xgora + xdol; % nowa górna próbka: górna plus dolna po korekcie
- x(d) = xgora - xdol; % nowa dolna próbka: górna minus dolna po korekcie
- end % koniec pętli
- end % koniec pętli bloków
- end % koniec pętli etapów
- n = N/2; %przyciecie wektora
- i = 1; %zeby uniknac powtarzania widma
- while i <= n
- xx(i) = x(i);
- i = i + 1;
- end
- plot(abs(xx));
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement