Loading [MathJax]/jax/output/HTML-CSS/jax.js
Akademisyenler öncülüğünde matematik/fizik/bilgisayar bilimleri soru cevap platformu
0 beğenilme 0 beğenilmeme
1.2k kez görüntülendi


Lisans Matematik kategorisinde (20 puan) tarafından  | 1.2k kez görüntülendi

FFT denilen şey nedir?

Fast Fourier Transform, yani hızlı fourier dönüşümü

1 cevap

1 beğenilme 0 beğenilmeme

Normalde N haneli iki sayının çarpımı için N2 kere toplama ve N21 kere çarpma işlemi yapmak gerekir (yeni işlemcilerde toplama işlemleri de önemlidir), örn. 1576 işlemini  1576=65+610+705+7010=1140  olarak hesaplıyoruz. Landau işaretiyle O(f):={g:NR+| c öyle ki nN:g(n)cf(n)} gösterirsek bu algoritma kayan nokta işlemlerinin (ing. FLOP) sayısında O(N2N21)=O(NN2)O(N2) derecesindendir.

Tanım: Bir f fonksiyonu için fn:=f(xn)'lerin
 Fa:CNCN,fjˆfj:=N1k=0fke2πijk/Nj=0,...,N1 eşdönüşümüne ayrık Fourier dönüşümü denir. Tersi (Fa)1 fj:=1NN1k=0ˆfke2πijk/N'dir.

Hızlı Fourier dönüşümü, O(N2) derecesinden olan ayrık Fourier dönüşümünü adı üstünde hızlı bir biçimde -O(Nlog2N) ile- gerçekleştiren   bir tekniktir, grup teorisinden sayı teorisine uzanan farklı çeşitleri vardır, ilk kez verimli bir böl-ve-yönet algoritması biçiminde Cooley, J. W., and J. W. Tukey; An Algorithm for the Machine Calculation of Complex Fourier Series. Math. Comp. 19, 297-301 (1965) doi:10.2307/2003354 'de yayınlanmıştır. Cooley-Tukey algoritmasının kanıtı (yazılacak gibi değil) ve genel olarak hızlı Fourier dönüşümüyle ilgili herşey için E.O. Brigham, The Fast Fourier Transform, Prentice Hall, Englewood Cliffs (1974) kitabını incelemenizi öneririm.

1971'de A. Schönhage ve V. Strassen Schnelle Multiplikation grosser Zahlen, Computing 7, 281-292 doi:10.1007/BF02242355 adlı makalelerinde sadece herhangi iki büyük sayının çarpımını hesaplamaya yönelik  hızlı Fourier dönüşümüne dayalı O(Nlog(N)log(log(N))) derecesinden  olan Schönhage-Strassen algoritmasını geliştirmişlerdir. Ancak 2007 yılından sonra Schönhage-Strassen'den daha hızlı, işlem karmaşıklığını O(Nlog(N)23log(N))'e kadar düşürülebilen (log burada yinelemeli logaritmadır) Fürer algoritması  bkz. arXiv:1407.3360 bulunabilinmiştir.

Ama ben ikinin bir kuvveti olan bir sayıyı (=2m=2N olsun) hesaplamak için Cooley-Tukey'in h.F.d. algoritmasının  nasıl kullanılabileceğini göstermekle yetineceğim.

Tanım: p:CC,xp(x):=Nk=0akxk,
 N derecesinden karmaşık değerli bir çokterimlidir, x değişkenine taban denir.

