The cyklotomická rychlá Fourierova transformace je typ rychlá Fourierova transformace algoritmus skončil konečná pole .[1] Tento algoritmus nejprve rozloží DFT na několik kruhových konvolucí a poté odvodí výsledky DFT z výsledků kruhové konvoluce. Při aplikaci na DFT přes G F ( 2 m ) { displaystyle GF (2 ^ {m})} , tento algoritmus má velmi nízkou multiplikativní složitost. V praxi, protože obvykle existují efektivní algoritmy pro kruhové konvoluce se specifickými délkami, je tento algoritmus velmi efektivní.[2]
Pozadí The diskrétní Fourierova transformace přes konečná pole nachází široké uplatnění při dekódování kódy opravující chyby jako BCH kódy a Reed-Solomon kódy . Zobecněno z komplexní pole diskrétní Fourierova transformace sekvence { F i } 0 N − 1 { displaystyle {f_ {i} } _ {0} ^ {N-1}} přes konečné pole GF (str m ) je definován jako
F j = ∑ i = 0 N − 1 F i α i j , 0 ≤ j ≤ N − 1 , { displaystyle F_ {j} = součet _ {i = 0} ^ {N-1} f_ {i} alpha ^ {ij}, 0 leq j leq N-1,} kde α { displaystyle alpha} je N -th primitivní kořen 1 v GF (str m ). Pokud definujeme polynomiální reprezentaci { F i } 0 N − 1 { displaystyle {f_ {i} } _ {0} ^ {N-1}} tak jako
F ( X ) = F 0 + F 1 X + F 2 X 2 + ⋯ + F N − 1 X N − 1 = ∑ 0 N − 1 F i X i , { displaystyle f (x) = f_ {0} + f_ {1} x + f_ {2} x ^ {2} + cdots + f_ {N-1} x ^ {N-1} = součet _ { 0} ^ {N-1} f_ {i} x ^ {i},} je to snadno vidět F j { displaystyle F_ {j}} je prostě F ( α j ) { displaystyle f ( alpha ^ {j})} . To znamená, že diskrétní Fourierova transformace sekvence ji převede na problém vyhodnocení polynomu.
Napsáno v maticovém formátu,
F = [ F 0 F 1 ⋮ F N − 1 ] = [ α 0 α 0 ⋯ α 0 α 0 α 1 ⋯ α N − 1 ⋮ ⋮ ⋱ ⋮ α 0 α N − 1 ⋯ α ( N − 1 ) ( N − 1 ) ] [ F 0 F 1 ⋮ F N − 1 ] = F F . { displaystyle mathbf {F} = left [{ begin {matrix} F_ {0} F_ {1} vdots F_ {N-1} end {matrix}} right] = left [{ begin {matrix} alpha ^ {0} & alpha ^ {0} & cdots & alpha ^ {0} alpha ^ {0} & alpha ^ {1} & cdots & alpha ^ {N-1} vdots & vdots & ddots & vdots alpha ^ {0} & alpha ^ {N-1} & cdots & alpha ^ {(N- 1) (N-1)} end {matrix}} right] left [{ begin {matrix} f_ {0} f_ {1} vdots f_ {N-1} end {matrix}} right] = { mathcal {F}} mathbf {f}.} Přímé vyhodnocení DFT má Ó ( N 2 ) { displaystyle O (N ^ {2})} složitost. Rychlé Fourierovy transformace jsou jen efektivní algoritmy vyhodnocující výše uvedený produkt matice-vektor.
Algoritmus Nejprve definujeme a linearizovaný polynom přes GF (strm ) tak jako
L ( X ) = ∑ i l i X str i , l i ∈ G F ( str m ) . { displaystyle L (x) = součet _ {i} l_ {i} x ^ {p ^ {i}}, l_ {i} in mathrm {GF} (p ^ {m}).} L ( X ) { displaystyle L (x)} se nazývá linearizovaný, protože L ( X 1 + X 2 ) = L ( X 1 ) + L ( X 2 ) { displaystyle L (x_ {1} + x_ {2}) = L (x_ {1}) + L (x_ {2})} , který vychází ze skutečnosti, že pro prvky X 1 , X 2 ∈ G F ( str m ) , { displaystyle x_ {1}, x_ {2} in mathrm {GF} (p ^ {m}),} ( X 1 + X 2 ) str = X 1 str + X 2 str . { displaystyle (x_ {1} + x_ {2}) ^ {p} = x_ {1} ^ {p} + x_ {2} ^ {p}.}
Všimněte si toho str { displaystyle p} je invertibilní modulo N { displaystyle N} protože N { displaystyle N} musí rozdělit pořadí str m − 1 { displaystyle p ^ {m} -1} multiplikativní skupiny pole G F ( str m ) { displaystyle mathrm {GF} (p ^ {m})} . Takže prvky { 0 , 1 , 2 , … , N − 1 } { displaystyle {0,1,2, ldots, N-1 }} lze rozdělit na l + 1 { displaystyle l + 1} cyklotomické kosety modulo N { displaystyle N} :
{ 0 } , { displaystyle {0 },} { k 1 , str k 1 , str 2 k 1 , … , str m 1 − 1 k 1 } , { displaystyle {k_ {1}, pk_ {1}, p ^ {2} k_ {1}, ldots, p ^ {m_ {1} -1} k_ {1} },} … , { displaystyle ldots,} { k l , str k l , str 2 k l , … , str m l − 1 k l } , { displaystyle {k_ {l}, pk_ {l}, p ^ {2} k_ {l}, ldots, p ^ {m_ {l} -1} k_ {l} },} kde k i = str m i k i ( mod N ) { displaystyle k_ {i} = p ^ {m_ {i}} k_ {i} { pmod {N}}} . Proto lze vstup do Fourierovy transformace přepsat jako
F ( X ) = ∑ i = 0 l L i ( X k i ) , L i ( y ) = ∑ t = 0 m i − 1 y str t F str t k i mod N . { displaystyle f (x) = součet _ {i = 0} ^ {l} L_ {i} (x ^ {k_ {i}}), quad L_ {i} (y) = součet _ {t = 0} ^ {m_ {i} -1} y ^ {p ^ {t}} f_ {p ^ {t} k_ {i} { bmod {N}}}.} Tímto způsobem je polynomiální reprezentace rozložena na součet lineárních polynomů, a tedy F j { displaystyle F_ {j}} je dána
F j = F ( α j ) = ∑ i = 0 l L i ( α j k i ) { displaystyle F_ {j} = f ( alpha ^ {j}) = součet _ {i = 0} ^ {l} L_ {i} ( alpha ^ {jk_ {i}})} .Rozšiřuje se α j k i ∈ G F ( str m i ) { displaystyle alpha ^ {jk_ {i}} in mathrm {GF} (p ^ {m_ {i}})} na správném základě { β i , 0 , β i , 1 , … , β i , m i − 1 } { displaystyle { beta _ {i, 0}, beta _ {i, 1}, ldots, beta _ {i, m_ {i} -1} }} , my máme α j k i = ∑ s = 0 m i − 1 A i j s β i , s { displaystyle alpha ^ {jk_ {i}} = součet _ {s = 0} ^ {m_ {i} -1} a_ {ijs} beta _ {i, s}} kde A i j s ∈ G F ( str ) { displaystyle a_ {ijs} in mathrm {GF} (p)} a vlastností linearizovaného polynomu L i ( X ) { displaystyle L_ {i} (x)} , my máme
F j = ∑ i = 0 l ∑ s = 0 m i − 1 A i j s ( ∑ t = 0 m i − 1 β i , s str t F str t k i mod N ) { displaystyle F_ {j} = součet _ {i = 0} ^ {l} součet _ {s = 0} ^ {m_ {i} -1} a_ {ijs} left ( sum _ {t = 0} ^ {m_ {i} -1} beta _ {i, s} ^ {p ^ {t}} f_ {p ^ {t} k_ {i} { bmod {N}}} vpravo)} Tuto rovnici lze přepsat do maticové podoby jako F = A L Π F { displaystyle mathbf {F} = mathbf {AL Pi f}} , kde A { displaystyle mathbf {A}} je N × N { displaystyle N krát N} matice nad GF (str ), který obsahuje prvky A i j s { displaystyle a_ {ijs}} , L { displaystyle mathbf {L}} je bloková diagonální matice a Π { displaystyle mathbf { Pi}} je permutační matice přeskupující prvky F { displaystyle mathbf {f}} podle indexu cotomtomomic coset.
Všimněte si, že pokud normální základ { y i str 0 , y i str 1 , ⋯ , y i str m i − 1 } { displaystyle { gamma _ {i} ^ {p ^ {0}}, gamma _ {i} ^ {p ^ {1}}, cdots, gamma _ {i} ^ {p ^ {m_ {i} -1}} }} se používá k rozšíření polních prvků G F ( str m i ) { displaystyle mathrm {GF} (p ^ {m_ {i}})} , i-tý blok L { displaystyle mathbf {L}} darováno:
L i = [ y i str 0 y i str 1 ⋯ y i str m i − 1 y i str 1 y i str 2 ⋯ y i str 0 ⋮ ⋮ ⋱ ⋮ y i str m i − 1 y i str 0 ⋯ y i str m i − 2 ] { displaystyle mathbf {L} _ {i} = { begin {bmatrix} gamma _ {i} ^ {p ^ {0}} & gamma _ {i} ^ {p ^ {1}} & cdots & gamma _ {i} ^ {p ^ {m_ {i} -1}} gamma _ {i} ^ {p ^ {1}} & gamma _ {i} ^ {p ^ {2 }} & cdots & gamma _ {i} ^ {p ^ {0}} vdots & vdots & ddots & vdots gamma _ {i} ^ {p ^ {m_ {i} -1}} & gamma _ {i} ^ {p ^ {0}} & cdots & gamma _ {i} ^ {p ^ {m_ {i} -2}} end {bmatrix}} } což je cirkulační matice . Je dobře známo, že produkt cirkulační matice-vektor lze efektivně vypočítat pomocí závity . Proto jsme úspěšně snížili diskrétní Fourierovu transformaci na krátké konvoluce.
Složitost Při aplikaci na a charakteristický -2 pole GF (2m ), matice A { displaystyle mathbf {A}} je jen binární matice. Při výpočtu součinu vektoru matice vektoru se používá pouze přidání A { displaystyle mathrm {A}} a L Π F { displaystyle mathrm {L Pi f}} . Ukázalo se, že multiplikativní složitost cyklotomického algoritmu je dána vztahem Ó ( n ( log 2 n ) log 2 3 2 ) { displaystyle O (n ( log _ {2} n) ^ { log _ {2} { frac {3} {2}}})} a složitost aditiv je dána vztahem Ó ( n 2 / ( log 2 n ) log 2 8 3 ) { displaystyle O (n ^ {2} / ( log _ {2} n) ^ { log _ {2} { frac {8} {3}}})} .[2]
Reference ^ S.V. Fedorenko a P.V. Trifonov, Fedorenko, S. V .; Trifonov, P. V .. (2003). „O výpočtu rychlé Fourierovy transformace přes konečná pole“ (PDF) . Proceedings of International Workshop on Algebraic and Combinatorial Coding Theory : 108–111. ^ A b Wu, Xuebin; Wang, Ying; Yan, Zhiyuan (2012). "O algoritmech a složitostech cyklotomických rychlých Fourierových transformací nad libovolnými konečnými poli". Transakce IEEE při zpracování signálu . 60 (3): 1149–1158. doi :10.1109 / tsp.2011.2178844 .