Download as pdf or txt
Download as pdf or txt
You are on page 1of 14

BİYOMEDİKAL SİNYAL İŞLEME DERSİ 6.

HAFTA

Hızlı Fourier Dönüşümü (HFD, Fast Fourier Transform-FFT)

Amaç

Bu deneyin amacı Hızlı Fourier Dönüşümü (FFT) ve özelliklerinin tanıtılmasıdır.

Girişi:
AFD’ü aşağıdaki formül kullanılarak elde edilmektedir.

2𝜋 2𝜋
𝑋[𝑘] = 𝑋 (𝑒 𝑗 𝑁 𝑘 ) = ∑𝑁−1 −𝑗 𝑘𝑛
𝑛=0 𝑥[𝑛] 𝑒 𝑁 k = 0,1,2,…, N −1

DFT ile (M ≤ N) uzunluklu bir x[n] sinyali N uzunluklu k değişkenine bağlı bir frekans
2𝜋
( 𝑤𝑘 = 𝑘 ) sinyaline {X [k]} dönüştürme işlemidir. DFT frekans örneklerini, DTFT
𝑁

(𝑋(𝑒 𝑗𝑤 ))’ un N ayrık frekans noktasında değerlendirerek bulunduğu için, x[n] sinyalinin
2𝜋
Ayrık Fourier Dönüşümü (DFT) olarak adlandırılır. 𝑊𝑁 = 𝑒 −𝑗( 𝑁 ) eşitliği yukarıdaki
2𝜋
formülde yazılacak olursa 𝑋[𝑘] = 𝑋 (𝑒 𝑗 𝑁 𝑘 ) = ∑𝑁−1 𝑛𝑘
𝑛=0 𝑥[𝑛] 𝑊𝑁 k = 0,1,2,…, N −1

eşitliği elde edilmektedir.

Ayrık Fourier Dönüşümünün (DFT) doğrudan hesaplanmasında her bir X[k] değeri için N
adet kompleks çarpma ve N −1 adet kompleks toplama işlemi yapılmaktadır. Bundan dolayı
N adet DFT değeri bulunurken, N2 adet kompleks çarpma ve N(N −1) adet kompleks toplama
işlemi gereklidir. Dizi uzunluğu olan N’nin büyük olması durumunda DFT’nin doğrudan
bulunması çok fazla miktarda işlem yapılmasını gerektirir. Yani, N sayısı artarken yapılan
işlem sayısı yüksek hızla artmakta ve işlem sayısı kabul edilemez bir seviyeye doğru
gitmektedir. 1965 yılında “Cooley ve Tukey” Ayrık Fourier Dönüşümü için gerekli işlem
miktarını azaltacak bir prosedür geliştirdiler1. Bu prosedür, sayısal işaret işleme ve diğer
alanlarda DFT uygulamalarında ani bir artış olmasına sebep olmuştur. Ayrıca başka
algoritmaların geliştirilmesine ön ayak olmuştur. Tüm bu algoritmalar Hızlı Fourier Dönüşüm
(FFT) algoritmaları olarak bilinmektedir. Bu algoritmalar ile DFT hesabı için yapılması
gereken işlem sayısı büyük ölçüde azaltılarak işlem kolaylığı sağlanmıştır. Her ne kadar
dönüşüm olarak adlandırılsa da, Hızlı Fourier Dönüşümü (FFT) Ayrık Fourier Dönüşümü
(DFT)’den farklı değildir sadece DFT’yi daha etkin ve ekonomik gerçekleştiren bir
algoritmadır

Verimli Hesaplama :
Verimli bir şekilde tasarlanmış algoritmada işlem sayısı veri örneği başına sabit olmalıdır ve
bundan dolayı toplam işlem sayısı N’e bağlı olarak lineer olmalıdır. Genel olarak bir toplama
işlemi için gereken işleme (processing) zamanı bir çarpma işlemi için gereken işleme
zamanına göre çok daha azdır. Bu yüzden daha çok 4 reel çarpma ve 2 reel toplama gerektiren
kompleks çarpma işlemleri sayısı dikkate alınmaktadır.
Faz faktörü olarak adlandırılan { 𝑊𝑁𝑛𝑘 } faktörünün periyodiklik ve simetri özellikleri
kullanılarak işlem sayısı azaltılabilir.

{𝑾𝒏𝒌
𝑵 } faktörünün özellikleri

