29.03.2004
Definicija DFT Outline DFT je linearna transformacija nekega vektorskega prostora dimenzije n nad obsegom K, ki ga označujemo z V K, pri čemer ima slednji lastnost, da vsebuje nek poseben element, ki mu pravimo n-ti primitivni koren enote, označujemo pa ga z ω.
Definicija DFT Outline DFT je linearna transformacija nekega vektorskega prostora dimenzije n nad obsegom K, ki ga označujemo z V K, pri čemer ima slednji lastnost, da vsebuje nek poseben element, ki mu pravimo n-ti primitivni koren enote, označujemo pa ga z ω. Za ω velja in ω n = 1 (1) ω i 1, pri 0 < i < n (2)
Pomembna izpeljana lastnost konstante ω, I Iz lastnosti (1) in (2) lahko izpeljemo: n 1 i=0 ω pi = { n pri p = 0 in p = n 0 sicer. (3) Dejansko, pri p = 0 ali p = n so vsi členi enaki 1 [pri p = n na podlagi lastnosti (1)] in je torej vsota enaka n. Leva stran predstavlja n členov geometrijske vrste in je torej enaka ω pn 1 ω p 1 v primeru ω p 1. Na podlagi (1) in (2) to pomeni, da je vrednost 0 pri 0 < i < n.
Pomembna izpeljana lastnost konstante ω, II Iz lastnosti (3) lahko tudi izpeljemo (1) in (2) [kar pomeni, da je (3) enakovredna (1) in (2)]. Dejansko lahko zapišemo, ω pn 1 = (ω p 1) n 1 in ker je pri p = 1, 2,...,n 1 drugi člen na desni enak 0, velja ω pn 1 = 0, oziroma, če zamenjamo p = 1 dobimo lastnost (1). Sedaj pa, denimo, da lastnost (2) ne velja. V tem primeru bi veljalo ω q = 1 pri nekem 0 < q < n. Tedaj bi vsota n 1 i=0 ωqi bila enaka n, kar bi bilo v nasprotju z izhodiščnim privzetkom. Torej smo implikacijo (3)= (1),(2) dokazali. i=0 ω pi
Matrika DFT Outline Element a V K je n-terka elementov K: a = a 0, a 1,...,a n 1 Naj bo T poljubna linearna transformacija V K in a poljuben element V K. Učinek T na a predstavimo s produktom M T a t, pri čemer je M T n n matrika, ki pripada transformaciji T, a t pa je transponirana oblika vektorja a (torej, ker je a vrstični vektor, je a t stolpčni vektor). DFT ima matriko F n = (ω ij ) (4) kar pomeni, da je element v i-ti vrstici in j-tem stolpcu enak ω ij (0 i, j n 1)
Primeri Outline Primer obsega K, ki vsebuje ω: kompleksna števila. V tem primeru je ω = e i 2π n
Primeri Outline Primer obsega K, ki vsebuje ω: kompleksna števila. V tem primeru je ω = e i 2π n Naj bo K obseg kompleksnih števil. V tem primeru dobimo: F 2 = n = 2 n = 4 [ ] 1 1 1 1 1 1 F 1 1 4 = 1 i 1 i 1 1 1 1 1 i 1 i kjer je i = ω imaginarno število oziroma kvadratni koren -1
DFT ima inverz! Outline Neka linearna transformacija T ima inverz, če obstaja transformacija T 1 z lastnostjo T T 1 = id, kjer je id identiteta, torej transformacija, ki preslika vsak vektor nazaj samega vase: id(a) = a.
DFT ima inverz! Outline Neka linearna transformacija T ima inverz, če obstaja transformacija T 1 z lastnostjo T T 1 = id, kjer je id identiteta, torej transformacija, ki preslika vsak vektor nazaj samega vase: id(a) = a. Matrika transformacije id je enotska matrika I.
DFT ima inverz! Outline Neka linearna transformacija T ima inverz, če obstaja transformacija T 1 z lastnostjo T T 1 = id, kjer je id identiteta, torej transformacija, ki preslika vsak vektor nazaj samega vase: id(a) = a. Matrika transformacije id je enotska matrika I. Če je matrika neke linearne transformacije T M T in če ima M T inverz kot matrika: M 1 T, je M 1 T matrika inverzne transformacije T.
DFT ima inverz! Outline Neka linearna transformacija T ima inverz, če obstaja transformacija T 1 z lastnostjo T T 1 = id, kjer je id identiteta, torej transformacija, ki preslika vsak vektor nazaj samega vase: id(a) = a. Matrika transformacije id je enotska matrika I. Če je matrika neke linearne transformacije T M T in če ima M T inverz kot matrika: M 1 T, je M 1 T matrika inverzne transformacije T. Matrika inverzne transformacije DFT je Fn 1 = ( 1 n ω ij ). F Fn 1 = I sledi iz lastnosti (3)
Osnovne lastnosti polinomov ene spremenljivke p(x) = n 1 i=0 a i x i, a i K, 0 i n 1 Polinome lahko seštevamo in množimo: p(x) = n 1 i=0 a ix i q(x) = n 1 i=0 b ix i p(x) + q(x) = n 1 i=0 (a i + b i )x i p(x) q(x) = 2n 2 i=0 i j=0 a i jb j x i pri čemer v definiciji produkta vse koeficiente b j, j n, izenačimo z 0. Lahko takoj opazimo, da je za izračun vseh koeficientov polinomskega produkta na podlagi zgornje formule potrebno precej operacij: Θ(n 2 ).
Polinomi ene spremenljivke po modulu x n Včasih nas pri polinomih zanimajo le koeficienti pri potencah x, ki so manjše od n. V tem primeru imamo opravka s polinomi po modulu x n. Ni se težko prepričati, da koeficienti pri potencah x i, pri i n nimajo vpliva na vrednosti koeficientov pri potencah x i, pri i < n, ko gre za operacije seštevanja in množenja, zato je rezultat teh operacij enolično določen z vrednostmi koeficientov pri potencah x i, i < n.
Polinomi ene spremenljivke po modulu x n Včasih nas pri polinomih zanimajo le koeficienti pri potencah x, ki so manjše od n. V tem primeru imamo opravka s polinomi po modulu x n. Ni se težko prepričati, da koeficienti pri potencah x i, pri i n nimajo vpliva na vrednosti koeficientov pri potencah x i, pri i < n, ko gre za operacije seštevanja in množenja, zato je rezultat teh operacij enolično določen z vrednostmi koeficientov pri potencah x i, i < n. Iz tega sledi, da lahko polinom p(x) po modulu x n enolično predstavimo kot element vektorskega prostora dimenzije n nad K, torej z n-terko vrednosti a 0, a 1,...,a n 1
Koeficientna in vrednostna predstavitvi polonoma Predstavitev polinoma p(x) = n 1 i=0 a ix i v obliki n-terke a 0, a 1,...,a n 1 se imenuje koeficientna predstavitev polinoma p(x)
Koeficientna in vrednostna predstavitvi polonoma Predstavitev polinoma p(x) = n 1 i=0 a ix i v obliki n-terke a 0, a 1,...,a n 1 se imenuje koeficientna predstavitev polinoma p(x) Včasih pa je primerneje predstavljati polinome z n vrednostmi pri izbranih konstantah c 0, c 1,...,c n 1, torej v obliki p(c 0 ), p(c 1 ),...,p(c n 1 )
Koeficientna in vrednostna predstavitvi polonoma Predstavitev polinoma p(x) = n 1 i=0 a ix i v obliki n-terke a 0, a 1,...,a n 1 se imenuje koeficientna predstavitev polinoma p(x) Včasih pa je primerneje predstavljati polinome z n vrednostmi pri izbranih konstantah c 0, c 1,...,c n 1, torej v obliki p(c 0 ), p(c 1 ),...,p(c n 1 ) Prehod iz koeficientne predstavitve v vrednostno je možno opraviti na podlagi formule: p(c 0 ) p(c 1 ). p(c n 1 ) = 1 c 0 c 2 0... c n 1 0 1 c 1 c 2 1... c n 1 1. 1 c n 1 cn 1 2... c n 1 n 1 a 0 a 1. a n 1 (5)
Pomembna lastnost vrednostne predstavitve polinomov Naj bosta p(x) in q(x) polinoma, ki sta predstavljena z vrednostmi pri c 0, c 1,...,c n 1, torej v obliki p = p(c 0 ), p(c 1 ),...,p(c n 1 ) ; q = q(c 0 ), q(c 1 ),...,q(c n 1 ). Vrednostno predstavitev produkta p in q dobimo kot vektor s komponentami, ki so produkti istoležnih komponent p in q: p q = p(c 0 )q(c 0 ), p(c 1 )q(c 1 ),...,p(c n 1 )q(c n 1 ). (6)
Vrednostna predstavitev pri ω i, 0 i < n Če postavimo c i = ω i v (5) je matrika za pretvorbo iz koeficientne predstavitve v vrednostno enaka F n!
Vrednostna predstavitev pri ω i, 0 i < n Če postavimo c i = ω i v (5) je matrika za pretvorbo iz koeficientne predstavitve v vrednostno enaka F n! Torej če tolmačimo vektor a = a 0, a 1,...,a n 1 kot nabor koeficientov polinoma p(x) po modulu x n je F n a t nabor vrednosti polinoma pri vrednostih x = ω 0, ω 1,...,ω n 1.
Vrednostna predstavitev pri ω i, 0 i < n Če postavimo c i = ω i v (5) je matrika za pretvorbo iz koeficientne predstavitve v vrednostno enaka F n! Torej če tolmačimo vektor a = a 0, a 1,...,a n 1 kot nabor koeficientov polinoma p(x) po modulu x n je F n a t nabor vrednosti polinoma pri vrednostih x = ω 0, ω 1,...,ω n 1. Odslej bomo vseskozi uporabljali tako tolmačenje DFT.
Razcep problema DFT, I Pri polinomu p(x), ki je podan s svojimi koeficienti a, želimo izračunati p(ω 0 ), p(ω 1 ),...,p(ω n 1 ) t = F n a t. Odslej privzemamo, da je n = 2 k, k > 0 in razcepimo polinom na sode in lihe potence: n 2 1 i=0 n 2 1 p(x) = n 1 i=0 a ix i = a 2i x 2i +x a 2i+1 x 2i i=0 } {{ } } {{ } p 0 (x 2 ) p 1 (x 2 ). (7)
Razcep problema DFT, II Torej smo na podlagi (7) razcepili problem takole: p(x) = p 0 (x 2 ) + x p 1 (x 2 ). (8) p 0 in p 1 sta stopnje n 2 1 in ko računamo p(ωi ), 0 i n 1, računamo p 0 (x) in p 1 (x) pri vrednostih x = ω 2i, 0 i n 2 1. Ugotovimo lahko, da je ω 2 n 2 -ti primitivni koren enote, p 0 in p 1 sta stopnje n 2 1; torej smo razcepili prvotni problem na dva identična problema polovične velikost.
Poraba časa Outline Porabo časa opisanega algoritma ocenimo na podlagi znanega izreka o rešitvi rekurenčne relacije T(n) = { b n = 1 at( n c ) + nr sicer (9) V našem primeru imamo a = c = 2 in r = 1. Rešitev je odvisna od a c r, ki je v našem primeru 1. Takrat dobimo, T(n) = n logn
Izboljšava Outline Naj bo r = n 2. Porabo časa izboljšamo takole: najprej izračunamo p(ω i ), 0 i r 1 na podlagi (10). Nato upoštevamo ω 2(r+i) = ω 2i in ω r+i = ω i ter izračunamo p(ω r+i ), 0 i r 1 na podlagi p(x) = p 0 (x 2 ) x p 1 (x 2 ). (10) Na ta način smo število vrednosti x, pri katerih je potrebno računati vrednost p 0 in p 1 prepolovili.
Primer: računanje DFT neposredno n = 4 p(x) = 1 + 2x + 2x 2 + 1x 3 1 1 1 1 1 1 ω 1 ω 2 1 1 1 1 2 1 ω 1 ω 1 = 6 1 + ω 0 1 ω
Primer: računanje DFT rekurzivno n = 4 p(x) = 1 + 2x + 2x 2 + 1x 3 p(x) = p 0 (x 2 ) + xp 1 (x 2 ); p 0 (y) = 1 + 2y; p 1 (y) = 2 + y [ ] [ ] [ ] [ ] p0 (1) 1 1 1 3 = = p 0 ( 1) [ p1 (1) p 1 ( 1) ] = 1 1 [ 1 1 1 1 ] 2 [ 2 1 ] = [ 3 1 1 ] p(1) = p 0 (1) + 1 p 1 (1) = 6;p(ω) = p 0 ( 1) + ω p 1 ( 1) = 1 + ω p( 1) = p 0 (1) 1 p 1 (1) = 0;p( ω) = p 0 ( 1) ω p 1 ( 1) = 1 ω
Osnovne identitete Outline p(x) je polinom ene spremenljivke, stopnje n 1; c K je konstanta. p(c) = p(x) mod (x c) p(x) = q x c (x)(x c) + r x c (x) p(c) = q x c (c)(c c) + r x c (x) = r x c (x) r(x) je stopnje 0! p(x) mod s(x)=(p(x) mod s(x) t(x) }{{} )mods(x) r s(x)t(x) (x) p(x) = q(x) s(x)t(x) s(x) t(x) + r s(x)t(x) (x) p(x) mod s(x)=q(x) s(x)t(x) s(x) t(x) mod s(x) }{{} +r s(x)t(x)(x) mod s(x) enako 0, ker je deljenec mnogokratnik s(x) (11)
Drevesna urejenost deliteljev pri n = 4 x 4 1 x 2 1 x 2 + 1 x ω 0 = x 1 x ω 2 = x + 1 x ω 1 x ω 3 = x + ω
n = 8 Outline d 03 (x) d 02 (x) d 42 (x) d 01 (x) d 21 (x) d 41 (x) d 61 (x) d 00 (x)d 10 (x)d 20 (x)d 30 (x)d 40 (x)d 50 (x) d 60 (x)d 70 (x) d 03 (x) = x 8 ω 0 d 02 (x) = x 4 ω 0 d 42 (x) = x 4 ω 4 d 01 (x) = x 2 ω 0 d 21 (x) = x 2 ω 4 d 41 (x) = x 2 ω 2 d 61 (x) = x 2 ω 6 d 00 (x) = d 10 (x) = d 20 (x) = d 30 (x) = d 40 (x) = d 50 (x) = d 60 (x) = d 70 (x) = x ω 0 x ω 4 x ω 2 x ω 6 x ω 1 x ω 5 x ω 3 x ω 7
Odvisnost delitelja v višji vrstici od dveh deliteljev v nižji vrstici x 2h+1 ω l 2h+1 = (x 2h ω l 2h )(x 2h + ω l 2h ) = (x 2h ω l 2h )(x 2h ω l 2h + n 2). (12) h + 1 bitov {}}{ l 0...... 0 0 l 0... 0 1 l 0... 0 }{{} h bitov
Ostanki po deljenju Outline p(x) mod (x 2h ω s ) = (a j + ω s a j+2 h)x j (13) 2 h 1 j=0
Program s primerom (* n = 2 k *) BEGIN (* Naj bo r 0,k = n 1 j=0 a jx j *) FOR h := k 1 BY 1 TO 0 DO 1, 2, 2, 1; h = 2 i := 0 ; WHILE i < n DO 3, 3, 1, 1; h = 1 (* Naj bo r i,h+1 = 2 h+1 1 j=0 a j x j *) s:= rev k (i DIV 2 h ) ; 6, 0, 1 + ω, 1 ω; h = 0 r i,h := 2 h 1 j=0 (a j + ω s a j+2 h)x j ; r i+2 h,h := 2 h 1 j=0 (a j + ω s+n/2 a j+2 h)x j ; i := i + 2 (h+1) END END ; FOR i:=0 TO n-1 DO b revk (i) := r i,0 END END 6, 1 + ω, 0, 1 ω; rev!