Professional Documents
Culture Documents
Deney 3 PDF
Deney 3 PDF
Amaç
Bu deneyin amacı Ayrık Fourier Dönüşümü (DFT) ve Hızlu Fourier Dönüşümünün
(FFT) tanıtılmasıdır.
Giriş
Bir önceki deneyde ayrık-zamanlı Fourier dönüşümünü incelemiştik. Ayrık-zamanlı
Fourier dönüşümü mutlak toplanabilir diziler için frekans bölgesi gösterimini
sağlamaktadır. Ancak, Fourier dönüşümü sonsuz uzunlukta bir dizi için tanımlıdır
ve daha önemlisi, sürekli bir değişken olan ω açısal frekansının bir fonksiyonudur.
MATLAB kullanırken dizileri sınırlandırmamız ve sınırlı sayıda nokta için
değerlendirme yapmamız gerekir. Ayrık Fourier Dönüşümü (DFT) bu problemleri
gidermektedir.
Ayrık zamanlı Fourier dönüşümü (DFT), ayrık zamanlı sinyal işleme algoritma ve
sistemlerinin analizi, tasarımı, gerçekleştirilmesi ile doğrusal filtreleme, korelasyon
analizi ve spektrum analizi gibi sinyal işleme uygulamalarında önemli bir rol oynar.
DFT’nin bu öneme sahip olmasının ardındaki temel neden DFT’yi hesaplamakta
kullanılan verimli algoritmaların varlığıdır.
nokta ile hesaplanmasına karşılık gelir. Burada temel amaç N -noktalı DFT’nin
hesaplanması için verimli algoritmaların kullanılmasıdır. Bu algoritmalar ortak
olarak hızlı Fourier dönüşümü (FFT) algoritmaları adını alır.
1
Ayrık Fourier Dönüşümü (DFT)
Ayrık-zaman Fourier dönüşümü (DTFT) aşağıdaki şekilde verilir.
∞
X ( e jω ) = F {x( n )} = ∑ x ( n )e
n =−∞
− jω n
(3.1)
⋅ operatörü x(n) ayrık işaretini gerçel değerli ω ’nın karmaşık değerli ve sürekli
F {}
elde edilir. Burada verilen ilişki ( L ≤ N ) uzunluklu bir X (n) dizisini N uzunluklu
(3.5)'de verilen ilişki x(n) ’nin Ayrık Fourier Dönüşümü (DFT) olarak adlandırılır.
N −1
1
x ( n) =
N
∑ X ( k )e
n =0
j 2π kn / N
n = 0,1, 2,…, N − 1 (3.6)
2
DFT'nin özellikleri
Özellikler ispatsız olarak verilecektir. X (k ) , x(n) ’in N -noktalı DFT’si olsun.
1) Doğrusallık
DFT {ax(n) + by (n)} = a DFT {x(n)} + b DFT { y (n)} (3.7)
2) Periyodiklik
x ( n + N ) = x ( n)
(3.8)
X (k + N ) = X (k )
sağa ötelediğimizi varsayalım. Böylece farklı bir periyodik dizi elde ederiz.
∞
x 'p (n) = x p (n − k ) = ∑ x(n − k − lN )
l =−∞
(3.9)
Sınırlı uzunluklu
⎪⎧ x p (n), 0 ≤ n ≤ N − 1
'
′
x ( n) = ⎨
⎪⎩ 0, dışında
dizisi x(n) dizisinin dairesel ötelemesiyle elde edilmiştir. Bu ilişki Şekil 3.1'de N = 4
için gösterilmiştir.
3
Şekil 3.1: Bir dizinin dairesel ötelenmesi
4
4) DFT'nin simetri özellikleri
DFT'nin simetri özellikleri Fourier dönüşümü için uygulanan yöntemin tekrarıyla
elde edilebilir. N -uzunluklu x ( n) ve DFT'sinin karmaşık değerli olduğunu
X (k ) = X R (k ) + jX I (k ) 0 ≤ k ≤ N − 1 (3.11)
1 N −1
2π kn 2π kn
xI ( n ) =
N
∑[X
k =0
R (k ) sin
N
+ X I (k ) cos
N
] (3.15)
5) Gerçel-değerli diziler
x(n) gerçel-değerli ise, DFT tanımıdan aşağıdaki özellik bulunur.
X ( N − k ) = X ∗ (k ) = X (− k ) (3.16)
Dolayısıyla, X ( N − k ) = X (k ) olacaktır.
5
1 N −1
2π kn
x ( n) =
N
∑ X (k ) cos
k =0 N
, 0 ≤ n ≤ N −1 (3.19)
Bu durumda
N −1
2π kn
X R (k ) = ∑ xI (n) sin (3.23)
n=0 N
N −1
2π kn
X I (k ) = ∑ xI (n) cos (3.24)
n=0 N
9) Dairesel evrişim
x1 (n) ↔ X 1 (k ) x2 (n) ↔ X 2 (k ) (3.25)
ise
x1 ( n ) N x2 ( n) ↔ X 1 ( k ) X 2 ( k ) (3.26)
Burada,
N −1
x1 ( n ) N x2 (n) = ∑ x1 (m) x2 ((n − m)) N (3.27)
m =0
Dairesel evrişimin nasıl gerçeklendiğini daha sonra bir örnekle göreceğiz (Örnek 3.2).
6
10) Çarpım
1
x1 ( n) x2 ( n) ↔ X1 (k ) N X 2 (k ) (3.28)
N
Örnek 3.1
x(n) , 4-noktalı bir dizi olsun.
⎧1 0 ≤ n ≤ 3
x( n ) = ⎨
⎩0 dışında
a) Ayrık zaman Fourier dönüşümünü hesaplayın ve genlik ve fazını çizin.
b) x(n) ’in 4-noktalı DFT’sini hesaplayın.
7
AZFD genlik
4
3
|X|
0
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
frekans/pi
AZFD faz
150
100
50
açi
-50
-100
-150
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
frekans/pi
3
|X4|
0
0 0.5 1 1.5 2 2.5 3 3.5 4
k
100
50
açi
-50
-100
-150
0 0.5 1 1.5 2 2.5 3 3.5 4
k
8
c) (3.5)'i kullanarak 16-noktalı DFT hesaplayalım.
15
X 16 ( k ) = ∑ x( n )e− j 2π kn/16 k = 0,1, 2,…,15
n =0
3
|X16|
0
0 2 4 6 8 10 12 14 16
k
100
50
açi
-50
-100
-150
0 2 4 6 8 10 12 14 16
k
9
Örnek 3.2 :
x1 (n) = {1, 2, 3} ve x2 (n) = {1, 2, 3, 4} olmak üzere 4-noktalı dairesel evrişimi
( x1 ( n ) f x2 ( n) ) hesaplayınız.
Çözüm:
x1 (n) 3-noktalı bir dizi olduğundan ilk önce onu sıfır dolgulayarak 4-noktalı
n = 0 için
3 3
∑ [{1, 8, 9, 0} = 18
m= 0
n = 1 için
3 3
∑ [{2, 2,12, 0} = 16
m= 0
n = 2 için
3 3
∑ [{3, 4, 3, 0} = 10
m= 0
n = 3 için
10
3 3
∑ [{4, 6, 6, 0} = 16
m= 0
X 1 (k ) X 2 (k ) = {60, 8, −4, 8}
Ödev 3.1:
1) 32 uzunluklu x(n) = 5cos( π7 n) + 3sin( 310π n), 0 ≤ n ≤ 31 , işareti verilmiş olsun. Dizinin
11
Hızlı Fourier Dönüşümü (FFT)
Ayrık Fourier dönüşümünü tekrar hatırlayacak olursak,
N −1
X (k ) = ∑ x(n)WNnk 0 ≤ k ≤ N −1 (3.29)
n=0
Burada WN = e (
− j 2π / N )
'dir. (3.29) denklemiyle gösterilen Ayrık Fourier Dönüşümünün
(DFT) doğrudan hesaplanmasında her bir X (k ) değeri için N adet karmaşık çarpma
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
1
Cooley, J.W., Tukey, J.W., An Algorithm for the Machine Computation of Complex Fourier Series,
Mathematics of Computation, Vol. 19, pp. 297-301, April 1965.
12
gerçel çarpma ve 2 gerçel toplama gerektiren komples çarpma işlemleri sayısını
dikkate alacağız.
{ WNkn } faktörünün periyodiklik ve simetri özellikleri kullanılarak işlem sayısı
azaltılabilir.
• Periyodiklik Özelliği
WNkn = WNk ( n + N ) = WN( k + N ) n
• Simetri Özelliği
WNkn + N /2 = −WNkn
Örnek 3.3:
Dört noktalı bir DFT’nin hesaplanması ve hesaplanması için verimli bir algoritma
geliştirilmesi,
3
X (k ) = ∑ x(n)W4 nk , 0 ≤ n ≤ 3, W4 = e − j 2π / 4 = − j
n =0
Çözüm:
Yukarıdaki hesaplama 16 tane kompleks çarpma işlemi içeren matris formunda
gösterilebilir:
13
Buradan aşağıdaki denklemleri elde edebiliriz:
X (0) = x (0) + x (1) + x (2) + x (3) = [ x (0) + x (2) ] + [ x (1) + x (3) ]
g1 g2
14
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 = 2 R 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ğıda gösterilmiştir;
Xk = ∑ x ( n )W
n ç ift
N
nk
+ ∑
n te k
x ( n )W Nn k
( N / 2 ) −1 ( N / 2 ) −1
= ∑r= 0
x ( 2 r )W N
2 rk
+ ∑r= 0
x ( 2 r + 1)W N( 2 r + 1 ) k (3.30)
k = 0 ,1, 2 ..... N − 1
x ç ( n ) = x ( 2 n ) ; n = 0 , 1, 2 , ..., ( N / 2 ) − 1
(3.32)
x t ( n ) = x ( 2 n + 1) ; n = 0 , 1, 2 , ..., ( N / 2 ) − 1
ifade edilir.
( nN / 2 )
W Nn N / 2 = ⎡⎣ e − j 2 π /( N / 2 ) ⎤⎦ = e − j 2π n = 1
W NN/ /22 = 1
ifadeleri kullanılarak,
15
( N / 2 ) −1 ( N / 2 ) −1
X k +(N / 2) = ∑n=0
ç
x ( n )W nk
N /2 −W N
k
∑n=0
x t ( n )W Nn k/ 2 (3.35)
X k = X kç + WNk X kt
X k + ( N / 2) = X kç − WNk X kt
k = 0,1, 2,..., ( 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 = 2 L varsayıldığında L adım gidilecek olursa, sonuçta sadece 2 noktalı bir dizinin
DFT’sinin hesabı yeterli olmaktadır. Takip eden örnekte bu durum ayrıntılı bir
şekilde açıklanmaktadır.
Örnek 3.4:
Zamanda desimasyonlu FFT algoritmasını açıklayabilmek amacıyla sekiz noktalı bir
dönüşümü ele alalım. Buna göre, N = 8 ve N = 2 L ' den L = 3 olmaktadır. Şekil 3.6,
sekiz noktalı DFT'nin iki adet dört noktalı DFT'ye ayrıştırılmasını göstermektedir. Bu
ayrıştırma işlemine devam ederek dört noktalı DFT'ler de iki noktalı DFT'lere Şekil
3.7'de gösterildiği gibi ayrıştırılabilir. En son aşamada N / 2 adet iki noktalı DFT elde
edilecektir. DFT tanımından, bu işlem şu şekilde basitleşecektir
X (0) = x(0) + x(1)
X (1) = x(0) − x(1)
Şekil 3.8, sekiz noktalı zamanda desimasyonlu FFT'nin akış diagramını göstermek-
tedir. Bu akış diagramı üzerinden üç adım ile (bkz. Şekil 3.9) x(n), 0 ≤ n ≤ 7 dizisinin
FFT'si şu şekilde hesaplanabilir:
16
Adım 1
x ' (0) = x(0) + WN0 x(4) = x(0) + x(4)
x ' (4) = x(0) + WN4 x(4) = x(0) − x(4)
x ' (2) = x(2) + WN0 x(6) = x(2) + x(6)
x ' (6) = x(2) + WN4 x(6) = x(2) − x(6)
x ' (1) = x(1) + WN0 x(5) = x(1) + x(5)
x ' (5) = x(1) + WN4 x(5) = x(1) − x(5)
x ' (3) = x(3) + WN0 x(7) = x(3) + x(7)
x ' (7) = x(3) + WN4 x(7) = x(3) − x(7)
Adım 2
x '' (0) = x ' (0) + WN0 x ' (2) = x ' (0) + x ' (2) = x(0) + x(4) + x(2) + x(6)
x '' (4) = x ' (4) + WN2 x ' (6) = x(0) − x(4) + WN2 { x(2) + x(6)}
x '' (2) = x ' (0) + WN4 x ' (2) = x ' (0) − x ' (2) = x(0) + x(4) − { x(2) + x(6)}
x '' (6) = x ' (4) + WN6 x ' (6) = x(0) − x(4) + WN6 { x(2) + x(6)}
x '' (1) = x ' (1) + WN0 x ' (3) = x ' (1) + x ' (3) = x(1) + x(5) + x(3) + x(7)
x '' (5) = x ' (5) + WN2 x ' (7) = x(1) − x(5) + WN2 { x(3) − x(7)}
x '' (3) = x ' (1) + WN4 x ' (3) = x ' (1) − x ' (3) = x(1) + x(5) − { x(3) + x(7)}
x '' (7) = x ' (5) + WN6 x ' (7) = x(1) − x(5) + WN6 { x(3) − x(7)}
Adım 3
X (0) = x '' (0) + WN0 x '' (1) = x '' (0) + x '' (1)
X (1) = x '' (4) + WN1 x '' (5)
X (2) = x '' (2) + WN2 x '' (3)
X (3) = x '' (6) + WN3 x '' (7)
X (4) = x '' (0) + WN4 x '' (1) = x '' (0) − x '' (1)
X (5) = x '' (4) + WN5 x '' (5)
X (6) = x '' (2) + WN6 x '' (3)
X (7) = x '' (6) + WN7 x '' (7)
17
X (0) = x(0) + x(4) + x(2) + x(6) + x(1) + x(5) + x(3) + x(7)
X (1) = x(0) − x(4) + WN2 { x(2) + x(6)} + WN1 { x(1) − x(5) + WN2 { x(3) − x(7)}}
X (2) = x(0) + x(4) − { x(2) + x(6)} + WN2 { x(1) + x(5) − { x(3) + x(7)}}
X (3) = x(0) − x(4) + WN6 { x(2) + x(6)} + WN3 { x(1) − x(5) + WN6 { x(3) − x(7)}}
X (4) = x(0) + x(4) + x(2) + x(6) − { x(1) + x(5) + x(3) + x(7)}
X (5) = x(0) − x(4) + WN2 { x(2) + x(6)} + WN5 { x(1) − x(5) + WN2 { x(3) − x(7)}}
X (6) = x(0) + x(4) − { x(2) + x(6)} + WN6 { x(1) + x(5) − { x(3) + x(7)}}
X (7) = x(0) − x(4) + WN6 { x(2) + x(6)} + WN7 { x(1) − x(5) + WN6 { x(3) − x(7)}}
Şekil 3.6: Sekiz noktalı DFT'nin zamanda desimasyon ile iki adet dört noktalı DFT'ye
ayrıştırılması
18
Şekil 3.7: İki adet dört noktalı DFT'nin zamanda desimasyon ile dört adet iki noktalı
DFT'ye ayrıştırılması
Şekil 3.8: Sekiz noktalı zamanda desimasyonlu FFT için akış diagramı
19
Şekil 3.9: Sekiz noktalı zamanda desimasyonlu FFT için akış diagramı
20
şeklinde yazılabilir. Tanımlamalar yerlerine konursa,
( N / 2 ) −1 ( N / 2 ) −1
Xk = ∑
n=0
x (1) ( n )W Nn k + ∑
n=0
x ( 2 ) ( n )W N( n + ( N / 2 )) k (3.38)
elde edilir.
Frekans desimasyonunda çift ve tek frekans domeni noktaları X 2 k ve X 2 k +1
yazılabilir.
WN2 nk = WNnk/ 2 ve WNkN = 1 özelliklerinden yararlanılarak,
( N / 2 ) −1 ( N / 2 ) −1
X 2k = ∑
n=0
(1)
x ( n )W nk
N /2 + ∑
n=0
x ( 2 ) ( n )W Nnk/ 2 (3.39)
elde edilir.
k yerine 2k + 1 konarak ve benzer şekilde
( N / 2 ) −1 ( N / 2 ) −1
X 2 k +1 = ∑
n=0
x (1 )
( n )W N
n ( 2 k +1)
+ ∑
n=0
x ( 2 ) ( n )W N( n + ( N / 2 )( 2 k + 1 ))
( N / 2 ) −1 ( N / 2 ) −1
= ∑
n=0
W Nn x (1 ) ( n )W Nn k/ 2 − ∑
n=0
W Nn x ( 2 ) ( n )W Nn k/ 2W NN k W NN / 2
elde edilir.
WNNk = 1 ve WNN / 2 = −1 özelliklerinden yararlanarak,
( N / 2 ) −1 ( N / 2 ) −1
X 2 k +1 = ∑n=0
W Nn x (1) ( n )W Nnk/ 2 − ∑n=0
W Nn x ( 2 ) ( n )W Nnk/ 2 (3.40)
elde edilir.
k = 0,1,..., ( N / 2) − 1 için X 2 k ve X 2 k +1 'den N için frekansta desimasyonlu FFT
görülmektedir:
( N / 2 ) −1
X 2k = ∑ ⎡⎣ x (1 ) ( n ) + x ( 2 ) ( n ) ⎤⎦ W nk
N /2
n=0 (3.41)
( N / 2 ) −1
X 2 k +1 = ∑n=0
⎣⎡ x ( n ) − x ( n ) ⎤⎦W N W
(1 ) (2) n nk
N /2
21
Hesaplama Sayısı Karşılaştırılması
DFT hesaplanmasında N2 karmaşık çarpma ve N ( N − 1) karmaşık toplama
kıyaslanabilir.
Matlab Uygulamaları
Örnek 3.5: DFT ile FFT arasındaki işlem süresinin kıyaslanması.
tic
radix2hfd(x,N);
toc
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 =
0.0940
elapsed_time =
56.172000
elapsed_time =
17.8750
22
Örnek 3.6: Zamanda desimasyonlu FFT algoritmasının incelenmesi.
function[X]=radix2hfd(x,M)
if nargin ==2
N=M;
else
N=length(x);
end
%global M;
N=length(x);
L=log2(N);
if L==1
X=[x(1)+x(2) x(1)-x(2)]
end
if L>1
WN=exp(-j*2*pi/N);
W(1,:)=WN.^([0:1:N/2-1]);
x0(1,:)=x(1:2:end);
x1(1,:)=x(2:2:end);
X0(1,:)= radix2hfd(x0)+W.* radix2hfd(x1);
X1(1,:)= radix2hfd(x0)-W.* radix2hfd(x1);
X=[X0 X1];
end
Ödev 3.2:
23