Professional Documents
Culture Documents
BİYOMEDİKAL SİNYAL İŞLEME DERSİ 6.föy
BİYOMEDİKAL SİNYAL İŞLEME DERSİ 6.föy
HAFTA
Amaç
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
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 = −𝑊𝑁𝑘𝑛
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.
𝑿[𝟎] 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])
ℎç ℎ𝑡
𝑋[0] = 𝑔ç + 𝑔𝑡
𝑋[1] = ℎç − 𝑗ℎ𝑡
𝑋[2] = 𝑔ç − 𝑔𝑡
𝑋[3] = ℎç + 𝑗ℎ𝑡
Bu eşitliklere göre iki adet kompleks çarpma işlemi gerçekleşmektedir.
𝑁 𝑁
−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]𝑊𝑁
𝑁 𝑁
−1 𝑘𝑛 −1 𝑘𝑛
𝑋[𝑘] = ∑𝑛=0 𝑥ç[𝑛]𝑊𝑁/2
2
+ 𝑊𝑁𝑘 ∑𝑟=0 𝑥𝑡[𝑛]𝑊𝑁/2
2
𝑁 𝑁 𝑁 𝑁 𝑁
𝑁 −1 (𝑘+ )𝑛 (𝑘+ ) −1 (𝑘+ )𝑛
𝑋[𝑘 + ] = ∑𝑛=0 𝑥ç[𝑛]𝑊𝑁/22 2
+ 𝑊𝑁 2
∑𝑟=0 𝑥𝑡[𝑛]𝑊𝑁/2
2 2
2
𝑁
−1
𝑘𝑛
𝑋ç[𝑘] = ∑𝑛=0 𝑥ç[𝑛]𝑊𝑁/2
2
𝑁
−1
𝑘𝑛
𝑋𝑡[𝑘] = ∑𝑟=0 𝑥𝑡[𝑛]𝑊𝑁/2
2
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
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')
0.5
Genlik
-0.5
-1
0 0.02 0.04 0.06 0.08 0.1
Zaman (s)
10
-5
-10
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.
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ı;
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: