stringtranslate.com

Algoritmo FFT de Bruun

El algoritmo de Bruun es un algoritmo de transformada rápida de Fourier (FFT) basado en un enfoque inusual de factorización polinómica recursiva , propuesto para potencias de dos por G. Bruun en 1978 y generalizado a tamaños compuestos pares arbitrarios por H. Murakami en 1996. Debido a que sus operaciones implican solo coeficientes reales hasta la última etapa de cálculo, se propuso inicialmente como una forma de calcular eficientemente la transformada discreta de Fourier (DFT) de datos reales. Sin embargo, el algoritmo de Bruun no ha tenido un uso generalizado, ya que los enfoques basados ​​en el algoritmo FFT ordinario de Cooley-Tukey se han adaptado con éxito a datos reales con al menos la misma eficiencia. Además, existe evidencia de que el algoritmo de Bruun puede ser intrínsecamente menos preciso que Cooley-Tukey frente a una precisión numérica finita (Storn 1993).

Sin embargo, el algoritmo de Bruun ilustra un marco algorítmico alternativo que puede expresarse a sí mismo y al algoritmo de Cooley-Tukey y, por lo tanto, proporciona una perspectiva interesante sobre las FFT que permite combinaciones de los dos algoritmos y otras generalizaciones.

Un enfoque polinomial para la DFT

Recuerde que la DFT está definida por la fórmula:

Por conveniencia, denotamos las N raíces de la unidad por ω N n ( n  = 0, ...,  N  − 1): y definimos el polinomio x ( z ) cuyos coeficientes son x n :

La DFT puede entonces entenderse como una reducción de este polinomio; es decir, X k viene dado por: donde mod denota la operación del resto polinomial . La clave para algoritmos rápidos como el de Bruun o Cooley-Tukey proviene del hecho de que se puede realizar este conjunto de N operaciones restantes en etapas recursivas.

Factorizaciones recursivas y FFT

Para calcular la DFT, necesitamos evaluar el resto de los polinomios de grado 1 de módulo N como se describió anteriormente. Evaluar estos restos uno por uno equivale a evaluar directamente la fórmula DFT habitual y requiere operaciones O ( N 2 ). Sin embargo, se pueden combinar estos restos de forma recursiva para reducir el costo, usando el siguiente truco: si queremos evaluar polinomios en módulo dos y , primero podemos tomar el resto en módulo su producto , lo que reduce el grado del polinomio y realiza operaciones de módulo posteriores. menos costoso computacionalmente.

El producto de todos los monomios para k =0.. N -1 es simple (cuyas raíces son claramente las N raíces de la unidad). Entonces se desea encontrar una factorización recursiva de en polinomios de pocos términos y de grado cada vez menor. Para calcular la DFT, se toma módulo de cada nivel de esta factorización por turno, de forma recursiva, hasta llegar a los monomios y al resultado final. Si cada nivel de factorización divide cada polinomio en un número O(1) (con límites constantes) de polinomios más pequeños, cada uno con un número O(1) de coeficientes distintos de cero, entonces las operaciones de módulo para ese nivel toman O( N ) tiempo ; dado que habrá un número logarítmico de niveles, la complejidad general es O ( N log N ).

Más explícitamente, supongamos, por ejemplo , que y eso , etc. El algoritmo FFT correspondiente consistiría en calcular primero x k ( z ) = x ( z ) mod F k ( z ), luego calcular x k , j ( z ) = x k ( z ) mod F k , j ( z ), y así sucesivamente, creando recursivamente más y más polinomios restantes de grado cada vez menor hasta llegar a los resultados finales de grado 0.

Además, siempre que los factores polinomiales en cada etapa sean relativamente primos (lo que para los polinomios significa que no tienen raíces comunes), se puede construir un algoritmo dual invirtiendo el proceso con el teorema chino del resto .

Cooley-Tukey como factorización polinomial