1- Periyodiklik Özelliği
𝑘(𝑛+𝑁) 𝑛(𝑘+𝑁)
𝑊𝑁𝑘𝑛 = 𝑊𝑁 = 𝑊𝑁

2- Simetri Özelliği
𝑁
𝑘𝑛+
𝑊𝑁 2 = −𝑊𝑁𝑘𝑛

Faz faktörünün bu iki özelliği işlem sayısını azaltmak için kullanılabilmektedir.


Örneğin: Frekans ekseninde N=4 örnek kullanılarak gerçekleştirilen bir DFT işleminde

2𝜋
𝑋[𝑘] = ∑3𝑛=0 𝑥[𝑛] 𝑒 −𝑗 𝑁 𝑘𝑛 = ∑3𝑛=0 𝑥[𝑛] 𝑊4𝑛𝑘 formülü kullanılmaktadır. Bu formüle
göre DFT işlemini matris çarpımı şeklinde gerçekleştirecek olursak aşağıdaki işlemler
kullanılır.

𝑿[𝟎] 𝑊40𝑥0 𝑊41𝑥0 𝑊42𝑥0 𝑊43𝑥0 𝑥[0] 𝑊40 𝑊40 𝑊40 𝑊40 𝑥[0]
𝑿[𝟏] 𝑊41𝑥0 𝑊41𝑥1 𝑊41𝑥2 𝑊41𝑥3 𝑥[1] 𝑊40 𝑊41 𝑊42 𝑊43 𝑥[1]
[ ]= [ ]= [ ]
𝑿[𝟐] 𝑊42𝑥0 𝑊42𝑥1 𝑊42𝑥2 𝑊42𝑥3 𝑥[2] 𝑊40 𝑊42 𝑊44 𝑊46 𝑥[2]
𝑿[𝟑] [𝑊43𝑥0 𝑊43𝑥1 𝑊43𝑥2 𝑊43𝑥3 ] 𝑥[3] [𝑊40 𝑊43 𝑊46 𝑊49 ] 𝑥[3]
𝑊40 𝑊40 𝑊40 𝑊40
𝑊40 𝑊41 𝑊42 𝑊43
Burada matrisi DFT matrisidir.
𝑊40 𝑊42 𝑊44 𝑊46
[𝑊40 𝑊43 𝑊46 𝑊49 ]
2𝜋
𝑊4 = 𝑒 −𝑗 4 = −𝑗 değerine eşittir.

Faz faktörünün periyodiklik özelliğinden


2𝜋
𝑊40 =𝑊44 =𝑒 −𝑗 𝑥0
4 =1
2𝜋
𝑊41 =𝑊49 = 𝑒−𝑗 4 𝑥1 = −𝑗 dir.

Faz faktörünün simetri özelliğinden

𝑊40 =1 ise 𝑊42 =𝑊46 = −1 dir


𝑊41 = −𝑗 ise 𝑊43 = 𝑗 dir

Faz faktörünün değerleri yerinde yazılacak olursa

𝑿[𝟎] 1 1 1 1 𝑥[0]
𝑿[𝟏] 1 −𝑗 −1 𝑗 𝑥[1]
[ ]=[ ][ ] matriste çarpma işlemini gerçekleştirecek
𝑿[𝟐] 1 −1 1 −1 𝑥[2]
𝑿[𝟑] 1 𝑗 −1 −𝑗 𝑥[3]
olursak;

𝑋[0] = (x[0]
⏟ + x[2]) + (x[1]
⏟ + x[3])
𝑔ç 𝑔𝑡

𝑋[1] = (x[0]
⏟ − x[2]) − 𝑗 (x[1]
⏟ + x[3])
ℎç ℎ𝑡

𝑋[2] = ⏟
(x[0] + x[2]) − ⏟
(x[1] + x[3])
𝑔ç 𝑔𝑡

𝑋[3] = ⏟
(x[0] − x[2]) + 𝑗 ⏟
(x[1] + x[3])
ℎç ℎ𝑡

Elde edilmektedir. Bu ifadeye göre


𝑔ç = (𝑥[0] + 𝑥[2])
𝑔𝑡 = (𝑥[1] + 𝑥[3])
ℎç = (𝑥[0] − 𝑥[2])
ℎ𝑡 = (𝑥[1] − 𝑥[3])

