Algoritmo FFT de factor primo
El algoritmo del factor primo (PFA), también llamado algoritmo Good-Thomas (1958/1963), es un algoritmo de transformada rápida de Fourier (FFT) que -expresa la transformada discreta de Fourier (DFT) de tamaño N = N1N2 como una DFT bidimensional N1×N2, pero solo para el caso donde N1 y N2 son primos relativos. Estas transformaciones más pequeñas de tamaño N1 y N2 se pueden evaluar aplicando PFA de forma recursiva o usando algunos otro algoritmo FFT.
PFA no debe confundirse con la generalización mixed-radix del popular algoritmo Cooley-Tukey, que también subdivide una DFT de tamaño N = N1N2 en transformadas más pequeñas de tamaño N1 y N2. El último algoritmo puede usar cualquier factor (no necesariamente primos relativamente), pero tiene la desventaja de que también requiere multiplicaciones adicionales por raíces de la unidad llamadas factores twiddle, además de las transformadas más pequeñas. Por otro lado, PFA tiene las desventajas de que solo funciona para factores relativamente primos (por ejemplo, es inútil para tamaños de potencia de dos) y que requiere una reindexación más complicada de los datos basada en los isomorfismos del grupo aditivo. Tenga en cuenta, sin embargo, que PFA se puede combinar con Cooley-Tukey de raíz mixta, con el primero factorizando N en componentes relativamente primos y el segundo manejando factores repetidos.
PFA también está estrechamente relacionado con el algoritmo FFT de Winograd anidado, donde este último realiza el descompuesto N1 por N2 transformar a través de técnicas de convolución bidimensionales más sofisticadas. Por lo tanto, algunos artículos más antiguos también llaman al algoritmo de Winograd PFA FFT.
(Aunque el PFA es distinto del algoritmo Cooley-Tukey, el trabajo de Good de 1958 sobre el PFA fue citado como inspiración por Cooley y Tukey en su artículo de 1965, e inicialmente hubo cierta confusión sobre si los dos algoritmos eran diferentes De hecho, fue el único trabajo anterior de FFT citado por ellos, ya que no estaban al tanto de la investigación anterior de Gauss y otros).
Algoritmo
Vamos a()x){displaystyle a(x)} un polinomio y ⋅ ⋅ n{displaystyle omega _{n} a principal n{displaystyle n}raíz de la unidad. Definimos el DFT a()x){displaystyle a(x)} como n{displaystyle n}-tuple ()a^ ^ j)=()a()⋅ ⋅ nj)){displaystyle ({hat {}_{j})=(a(omega _{n}{j})}. En otras palabras,
- a^ ^ j=.. i=0n− − 1ai⋅ ⋅ nij{displaystyle {hat {fnh} {fnK}=fnK} {fnK} {fnK}}} {fn}}fn}fnK}fn}fnK} ¿Por qué? para todos j=0,1,...... ,n− − 1{displaystyle j=0,1,dotsn-1}.
Para la simplicidad, denotamos la transformación como DFT⋅ ⋅ n{displaystyle {text{DFT}_{omega ¿Qué?.
El PFA se basa en una factorización coprime n=∏ ∏ d=0D− − 1nd{displaystyle n=prod ¿Qué? y vueltas DFT⋅ ⋅ n{displaystyle {text{DFT}_{omega ¿Qué? en ⨂ ⨂ dDFT⋅ ⋅ nd{displaystyle bigotimes {fnK} {fnMiega} ¿Qué? para algunas opciones ⋅ ⋅ nd{displaystyle omega ¿Qué?Donde ⨂ ⨂ {displaystyle bigotimes } es el producto tensor.
Mapeo basado en CRT
Para una factorización coprime n=∏ ∏ d=0D− − 1nd{displaystyle n=prod ¿Qué?, tenemos el mapa de restos chinos m↦ ↦ ()mmodqd){displaystyle mmapsto (m{bmod {q}_{d}) } desde Zn{displaystyle mathbb {Z} _{n} a ∏ ∏ d=0D− − 1Znd{displaystyle prod _{d=0}{D-1}mathbb {Z}{n_{d} con ()md)↦ ↦ .. d=0D− − 1edmd{displaystyle (m_{d})mapsto sum ¿Qué? como su inverso ed{displaystyle E_{d}'s son los elementos centrales ortogonales idempotent con .. d=0D− − 1ed=1()modn){displaystyle sum _{d=0}{D-1}e_{d}=1{pmod {n}}. Elegir ⋅ ⋅ nd=⋅ ⋅ ned{displaystyle omega # {n_{d}=omega ¿Qué? (por lo tanto, ∏ ∏ d=0D− − 1⋅ ⋅ nd=⋅ ⋅ n.. d=0D− − 1ed=⋅ ⋅ n{displaystyle prod _{d=0}{D-1}omega ¿Por qué? ################################################################################################################################################################################################################################################################ ¿Qué?), reescribimos DFT⋅ ⋅ n{displaystyle {text{DFT}_{omega ¿Qué? como sigue:
- a^ ^ j=.. i=0n− − 1ai⋅ ⋅ nij=.. i=0n− − 1ai()∏ ∏ d=0D− − 1⋅ ⋅ nd)ij=.. i=0n− − 1ai∏ ∏ d=0D− − 1⋅ ⋅ nd()imodnd)()jmodnd)=.. i0=0n0− − 1⋯ ⋯ .. iD− − 1nD− − 1− − 1a.. d=0D− − 1edid∏ ∏ d=0D− − 1⋅ ⋅ ndid()jmodnd){displaystyle {hat {fnh} {fnK}=fnK} {fnK} {fnK}}} {fn}}fn}fnK}fn}fnK} ##{i=0} {n-1}a_{i}omega ¿Qué? ¿Por qué? ################################################################################################################################################################################################################################################################ ¿Por qué? ¿Qué? ################################################################################################################################################################################################################################################################ ¿Qué? ¿Qué? sum ¿Por qué? ¿Qué? ################################################################################################################################################################################################################################################################ ¿Por qué?.
Finalmente, definir ai0,...... ,iD− − 1=a.. d=0D− − 1ided{displaystyle a_{i_{0},dotsi_{D-1}=a_{sum ¿Qué? y a^ ^ j0,...... ,jD− − 1=a^ ^ .. d=0D− − 1jded{displaystyle {hat {}_{j_{0},dotsj_{D-1}={hat {a}_{sum ¿Qué?, tenemos a^ ^ j0,...... ,jD− − 1=.. i0=0n0− − 1⋯ ⋯ .. iD− − 1nD− − 1− − 1ai0,...... ,iD− − 1∏ ∏ d=0D− − 1⋅ ⋅ ndidjd{displaystyle {hat {}_{j_{0},dotsj_{D-1}=sum ¿Qué? sum ################################################################################################################################################################################################################################################################ ################################################################################################################################################################################################################################################################ ¿Qué?. Por lo tanto, tenemos el DFT multidimensional, ⊗ ⊗ d=0D− − 1DFT⋅ ⋅ nd{displaystyle otimes ################################################################################################################################################################################################################################################################ ¿Qué?.
Como isomorfismos de álgebra
PFA puede ser declarado de forma de alto nivel en términos de isomorfismos de álgebra. Primero recordamos que para un anillo conmutativo R{displaystyle R. y un isomorfismo de grupo G{displaystyle G. a ∏ ∏ dGd{displaystyle prod _{d}G_{d}, tenemos el siguiente isomorfismo de álgebra
- R[G].. ⨂ ⨂ dR[Gd]{displaystyle R[G]cong bigotimes _{d}R[G_{d}} Donde ⨂ ⨂ {displaystyle bigotimes } se refiere al producto tensor de álgebras.
Para ver cómo funciona PFA, elegimos G=()Zn,+,0){displaystyle G=(mathbb {Z} _{n},+,0)} y Gd=()Znd,+,0){displaystyle G_{d}=(mathbb {Z} _{n_{d},+,0)} ser grupos aditivos. También identificamos R[G]{displaystyle R[G]} como R[x].. xn− − 1.. {displaystyle {frac {R[x]}{langle x^{n}-1rangle } y R[Gd]{displaystyle R[G_{d]} como R[xd].. xdnd− − 1.. {displaystyle {frac {R[x_{d]}{langle ################################################################################################################################################################################################################################################################ }. Elegir .. =a↦ ↦ ()amodnd){displaystyle eta =amapsto (a{bmod {n}_{d}) } como el isomorfismo del grupo G.. ∏ ∏ dGd{displaystyle Gcong prod ¿Qué?, tenemos el isomorfismo álgebra .. Alternativa Alternativa :R[G].. ⨂ ⨂ dR[Gd]{displaystyle eta ^{*}:R[G]cong bigotimes _{d}R[G_{d}}, o alternativamente, .. Alternativa Alternativa :R[x].. xn− − 1.. .. ⨂ ⨂ dR[xd].. xdnd− − 1.. {displaystyle eta ^{*}:{frac {R[x]}{langle x^{n}-1rangle }}cong bigotimes ¿Qué? {R[x_{d]}{langle ################################################################################################################################################################################################################################################################ }. Ahora observen que DFT⋅ ⋅ n{displaystyle {text{DFT}_{omega ¿Qué? es en realidad un isomorfismo álgebra de R[x].. xn− − 1.. {displaystyle {frac {R[x]}{langle x^{n}-1rangle } a ∏ ∏ iR[x].. x− − ⋅ ⋅ ni.. {displaystyle prod _{i}{frac {R[x]}{langle x-omega _{n}{i}rangle } y cada uno DFT⋅ ⋅ nd{displaystyle {text{DFT}_{omega ¿Qué? es un isomorfismo álgebra de R[x].. xdnd− − 1.. {displaystyle {frac {R[x]}{langle {x_{d} {n_{d}-1rangle } a ∏ ∏ idR[xd].. xd− − ⋅ ⋅ ndid.. {displaystyle prod _{i_{d}{frac {R[x_{d]}{langle x_{d}-omega ################################################################################################################################################################################################################################################################ }, tenemos un isomorfismo álgebra .. .{displaystyle eta} desde ⨂ ⨂ d∏ ∏ idR[xd].. xd− − ⋅ ⋅ ndid.. {displaystyle bigotimes ¿Qué? ¿Qué? {R[x_{d]}{langle x_{d}-omega ################################################################################################################################################################################################################################################################ } a ∏ ∏ iR[x].. x− − ⋅ ⋅ ni.. {displaystyle prod _{i}{frac {R[x]}{langle x-omega _{n}{i}rangle }. Lo que PFA nos dice es que DFT⋅ ⋅ n=.. .∘ ∘ ⨂ ⨂ dDFT⋅ ⋅ nd∘ ∘ .. Alternativa Alternativa {displaystyle {text{DFT}_{omega #######eta 'circ bigotimes {fnK} {fnMiega} ¿Qué? Donde .. Alternativa Alternativa {displaystyle eta ^{*} y .. .{displaystyle eta} están re-indexando sin aritmética real en R{displaystyle R..
Contar el número de transformaciones multidimensionales
Note que la condición para la transformación DFT⋅ ⋅ n{displaystyle {text{DFT}_{omega ¿Qué? en .. .∘ ∘ ⨂ ⨂ dDFT⋅ ⋅ nd∘ ∘ .. Alternativa Alternativa {displaystyle eta 'circ bigotimes {fnK} {fnMiega} ¿Qué? depende del isomorfismo del grupo aditivo .. {displaystyle eta } desde ()Zn,+,0){displaystyle (mathbb {Z} _{n},+,0)} a ∏ ∏ d()Znd,+,0){displaystyle prod _{d}(mathbb {Z} _{n_{d},+,0)}. Cualquier isomorfismo de grupo aditivo funcionará. Contar el número de formas de transformación DFT⋅ ⋅ n{displaystyle {text{DFT}_{omega ¿Qué? en .. .∘ ∘ ⨂ ⨂ dDFT⋅ ⋅ nd∘ ∘ .. Alternativa Alternativa {displaystyle eta 'circ bigotimes {fnK} {fnMiega} ¿Qué?, sólo necesitamos contar el número de isomorfismos de grupo aditivo de ()Zn,+,0){displaystyle (mathbb {Z} _{n},+,0)} a ∏ ∏ d()Znd,+,0){displaystyle prod _{d}(mathbb {Z} _{n_{d},+,0)}, o alternativa, el número de automorfismos de grupo aditivo en ()Zn,+,0){displaystyle (mathbb {Z} _{n},+,0)}. Desde ()Zn,+,0){displaystyle (mathbb {Z} _{n},+,0)} es cíclico, cualquier automorfismo puede ser escrito como 1↦ ↦ g{displaystyle 1mapsto g} Donde g{displaystyle g} es un generador de ()Zn,+,0){displaystyle (mathbb {Z} _{n},+,0)}. Por definición ()Zn,+,0){displaystyle (mathbb {Z} _{n},+,0)}, g{displaystyle g}Son exactamente esos coprime n{displaystyle n}. Por lo tanto, hay exactamente φ φ ()n){displaystyle varphi (n)} muchos de esos mapas donde φ φ {displaystyle varphi } es la función totiente de Euler. El ejemplo más pequeño es n=6{displaystyle n=6} Donde φ φ ()n)=2{displaystyle varphi (n)=2}, demostrando los dos mapas de la literatura: el "CRT mapping" y el "Ruritanian mapping".
Contenido relacionado
Polígono equilátero
Manantiales ardientes
Desplazamiento