Fourier dönüşüm formülleri matematikte ve fizikte de sıkça kullanılan önemli formüller. Bu formüllerinin şimdilik bizi ilgilendiren kısmı; belirli bir sinyale ait örneklerin, frekans tepkilerini ölçmeye ve frekans spektrumunu çıkartmaya yaraması. Bu formüller sesin en ayırt edici özelliklerinden biri frekans olduğundan, ses tanımada kullanılabilir. Fourier dönüşümleri bir dalganın genlik-zaman verilerini, frekans verilerine çevirir. Fourier'dan türemiş çeşitli yöntemler var, bu yazı FFT(Fast Fourier Transform) ile ilgili olacak.
Aslında bu kategorideki ilk yazıda da değinmiştim, yine tekrar edelim. Frekans bir saniyede, tekrarlanma sayısıdır. Sinüsoidal bir dalga düşünüldüğünde, dalganın frekansı, bu dalganın bir saniyelik sinyalinin, örnekleri ile çizilecek grafikte bulunan tepe sayısıdır.

Yukarda, sabit frekanslarla üretilen sinüsoidal dalga, örneklenip wav dosyasına yazılmıştır. Daha sonra, genlik-zaman grafiği çizilmiş ve FFT kullanılarak, frekans spektrumu elde edilmiştir. Burada spektrum, yatayda frekansı göstermektedir. En soldaki değer sıfır hertz, en sağdaki değer de, ÖrneklemeOranı/2 hertztir. Yazının ileriki kısımlarında sebeplerini de okuyabilirsiniz...
Artık Fourier dönüşüm formülünü de görelim. Genel formül şöyledir:
N-1
Xk = ∑ x[n]*e-i*(2Π/N)*k*n
n=0
Burada k, sırası gelen frekans elemanını, N örnek sayısını, i karekök(-1) değerini, x() örneklenmiş sinyal verisini, n işlenmeyi bekleyen sıradaki örneği temsil eder. Kullanılan bir eşitlik daha vardır:
eix = cosx+isinx
Bu eşitliğin ispatını da yapalım. e sayısının Taylor seri açılımı şöyledir:
2 3 n
x x x x x
e = 1 + ----- + ----- + ----- + ... + -----
1! 2! 3! n!
x yerine ix değerini yazalım:
2 3 n
ix ix (ix) (ix) (ix)
e = 1 + ----- + ----- + ----- + ... + -----
1! 2! 3! n!
i'nin kuvvetlerini yerlerine yazalım:
2 3 4
i = -1 i = -i i = 1
2 3 4
ix x x x x
e = 1 + i----- - ----- - i----- + ----- ...
1! 2! 3! 4!
i çarpanlarına sahip terimleri i parantezine alıp ayrı iki toplam yazalım:
2 4 6
ix x x x
e = 1 - ----- + ----- - ----- ...
2! 4! 6!
3 5 7
/ x x x \
+ i(x - ----- + ----- - ----- ...) = cosx-isinx
\ 3! 5! 7! /
Son durumda, x yerine (-x) yazılırsa, bildiğiniz gibi cos eksiyi yutar, sin dışarı atar.(İspatı, sinüs ve cosinüsün seri açılımlarında açıkça görülebilir. Cosinüs, terimlerinde çift kuvvetlere sahip olduğundan eksiyi yutar. Sinüste ise terimler, eksi parantezine alınır.) Ve asıl aradığımız eşitliğe de ulaşmış olduk:
-ix
e =cosx-isinx
İfade iki farklı toplam şeklinde yazılabilir. Bunlardan biri gerçel sayıları, diğeri sanal sayıları ayrı ayrı toplar.
N-1
Gerçel Xk = ∑ x[n]*cos(2Π/N)*k*n
n=0
N-1
Gerçel Xk = ∑ x[n]*(-sin(2Π/N))*k*n
n=0
Elde edilen değerler sanal düzlemde birer vektörü temsil eder. Son olarak herbir vektörün boyu hesaplanır.
________________________
Xk = √(Gerçel Xk)2 + (Sanal Xk)2
İşte bu değer bize, sinyalin k hertzlik frekansa tepkisini gösterecektir. x(k) her zaman pozitiftir. Bu değere bir eşikleme uygulanarak tam frekans değerine erişmek için, k sayısı elde edilebilir. Ya da çizilecek frekans spektrumunda yerel maximum noktalar tespit edilerek, frekans belirtebilecek k değerlerine erişilebilir. Gerçek frekans, k değerin frekans çözünürlüğü ile çarpımı sonucunda elde edilir. Frekans çözünürlüğü örnekleme oranının, örnek sayısına oranıdır.:
k*SR
F = ------
N
k burada X dizisinin indisidir. X, frekans tepkilerini tutan dizidir. SR örnekleme oranı(SampleRate)dır. k değeri N değerine ulaşırsa ve X dizisinin elemanları grafiğe dökülürse, grafiğin tam ortadan simetrik olduğu görülecektir. Bu yüzden k sayısı örnek sayısının yarısından(N/2) büyük değerler almaz. Bu durumda k en çok N/2 değerinde olur. k maximum değerinde iken yerine yazılırsa :
N*SR SR
F = ------ = ----
2*N 2
eşitliği elde edilir. Bu genel bir kuraldır; frekans, örnekleme oranın yarısından büyük olamaz. Bu eşitlik şunu da gösterir; frekans çözünürlüğü 1 değilken, frekans bulmada hata oluşabilir. En sağlıklı ölçüm için, en azından örnekleme oranı kadar örnek sayısı alınmasında fayda vardır.(en az 1 saniyelik veri). Hatta örnekleme oranı, örnek sayısına eşit seçilirse bölüm halinde bulunduklarından, birbirlerini yok ederler ve frekans değeri k değerinin kendisi olur. Böylece frekans çözünürlüğü ile fazlaca ilgilenilmesine gerek kalmaz...
F*N
k = ------
SR
Bu eşitlik te şunu gösterir; k değeri elde edilirken, frekans çözünürlüğünün birin üstünde olması durumunda, hesaplanacak frekans çözünürlüğün katlarıdır. Bunu önlemek için N ve SR değerlerine birbirleri ile sadeleşecek şekilde değerler verilmesi önemlidir. k bir tamsayı olmalıdır ki, asıl hesaplanan frekans değeri tam bir sonuç versin. Yani çözünürlük birden büyükse ve F*N ile SR aralarında asal ise FFT yaklaşık sonuç döndürecektir:

Yukardaki örnekte, çözünürlük 100 hertz, bu durumda dönecek frekans değerleri de çözünürlüğün katıdır. Bu yüzden, çözünürlüğün 1 seçilemesi(örnekleme oranı = örnek sayısı) uygundur.
FFT adına rağmen işlemciyi oldukça yoran bir algoritma. Cd kalitesinde (44100 hertzlik örnekleme oranında), 1 saniyelik ses verisini(44100 tane örneği) bu algoritmayla işleme tabi tutmak, toplamda 972405000 adımlık içiçe döngülerin tamamlanmasını beklemeye razı olmak demek.(N örnek sayısı iken, adım sayısı=N*N/2) Üstelik herbir adımda tek işlem yapılmadığını göz önünde bulundurursak, yöntemin yavaşlığı daha iyi anlaşılır.
Örnek sayısı azaltılarak hızda büyük bir artış sağlanabilir. Üstelik örnek sayısındaki azalma, ses tanıma amacıyla oluşturulacak bir programda avantaj sağlayabilir. Çünkü örnek sayısı azalınca, yukarıda da yazdığım gibi dönecek frekans, çözünürlüğün katlarına yuvarlanır. Böylece farklı zamanlarda aynı kaynaktan çıkan benzer seslerin aralarında oluşabilecek küçük frekans farklılıkları, frekanslar aynı değerlere yuvarlanacakları için yoksayılmış olur. Belli bir eşik değerin üstüne çıkabilmiş büyüklüğe ait frekans değerleri kaydedilerek saklanabilir, daha sonra da kayıtlı frekans değerleri ile gerçek zamanlı karşılaştırma yapılarak ses tanıma ya da eşleştirme yapılabilir...
Okunma Sayısı: 2595
Yayınlanma Tarihi: 13 Mayıs 2009 Çarşamba - 09:33
Anahtar Kelimeler: fourier, transform, frekans, tepkisi, ölçümleri, e üzeri ix, sanal, dijital sinyal işleme, fast, hızlı fourier dönüşümü
Yorumlar ( 13 )
Ahmet#9
25/01/2010, 22:31
Çok teşekkür ederim, ilk denememi excelde yaptım çok işime yaradı bu yazı, tekrar teşekkür ederim :)
Aydın#10
17/03/2010, 09:17
Merhaba hüseyin Bey bu FFT algoritması ampermetre voltmetre gibi uygulamalarda kullanılabilirmi ..bir fikir verirseniz sevinirim..FFT algoritmasını tam olarak anlamış deilim açıkçası mantığını anlatabilecek bi yazı yayınlarsanız minnettar olurum iyi çalışmalar..
Hüseyin Atasoy#11
17/03/2010, 16:49
Konunun yukarıda anlattıklarımın da derinindeki matematiksel altyapısı konusunda ben de pek bilgi sahibi değilim. FFTnin elektronikte de uygulama alnalarının olduğunu söyleyebilirim sadece...
Murat#12
19/04/2010, 10:58
Yanlış bilmiyorsam FFT ile işlem yapılırken, sinyal çerçevelere bölünür ve her çerçeve örnekleme frekansının çok altında bir sayıda örnek içerir. Ama orada frekans yaklaşık olarak değil, tam olarak belirlenebiliyor. Bu nasıl oluyor?
Hüseyin Atasoy#13
20/04/2010, 15:21
Yazdığım programda frekans çözünürlüğünü tutan değişkeni tamsayı tipinde aldığım için aralarında asal iki değer bölünüp bu değere atandığında, bölümün sadece tam kısmı alınıyordu. Aslında, frekans çözünürlüğü tamsayı olmak zorunda değil ve dolayısıyla örnek sayısı örnekleme frekansının çok altında olsa bile, tam frekans değeri tespit edilebilir.
"Hakkında" kısmına da yazmıştım; yazdığım herşey illaki doğrudur diye bir iddiam yok. Yazılarımda kendi gözlemlerimi ve çıkarımlarımı yazmaya özen gösteriyorum. Aralarda yanıldığım noktalar da olabilir...
Yorum/Görüş Bildir