𝑋[0] = 𝑔ç + 𝑔𝑡
𝑋[1] = ℎç − 𝑗ℎ𝑡
𝑋[2] = 𝑔ç − 𝑔𝑡
𝑋[3] = ℎç + 𝑗ℎ𝑡
Bu eşitliklere göre iki adet kompleks çarpma işlemi gerçekleşmektedir.

Hızlı Fourier Dönüşümü (FFT) Algoritmaları


DFT’nin hesaplanmasında birçok farklı algoritma geliştirilmiştir. Bu algoritmaların işlem
sayısını azaltmak için temelde kullandığı özellikler temel fonksiyon olan WN’in periyodiklik
ve simetri özelliğidir. Burada Parçala-Birleştir yaklaşımı (dividecombine approach)
kullanarak türetilen radix-R FFT algoritmalarından radix-2 ( yani data boyu N = 2k olan
veriler için) algoritması olan Zamanda Desimasyonlu FFT (decimation-in-time FFT) ve
Frekansda Desimasyonlu FFT (decimation-in-frequency FFT) algoritmalarını bulunmaktadır.
Biz burada Zamanda Desimasyonlu FFT algoritmasını inceleyeceğiz.

Zamanda Desimasyonlu FFT


İşaretin uzunluğu olan N sayısı FFT algoritmalarında önemli rol oynamaktadır. N’nin ikinin
katları olması durumunda algoritma basit ve etkin olmaktadır. N = 2R olmakla birlikte bu
algoritmaya Radix-2 FFT algoritması denir. N çift tamsayı olup x(n) dizisi N / 2 uzunluklu iki
diziye ayrılabilir. Bu ayrımda, ilk dizinin elemanları tek sayı indisli, ikinci dizinin elemanları
çift sayı indisli seçilir ve n = 2r çift indisliler için, n = 2r +1 tek indisliler için kullanılır . Bu
ayrım aşağıdaki formülde gösterilmiştir;

𝑋[𝑘] = ∑𝑛 ç𝑖𝑓𝑡 𝑥[𝑛]𝑊𝑁𝑘𝑛 + ∑𝑛 𝑡𝑒𝑘 𝑥[𝑛]𝑊𝑁𝑘𝑛

𝑁 𝑁
−1 𝑘(2𝑟) −1 𝑘(2𝑟+1)
= ∑𝑟=0
2
𝑥[2𝑟]𝑊𝑁 + ∑𝑟=0
2
𝑥[2𝑟 + 1]𝑊𝑁 k=0,1,2,….,N-1
𝑁 𝑁
−1 𝑘(2𝑟) −1 𝑘(2𝑟)
= ∑𝑟=0
2
𝑥[2𝑟]𝑊𝑁 + 𝑊𝑁𝑘 ∑𝑟=0
2
𝑥[2𝑟 + 1]𝑊𝑁

Yukarıdaki eşitlikte 𝑊𝑁2 = 𝑊𝑁/2 ve xç[n]=x[2r], xt[n]=x[2r+1] yazılırsa;

𝑁 𝑁
−1 𝑘𝑛 −1 𝑘𝑛
𝑋[𝑘] = ∑𝑛=0 𝑥ç[𝑛]𝑊𝑁/2
2
+ 𝑊𝑁𝑘 ∑𝑟=0 𝑥𝑡[𝑛]𝑊𝑁/2
2

𝑁 𝑁 𝑁 𝑁 𝑁
𝑁 −1 (𝑘+ )𝑛 (𝑘+ ) −1 (𝑘+ )𝑛
𝑋[𝑘 + ] = ∑𝑛=0 𝑥ç[𝑛]𝑊𝑁/22 2
+ 𝑊𝑁 2
∑𝑟=0 𝑥𝑡[𝑛]𝑊𝑁/2
2 2
2

n=0,1,2,…,N/2 eşitlikleri elde edilir.


𝑁 2𝜋
( )𝑛 −𝑗
𝑊𝑁/2 = (𝑒
2 𝑁/2 )𝑛(𝑁/2) = 1 eşitliği yukarıdaki denklemde yerine yazılırsa aşağıdaki
denklemler elde edilmektedir.
𝑁 𝑁
𝑁 −1 𝑘𝑛 −1 𝑘𝑛
𝑋 [𝑘 + ] = ∑𝑛=0 𝑥[𝑛]𝑊𝑁/2
2
− 𝑊𝑁𝑘 ∑𝑟=0 𝑥𝑡[𝑛]𝑊𝑁/2
2
0≤k≤(N/2)-1
2

