ES2315735T3 - Arquitectura y procedimiento fft. - Google Patents

Arquitectura y procedimiento fft. Download PDF

Info

Publication number
ES2315735T3
ES2315735T3 ES04812920T ES04812920T ES2315735T3 ES 2315735 T3 ES2315735 T3 ES 2315735T3 ES 04812920 T ES04812920 T ES 04812920T ES 04812920 T ES04812920 T ES 04812920T ES 2315735 T3 ES2315735 T3 ES 2315735T3
Authority
ES
Spain
Prior art keywords
fft
memory
values
partial
row
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
ES04812920T
Other languages
English (en)
Inventor
Raghuraman Krishnamoorthi
Chinnappa K. Ganapathy
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Qualcomm Inc
Original Assignee
Qualcomm Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Qualcomm Inc filed Critical Qualcomm Inc
Application granted granted Critical
Publication of ES2315735T3 publication Critical patent/ES2315735T3/es
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/14Fourier, Walsh or analogous domain transformations, e.g. Laplace, Hilbert, Karhunen-Loeve, transforms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/14Fourier, Walsh or analogous domain transformations, e.g. Laplace, Hilbert, Karhunen-Loeve, transforms
    • G06F17/141Discrete Fourier transforms
    • G06F17/142Fast Fourier transforms, e.g. using a Cooley-Tukey type algorithm
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L27/00Modulated-carrier systems
    • H04L27/26Systems using multi-frequency codes
    • H04L27/2601Multicarrier modulation systems
    • H04L27/2647Arrangements specific to the receiver only
    • H04L27/2649Demodulators
    • H04L27/265Fourier transform demodulators, e.g. fast Fourier transform [FFT] or discrete Fourier transform [DFT] demodulators
    • H04L27/2651Modification of fast Fourier transform [FFT] or discrete Fourier transform [DFT] demodulators for performance improvement

Abstract

Un procedimiento para determinar una Transformada Rápida de Fourier (FFT) de una dimensión, de raíz r y de r n puntos, comprendiendo del procedimiento: a) escribir muestras que vayan a ser transformadas en una memoria (210) que tenga r muestras por fila; b) leer r filas de la memoria (210); c) determinar r FFT parciales de raíz r para generar r 2 valores de FFT parciales; d) aplicar factores de rotación a los r 2 valores de FFT parciales para generar r 2 valores de FFT parciales ponderados: y caracterizado por: e) escribir los r 2 valores de FFT parciales ponderados en un banco de registros (230); f) trasponer los r 2 valores de FFT parciales ponderados en el banco de registros (230) para generar valores traspuestos; g) escribir los valores traspuestos en la memoria (210); y h) determinar los valores de FFT a partir del contenido de la memoria (210): en el que el paso c) es llevado a cabo por medio de un motor FFT en cadena de r puntos (220) que realiza una FFT parcial de r puntos sobre las muestras de cada una de las mencionadas r filas.

Description