Herhangi bir tamsayıyı m belli bir positif taban sayısı için bir çokterimli olarak yazabiliriz, örn. T:=10,m=134m=p(T),a0=4,a1=3,a2=1,ak=0  k3. O zaman N haneli iki sayıyı çarpma işlemi N1 derecesinden iki çokterimliyi çarpma işlemine r(x)=p(x)q(x) denk gelir (şimdilik tabanı sabit seçmiyoruz).  p(x)q(x)'nın katsayılarını doğrudan hesaplamak yerine belli xk noktalarında r(xk)=p(xk)q(xk)'yi belirleyelim ve bunların yardımıyla c=[c0,...,c2N1]'yi bulup r(x)=2N1k=0ckxk'yi oluşturalım. İçdeğer biçim teoremine göre 2N1 derecesinden r(x) çokterimlisini saptayabilmek için 2N tane r(xk) fonksiyon değerine ihtiyacımız var. Akla ilk gelen soru hangi xk değerlerini seçmemiz gerektiği, yanıtı ise (sonradan kullanacağımız) indirgeme ve yansıma özelliğine sahip olan ilkel birim kökleridir.

Tanım:
R etkisiz elemanı 1 olan  değişmeli bir halka ve 0nN olsun. Eğer ωn=1 ve 0<k<n için ωk1'i sağlarsa, ωR'ya n'inci ilkel birim kökü denir. İndirgeme özelliği : Eğer bir 2n1 derecesinden çokterimli için 2n ilkel birim kökünü belirlemişsek, bunların yarısı n1 derecesinden bir çokterimli için de ilkel birim kökleridir. Yansıma özelliği ise şöyle açıklanabilir: Eğer ω n'inci ilkel birim kökü ve n2 çift ise, ωk+n2=ωk'dır.

Bizim için R=C'dir. O zaman  ω:=e2πin bir n'inci ilkel birim köküdür.

Bu durumda r(xk) değerlerini  bulmak ayrık Fourier dönüşümü uygulamakla eşdeğerdir!

İlkönce tek çokterimlinin hızlı Fourier dönüşümüyle ilgileneceğiz. 2N çift olduğu için, 2N1 derecesinden bir q(x):=N1k=0bkxk çokterimlisini iki tane (N1) derecesi çokterimlisine dönüştürebiliriz:

qçift(x):=b0+b2x+b4x2+...+b2N2xN1

qtek(x):=b1+b3x+b5x2+...+b2N1xN1

, çünkü q(x)=xqtek(x2)+qçift(x2).

 Cooley-Tukey algoritmasını -betik olarak gösterimi CT(çokterimli,sayı)- şimdi yazabiliriz:

1. b=[b0,...,b2N1] ve ω'yı parametre olarak ver.
 
2. b'yi bçiftqçift ve btekqtek'e böl. Özyineli olmak üzere C.-T. prosedürünü  her biri için ω2 ile çağır:yçift/tek=CT(bçift/tek,ω2) (indirgeme öz.) qçift ve qtek'in, ω2'nin bütün N üsleri için değerleri q'nun ω'nın bütün 2N üsleri kümesindeki elemanların yarısı için değerleri biliyoruz.
 
3. Diğer yarısı için aşağıdaki denklemleri, 2.'de bulunan yçift ve ytek'ler için (N kere)  çöz:
 
 q(ωk)=qçift(ω2k)+ωkqtek(ω2k)
 
 q(ωk+N/2)=qçift(ω2k)ωkqtek(ω2k) (yansıma öz.)
 
4. 2N=2m olduğu için sonunda çokterimliden geriye sadece bir katsayı kalacak (en son yinelemede), bunu işlem yapmadan y'ye eşleyip geri döndürebiliriz.
 
5. y=(q(ωk))k{0,...,2N1} a.F.d. değerlerini yazdır.
 
Son olarak a,b katsayı vektörlü iki N-1 derecesinden çokterimliyi p,q çarpma işlemine geliyoruz. Bunun için y=CT(a) ve z=CT(b)'yi hesaplayalım, y ve z'yi çarpalım, h:=[y0z0,...,y2N1z2N1]. h'nin ters a.F.d.'ü , benzer şekilde ck=12N2N1j=0hjωij, bize r(x)'in katsayılarını verir.

(1.2k puan) tarafından 
tarafından düzenlendi
20,336 soru
21,890 cevap
73,626 yorum
3,182,141 kullanıcı