𝑁
−1
𝑘𝑛
𝑋ç[𝑘] = ∑𝑛=0 𝑥ç[𝑛]𝑊𝑁/2
2

𝑁
−1
𝑘𝑛
𝑋𝑡[𝑘] = ∑𝑟=0 𝑥𝑡[𝑛]𝑊𝑁/2
2

𝑋[𝑘] = 𝑋ç[𝑘] + 𝑊𝑁𝑘 𝑋𝑡[𝑘]


𝑋[𝑘 + 𝑁/2] = 𝑋ç[𝑘] − 𝑊𝑁𝑘 𝑋𝑡[𝑘] 0≤k≤(N/2)-1
N-noktalı DFT'nin tek ve çift noktalarının oluşturduğu N/2 noktalı iki DFT’den elde
edilebileceği görülmektedir. Aynı şekilde, N / 2 noktalı iki DFT de yeniden belirlenecek N/4
noktalı tek ve çift noktalı dizilerden benzer biçimde elde edilir.
N = 2L varsayıldığında L adım gidilecek olursa, sonuçta sadece 2 noktalı bir dizinin
DFT’sinin hesabı yeterli olmaktadır.
N=2 değerli DFT için gerekli eşitlik aşağıda verilmiştir.

𝑿[𝟎] 𝑊20𝑥0 𝑊21𝑥0 𝑥[0]


[ ] = [ 1𝑥0 ][ ]
𝑿[𝟏] 𝑊2 𝑊21𝑥1 𝑥[1]
𝑊20 𝑊20 1 1
N=2 için oluşturulan faz faktör matrisi; [ 0 1 ] = [1 −1]
𝑊2 𝑊2

FFT nin örnek uygulamaları içib Ref1 ve Ref2 ye bakınız.

MATLAB UYGULAMASI:

Örnek: DFT ile FFT arasındaki işlem süresinin kıyaslanması “tic” ve “toc” fonksiyonu
kullanılarak yapılabilir. “tic” fonksiyonu zamanlayıcıyı başlatır “toc” fonksiyonuda
zamanlayıcı bilgisini okur.
%%MATLAB FFT KOMUTU İLE FFT ALGORİTMASI
N=2048;
x=rand(1,N);
tic
fft(x,N);
toc
%%DFT FORMÜLÜNÜN DİREK UYGULAMASI
tic
n=[0:1:N-1];
k=[0:1:N-1];
WN=exp(-j*2*pi/N);
nk=n'*k;
WNnk=WN.^nk;
Xk=x*WNnk;
toc

Elapsed time is 0.000045 seconds.


Elapsed time is 1.579926 seconds.
Örnek 2. Sürekli zamanlı xt=sin(2*pi*50*t) sinyaline Matlab “fft” kodunun uygulaması;

1. Adım Sinyalin eldesi

fs = 1000; % Örnekleme frekansı fs