Arquitectura y procedimiento FFT.
Campo
La divulgación se refiere al campo del procesado de la señal. En particular, la divulgación se refiere a un aparato y a procedimientos para implementar una Transformada Rápida de Fourier (FFT).
Antecedentes
La transformada rápida de Fourier se puede usar para hacer corresponder una señal en el dominio del tiempo a su homóloga en el dominio de la frecuencia. Por el contrario, una Transformada de Fourier Inversa se puede usar para hacer corresponder una señal en el dominio de la frecuencia con su homóloga en el dominio del tiempo. Las transformadas de Fourier son particularmente útiles para el análisis espectral de señales en el dominio del tiempo. De manera adicional, los sistemas de comunicaciones, tales como los que implementan la Multiplexación por División de Frecuencia Ortogonal (OFDM) pueden usar las propiedades de las transformadas de Fourier para generar múltiples símbolos en el dominio del tiempo a partir de tonos linealmente espaciados y para recuperar las frecuencias a partir de los símbolos.
Un sistema de datos muestreados puede implementar una Transformada Discreta de Fourier (DFT) para permitir a un procesador realizar la transformada sobre un número predeterminado de muestras. Sin embargo, la DFT es intensa desde el punto de vista de cálculo y requiere de una tremenda cantidad de potencia de procesado para realizarse. El número de cálculos necesarios para realizar una DTF de N punto es del orden de N^{2}, denotado por O(N^{2}). En muchos sistemas, la cantidad de potencia de procesado dedicada a realizar una DTF puede reducir la cantidad de procesado disponible para otras operaciones del sistema. De manera adicional, los sistemas que están configurados para funcionar como sistemas en tiempo real puede que no tengan una suficiente potencia de procesado para realizar una DTF del tamaño deseado dentro de un tiempo asignado para el cálculo.
La Transformada Rápida de Fourier (FFT) es una implementación discreta de la transformada de Fourier que permite realizar una transformada de Fourier en significativamente menos operaciones en comparación con la implementación de la DFT. Dependiendo de la implementación particular, el número de cálculos requeridos para realizar una FFT de raíz r está de manera típica del orden de N x log_{t}(N), denotado como O(Nlog_{r}(N)).
En el pasado, los sistemas que implementaban una FFT pueden haber usado un procesador de propósito general o un Procesador Digital de Señal (DSP) autónomo para realizar la FFT. Sin embargo, los sistemas están incorporando de manera creciente Circuitos Integrados Específicos de Aplicación (ASIC) específicamente diseñados para implementar la mayoría de la funcionalidad requerida de un dispositivo. La implementación de la funcionalidad del sistema dentro de un ASIC minimiza la cuenta de circuitos integrados y la lógica de pegamento requerida para hacer de interfaz de múltiples circuitos integrados. La cuenta reducida de circuitos integrados permite de manera típica una huella física más pequeña para dispositivos sin sacrificar nada de su funcionalidad.
La cantidad de área dentro de un molde ASIC está limitada, y los bloques funcionales que son implementados dentro de un ASIC necesitan ser optimizados en tamaño, velocidad y potencia para mejorar la funcionalidad del diseño ASIC global. La cantidad de recursos dedicados a la FFT se debería minimizar para limitar el porcentaje de recursos disponibles dedicados a la FFT. Aún se necesitan dedicar recursos suficientes a la FFT para asegurar que se puede realizar la transformada con una velocidad suficiente para soportar los requisitos del sistema. De manera adicional, se necesita minimizar la cantidad de potencia consumida por el módulo FFT para minimizar los requisitos de fuente de alimentación y la disipación de calor asociada. Por lo tanto, puede que sea deseable optimizar una arquitectura FFT para su implementación dentro de un circuito integrado, tal como un ASIC.
En el documento de D. S. Dawoud, "An effective memory addressing scheme for multiprocessor FFT System", Actas de la 6ª Conferencia IEEE AFRICON, del 2 al 4 de octubre de 2002, George, Sudáfrica, se considera la organización de memoria de procesadores FFT. Se da un nuevo esquema de direccionamiento de memoria. El esquema propuesto considera el caso usando dos módulos de memoria de dos puertos y permite el procesado de mariposas en forma de grupos de dos. La asignación de direccionamiento permite, sin ningún conflicto, acceder de manera simultánea a los datos necesarios para las dos mariposas y escribir las cuatro salidas a los mismos lugares. Las ventajas de este esquema de direccionamiento de memoria recaen en el hecho de que se reduce el número de ciclos de cálculos de mariposa de la FFT a la mitad y se reduce el retardo de la generación de direcciones al mínimo.
En el documento de II. Steckenbiller y K. Holz, "A traspose-register for a 2D-FFT of 64x64 pixel blocks", Actas de la Conferencia Europea de 1992 sobre Circuitos Integrados Específicos de Aplicación (Euro ASIC '92), del 1 al 5 de junio de 1992, París, Francia, se describe un registro de trasposición, parte de un sistema para la reducción de datos de señales HDTV digitales. Esta aproximación está conduciendo a una solución de un único circuito integrado para la señal de luminancia. El algoritmo implementado se basa en la codificación de transformada de dos dimensiones de grandes subbloques. Usando la aproximación de dos columnas para la FFT de dos dimensiones (2D), se requiere un registro de trasposición que realice un acceso de lectura y escritura para 2048 bit en \mus. El tamaño del registro de trasposición es de 131072 bit (128*64*16 bit). El tiempo de ciclo del registro es de 80 ns para la lectura o la escritura de 512 bits (-6,4 Gbit/s) de una fila o columna de bloque de imagen. De esta manera, el modo de acceso por fila y columna se implementa por medio de una célula de memoria de doble puerto más líneas de bits horizontales y verticales. Usando una tecnología CMOS de 1,5 \mus, el área del registro es de 128 mm^{2} y está determinada por las líneas de bits.
\vskip1.000000\baselineskip
Sumario
Una implementación y un procedimiento hardware FFT como los que se declaran en las reivindicaciones anejas, proporciona un eficiente procesado FFT, a la vez que minimiza el área de molde necesaria en un circuito integrado (CI). El hardware FFT se puede usar para implementar una FFT de N puntos, en la que N = I^{n} es una función de una raíz (r). La implementación hardware incluye una memoria de muestreo que tiene N/r filas, cada una de las cuales almacena r muestras. Una memoria usada para almacenar factores de rotación tiene k factores de rotación por fila, en la que 0 < k < r representa el número de multiplicadores de rotación complejos disponibles. Un módulo FFT, lee r filas de la memoria (siendo la dirección de fila una función de la etapa de la FFT), realiza una FFT compleja de r puntos parcial sobre las muestras de cada fila seguida por la multiplicación de rotación (excepto para la última etapa) y escribe al resultado en una memoria de matriz de dimensión r x r (banco de registro). El contenido de la memoria de matriz de dimensión r x r se escribe, en orden traspuesto u opcionalmente sin trasposición, de nuevo en la memoria de muestras. Esta operación se repite N/r^{2} veces para cada etapa y después se repite para las n etapas para producir la FFT de N puntos.
En las reivindicaciones anejas se establecen aspectos de la invención.
\vskip1.000000\baselineskip
Breve descripción de los dibujos
Las características, objetos, y ventajas de las realizaciones de la descripción serán más aparente es a partir de la descripción detallada que se declara más adelante cuando se tome junto con los dibujos, en los que idénticos elementos llevan idénticos números de referencia.
La figura 1 es un diagrama de flujo de una FFT de raíz 2 de 8 puntos.
La figura 2 es un diagrama de bloques funcional de una realización de un módulo FFT.
Las figuras 3A a 3D son diagramas de flujo de realizaciones de un proceso FFT.
La figura 4 es un diagrama de bloques funcional del contenido de memoria para las etapas de una realización de una FFT de raíz 2 de 8 puntos.
Las figuras 5A a 5B son diagramas de bloques funcionales de realizaciones de componentes de sistema OFDM que usan el módulo FFT descrito en este documento.
\vskip1.000000\baselineskip
Descripción detallada
Se describen una arquitectura hardware adecuada para una FFT o para una FFT inversa (IFFT), un dispositivo que incorpora un módulo FFT, y un procedimiento para realizar una FFT o una IFFT. La arquitectura FFT está generalizada para permitir la realización de una FFT de cualquier raíz. La arquitectura FFT permite minimizar el número de ciclos usado para realizar la FFT a la vez que mantiene una pequeña área de circuito integrado. En particular, la arquitectura FFT configura espacio en memoria y registro para optimizar el número de accesos a memoria realizado durante de una FFT parcial. La arquitectura FFT proporciona una flexibilidad adicional en su implementación y permite variaciones en la raíz y en el número de multiplicadores complejos, dependiendo de las restricciones de diseño particulares. En implementaciones que sean sensibles a la velocidad, pero que sean menos sensibles al área de molde, la arquitectura FFT se puede implementar con multiplicadores complejos adicionales y con una raíz superior. En implementaciones que sean más sensibles al área de molde, se puede reducir la raíz y el número de multiplicadores complejos.
La arquitectura FFT incluye una memoria de muestras que está configurada para tener una anchura de filas de memoria que sea suficiente como para almacenar un número de muestras igual a la raíz FFT. De esta manera, la memoria de muestras está configurada para tener N/r filas de r muestras por fila donde N representa al tamaño de la FFT y r representa la raíz de la FFT. Un bloque FFT está configurado para recuperar filas de la memoria y para realizar una FFT de r puntos sobre las muestras de cada fila. El bloque FFT recupera un número de filas igual a la raíz de la FFT, pero realiza la FFT de r puntos sobre las muestras de cada fila individual.
El bloque FFT escribe los resultados de las FFT de r puntos en un banco de registros que está configurado para almacenar r^{2} muestras. Los multiplicadores complejos acoplados al banco de registros y a una memoria de factor de rotación ponderan los resultados de la FFT con los factores de rotación apropiados. Los factores ponderados son devueltos a los mismos registros.
Los contenidos del banco de registros son traspuestos antes de ser reescritos en las filas originales en la memoria de muestras. La trasposición de los valores en el banco de registros permite realizar la FFT parcial por medio del mantenimiento de la relación de las muestras de la FFT en la misma fila de la memoria de muestras. Las muestras en la memoria de muestras son recuperadas, procesadas y devueltas a la memoria de muestras durante un número suficiente de etapas para realizar la FFT de N puntos.
Es de interés primero examinar la complejidad aritmética de varios algoritmos FFT antes de proceder con una discusión de los compromisos basados en hardware en la arquitectura descrita. Se examinan los algoritmos de Cooley-Tukey de raíz 2, 4, 8, 16 y algoritmos de raíz dividida. Los algoritmos basados en el primer factor no son considerados porque no tienen una estructura regular y son más sensibles a la cuantificación, incluso aunque la complejidad de estos algoritmos puede ser más baja que la de los algoritmos basados en los algoritmos de Cooley-Tukey.
La complejidad de los algoritmos se evalúa en este documento en base al número de multiplicaciones y sumas reales existentes requeridas. Una multiplicación compleja se supone que es igual a cuatro multiplicaciones reales y a dos sumas reales.
El número de multiplicaciones y sumas reales requerido por los algoritmos de raíz r se puede determinar haciendo notar que estos algoritmos dividen el cálculo de una DFT de r^{n} puntos en el cálculo de r DFT de r^{n-1} puntos a un coste de (r^{n-1} - 1)\cdot(r-1) multiplicadores de rotación y el procesado adicional por medio de r^{n-1} FFT de r puntos. La figura 1 es un ejemplo de un flujo de señal de una FFT de raíz 2 de 8 puntos que demuestra esta estructura.
Mediante la denotación del número de multiplicaciones reales requeridas para una FFT de r^{n} puntos por M^{T}_{n} y el número de sumas reales requeridas por A^{T}_{n}, la complejidad del procesado se define por medio de las recursiones
1
\vskip1.000000\baselineskip
con las condiciones iniciales:
2
La complejidad del algoritmo de raíz dividida se evalúa de una manera similar. El algoritmo de raíz dividida divide una FFT de N puntos en una FFT de tamaño N/2 y dos FFT de tamaño N/4 al coste de algunos multiplicadores de rotación. La complejidad del algoritmo se define por medio de la recursión:
3
En base a estas recursiones, se puede tabular y comparar la complejidad de varios algoritmos FFT comunes. Las tablas 1 y 2 compilan los resultados de complejidad para los algoritmos FFT comunes. La tabla incluye celdas vacías para aquéllas configuraciones que no se evaluaron.
TABLA 1 Multiplicaciones reales para diferentes algoritmos FFT
4
\vskip1.000000\baselineskip
\vskip1.000000\baselineskip
TABLA 2 Sumas reales para diferentes algoritmos FFT
5
\vskip1.000000\baselineskip
La complejidad aritmética de las tablas 1 y 2 no da una imagen completa del coste hardware de implementar la FFT en diferentes algoritmos. Se necesita considerar el coste del acceso a datos y factores de rotación desde la memoria y de escribir datos en la memoria. La siguiente tabla muestra el número de accesos a memoria (solamente se cuentan los accesos a datos) requeridos por los diferentes algoritmos para diferentes tamaños de raíz. El número de accesos a datos se obtiene haciendo notar que para una implementación de raíz r de una FFT/IFFT de N puntos, el número total de etapas es log_{r}(N) y que cada etapa requiere 2N operaciones de lectura y escritura, lo que conduce a
2N\cdotlog_{r}(N) operaciones de acceso a muestras complejas de memoria.
TABLA 3 Accesos a memoria para diferentes algoritmos FFT
6
\vskip1.000000\baselineskip
Un análisis de la implementación FFT en hardware muestra que el coste dominante en términos de ciclos usados se gasta en los accesos a memoria. El número de accesos a memoria se reduce con el aumento de la raíz. Sin embargo, el acceso a una muestra/ciclo complejos puede no ser suficiente para muchas aplicaciones. Un sencillo ejemplo ilustra un problema potencial.
Considérese el problema de implementar una FFT de 64 puntos para un sistema Múltiplex por División en Frecuencia Ortogonal (OFDM) que tiene una duración de símbolo de 4 \mus y una velocidad de reloj de 40 MHz. Dicho sistema puede ser por ejemplo, un sistema IEEE 802.11a con un reloj de 40 MHz. La duración de símbolo OFDM de 4 \mus en combinación con la velocidad de reloj de 40 MHz se traduce en 160 ciclos disponibles entre símbolos.
En primer lugar, se examina el coste de implementar una FFT de 64 puntos por medio de la utilización de algoritmos de raíz 2. El número total de accesos a memoria requerido es de 768, como se muestra en la tabla anterior. Por lo tanto, la implementación de un algoritmo de raíz 2 que use memoria con solamente una lectura o escritura de muestra por ciclo costaría un mínimo de 768 ciclos, lo que es aproximadamente 5 veces el número de ciclos disponible para el cálculo. Los algoritmos de raíz dividida sufren el mismo problema de necesitar cantidades comparables de acceso a memoria que los algoritmos de raíz 2.
Sin embargo, para una FFT de 64 puntos que use un algoritmo de raíz 4, el número de accesos a memoria requerido es de 384. Esto es mejor, pero es aún mucho más alto que el número de ciclos disponible. Cuanto más aumenta la raíz del algoritmo FFT, más se reduce la cantidad de accesos a memoria requeridos, mientras disminuye el número de etapas en la FFT.
Se puede conseguir una implementación de alta velocidad para cualquier algoritmo de raíz por medio del uso de una estructura de memoria que haga posible la lectura y escritura en paralelo. Para un algoritmo de raíz r particular, una estructura de memoria que permita el acceso, ya sea para una operación de lectura como para una operación de escritura, de r valores en un ciclo, mejora la capacidad de procesado de salida del algoritmo. De manera conceptual, se puede pensar en el acceso en paralelo como una RAM que tenga r palabras en cada fila. Sin embargo, para obtener el máximo beneficio de esta estructura de memoria, la r muestras requeridas para calcular una FFT de r puntos necesitan estar en la misma fila en cada etapa del algoritmo. Esto se puede conseguir por medio de la lectura de r filas de memoria de muestras, calculando r FFT de r puntos y escribiendo los resultados después de la trasposición en la memoria de muestras. La operación de trasposición se puede realizar en una memoria de matriz de r^{2} registros. A medida que aumenta la raíz r, aumenta el tamaño del motor FFT y el tamaño de la memoria de matriz. Se puede llegar a un compromiso entre el área y la velocidad para cualquier implementación particular.
La figura 2 es un diagrama de bloques funcional de una realización de un módulo FFT 200. El módulo FFT 200 puede estar configurado como un módulo IFFT solamente con pequeños cambios, debido a la simetría entre las transformadas directa e inversa. El módulo FFT 200 puede estar implementado sobre un único molde de circuito integrado, y puede estar implementado como parte de un ASIC. De manera alternativa, el módulo FFT 200 puede estar implementado como múltiples elementos que están en comunicación unos con otros. De manera adicional, el módulo FFT 200 no está limitado a una estructura FFT particular. Por ejemplo, el módulo FFT 200 puede estar configurado para realizar una FFT con decimación en el tiempo o una FFT con decimación en frecuencia.
El módulo FFT 200 incluye una memoria 210 que está configurada para almacenar las muestras que se van a transformar. De manera adicional, como el módulo FFT 200 está configurado para realizar un cálculo parcial de la transformada, la memoria 210 se usa para almacenar los resultados de cada etapa de la FFT y la salida del módulo de FFT 200.
La memoria 210 puede estar dimensionada en base en parte al tamaño de la FFT y a la raíz de la FFT. Para una FFT de N puntos de raíz r, donde N = r^{n}, la memoria 210 puede estar dimensionada para almacenar las N muestras de las r^{n}-1 filas, con r muestras por fila. La memoria 210 puede estar configurada para tener una anchura que sea igual al número de bits por muestra multiplicada por el número de muestras por fila. La memoria 210 está configurada de manera típica para almacenar muestras como componentes reales e imaginarias. De esta forma, para una FFT de raíz 2, la memoria 210 está configurada para almacenar dos muestras por fila, y puede almacenar las muestras como la parte real de la primera muestra, la parte imaginaria de la primera muestra, la parte real de la segunda muestra, y la parte imaginaria de la segunda muestra. Si cada una de las componentes de una muestra está configurada como 10 bits, la memoria 210 usa 40 bits por fila. La memoria 210 puede ser una memoria de acceso aleatorio (RAM) de velocidad suficiente para soportar el funcionamiento del módulo.
La memoria 210 está acoplada a un motor FFT 220 está configurado para realizar una FFT de r puntos. El módulo FFT 200 puede estar configurado para realizar una FFT similar a la estructura que se muestra la figura 1, en la que la ponderación por medio de los factores de rotación se realiza después de la FFT parcial, a la que también se hace referencia como una mariposa FFT. Dicha configuración permite al motor de la FFT 220 ser configurado usando un número mínimo de multiplicadores, minimizando de esta manera el tamaño de la complejidad del motor FFT 220. El motor FFT 220 puede estar configurado para recuperar una fila desde la memoria 210 y para realizar una FFT sobre las muestras de la fila. De esta manera, el motor de la FFT 220 puede recuperar todas las muestras para una FFT de r puntos en un único ciclo. El motor de la FFT 220, siendo un motor FFT en cadena, es capaz de manipular los valores de las filas en diferentes fases del reloj.
La salida del motor de la FFT 220 está acoplada a un banco de registros 230. El banco de registros 230 está configurado para almacenar un número de valores en base a la raíz de la FFT. En una realización, el banco de registros 230 puede estar configurado para almacenar r^{2} valores. Como fue el caso con las muestras, los valores almacenados en el banco de registros son de manera típica valores complejos que tienen una componente real y una componente imaginaria.
El banco de registros 230 se usa como un almacenamiento temporal, pero está configurado para el acceso rápido y proporciona una localización dedicada para el almacenamiento a la que no se necesita acceder a través del bus de direcciones. Por ejemplo, cada bit de un registro del banco de registros 230 puede estar implementado por medio de un circuito biestable. Como consecuencia de esto, un registro usa mucha más área de molde en comparación con una localización de memoria de tamaño comparable. Como no hay de manera efectiva un coste de ciclo para acceder al espacio de registros, una implementación particular del módulo FFT 200 puede encontrar un compromiso entre la velocidad y el área de molde por medio de la manipulación del tamaño del banco registros 230 y la memoria 210.
El banco de registros 230 puede de manera ventajosa estar dimensionado para almacenar r^{2} valores de forma que se pueda realizar directamente una trasposición de los valores, por ejemplo, por medio de escribir valores por filas y leer valores por columnas, o viceversa. La trasposición de valores se usa para mantener la alineación de filas de los valores FFT en la memoria 210 para todas las etapas de la FFT.
Una segunda memoria 240 está configurada para almacenar los factores de rotación que se usan para ponderar las salidas del motor FFT 220. En algunas realizaciones, el motor FFT 220 puede estar configurado para usar los factores de rotación directamente durante el cálculo de las salidas parciales de la FFT (mariposas FFT). Los factores de rotación pueden estar predeterminados para cualquier FFT. Por lo tanto, la segunda memoria 240 puede ser implementada como una memoria de sólo lectura (ROM), una memoria no volátil, una RAM no volátil, o una memoria flash programable, aunque la segunda memoria 240 también puede estar configurada como una RAM o algún otro tipo de memoria. La segunda memoria 240 puede estar dimensionada para almacenar N x (n-1) factores de rotación complejos para una FFT de N puntos, donde N = r^{n}. Algunos de los factores de rotación tales como 1, -1, j o -j, puede ser omitidos de la segunda memoria 240. De manera adicional, se pueden omitir también los duplicados del mismo valor de la segunda memoria 240. Por lo tanto, el número de factores de rotación en la segunda memoria 240 puede ser menor de N x (n-1). Una implementación eficiente puede sacar ventaja del hecho de que los factores de rotación para todas las etapas de una FFT sean subconjuntos de los factores de rotación usados en la primera etapa o en la etapa final de una FFT, dependiendo de si la FFT implementa un algoritmo de decimación en frecuencia o un algoritmo de decimación en el tiempo.
Los multiplicadores complejos 250a - 250b están acoplados al banco de registros y a la segunda memoria 240. Los multiplicadores complejos 250a - 250b están configurados para ponderar las salidas del motor de la FFT 220, que se almacenan en el banco de registros 230, con el factor de rotación apropiado de la segunda memoria 240. La realización que se muestra la figura dos 2 incluye dos multiplicadores complejos 250a y 250b. Sin embargo, el número de multiplicadores complejos, por ejemplo 250a, que se incluyen en el modulo FFT 200 se puede seleccionar en base a un compromiso entre la velocidad y el área de molde. Se pueden implementar un número mayor de multiplicadores complejos sobre un molde con el fin de acelerar la ejecución de la FFT. Sin embargo, el aumento de la velocidad es a costa del área de molde. Cuando el área de molde sea crítica, se puede reducir el número de multiplicadores complejos. De manera típica, un diseño no incluiría más de r-1 multiplicadores complejos, cuando se implemente un motor de FFT de r puntos 220, ya que r-1 multiplicadores complejos son suficientes para aplicar todos los factores de rotación no triviales a las salidas del motor de la FFT 220 en paralelo. Como un ejemplo, un módulo FFT 200 configurado para realizar una FFT de raíz 2 de 8 puntos, tal como el que se muestra la figura 1, puede implementar 2 multiplicadores complejos, pero puede implementar solamente 1 multiplicador complejo.
Cada multiplicador complejo, por ejemplo 250a, opera sobre un único valor del banco de registros 230 y de manera correspondiente sobre un factor de rotación Almacenado en la segunda memoria 240 durante cada operación de multiplicación. Si hay menos multiplicadores complejos que multiplicaciones complejas que se tengan que realizar, un multiplicador complejo realizará la operación sobre múltiples valores FFT del banco de registros 230.
La salida del multiplicador complejo, por ejemplo 250a, se escribe en el banco de registros 230, de manera típica en la misma posición que la proporcionada en la entrada al multiplicador complejo. Por lo tanto, después de las multiplicaciones complejas, el contenido del banco de registros representa la salida de la etapa FFT que es la misma con independencia de si los multiplicadores complejos fueron implementados dentro del motor FFT 220 o están asociados con el banco de registros 230 como se muestra en la figura 2.
Un módulo de trasposición 232 acoplado al banco de registros 230 realiza una trasposición sobre el contenido del banco de registros 230. El módulo de trasposición 232 puede trasponer el contenido del registro por medio de la redisposición de los valores de registros. De manera alternativa, el módulo de trasposición 232 puede trasponer el contenido del bloque de registros 230 a medida que se leen los contenidos del bloque de registros 230. Los contenidos del banco de registros 230 son traspuestos antes de ser escritos de nuevo en la memoria 210 en las filas que suministraron las entradas al motor FFT 220. La trasposición de los valores del banco de registros 230 mantiene la estructura por filas para las entradas FFT a través de todas las etapas de la FFT.
Se puede configurar un procesador 262 en combinación con la memoria de instrucciones 264 para realizar el flujo de datos entre módulos, y se puede configurar para realizar algunos o todos de uno o más de los bloques de la figura 2. Por ejemplo, la memoria de instrucciones 264 puede almacenar una o más instrucciones que sean utilizables por el procesador como software que dirija al procesador 262 para manipular los datos en el módulo FFT 200.
El procesador 262 y la memoria de instrucciones 264 se pueden implementar como parte del módulo FFT 200 o pueden ser externos al módulo FFT 200. De manera alternativa, el procesador 262 puede ser externo al módulo FFT 200 pero la memoria de instrucciones 264 puede ser interna al módulo FFT 200 y puede ser, por ejemplo, común con la memoria 210 usada para las muestras, o la segunda memoria 240 en la que se almacenan los factores de rotación.
La realización que se muestra en la figura 2 caracteriza un compromiso entre una velocidad y un área a medida que cambia la raíz del algoritmo. Para implementar una FFT de N = r^{v} puntos, el número de ciclos requerido se puede estimar como:
N_{ciclos} \approx \left(\frac{N}{r^{2}} \cdot \nu \right) \cdot r \cdot N_{FFT}
donde,
\left(\frac{N}{r^{2}} \cdot \nu \right)= número de r, FFT de raíz r que se tienen que calcular,
rN_{FFT} = r x tiempo que dura la realización de una lectura, FFT, multiplicación de rotación y escritura para un vector de r elementos.
Se supone que N_{FFT} es constante independiente de la raíz. La cuenta de ciclo disminuye en el orden de 1/r (O (1/r)). El área requerida para la implementación aumenta O(r^{2}) a medida que aumenta el número de registros requeridos para la trasposición como r^{2}. El número de registros y el área requerida para implementar los registros domina el área para un N grande.
Se puede elegir la raíz mínima que proporciona la velocidad deseada para implementar FFT para diferentes casos de interés. Por medio de minimizar la raíz, con tal de que la velocidad del módulo sea la suficiente, se minimiza al área de molde para implementar el módulo.
Las figuras 3A a 3D son diagramas de flujo de la realización de un proceso FFT 300. El proceso 300 se puede realizar, por ejemplo, por medio del módulo FFT 200 de la figura 2. De manera alternativa, el proceso 300 se puede implementar como una o más instrucciones adecuadas para un procesador y ejecutadas por un procesador junto con la memoria. En otras realizaciones, partes del proceso 300 pueden ser realizadas en hardware y otras partes pueden ser realizadas en software.
El proceso 300 comienza en el bloque 302 en el que el módulo FFT, que usa por ejemplo un procesador, escribe los datos que se van a transformar en memoria que tiene una anchura que es suficiente para almacenar al menos un número de muestras igual a la raíz FFT. Por ejemplo, si el módulo FFT está configurado para realizar una FFT de raíz 2 de 8 puntos, como se muestra en la figura 1, la memoria está configurada como 4 filas de 2 columnas y cada columna puede estar configurada para almacenar dos muestras complejas. El procesador puede, por ejemplo, escribir las muestras en la memoria columna por columna comenzando con la primera columna y continuando con la segunda columna cuando se rellene la primera columna.
Una vez que se escriban los datos de muestra en la memoria, el módulo FFT procede con el bloque 304 en el que el procesador inicializa un contador de etapas. Como se describe a continuación y como se muestra en la figura 1, una FFT de N=r^{n} puntos incluye n etapas. Al comienzo de una FFT, el procesador puede inicializar el contador de etapas a uno. Después de inicializar el contador de etapas, el módulo FFT procede con el bloque 310 y el procesador inicializa los contadores parciales de FFT y de bloques. Los contadores parciales de FFT y de bloques pueden ser, por ejemplo, inicializados a cero.
Como se muestra en el ejemplo de la figura 1, el número de FFT parciales realizadas en cada una de las etapas de la FFT permanece constante, pero un contador que hace un seguimiento del índice de las muestras implicadas en cada cálculo FFT cambia dependiendo de la etapa.
Después de la inicialización de los contadores parciales de FFT y de bloques, el módulo FFT procede con el bloque 312 en el que el procesador inicializa un puntero de dirección de fila. El puntero de dirección de fila determina la fila de memoria sobre la que está operando el motor FFT. Por ejemplo, el procesador puede determinar el valor del puntero de dirección de fila como:
p_{fila} = c_{k} \cdot r^{n-k} + f_{k}
El módulo FFT procede con el bloque 314 y lee filas de la memoria de muestras en base al valor del puntero de dirección de fila. Por ejemplo, el procesador puede leer las filas de una memoria de muestras y escribirlas en localizaciones en el motor FFT. El procesador puede leer filas determinadas por el puntero de direcciones:
a_{i} = p_{fila} + i\cdot r^{n-k-1}, \hskip0,5cm i = 0...(r-1),
donde n representa el número total de etapas y k representa el contador de etapas.
Una vez que se han leído las filas en el motor FFT, el módulo FFT procede con el bloque 320 y calcula las FFT de r puntos sobre las muestras recuperadas. El número de FFT de r puntos realizadas por el motor FFT en la realización es igual al número de filas leídas de la memoria, y es igual a la raíz, r. La salida del motor FFT se escribe en un banco de registros de r x r.
El módulos FFT procede con el bloque 322 y aplica los factores de rotación almacenados en una memoria de factores de rotación a los valores de salida FFT para ponderar los valores con los factores de rotación. Los factores de rotación se pueden aplicar usando uno o más multiplicadores, y los multiplicadores pueden estar configurados como multiplicadores complejos. Después de la ponderación con los factores de rotación, los multiplicadores escriben los resultados en el banco de registros r x r en el paso 324.
El módulo FFT procede entonces con el paso 330 y traspone el orden de los valores en el registro de bancos. En una realización, el procesador puede trasponer el orden de los valores almacenados en el banco de registros. En otra realización, la trasposición puede ocurrir cuando se hayan leído los valores del banco de registros. Por ejemplo, la salida de los multiplicadores se puede escribir en el banco de registros en un orden por filas, y se puede leer del banco de registros en un orden por columnas, dando como resultado una trasposición con relativamente poco procesado.
El conector A 331 que se muestra en las figuras 3A y 3B se usa para conectar las partes del diagrama de flujo que se muestra en las dos páginas de figuras y no forma una parte sustancial del proceso 300. El módulo FFT procede con el paso 332, a través del conector A 331, y escribe los resultados traspuestos provenientes del banco de registros en la memoria de muestreo. Los resultados traspuestos provenientes del banco de registros se escriben en las filas identificadas por el puntero de direcciones determinado en el bloque 314. Si la trasposición se realiza a través de la conversión de columnas a filas, el módulo FFT, usando el procesador, puede leer las columnas del banco de registros y escribir los resultados en filas para la dirección identificada por el puntero de direcciones.
El módulo FFT procede con el bloque 334 y actualiza los contadores parciales FFT y de bloques. Como se ha tratado anteriormente, cada etapa de la FFT es realizada como uno o más bloques de FFT parciales de raíz r. En el paso 334, el módulo FFT actualiza la FFT parcial y los contadores de bloques. El procesador puede actualizar, por ejemplo, un contador de FFT parcial f_{k} = (f_{k}+1)mod(r^{n-k-1}) y si el contador FFT parcial es cero, aumentar el contador de bloques.
El módulo FFT procede con el bloque de decisión 340 y determina si se han calculado todas las FFT parciales y todos los bloques. No todas las FFT parciales han sido determinadas si el contador de bloques es menor que el número de bloques de la etapa, c_{k} < r^{n-1}. Si no se han calculado todas las FFT parciales y todos los bloques, el módulo FFT procede con el bloque 342 para actualizar la FFT parcial y los contadores de bloques para proceder con las FFT parciales adicionales. El módulo FFT hace entonces un bucle de retorno, a través del conector C 343 al bloque 310 para continuar con el procesado de las FFT parciales para el bloque actual FFT o el siguiente bloque FFT. El conector C 343 no es una parte sustancial del proceso 300, sino que en lugar de esto, se usa para conectar el diagrama de flujos a través de las páginas.
Si el módulo FFT en el bloque de decisión 340 determina que se han calculado todos los bloques de la etapa actual, el módulo FFT procede con el bloque de decisión 350 para determinar si se han procesado n-1 etapas. Si no es así, el módulo FFT procede con el bloque 352 para actualizar el contador de etapas y vuelve, a través del conector B 353, al bloque 310. El conector B 353 no es una parte sustancial del proceso 300, sino que en lugar de esto, se usa para conectar el diagrama de flujo a través de las páginas.
Si, en el bloque de decisión 350, el módulo FFT determina que se han procesado n-1 etapas, el módulo FFT procede con el procesado de la etapa final de la FFT a través del conector D 351. El módulo FFT puede implementar la etapa final de la FFT en diferentes realizaciones. La figura 3C ilustra una realización en la que el módulo FFT puede implementar la etapa FFT final. La figura 3D ilustra una realización alternativa para implementar la etapa final de la FFT. De esta manera, el módulo FFT puede proceder desde el conector D 351 en la figura Figure 3B al conector D 351 en la figura 3C ó 3D, pero no con ambos, porque las figuras 3C y 3D ilustran realizaciones de la misma etapa final FFT.
En una realización, el módulo FFT puede implementar el proceso de la etapa final FFT que se muestra en la figura 3C. En el proceso de la etapa final que se ilustra en la figura 3C, el módulo FFT va a por las filas de manera consecutiva, pero no realiza ninguna trasposición que siga a las FFT parciales. El resultado es un resultado de FFT que tiene muestras en cada una de las filas separadas como en la etapa inicial FFT, pero con filas que están en orden inverso de la raíz. La ordenación es ventajosa si hay una etapa IFFT que siga a la FFT. El módulo FFT puede tener en cuenta el orden inverso de la raíz cuando se vaya a acceder a los resultados FFT, o, si se desean resultados en orden, puede implementar un motor de reordenación de filas para reordenar las filas.
Para realizar el proceso de la etapa final que se muestra en la figura 3C, el módulo FFT procede desde el conector D 351 en la figura 3B al conector D 351 en la figura 3C. El módulo FFT procede con el bloque 362 e inicializa un puntero de dirección de fila. El puntero de dirección de fila se puede inicializar a p_{fila} = c_{n}\cdotr, donde c_{n} se fina inicialmente a cero, y r es la raíz de la FFT.
El módulo FFT procede entonces con la etapa final FFT de la misma manera en la que se procesaron las etapas FFT anteriores. En el bloque 364, el módulo FFT lee las filas de la memoria identificadas por un puntero de fila de direcciones que se puede calcular como: a_{i} = p_{fila} + i, i = 0, ...(r-1).
El módulo FFT procede con el bloque 366 y calcula la FFT parcial para los valores de las filas recuperadas. El motor FFT calcula r FFT parciales de r puntos sobre las filas recuperadas.
El módulo FFT procede con el bloque 368 y escribe los valores de salida de FFT parciales al banco de registros. El módulo FFT procede con el bloque 370 y escribe los valores del bloque de registros en las filas de memoria de muestras que facilitaron los datos al motor FFT. El módulo FFT incrementa el contador c_{n} en el bloque 370.
El módulo FFT procede con el bloque de decisión 372 y determina si todas las FFT parciales del bloque final se han procesado. Si no es así, el módulo FFT vuelve al bloque 362 para continuar el procesado de las filas de la memoria de muestras. Si se han procesado todas las FFT parciales de la etapa final, el módulo FFT procede desde el bloque de decisión 372 al bloque de reordenación de filas opcional 374, en el que el módulo FFT realiza la reordenación de filas. El módulo FFT procede entonces con el bloque 399 y se hace la FFT de N puntos.
Como una etapa FFT final alternativa, el módulo FFT puede en lugar de lo anterior, realizar el procesado que se muestra en la figura 3D. En la etapa final FFT que se ilustra en el diagrama de flujo de la figura 3D, el módulo FFT va a por las muestras de las filas de acuerdo con el mismo orden usado para la primera etapa de la FFT. Los resultados son filas que tienen muestras en orden consecutivo, pero con las filas en un orden inverso a la raíz parcial. De manera adicional, el orden inverso a la raíz parcial solamente ocurre cuando el número de etapas de la FFT es mayor de tres. A pesar del orden de filas inverso de la raíz parcial, este proceso de etapa final puede tener ventajas porque las muestras de cada fila son consecutivas.
Para realizar el proceso de la etapa final de la figura 3D, el módulo FFT procede desde el conector D 351 de la figura 3B al conector D 351 de la figura 3D. el módulo de la FFT procede con el bloque 382 y fija el puntero de dirección de filas usando el mismo algoritmo usado para la etapa inicial de la FFT.
El módulo FFT procede con el bloque 384 y lee las filas identificadas por el puntero y procede con el bloque 386 y realiza una FFT parcial FFT sobre las filas. El módulo de la FFT procede entonces con el bloque 388 y escribe los resultados de la FFT parcial en el banco de registros. El módulo de la FFT procede entonces con el bloque 390 y traspone el orden de los valores en el banco de registros.
\newpage
\global\parskip0.900000\baselineskip
El módulo de la FFT procede después con el bloque 392 y escribe los valores traspuestos en la memoria de muestras. El módulo de la FFT procede después con el bloque de decisión 396 para determinar si se han calculado todas las FFT parciales del bloque de la etapa final. Si no se han calculado todas, el módulo de la FFT procede con el bloque 382 y actualiza el puntero para la siguiente FFT parcial.
Si, en el bloque de decisión 396, el módulo de la FFT determina que se han calculado todas las FFT parciales en la etapa final, el módulo de la FFT procede con el bloque 398 y realiza una reordenación de filas. Como con la realización de la etapa final anterior que se muestra en la figura 3C, el paso de reordenación de filas es opcional. Si no se realiza una reordenación de filas, o después de realizar una reordenación de filas opcional, el módulo FFT procede con el bloque 399 y se hace la FFT.
La figura 4 es un diagrama de bloques funcional del contenido de la memoria y del contenido del bloque de registros para una realización de FFT de raíz 2 de 8 puntos realizada de acuerdo con el proceso de las figuras 3A - 3B. La FFT de 8 puntos usa una memoria de muestras de cuatro filas y dos columnas. El bloque de registro está configurado como una matriz r x r, que en este caso es una matriz de 2 x 2.
El contenido inicial de la memoria de muestras 410 se muestra dispuesto en dos columnas, 412 y 414. La memoria de muestras se puede escribir en orden de columnas, escribiendo valores en una primera columna 412 hasta que esté llena y después escribiendo valores en una segunda columna 414. Cada fila de la memoria de muestras 410 incluye los valores de muestra correctos para realizar las FFT de 2 puntos iniciales.
Las filas a0 y a2 son inicialmente recuperadas desde la memoria de muestras y se realizan las FFT sobre los valores almacenados en las filas. Los resultados son ponderados con factores de rotación apropiados, y el resultado se escribe en el banco de registros 422. Los valores del banco de registros 422 son después traspuestos antes de ser escritos en la memoria de muestras. De manera similar, las filas a1 y a3 son recuperadas de la memoria, procesadas en el motor FFT, ponderadas con factores de rotación apropiados, y descritas en el banco de registros 424. Los valores de registro en 424 sobrescriben los valores de registro previos del registro 422 que ya han sido traspuestos y reescritos en la memoria de muestras. Los nuevos valores del bloque de registros 424 son traspuestos y reescritos en la memoria.
La memoria de muestras 430 muestra los contenidos después de la finalización de la primera etapa y de la primera trasposición. Los datos están aún organizados en dos columnas 432 y 434, pero los valores están ajustados en base a la trasposición para mantener la relación de filas de las muestras que vayan a ser procesadas juntas.
Las filas a0 y a1 son recuperadas de manera inicial desde la memoria de muestras y se realizan las FFT sobre los valores almacenados en las filas. Los resultados son ponderados con factores de rotación apropiados, y los resultados son escritos en el banco de registros 442. Los valores del banco de registros 442 son transpuestos antes de ser escritos en la memoria de muestras. De manera similar, las filas a2 y a3 son recuperadas de la memoria, son procesadas en el motor FFT, ponderadas con los factores de rotación apropiados, y escritas en el banco de registros 444. Los valores son traspuestos y reescritos en la memoria de muestras.
La memoria de muestras 450 muestra los contenidos después de acabar la segunda etapa y la segunda trasposición. Desde la tercera disposición de la memoria de muestras 450, se recuperan de manera inicial las filas a0 y a1 desde la memoria de muestras y se realizan las FFT sobre los valores almacenados en las filas. los resultados son ponderados con factores de rotación apropiados, y los resultados son escritos en el banco de registros 462. Los valores del banco de registros 462 son después traspuestos antes de ser escritos en la memoria de muestras. De manera similar, se recuperan las filas a2 y a3 de la memoria, se procesan en el motor FFT, se ponderan con los factores de rotación apropiados, y se escriben en el banco de registros 464. Los valores son traspuestos y reescritos en la memoria de muestras. Los resultados traspuestos escritos en la memoria de muestras 470 representan la salida de la FFT de 8 puntos.
Las figuras 5A y 5B son diagramas de bloque funcionales de componentes de sistema OFDM que pueden incorporar el módulo FFT como se describe en este documento. Se tratan un transmisor OFDM 500 y un receptor OFDM 540. Cada uno de ellos, el transmisor OFDM 500 o el receptor OFDM 540 se pueden implementar dentro de un dispositivo o de un aparato configurado para comunicar dentro de un sistema OFDM. Dichos dispositivos incluyen, pero no están limitados a, teléfonos móviles, tales como teléfonos celulares, asistentes digitales personales y similares, o algún otro dispositivo de comunicaciones.
La figura 5A es un diagrama de bloques funcional de un transmisor OFDM 500 que puede implementar el módulo FFT de la figura 2 y el proceso FFT de las figuras 3A y 3B. Algunos o todos los bloques del transmisor OFDM 500 de la figura 5A se pueden implementar en un único circuito integrado o ASIC.
El transmisor OFDM 500 incluye una fuente de datos 502 que de manera típica incluye algún tipo de dispositivo de almacenamiento configurado para almacenar muestras de datos. Las muestras de datos se pueden generar externas al transmisor OFDM 500 o se pueden generar internas al transmisor OFDM 500 usando un conversor analógico a digital (ADC) (que no se muestra) acoplado a un dispositivo de memoria.
Un único flujo de datos puede estar caracterizado como un flujo de datos serie. Se acopla un conversor serie a paralelo 510 a la fuente de datos 502 y forma flujos de datos paralelos para cada portadora ortogonal en el transmisor OFDM 500. La salida del conversor serie a paralelo 510 se acopla a un modulador, en el que cada uno de los flujos de datos paralelos puede modular a una portadora correspondiente de las portadoras OFDM.
\global\parskip1.000000\baselineskip
Las múltiples portadoras OFDM moduladas son después acopladas a un módulo IFFT 520, que puede estar configurado a partir del módulo FFT de la figura 2, y que puede usar el proceso de las figuras 3A y 3B. El módulo IFFT 520 transforma las frecuencias ortogonales en un símbolo OFDM en el dominio del tiempo. La salida del módulo IFFT 520 se acopla a un conversor paralelo a serie 522 para convertir la salida paralelo a un único símbolo serie. La salida del conversor paralelo a serie 522 puede acoplarse a un transmisor 530, que puede ser un transmisor sin hilos.
La figura 5B es un diagrama de bloques funcional de un receptor OFDM 540 que es el complemento al transmisor OFDM 500 de la figura 5A. Como fue el caso con el transmisor OFDM 500, el receptor OFDM 540 puede ser implementado en un único circuito integrado o ASIC.
El receptor OFDM 540 incluye un receptor 542 que se puede configurar como un receptor sin hilos que reciba la difusión de símbolos OFDM por parte de un transmisor. El receptor 542 puede estar configurado para amplificar, filtrar, y hacer una conversión a una frecuencia inferior la señal recibida para recuperar una señal en banda base.
La señal en banda base se acopla a un conversor serie a paralelo 544 que funciona para convertir el flujo de datos en banda base serie en flujos de datos paralelos para su procesado. La salida del conversor serie a paralelo 544 se acopla a un módulo FFT 550, que puede ser el módulo FFT de la figura 2 realizando el proceso de las figuras 3A y 3B.
El módulo FFT 550 transforma el símbolo en el dominio del tiempo en las múltiples componentes de frecuencia ortogonales. La salida del módulo FFT 550 se acopla a un demodulador 560 que funciona para demodular las frecuencias ortogonales para recuperar los datos.
Se acopla un conversor paralelo a serie 562 a la salida del módulo FFT 550 y convierte los datos paralelos a un flujo de datos serie. El flujo de datos serie se acopla a un procesador de datos para su procesado adicional. Por ejemplo, los datos de voz se pueden convertir a un formato analógico para su amplificación y su entrega a un altavoz. Los datos de vídeo se pueden procesar de manera adicional y dirigir a un dispositivo de visualización.
Un módulo FFT que implementa una arquitectura FFT puede realizar una transformada parcial en un número reducido de instrucciones en comparación con las implementaciones FFT anteriores. El módulo FFT incluye memoria de muestras que dispone múltiples valores en una única fila. El funcionamiento FFT se realiza sobre las muestras de una única fila y se escriben en un bloque de registros. Se pueden usar uno o más multiplicadores complejos para aplicar factores de rotación a los resultados FFT parciales.
Los resultados FFT parciales ponderados en el banco de registros son traspuestos y reescritos en la memoria de muestras. La trasposición mantiene la relación de las entradas FFT para una única FFT parcial en la misma fila de la memoria de muestras. El proceso se repite para múltiples etapas de la FFT hasta que se complete la FFT deseada.
Los pasos de un procedimiento, proceso o algoritmo descritos junto con las realizaciones que se describen en este documento pueden ser realizados de manera directa en hardware, en un módulo software ejecutado por un procesador o en una combinación de los dos.
Un módulo software puede residir en memoria RAM, en memoria flash, en memoria no volátil, en memoria ROM, en memoria EPROM, en memoria EEPROM, en registros, en disco duro, en un disco extraíble, en un CD-ROM o en cualquier formato de medio de almacenamiento conocido en la técnica. Un medio de almacenamiento de ejemplo se acopla al procesador de forma que el procesador pueda leer la información del mismo, y escribir información en el mismo. En la alternativa, el medio de almacenamiento puede ser integrado en el procesador. Además, los varios procedimientos se pueden realizar en el orden que se muestra en las realizaciones o se pueden realizar usando un orden de pasos modificado. De manera adicional, se pueden omitir uno o más pasos proceso o de procedimiento o se pueden añadir uno o más pasos de proceso o de procedimiento a los procedimientos y procesos. Se puede añadir un paso adicional, un bloque adicional o una acción adicional al comienzo, al final o intermedio de los elementos existentes de los procedimientos y procesos.
La descripción anterior de las realizaciones descritas se proporciona para hacer posible que una persona experta en la técnica haga o use la divulgación. Varias modificaciones a estas realizaciones serán rápidamente obvias para los expertos en la técnica, y los principios genéricos definidos en este documento se pueden aplicar a otras realizaciones sin salirse del ámbito de la divulgación. De esta manera, la divulgación no está destinada a estar limitada a las realizaciones mostradas en este documento, sino que esté de acuerdo con el ámbito más amplio consecuente con los principios y las características novedosas divulgados en este documento.

Claims (27)

1. Un procedimiento para determinar una Transformada Rápida de Fourier (FFT) de una dimensión, de raíz r y de r^{n} puntos, comprendiendo del procedimiento:
a)
escribir muestras que vayan a ser transformadas en una memoria (210) que tenga r muestras por fila;
b)
leer r filas de la memoria (210);
c)
determinar r FFT parciales de raíz r para generar r^{2} valores de FFT parciales;
d)
aplicar factores de rotación a los r^{2} valores de FFT parciales para generar r^{2} valores de FFT parciales ponderados:
y caracterizado por:
e)
escribir los r^{2} valores de FFT parciales ponderados en un banco de registros (230);
f)
trasponer los r^{2} valores de FFT parciales ponderados en el banco de registros (230) para generar valores traspuestos;
g)
escribir los valores traspuestos en la memoria (210); y
h)
determinar los valores de FFT a partir del contenido de la memoria (210):
\quad
en el que el paso c) es llevado a cabo por medio de un motor FFT en cadena de r puntos (220) que realiza una FFT parcial de r puntos sobre las muestras de cada una de las mencionadas r filas.
\vskip1.000000\baselineskip
2. El procedimiento de la reivindicación 1, en el que la escritura de las muestras en la memoria (210) comprende la escritura de las muestras que se vayan a transformar columna por columna en una memoria (210) teniendo r^{n-1} filas y r columnas.
3. El procedimiento de la reivindicación 1, en el que la escritura de muestras en la memoria (210) comprende la escritura de muestras complejas para la transformada en la memoria (210).
4. El procedimiento de la reivindicación 1, en el que la lectura de r filas de la memoria (210) comprende:
\quad
determinar r índices de fila; y
\quad
leer filas de la memoria (210) correspondientes a los r índices de fila.
\vskip1.000000\baselineskip
5. El procedimiento de la reivindicación 4, en el que la determinación de r índices de fila comprende la determinación de un índice de fila correspondiente a la fórmula a_{i} = i x r^{n-k-1} donde, k representa una etapa de la FFT, para i-0 hasta (r-1).
6. El procedimiento de la reivindicación 1, en el que la aplicación de factores de rotación a los r^{2} valores FFT parciales comprende:
\quad
recuperar al menos un factor de rotación complejo; y calcular una multiplicación compleja del al menos uno, factor de rotación complejo con un valor correspondiente de los r^{2} valores FFT parciales.
\vskip1.000000\baselineskip
7. El procedimiento de la reivindicación 1, en el que la escritura de los r^{2} valores de FFT parciales ponderados en el banco de registros (230) comprende la escritura de los r^{2} valores de FFT parciales ponderados en un banco de registros (230) configurado como r filas y r columnas.
8. El procedimiento de la reivindicación 7, en el que la trasposición de los r^{2} valores de FFT parciales ponderados comprende:
\quad
recuperar un valor de FFT parcial ponderado correspondiente a una fila y columna del banco de registros (230);
\quad
trasponer los índices de fila y de columna; y
\quad
escribir el valor de FFT parcial ponderado en la fila y columna correspondientes a los índices traspuestos.
9. El procedimiento de la reivindicación 1 en el que antes de leer r filas de la memoria (210), el procedimiento comprende de manera adicional:
ai)
inicializar un contador de etapas;
aii)
inicializar un contador de bloques y un contador FFT parcial;
y en el que las r filas son recuperadas de la memoria (210) en base a los valores de los contadores de etapas, de bloque y contador FFT parcial;
y en el que después del paso de escribir los valores traspuestos en la memoria (210), el procedimiento comprende de manera adicional los pasos de:
gi)
actualizar el contador FFT parcial y el contador de bloques:
gii)
repetir los pasos aiii) al gi) en base al valor del contador de bloques y al valor del contador FFT parcial:
giii)
actualizar el valor del contador de etapas;
giv)
repetir los pasos aii) al giii) en base al valor del contador de etapas antes de determinar los valores de FFT desde el contenido de la memoria (210).
\vskip1.000000\baselineskip
10. Un aparato para determinar una transformada rápida de Fourier de una dimensión, de raíz r y r^{n} puntos, comprendiendo del aparato:
a)
un medio para escribir muestras que van a ser transformadas en una memoria (210) teniendo r muestras por fila;
b)
un medio para leer r filas de la memoria (210);
c)
un medio (220) para determinar r FFT parciales de raíz r para generar r^{2} valores de FFT parciales;
d)
un medio para aplicar factores de rotación a los r^{2} valores de FFT parciales para generar r^{2} valores de FFT parciales ponderados;
y caracterizado por:
e)
un medio para escribir los r^{2} valores de FFT parciales ponderados en un banco de registros (230);
f)
un medio (232) para trasponer los r^{2} valores de FFT parciales ponderados en el banco de registros (230) para generar valores traspuestos;
g)
un medio para escribir los valores traspuestos en la memoria (210); y
h)
un medio para determinar valores de FFT a partir de los contenidos de la memoria (210); en el que el medio (220) para determinar las r FFT parciales de raíz r es un motor FFT en cadena de r puntos (220) que realiza una FFT parcial de r puntos sobre las muestras de cada una de las mencionadas r filas.
\vskip1.000000\baselineskip
11. El aparato de la reivindicación 10, en el que el medio para escribir las muestras en la memoria (210) comprende un medio para escribir muestras que vayan a ser transformadas columna por columna en una memoria (210) que tiene r^{n-1} filas y r columnas.
12. El aparato de la reivindicación 10, en el que el medio para escribir muestras en la memoria (210) comprende un medio para escribir muestras complejas que van a ser transformadas en la memoria (210).
13. El aparato de la reivindicación 10, en el que el medio para leer r filas de la memoria (210) comprende:
\quad
un medio para determinar r índices de fila; y
\quad
un medio para leer las filas de la memoria (210) correspondientes a los r índices de fila.
\vskip1.000000\baselineskip
14. El aparato de la reivindicación 13, en el que el medio para determinar r índices de fila comprende un medio para determinar un índice de fila correspondiente a la fórmula a_{i} = i x r^{n-k-1}, donde k representa una etapa de la FFT, para i-0 hasta (r-1).
15. El aparato de la reivindicación 10, en el que el medio para aplicar los factores de rotación a los r^{2} valores de FFT parcial comprende:
\quad
un medio para recuperar al menos uno de los factores de rotación complejos; y
\quad
un medio (250a, 250b) para calcular una multiplicación compleja de al menos un factor de rotación complejo con un correspondiente valor de los r^{2} valores de FFT parciales.
16. El aparato de la reivindicación 10, en el que el medio para escribir los r^{2} valores de FFT parciales ponderados en el banco de registros (230) comprende la escritura de los r^{2} valores de FFT parciales ponderados en un banco de registros (230) configurado como r filas y r columnas.
17. El aparato de la reivindicación 16, en el que el medio (232) para trasponer los r^{2} valores de FFT parciales ponderados comprende:
\quad
un medio para recuperar un valor de FFT parcial ponderado correspondiente a una fila y columna del banco de registros (230),
\quad
un medio para trasponer los índices de fila y de columna; y
\quad
un medio para escribir el valor de FFT parcial ponderado en la fila y columna correspondientes a los índices traspuestos.
18. El aparato de la reivindicación 10 comprendiendo de manera adicional:
\quad
una memoria (210) configurada para almacenar r^{n} muestras con r muestras por fila de memoria;
\quad
un banco de registros (230) que tiene r^{2} registros configurados como r filas de r columnas, y configurados para recibir valores de salida desde el motor FFT (220); y
\quad
un módulo de trasposición (232) configurado para trasponer los valores en el banco de registros (230) y para escribir valores traspuestos en las r filas desde la memoria sobre la que se opera por parte del motor FFT (220).
19. El aparato de la reivindicación 18, comprendiendo de manera adicional:
\quad
una memoria de factores de rotación (240) configurada para almacenar al menos un factor de rotación FFT; y
\quad
al menos un multiplicados (250a, 250b) configurado para multiplicar un valor de un registro en el banco de registros (230) por un factor de rotación FFT de la memoria de factores de rotación (240), y configurado para escribir un valor de salida en los registros.
20. El aparato de la reivindicación 19, en el que al menos un multiplicador (250a, 250b) comprende al menos un multiplicador complejo.
21. El aparato de la reivindicación 19, en el que el al menos un multiplicador (250a, 250b) comprende r-1 multiplicadores complejos.
22. El aparato de la reivindicación 19, en el que la memoria de factores de rotación (240) comprende al menos una memoria seleccionada del grupo que comprende ROM, RAM, NV-RAM, y memoria flash.
23. El aparato de la reivindicación 18, en el que las r^{n} muestras comprenden r^{n} muestras complejas.
24. El aparato de la reivindicación 18, en el que la memoria (210) comprende una RAM.
25. El aparato de la reivindicación 18, en el que el módulo de trasposición (232) traspone los valores del banco de registros (230) por medio de la lectura de los valores de una manera columna por columna y escribiendo los valores en la memoria (210) de una manera fila por fila.
26. El aparato de la reivindicación 18, en el que el módulo de trasposición (232) traspone los valores del banco de registros (230) por medio de la lectura de un valor de registro correspondiente a un valor de fila y a un valor de columna del banco de registros (230), trasponiendo el valor de fila y el valor de columna; y escribiendo el valor de registro en el registro correspondiente al valor de fila y al valor de columna traspuestos.
27. Uno o más dispositivos de almacenamiento que almacenan una o más instrucciones utilizables por un procesador, que cuando son ejecutadas por un procesador (262) provocan que el aparato de la reivindicación 10 realice el procedimiento de la reivindicación 1.
ES04812920T 2003-12-05 2004-12-03 Arquitectura y procedimiento fft. Active ES2315735T3 (es)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US52719603P 2003-12-05 2003-12-05
US527196P 2003-12-05

