31

Rýchla Fourierovazenis.dnp.fmph.uniba.sk/vtv/fft.pdf · Rýchla Fourierova transformácia 1. FYZ-230/00 Algoritmy vedeckotechnických výpo£tov Obsah Úvod do Fourierovej transformácie

  • Upload
    others

  • View
    12

  • Download
    0

Embed Size (px)

Citation preview

  • FYZ-230/00 Algoritmy vedeckotechnických výpo£tov

    FYZ-230/00Algoritmy vedeckotechnických výpo£tov

    Rýchla Fourierova

    transformácia

    1

  • FYZ-230/00 Algoritmy vedeckotechnických výpo£tov

    Obsah

    • Úvod do Fourierovej transformácie

    • Diskrétna Fourierova transformácia

    • Rýchla Fourierova transformácia

    2

  • FYZ-230/00 Algoritmy vedeckotechnických výpo£tov

    Úvod do Fourierovej transformácie

    Majme periodickú funkciu f(t) s periódou T

    f(t) = f(t+ T ), ω0 =2π

    T

    Funkciu f(t) môºeme zapísa´ pomocou Fourierovho radu

    f(t) = a0 +

    ∞∑k=1

    ak cos(kω0t) + bk sin(kω0t)

    kde

    a0 =1

    T

    ∫ T0

    f(t) dt

    ak =2

    T

    ∫ T0

    f(t) cos(kω0t) dt = a−k

    bk =2

    T

    ∫ T0

    f(t) sin(kω0t) dt = −b−k

    3

  • FYZ-230/00 Algoritmy vedeckotechnických výpo£tov

    Odvodenie a0

    Integrova´ obidve strany Fourierovho radu∫ T0

    4

  • FYZ-230/00 Algoritmy vedeckotechnických výpo£tov

    Odvodenie ak

    Vynásobi´ obidve strany Fourierovho radu cos(mω0t) a integrova´∫ T0

    5

  • FYZ-230/00 Algoritmy vedeckotechnických výpo£tov

    Odvodenie bk

    Vynásobi´ obidve strany Fourierovho radu sin(mω0t) a integrova´∫ T0

    6

  • FYZ-230/00 Algoritmy vedeckotechnických výpo£tov

    Fourierova transformácia � príklad

    Obd¨ºniková funkcia:

    f(t) =

    {1, ak t+ kT ∈ (0, t1)0, ak t+ kT ∈ (t1, T )

    , k je celé £íslo

    Zvolíme T = 1, ω0 = 2π.

    a0 =1

    T

    ∫ T0

    f(t) dt =1

    1

    ∫ t10

    1 dt+1

    1

    ∫ 1t1

    0 dt = t1

    ak =2

    T

    ∫ T0

    f(t) cos(kω0t) dt =2

    1

    ∫ t10

    1 cos(kω0t) dt+2

    1

    ∫ 1t1

    0 cos(kω0t) dt =

    = 21

    kω0[sin(kω0t)]

    t10 =

    2 sin(kω0t1)

    kω0

    bk =2

    T

    ∫ T0

    f(t) sin(kω0t) dt =2

    1

    ∫ t10

    1 sin(kω0t) dt+2

    1

    ∫ 1t1

    0 sin(kω0t) dt =

    7

  • FYZ-230/00 Algoritmy vedeckotechnických výpo£tov

    = −2 1kω0

    [cos(kω0t)]t10 =

    2− 2 cos(kω0t1)kω0

    -0.2

    0

    0.2

    0.4

    0.6

    0.8

    1

    1.2

    0 0.5 1 1.5 2

    f(t)

    t

    Príklad 1 - obdĺžniková funkcia

    f(x)f1(x)f2(x)f3(x)f4(x)f5(x)f6(x)f7(x)f8(x)

    8

  • FYZ-230/00 Algoritmy vedeckotechnických výpo£tov

    Fourierova transformácia � príklad 2

    Pílovitá funkcia:

    f(t) =

    {t+kTt1

    , ak t+ kT ∈ (0, t1)0, ak t+ kT ∈ (t1, T )

    , k je celé £íslo

    Zvolíme T = 1, ω0 = 2π.

    a0 =1

    T

    ∫ T0

    f(t) dt =1

    1

    ∫ t10

    t

    t1dt+

    1

    1

    ∫ 1t1

    0 dt =t12

    ak =2

    T

    ∫ T0

    f(t) cos(kω0t) dt =2

    1

    ∫ t10

    t

    t1cos(kω0t) dt+

    2

    1

    ∫ 1t1

    0 cos(kω0t) dt =

    =2

    k2ω20t1[kω0t sin(kω0t) + cos(kω0t)]

    t10 =

    2

    k2ω20t1(kω0t1 sin(kω0t1) + cos(kω0t1)− 1)

    bk =2

    T

    ∫ T0

    f(t) sin(kω0t) dt =2

    1

    ∫ t10

    t

    t1sin(kω0t) dt+

    2

    1

    ∫ 1t1

    0 sin(kω0t) dt =

    9

  • FYZ-230/00 Algoritmy vedeckotechnických výpo£tov

    =2

    k2ω20t1[sin(kω0t)− kω0t cos(kω0t)]t10 =

    2

    k2ω20t1(sin(kω0t1)− kω0t1 cos(kω0t1) + 1)

    -0.2

    0

    0.2

    0.4

    0.6

    0.8

    1

    1.2

    0 0.5 1 1.5 2

    f(t)

    t

    Príklad 1 - pílovitá funkcia

    f(x)f1(x)f2(x)f3(x)f4(x)f5(x)f6(x)f7(x)f8(x)

    10

  • FYZ-230/00 Algoritmy vedeckotechnických výpo£tov

    Komplexný zápis Fourierovho radu

    Pouºijeme Eulerovu identitu:

    eix = cos(x) + i sin(x), e−ix = cos(x)− i sin(x)

    sin(x) =eix − e−ix

    2i= − sin(−x)

    cos(x) =eix + e−ix

    2= cos(−x)

    11

  • FYZ-230/00 Algoritmy vedeckotechnických výpo£tov

    Komplexný zápis Fourierovho radu

    f(t) = a0 +

    ∞∑k=1

    ak

    (eikω0t + e−ikω0t

    2

    )+ bk

    (eikω0t − e−ikω0t

    2i

    )

    f(t) = a0 +

    ∞∑k=1

    eikω0t(ak − ibk

    2

    )+ e−ikω0t

    (ak + ibk

    2

    )alej ozna£me

    C̃0 = a0

    C̃k =ak − ibk

    2

    C̃−k =a−k − ib−k

    2=ak + ibk

    2

    12

  • FYZ-230/00 Algoritmy vedeckotechnických výpo£tov

    f(t) = C̃0 +

    ∞∑k=1

    C̃keikω0t +

    ∞∑k=1

    C̃−ke−ikω0t

    =

    ∞∑k=0

    C̃keikω0t +

    −1∑k=−∞

    C̃keikω0t

    =

    ∞∑k=−∞

    C̃keikω0t

    C̃k =1

    2

    2

    T

    (∫ T0

    f(t) cos(kω0t) dt− i∫ T0

    f(t) sin(kω0t) dt

    )

    =1

    T

    (∫ T0

    f(t) (cos(kω0t)− i sin(kω0t)) dt

    )

    =1

    T

    ∫ T0

    f(t)e−ikω0t dt

    13

  • FYZ-230/00 Algoritmy vedeckotechnických výpo£tov

    Diskrétna Fourierova transformácia

    Máme len diskrétne hodnoty £asu t1 = ∆t, t2 = 2∆t, t3 = 3∆t, . . . ; tn = n∆t.

    Fourierov rad h©adáme v tvare:

    f(tn) =

    N−1∑k=0

    C̃keikω0tn

    alej ozna£me

    tn = n

    f(n) =

    N−1∑k=0

    C̃keikω0n

    14

  • FYZ-230/00 Algoritmy vedeckotechnických výpo£tov

    Obidve strany vynásobíme e−ilω0n a presumujeme cez n

    N−1∑n=0

    f(n)e−ilω0n =

    N−1∑n=0

    N−1∑k=0

    C̃k eikω0n e−ilω0n

    =

    N−1∑n=0

    N−1∑k=0

    C̃k ei(k−l)ω0n

    Na pravej strane vymeníme poradie sumovania

    N−1∑n=0

    f(n) e−il2πN n =

    N−1∑k=0

    C̃k

    N−1∑n=0

    ei(k−l)2πN n

    Ozna£me:

    A =

    N−1∑n=0

    ei(k−l)2πN n

    15

  • FYZ-230/00 Algoritmy vedeckotechnických výpo£tov

    Prípad (1) k − l je celo£íselný násobok N

    (k − l) = mN, k = l +mN, kde m = 0,±1,±2, . . .

    A =

    N−1∑n=0

    eim2πn =

    N−1∑n=0

    =1︷ ︸︸ ︷cos(mn2π) +i

    =0︷ ︸︸ ︷sin(mn2π) = N

    16

  • FYZ-230/00 Algoritmy vedeckotechnických výpo£tov

    Prípad (2) k − l nie je celo£íselný násobok N

    A =

    N−1∑n=0

    ei(k−l)2πN n =

    N−1∑n=0

    (ei(k−l)

    2πN

    )nOzna£me

    a = ei(k−l)2πN = cos

    ((k − l)2π

    N

    )+ i sin

    ((k − l)2π

    N

    )Dostaneme

    A =

    N−1∑n=0

    an

    Dostali sme geometrický rad

    A =

    N−1∑n=0

    an =

    N, ak a = 11− aN1− a

    , ak a 6= 117

  • FYZ-230/00 Algoritmy vedeckotechnických výpo£tov

    Dosadíme za a

    A =1− aN

    1− a=

    1−=1︷ ︸︸ ︷

    ei(k−l)2π

    1− a= 0

    18

  • FYZ-230/00 Algoritmy vedeckotechnických výpo£tov

    Spolo£ný výsledok

    Spo£ítame obidva prípady:A = N + 0 = N

    Získali smeN−1∑n=0

    f(n) e−ilω0n =

    N−1∑k=0

    C̃kN

    Nenulový vklad sme dostali len pre k = l +mN . Pre m = 0 dostaneme

    k = l

    N−1∑n=0

    f(n) e−ilω0n = C̃lN

    19

  • FYZ-230/00 Algoritmy vedeckotechnických výpo£tov

    Diskrétna Fourierova transformácia

    C̃k =1

    N

    N−1∑n=0

    f(n)e−ikω0n =1

    N

    N−1∑n=0

    f(n)(cos(kω0n)− i sin(kω0n))

    f(n) =

    N−1∑k=0

    C̃k eikω0n =

    N−1∑k=0

    C̃k(cos(kω0n) + i sin(kω0n))

    20

  • FYZ-230/00 Algoritmy vedeckotechnických výpo£tov

    Rýchla Fourierova transformácia pre N = 2r

    Máme:

    C̃n =

    N−1∑k=0

    f(k)e−inω0k

    f(k) =1

    N

    N−1∑n=0

    C̃n einω0k

    kde ω0 = 2πN , n, k = 0, 1, 2, . . . , N − 1.

    Ozna£me W = e−i2πN ,(WN = e−i2π = 1,W

    N2 = e−iπ = −1

    ).

    Získame zápis:

    C̃n = C̃(n) =

    N−1∑k=0

    f(k)Wnk

    f(k) =1

    N

    N−1∑n=0

    C̃nW−nk

    21

  • FYZ-230/00 Algoritmy vedeckotechnických výpo£tov

    Príklad pre N = 4

    Na získanie koe�cientov C̃(n) potrenujeme vyrie²i´ sústavu lineárnych rovníc:

    1

    N

    1 1 1 11 W−1 W−2 W−3

    1 W−2 W−4 W−6

    1 W−3 W−6 W−9

    C̃(0)

    C̃(1)

    C̃(2)

    C̃(3)

    =

    f(0)f(1)f(2)f(3)

    Inverzná matica sa dá ©ahko získa´: 1N

    1 1 1 11 W−1 W−2 W−3

    1 W−2 W−4 W−6

    1 W−3 W−6 W−9

    −1

    =

    1 1 1 11 W 1 W 2 W 3

    1 W 2 W 4 W 6

    1 W 3 W 6 W 9

    22

  • FYZ-230/00 Algoritmy vedeckotechnických výpo£tov

    Výpo£et C̃(n) pre N = 4

    C̃(0)

    C̃(1)

    C̃(2)

    C̃(3)

    =

    W (0)(0) W (0)(1) W (0)(2) W (0)(3)

    W (1)(0) W (1)(1) W (1)(2) W (1)(3)

    W (2)(0) W (2)(1) W (2)(2) W (2)(3)

    W (3)(0) W (3)(1) W (3)(2) W (3)(3)

    f(0)f(1)f(2)f(3)

    C̃(0)

    C̃(1)

    C̃(2)

    C̃(3)

    =

    W 0 W 0 W 0 W 0

    W 0 W 1 W 2 W 3

    W 0 W 2 W 4 W 6

    W 0 W 3 W 6 W 9

    f(0)f(1)f(2)f(3)

    Výpo£tová náro£nos´: 16 (N2) komplexných násobení a 12 (N(N − 1)) komplexných s£ítaní.

    23

  • FYZ-230/00 Algoritmy vedeckotechnických výpo£tov

    Zjednodu²enie £lenov

    Príklad N = 4, n = 2, k = 3:

    Wnk = W 6 =

    =1︷︸︸︷W 4 W 2 = W 2

    Príklad N = 4, n = 3, k = 3:

    Wnk = W 9 =

    =1︷︸︸︷W 4

    2W 1 = W 1

    Vo v²eobecnosti:Wnk = Wnk (mod N)

    C̃(0)

    C̃(1)

    C̃(2)

    C̃(3)

    =

    W 0 W 0 W 0 W 0

    W 0 W 1 W 2 W 3

    W 0 W 2 W 0 W 2

    W 0 W 3 W 2 W 1

    f(0)f(1)f(2)f(3)

    24

  • FYZ-230/00 Algoritmy vedeckotechnických výpo£tov

    Získaná matica sa dá (po výmene riadkov) rozloºi´ na sú£in 2 matíc:C̃(0)

    C̃(2)

    C̃(1)

    C̃(3)

    =

    1 W 0 0 01 W 2 0 00 0 1 W 1

    0 0 1 W 3

    1 0 W 0 00 1 0 W 0

    1 0 W 2 00 1 0 W 2

    f(0)f(1)f(2)f(3)

    Ozna£me: f1(0)f1(1)f1(2)f1(3)

    =

    1 0 W 0 00 1 0 W 0

    1 0 W 2 00 1 0 W 2

    f(0)f(1)f(2)f(3)

    Iný zápis:

    f1(0) = f(0) +W0f(2)

    f1(1) = f(1) +W0f(3)

    f1(2) = f(0) +W2f(2) = f(0)−W 0f(2)

    f1(3) = f(1) +W2f(3) = f(1)−W 0f(3)

    25

  • FYZ-230/00 Algoritmy vedeckotechnických výpo£tov

    Výpo£tová náro£nos´ 1. £asti: 2 komplexné násobenia a 4 komplexné s£ítania.

    2. £as´: C̃(0)

    C̃(2)

    C̃(1)

    C̃(3)

    =

    f2(0)f2(1)f2(2)f2(3)

    =

    1 W 0 0 01 W 2 0 00 0 1 W 1

    0 0 1 W 3

    f1(0)f1(1)f1(2)f1(3)

    Iný zápis:

    f2(0) = f1(0) +W0f1(1)

    f2(1) = f1(0) +W2f1(1) = f1(0)−W 0f1(1)

    f2(2) = f1(2) +W1f1(3)

    f2(3) = f1(2) +W3f1(3) = f1(2)−W 1f1(3)

    Výpo£tová náro£nos´ 2. £asti: 2 komplexné násobenia a 4 komplexné s£ítania.

    Pomer po£tu komplexných násobení pre ve©ké N = 2r: N2

    Nr2

    = 2Nr .

    26

  • FYZ-230/00 Algoritmy vedeckotechnických výpo£tov

    Gra�cké znázornenie výpo£tu pre N = 4

    W0

    W0

    W2

    W2

    W0

    W2

    W1

    W3

    f(0)

    f(1)

    f(2)

    f(3)

    f1(0)

    f1(1)

    f1(2)

    f1(3)

    f2(0)

    f2(1)

    f2(2)

    f2(3)

    • Potrebujeme vypo£íta´ 2 vektory.

    • V kaºdom kroku vypo£ítame 2 prvky.

    • Môºme pouºi´ jeden pamä´ový priestor pre v²etky vektory.

    27

  • FYZ-230/00 Algoritmy vedeckotechnických výpo£tov

    Gra�cké znázornenie výpo£tu pre N = 16

    W0

    W0

    W0

    W0

    W0

    W0

    W0

    W8

    W8

    W8

    W8

    W8

    W8

    W8

    W0 W0

    W0

    W0

    W0

    W8

    W8

    W8

    W8

    W4

    W4

    W4

    W12

    W12

    W12

    W0

    W8

    W8

    W4

    W4

    W12

    W12

    W2

    W2

    W10

    W10

    W6

    W14

    W8

    W12

    W10

    W9

    W13

    W14

    W11

    W0

    W4

    W2

    W6

    W1

    W5

    W3

    W0

    W8

    W4

    W12

    W6

    W14 W7

    W15

    f(1)

    f(2)

    f(3)

    f(4)

    f(5)

    f(6)

    f(7)

    f(9)

    f(10)

    f(11)

    f(12)

    f(13)

    f(14)

    f(15)

    f1(1)

    f1(2)

    f1(3)

    f1(4)

    f1(5)

    f1(6)

    f1(7)

    f1(9)

    f1(10)

    f1(11)

    f1(12)

    f1(13)

    f1(14)

    f1(15)

    f(0) f1(0)

    f(8) f1(8)

    f2(0)

    f2(1)

    f2(2)

    f2(3)

    f2(4)

    f2(5)

    f2(6)

    f2(7)

    f2(9)

    f2(10)

    f2(11)

    f2(13)

    f2(14)

    f2(15)

    f3(0)

    f3(1)

    f3(2)

    f3(3)

    f3(4)

    f3(5)

    f3(6)

    f3(7)

    f3(8)

    f3(9)

    f3(10)

    f3(11)

    f3(13)

    f3(15)

    f4(0)

    f4(1)

    f4(2)

    f4(3)

    f4(4)

    f4(5)

    f4(6)

    f4(7)

    f4(8)

    f4(9)

    f4(10)

    f4(11)

    f4(12)

    f4(13)

    f2(8)

    f2(12) f3(12)

    f3(14) f4(14)

    f4(15)

    C̃(0)

    C̃(6)

    C̃(1)

    C̃(2)

    C̃(3)

    C̃(4)

    C̃(5)

    C̃(7)

    C̃(8)

    C̃(9)

    C̃(10)

    C̃(11)

    C̃(12)

    C̃(13)

    C̃(14)

    C̃(15)

    28

  • FYZ-230/00 Algoritmy vedeckotechnických výpo£tov

    • Vzdialenos´ medzi nódmi: N2l

    � Pre l = 1 vzdialenost k = N2l

    = 1621

    = 8: f1(0), f1(8)� Pre l = 2 vzdialenost k = N

    2l= 16

    22= 4: f2(8), f2(12)

    • Výpo£et nódov:

    � f2(8) = f1(8) + f1(12)W4

    � f2(12) = f1(8) + f1(12)W12 = f1(8) + f1(12)

    =−1︷︸︸︷W 8 W 4 = f1(8)− f1(12)W 4

    • V²eobecne:

    � fl(k) = fl−1(k) + fl−1(k + N

    2l

    )WP

    � fl(k + N

    2l

    )= fl−1(k)− fl−1

    (k + N

    2l

    )WP

    � Výpo£et P:∗ Zapísa´ k binárne∗ Posunút o r − l bitov do prava a doplni´ nulami∗ Obráti´ poradie bitov (po£et bitov r)

    � Príklad k = 8, l = 2, r = 4:∗ k = 8 = (1000)2 → (0010)2 → P = (0100)2 = 4

    29

  • FYZ-230/00 Algoritmy vedeckotechnických výpo£tov

    Vz´ah medzi C̃(n) a fr(k)

    • Zapísa´ k v 2-kovej sústave: k = (kr−1kr−2 . . . k2k1k0)2

    • Obráti´ poradie ki: n = (k0k1k2 . . . kr−2kr−1)2

    Príklad pre N = 8:

    k = 0 = (000)2 → n = (000)2 = 0, C̃(0) = f3(0)k = 1 = (001)2 → n = (100)2 = 4, C̃(4) = f3(1)k = 2 = (010)2 → n = (010)2 = 2, C̃(2) = f3(2)k = 3 = (011)2 → n = (110)2 = 6, C̃(6) = f3(3)k = 4 = (100)2 → n = (001)2 = 1, C̃(1) = f3(4)k = 5 = (101)2 → n = (101)2 = 5, C̃(5) = f3(5)k = 6 = (110)2 → n = (011)2 = 3, C̃(3) = f3(6)k = 7 = (111)2 → n = (111)2 = 7, C̃(7) = f3(7)

    30

  • FYZ-230/00 Algoritmy vedeckotechnických výpo£tov

    Rýchla Fourierova transformácia pre N 6= 2r

    • Doplni´ dáta nulami, aby N = 2r.

    • V prípade N = r1r2 . . . rl matica pre výpo£et C̃(n) sa dá rozloºi´ na sú£in l matíc.

    31