ts = 1/fs; % Öernekleme periyodu Ts
fo = 50; % Oluşturacağımız sinyalin frekansı (
Nyquist kriteri gereği fs/2'den küçük olmalı)
t = 0:ts:5/fo; % Zaman vektörü
xt = sin(2*pi*fo*t); % Frekansı fu olan sinüs
sinyali

figure, plot(t,xt,'k','LineWidth',2);
title([num2str(fo) ' Hz lik sinus sinyali']);
ylabel('Genlik','FontSize',14,'FontName', 'Times
New Roman');
xlabel('Zaman (s)','FontSize',14,'FontName', 'Times
New Roman');
set(gca,'FontSize',14,'FontName', 'Times New
Roman')

50 Hz lik sinus sinyali


1

0.5
Genlik

-0.5

-1
0 0.02 0.04 0.06 0.08 0.1
Zaman (s)

2. Adım xf=”fft(xt)” uygulaması


Not: xf= “fft(xt,N)” (N=NFFT sayısıdır. N değeri girilmezse sinyalin uzunluğu kadardır)
%%Sinüs sinyaline fft
xf=fft(xt); %%NFFT sayısı default
figure, plot(xf,'o'); % Karmaşık düzlemde katsayıları
çizdir, araları çizgi lle
% birleştirme, tek tek noktaları o ile işaretle.
Elde edilen xf sinyali kompleks değerli olduğu için plot kodu ile çizdirdiğimizde kompleks
bileşenleri görürüz.

10

-5

-10

-0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6

Bu nedenle abs(xf) ifadesi ile genlik spektrumunu elde edebiliriz.

figure,plot(abs(xf));
set(gca,'FontSize',14,'FontName', 'Times New Roman')
60

50

40

30

20

10

0
0 20 40 60 80 100 120

Burada x ekseni NFFT sayısıdır. Frekans bilgisini elde etmek için frekans eksenini tanımlayan
bir vektör elde edilir.

f = linspace(0,fs,length(xf)); % Frekans vektörünü


oluşt
% Çizdir
figure, plot(f,abs(xf));
title('Fourier katsayilari');
xlabel('Frekans (Hz)','FontSize',14,'FontName',
'Times New Roman');
set(gca,'FontSize',14,'FontName', 'Times New Roman')
Fourier katsayilari
60

50

40

30

20

10

0
0 200 400 600 800 1000
Frekans (Hz)
Frekans ekseninde sadece bir peryodu görebilmek için frekans eksenin ilk yarı değeri alınır.
n = floor(length(f)/2); % Vektörün uzunluğunun yarısı
(buçuklu çıkma
% ihtimaline karşı en küçük tamsayıyı aldık.
% Çizdir
figure, plot(f(1:n),abs(xf(1:n)),'LineWidth',2);
title('Fourier katsayilari');
xlabel('Frekans (Hz)','FontSize',14,'FontName',
'Times New Roman');
set(gca,'FontSize',14,'FontName', 'Times New Roman')

Fourier katsayilari
60

50

40

30

20

10

0
0 100 200 300 400 500
Frekans (Hz)
Frekans eksenini negatif frekansları içerecek şekilde biçimlendirmek için Matlabda fftshift
kodu kullanılmaktadır. Fonksiyonun gerçeklemesi aşağıda yeralmaktadır.

xf = abs(xf);
xf2= fftshift(xf);
f2 = linspace(-fs/2,fs/2,length(xf)); % Frekans
vektörünü oluşt
% Çizdir
figure, plot(f2,xf2);
title('Fourier katsayilari','FontSize',14,'FontName',
'Times New Roman');;
xlabel('Frekans (Hz)','FontSize',14,'FontName',
'Times New Roman');
set(gca,'FontSize',14,'FontName', 'Times New Roman')

Fourier katsayilari
60

50

40

30

20

10

0
-500 0 500
Frekans (Hz)
Örnek 3. Matlab fft fonksiyonun ayrık zamanlı sinyallerde gerçeklemesi;
Xn=cos(2*pi*n/10); sinyalinin fft algoritmasının uygulaması;

1. Adım: sinyalin çizimi

n = [0:29];
xn = cos(2*pi*n/10);
figure,stem(n,xn,'k','filled')
xlabel('Zaman Ekseni(sn)','FontSize',14,'FontName',
'Times New Roman')
ylabel('x sinyali','FontSize',14,'FontName', 'Times
New Roman')
set(gca,'FontSize',14,'FontName', 'Times New Roman')

0.5
x sinyali

-0.5

-1
0 5 10 15 20 25 30
Zaman Ekseni(sn)

2.Adım: farklı NFFT değerleri için fft algoritmasının uygulaması aşağıdaki şekilde
olmaktadır. X ekseni k=0, 1, 2, 3, ,N-1değeri ile tanımlı frekanstaki örnek sayısını
göstermektedir. Frekans eksenini –pi/2-pi/2 aralığında belirlemek için F=[-N/2:N/2-
1]/N; olarak tanımlanmaktadır.

n = [0:149];
x1 = cos(2*pi*n/10);
N = 2048;
X = abs(fft(x1,N));
X = fftshift(X);
F = [-N/2:N/2-1]/N;
figure, plot(F,X),
xlabel('frekans / f s','FontSize',14,'FontName',
'Times New Roman')
80

70

60

50

40

30

20

10

0
-0.5 -0.4 -0.3 -0.2 -0.1 0 0.1 0.2 0.3 0.4 0.5
frekans / f s
KAYNAKLAR:

1- S. Ertürk, Sayısal İşaret İşleme, Birsen Yayınevi, ISBN:9755113096, 2005.


2- A.V. Oppenheim,R.W.Schafer, J.R. Buck, Discrete Time Signal Processing, Prentice
Hall.
3- V.K. Ingle, J.G.Proakis, Digital Signal Processing Using Matlab, Cengage Learning
4- http://web.itu.edu.tr/~baykut/lab/pdf/Deney_3.pdf

You might also like