Publications (1)

Publication Number Publication Date
ES2315735T3 true ES2315735T3 (es) 2009-04-01

Family

ID=34676710

Family Applications (1)

Application Number Title Priority Date Filing Date
ES04812920T Active ES2315735T3 (es) 2003-12-05 2004-12-03 Arquitectura y procedimiento fft.

Country Status (17)

Country Link
US (1) US7702712B2 (es)
EP (1) EP1690196B1 (es)
JP (1) JP2007513431A (es)
KR (1) KR20060096511A (es)
CN (1) CN1914607A (es)
AR (1) AR046869A1 (es)
AT (1) ATE412220T1 (es)
AU (1) AU2004297978A1 (es)
BR (1) BRPI0417222A (es)
CA (1) CA2547488A1 (es)
DE (1) DE602004017351D1 (es)
ES (1) ES2315735T3 (es)
IL (1) IL176050A0 (es)
MX (1) MXPA06006391A (es)
RU (1) RU2006123934A (es)
TW (1) TW200534121A (es)
WO (1) WO2005057423A2 (es)

Families Citing this family (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7430575B2 (en) * 2003-12-19 2008-09-30 Fujitsu Limited One-dimensional fourier transform program, method and apparatus
US7720162B2 (en) * 2005-03-10 2010-05-18 Qualcomm Incorporated Partial FFT processing and demodulation for a system with multiple subcarriers
US8266196B2 (en) * 2005-03-11 2012-09-11 Qualcomm Incorporated Fast Fourier transform twiddle multiplication
US8229014B2 (en) * 2005-03-11 2012-07-24 Qualcomm Incorporated Fast fourier transform processing in an OFDM system
WO2007066964A1 (en) * 2005-12-08 2007-06-14 Electronics And Telecommunications Research Institute Memory address generating method and twiddle factor generator using the same
KR100762281B1 (ko) * 2005-12-08 2007-10-01 한국전자통신연구원 고속 푸리에 변환 시스템의 메모리 주소 생성 방법 및 그를이용한 트위들 팩터 생성 장치
US7702713B2 (en) * 2006-03-24 2010-04-20 Debashis Goswami High speed FFT hardware architecture for an OFDM processor
US20070239815A1 (en) * 2006-04-04 2007-10-11 Qualcomm Incorporated Pipeline fft architecture and method
US20070266070A1 (en) * 2006-05-12 2007-11-15 Chung Hua University Split-radix FFT/IFFT processor
US8503545B2 (en) * 2006-08-31 2013-08-06 Advanced Micro Devices, Inc. I/Q imbalance compensation
KR100836624B1 (ko) * 2006-12-08 2008-06-10 한국전자통신연구원 가변 고속 푸리에 변환 장치 및 그 방법
US8738680B2 (en) 2008-03-28 2014-05-27 Qualcomm Incorporated Reuse engine with task list for fast fourier transform and method of using the same
US8959133B2 (en) * 2008-04-18 2015-02-17 Nxp, B.V. System and method for configurable mixed radix FFT architecture for multimode device
KR20110081971A (ko) * 2008-09-10 2011-07-15 코-오퍼레이티브 리서치 센터 포 어드밴스드 오토모티브 테크놀로지 리미티드 이산 푸리에 변환 계수의 행렬을 계산하는 방법 및 장치
CN101478785B (zh) * 2009-01-21 2010-08-04 华为技术有限公司 资源池管理系统及信号处理方法
CN102238348B (zh) * 2010-04-20 2014-02-05 上海华虹集成电路有限责任公司 一种可变数据个数的fft/ifft处理器的基4模块
TWI402695B (zh) * 2010-07-12 2013-07-21 Novatek Microelectronics Corp 分裂基數-2/8快速傅立葉轉換裝置及方法
CN102339272A (zh) * 2010-07-16 2012-02-01 联咏科技股份有限公司 分裂基数-2/8快速傅立叶转换装置及方法
US8819097B2 (en) * 2011-09-09 2014-08-26 Texas Instruments Incorporated Constant geometry split radix FFT
US8825729B1 (en) * 2011-09-19 2014-09-02 Altera Corporation Power and bandwidth efficient FFT for DDR memory
US9275013B2 (en) * 2012-03-16 2016-03-01 Qualcomm Incorporated System and method for analysis and reconstruction of variable pulse-width signals having low sampling rates
KR101335367B1 (ko) * 2012-04-26 2013-12-02 숭실대학교산학협력단 메모리 제어 장치 및 방법
US9275014B2 (en) 2013-03-13 2016-03-01 Qualcomm Incorporated Vector processing engines having programmable data path configurations for providing multi-mode radix-2x butterfly vector processing circuits, and related vector processors, systems, and methods
US9098449B2 (en) * 2013-03-15 2015-08-04 Analog Devices, Inc. FFT accelerator
US9311274B2 (en) * 2013-10-17 2016-04-12 Texas Instruments Incorporated Approach for significant improvement of FFT performance in microcontrollers
WO2018170400A1 (en) * 2017-03-16 2018-09-20 Jaber Technology Holdings Us Inc. Apparatus and methods of providing an efficient radix-r fast fourier transform
US10783216B2 (en) 2018-09-24 2020-09-22 Semiconductor Components Industries, Llc Methods and apparatus for in-place fast Fourier transform
CN109558638B (zh) * 2018-10-23 2023-03-24 清华大学 Fft处理器
US11221397B2 (en) * 2019-04-05 2022-01-11 Texas Instruments Incorporated Two-dimensional FFT computation
KR20200143030A (ko) 2019-06-14 2020-12-23 한국전자통신연구원 입력 신호의 특정 주파수 성분들을 분석하기 위한 고속 푸리에 변환 장치
CN115859003A (zh) * 2021-09-27 2023-03-28 华为技术有限公司 执行fft的方法、装置及设备

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS59189474A (ja) 1983-04-13 1984-10-27 Yokogawa Medical Syst Ltd 高速フ−リエ変換演算装置
JP3749022B2 (ja) * 1997-09-12 2006-02-22 シャープ株式会社 高速フーリエ変換を用いて短い待ち時間でアレイ処理を行う並列システム
US6088714A (en) * 1998-07-27 2000-07-11 Agilent Technologies Mechanism for calculating one-dimensional fast fourier transforms
US6839728B2 (en) * 1998-10-09 2005-01-04 Pts Corporation Efficient complex multiplication and fast fourier transform (FFT) implementation on the manarray architecture
US6609140B1 (en) * 1999-11-30 2003-08-19 Mercury Computer Systems, Inc. Methods and apparatus for fast fourier transforms
KR100481852B1 (ko) * 2002-07-22 2005-04-11 삼성전자주식회사 고속 푸리에 변환 장치

Also Published As

Publication number Publication date
ATE412220T1 (de) 2008-11-15
WO2005057423A2 (en) 2005-06-23
US20050182806A1 (en) 2005-08-18
AR046869A1 (es) 2005-12-28
RU2006123934A (ru) 2008-01-10
US7702712B2 (en) 2010-04-20
CN1914607A (zh) 2007-02-14
KR20060096511A (ko) 2006-09-11
JP2007513431A (ja) 2007-05-24
AU2004297978A1 (en) 2005-06-23
DE602004017351D1 (de) 2008-12-04
EP1690196B1 (en) 2008-10-22
WO2005057423A3 (en) 2006-06-01
CA2547488A1 (en) 2005-06-23
MXPA06006391A (es) 2006-08-23
EP1690196A2 (en) 2006-08-16
TW200534121A (en) 2005-10-16
IL176050A0 (en) 2006-10-05
BRPI0417222A (pt) 2007-02-21

Similar Documents

Publication Publication Date Title
ES2315735T3 (es) Arquitectura y procedimiento fft.
US7164723B2 (en) Modulation apparatus using mixed-radix fast fourier transform
KR101045713B1 (ko) 멀티―포트 혼합―라딕스 fft
JP2009535678A (ja) パイプラインfftのアーキテクチャおよび方法
US20050177608A1 (en) Fast Fourier transform processor and method using half-sized memory
US20080288569A1 (en) Pipelined fft processor with memory address interleaving
Chen et al. Continuous-flow parallel bit-reversal circuit for MDF and MDC FFT architectures
US7428564B2 (en) Pipelined FFT processor with memory address interleaving
US20170149589A1 (en) Fully parallel fast fourier transformer
CN101149730A (zh) 使用主要因素算法的最佳离散傅利叶转换方法及装置
US20100128818A1 (en) Fft processor
EP2144172A1 (en) Computation module to compute a multi radix butterfly to be used in DTF computation
JP5486226B2 (ja) ルリタニアマッピングを用いるpfaアルゴリズムに従って種々のサイズのdftを計算する装置及び方法
US6728742B1 (en) Data storage patterns for fast fourier transforms
EP2144173A1 (en) Hardware architecture to compute different sizes of DFT
US6460061B1 (en) 2-dimensional discrete cosine transform using a polynomial transform
US6631167B1 (en) Process and device for transforming real data into complex symbols, in particular for the reception of phase-modulated and amplitude-modulated carriers transmitted on a telephone line
Järvinen et al. Stride permutation networks for array processors
JPWO2011102291A1 (ja) 高速フーリエ変換回路
KR100602272B1 (ko) 고속으로 데이터를 처리하는 고속 퓨리에 변환 장치 및 방법
US8572148B1 (en) Data reorganizer for fourier transformation of parallel data streams
JPH06260890A (ja) 高分解能ディジタルフィルタおよびディジタルコードサンプル信号のろ波方法
Baek et al. A continuous flow mixed-radix FFT architecture with an in-place algorithm
CN106970895B (zh) 基于fpga的fft装置及方法
CN111291315A (zh) 一种数据处理方法、装置及设备