Hızlı Fourier Dönüşümü Ve Frekans Ölçme
Hızlı fourier dönüşümü bir sinyalin sahip olduğu frekansların ölçülebilmesini sağladığı için sinyal işlemede sıkça kullanılır. Bu dönüşüm, fourier dönüşümünün özel bir halidir.
Hızlı fourier dönüşümümün formülü şudur:
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ğin indisini temsil eder. Kullanılan bir eşitlik daha vardır:
eix = cosx+isinx
e^x ifadesinin 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ın, diğeri sanal sayıların toplamı şeklindedir:
N-1
Gerçel Xk = ∑ x[n]*cos(2Π/N)*k*n
n=0
N-1
Sanal 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. Gerçek frekans değeri, k değerinin frekans çözünürlüğü ile çarpımı sonucunda elde edilir. Frekans çözünürlüğü örnekleme frekansının, örnek sayısına oranıdır.
k*SR
F = ------
N Burada X, frekans tepkilerini tutan dizi, k X dizisinin indisi, ve SR örnekleme frekansıdır. k değeri N-1 değerine ulaştırıldığında ve X dizisinin elemanları grafiğe döküldüğünde, 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-1) büyük olmaz, en çok N/2-1 değerinde olur. k maximum değerinde iken yerine yazılırsa:
N*SR SR
F = ------ = ----
2*N 2eşitliği elde edilir. Bu genel bir kuraldır; bir sinyalin frekansı, örnekleme frekansının yarısından büyük olamaz. Daha doğrusu bir sinyal, sahip olduğu en yüksek frekans değerinin en az 2 katı kadar örnekleme frekansı ile örneklenmelidir. Aksi halde sinyal, örnekleme frekansının yarısını aşan frekans değerlerinin tümünü kaybeder...
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 ( 17 )
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. Ama bildiğim kadarıyla FFTnin elektronikte de uygulama alanları var.
serdarkoylu#12
17/09/2010, 11:18
"SES TANIMA" ile ne kastettiğinizi anlamakta sorun yaşadım kısacası. FFT gibi şeyler bir takım işlevler için kullanılabilir ve analog veya dijital olarak bolca da kullanılıyor zaten. Peki sizin amacınız tam olarak ne? Ses tanımadan kasıt konuşmayı algılama ise örneğin, FFT işin başında sesi çevredeki gürültüden ayırmak üzere kullanılabilir. Fakat kelimeleri vs. ayırtetmek için FFT pek işe yaramaz. Yani 1777 HZ'lik bir ses sinyalinin varlığı, konuşma babında bir anlam ifade etmez. FFT ile seçilen örnekleri işlemek için ortaya bir sürü karışık şey çıkar.
Eğer ses tanıma derken tam olarak neyi kastettiğinizi daha iyi ifade ederseniz, daha kolay yol gösterilebilir sanıyorum.
Birde mümkünse, bu gibi bir geliştirme süreci için blog yerine forum tarzı bir şey, insanların katkı sağlayabileceği bir ortam daha kullanışlı olacaktır.
Hüseyin Atasoy#13
17/09/2010, 11:50
Sanırım son paragrafa takıldınız :). Bu sadece basit bir fikir idi. Tabi ki ses tanıma sadece frekans tespiti ve eşleştirmesinden ibaret değil. Frekans tespiti atılması gereken adımlardan sadece biri, ses tanımayla ilgili okuduğum bütün makalelerde fourier dönüşümü hep vardı.
Ses tanıma çok genel bir kavram. Derine inildiğinde konuşmacı tanıma, konuşmacıdan bağımsız ayrık/sürekli kelime/hece tanıma gibi pek çok kola ayrılır. Daha da derine inildiğindeyse bunların da ötesinde doğal dil işleme tekniklerine de ihtiyaç duyulduğu görülür. Ama frekans ses için ayırt edici ve ölçülebilir bir nitelik olduğu için genel anlamda ses tanıma işlemlerinin bir parçası...
Bu türden konuların tartışılacağı, bu konulara merak duyan insanların birikimlerini paylaşıp birlikte birşeyler yapmaya gayret edecekleri bir forum ortamının olması gerçekten güzel olurdu. Ama katılım konusunda şüphelerim var. Denemek lazım aslında...
serdarkoylu#14
17/09/2010, 15:18
Bazen, heleki böyle konularda, nicelik önemsizdir. Katılımın çok olması arzu edilse de, az olması kaygılanılacak şey değil bence.
Signal gürültü oranını düşük tutmak için sadece konuşmayı alacak bir filtre elbette olmazsa olmaz. Fakat, ses tanıma için bu amaçla FFT'den daha farklı şeylerde mevcut. Webster denklemleri filan gibi.
Bakmayın, bende bu işten çok anlarmış gibi konuşuyorum. Size en iyisini bir kaynak önereyim, sanırım ilginizi çekecektir:
Mathematical Models of Speech Technology,Stephen E. Levinson., Wiley 2005.
Spoken Language Processing, A Guide to Theory, Algorithm and System Development, Xuedong Huang, Alex Acero, Hsiao-Wuen Hon, Prentice-Hall 2001
İlk kitap bu işte kullanılan algoritmaları izah etmeye çalışıyor. Ağız dil, dudak vs. matematik modelinden başlayıp öyle devam edip gidiyor. Diğeri ise, biraz daha pratiğe yönelik, recognition, search vs. gibi işlevleri ön plana alıyor.
Hüseyin Atasoy#15
18/09/2010, 12:24
Keşke bunlarla uğraşacak zamanım ve yeterli birikimim olsaydı :(
Teşekkürler kaynak için...
dilay#16
23/05/2011, 17:54
Cok tesekkurler, yaziniz cok yararli oldu. Yalniz bir sorum olacak. Uzerinde calistigim matlab komutlarinin FFT kismini asagiya da kopyaladim. Aklima takilan sey su: yukarida belirttigniz k degeri, fourier donusumu sonucunda elde ettigimiz vektorun boyutu mudur? eger oyleyse X'in boyutu N'e bagli oluyor, yani N kadar noktada hesap yapilip degerler ataniyor ve bu nedenle de k sayisi her zaman N'e esit oluyor. Yanlis bir yorumlama mi yapiyorum acaba? Yardimci olursaniz cok sevinirim.
nfft = 2^(nextpow2(length(t1))-1); % N: the number of points
fs = 10000; %% sample rate [Hz]
X = abs(fft(t1, nfft)); %% FFT
fr = (1:length(X))*fs/nfft); % % real frequency?
Hüseyin Atasoy#17
24/05/2011, 11:32
k sabit bir değer değil, 0dan N/2-1 aralığında değerler alan bir tamsayı. k'yı veren denklemi yazmamın sebebi k'nın N/2den sonra hesaplanmasına gerek kalmadığını göstermekti.
Özetle k frekansları tutacak dizinin indisidir...
Yorum/Görüş Bildir