El algoritmo estándar de diezmado en frecuencia (DIF) radix- r Cooley-Tukey se corresponde estrechamente con una factorización recursiva. Por ejemplo, radix-2 DIF Cooley–Tukey factoriza en y . Estas operaciones de módulo reducen el grado de por 2, lo que corresponde a dividir el tamaño del problema por 2. Sin embargo, en lugar de factorizar directamente de forma recursiva, Cooley-Tukey primero calcula x 2 ( z ω N ), desplazando todas las raíces (por un giro) . factor ) para que pueda aplicar la factorización recursiva de a ambos subproblemas. Es decir, Cooley-Tukey asegura que todos los subproblemas también sean DFT, mientras que esto generalmente no es cierto para una factorización recursiva arbitraria (como la de Bruun, más adelante).

La factorización de Bruun

El algoritmo básico de Bruun para potencias de dos N = 2 n factoriza z 2 n - 1 recursivamente mediante las reglas:

donde a es una constante real con | un | ≤ 2. Si , , entonces y .

En la etapa s , s =0,1,2, n -1, el estado intermedio consta de 2 s polinomios de grado 2 n - s - 1 o menos, donde

Mediante la construcción de la factorización de z 2 n - 1 , los polinomios p s , m ( z ) codifican cada uno 2 n - s valores de la transformada de Fourier, para m = 0, los índices cubiertos son k = 0 , 2 k , 2∙2 s , 3∙2 s ,…, (2 n - s -1)∙2 s , para m > 0 los índices cubiertos son k = m , 2 s +1 - m , 2 s +1 + m , 2∙2 s +1 - m , 2∙2 s +1 + m , …, 2 n - m .

Durante la transición a la siguiente etapa, el polinomio se reduce a polinomios y mediante división polinomial. Si uno quiere mantener los polinomios en orden de índice creciente, este patrón requiere una implementación con dos matrices. Una implementación implementada produce una secuencia de índices predecible, pero muy desordenada; por ejemplo, para N = 16, el orden final de los 8 restos lineales es (0, 4, 2, 6, 1, 7, 3, 5).

Al final de la recursión, para s = n -1 , quedan 2 n -1 polinomios lineales que codifican dos coeficientes de Fourier X 0 y X 2 n -1 para el primero y para cualquier otro késimo polinomio los coeficientes X k y X 2 n - k .

En cada etapa recursiva, todos los polinomios del grado común 4 M -1 se reducen a dos partes de la mitad del grado 2 M -1 . El divisor de este cálculo del resto del polinomio es un polinomio cuadrático z m , de modo que todas las reducciones pueden reducirse a divisiones polinómicas de polinomios cúbicos por cuadráticos. Hay N /2 = 2 n −1 de estas pequeñas divisiones en cada etapa, lo que lleva a un algoritmo O ( N log N ) para la FFT.

Además, dado que todos estos polinomios tienen coeficientes puramente reales (hasta la última etapa), automáticamente explotan el caso especial en el que las entradas x n son puramente reales para ahorrar aproximadamente un factor de dos en cálculo y almacenamiento. También se puede aprovechar directamente el caso de datos simétricos reales para calcular la transformada discreta del coseno (Chen y Sorensen 1992).

Generalización a radices arbitrarias.

La factorización de Bruun, y por tanto el algoritmo FFT de Bruun, se generalizó para manejar longitudes compuestas pares arbitrarias, es decir, dividir el grado del polinomio por una base (factor) arbitraria , como sigue. Primero, definimos un conjunto de polinomios φ N , α ( z ) para enteros positivos N y para α en [0, 1) mediante:

Tenga en cuenta que todos los polinomios que aparecen en la factorización de Bruun anterior se pueden escribir de esta forma. Los ceros de estos polinomios son para en el caso y para en el caso. Por lo tanto, estos polinomios se pueden factorizar recursivamente para un factor (base) r mediante:

Referencias