ES2283236B2 - Procedimiento y arquitectura sin memoria para el calculo de las rotaciones de la fft. - Google Patents

Procedimiento y arquitectura sin memoria para el calculo de las rotaciones de la fft. Download PDF

Info

Publication number
ES2283236B2
ES2283236B2 ES200700983A ES200700983A ES2283236B2 ES 2283236 B2 ES2283236 B2 ES 2283236B2 ES 200700983 A ES200700983 A ES 200700983A ES 200700983 A ES200700983 A ES 200700983A ES 2283236 B2 ES2283236 B2 ES 2283236B2
Authority
ES
Spain
Prior art keywords
fft
rotations
rotation
sqbullet
calculation
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
ES200700983A
Other languages
English (en)
Other versions
ES2283236A1 (es
Inventor
Mario Garrido Galvez
Jesus Grajal De La Fuente
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.)
Universidad Politecnica de Madrid
Original Assignee
Universidad Politecnica de Madrid
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 Universidad Politecnica de Madrid filed Critical Universidad Politecnica de Madrid
Priority to ES200700983A priority Critical patent/ES2283236B2/es
Publication of ES2283236A1 publication Critical patent/ES2283236A1/es
Application granted granted Critical
Publication of ES2283236B2 publication Critical patent/ES2283236B2/es
Priority to PCT/ES2008/000220 priority patent/WO2008125708A1/es
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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

Landscapes

  • Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Theoretical Computer Science (AREA)
  • Discrete Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Algebra (AREA)
  • Complex Calculations (AREA)
  • Image Processing (AREA)
  • Editing Of Facsimile Originals (AREA)

Abstract

Procedimiento y arquitectura sin memoria para el cálculo de las rotaciones de la FFT. Procedimiento y arquitectura que permiten calcular las rotaciones de cualquier FFT descompuesta según el algoritmo Cooley-Tukey, sin tener que recurrir a ningún dato previamente almacenado. Todos los ángulos de rotación que requieren las etapas de la FFT son generados a partir de un único contador para toda la FFT, y utilizando un sencillo circuito compuesto por sumadores y puertas lógicas. De esta forma se elimina la necesidad de almacenar datos relacionados con los ángulos de rotación, consiguiendo así una importante reducción en el área de la FFT, especialmente para FFTs de muchos puntos. Además, las rotaciones se calculan empleando una modificación del algoritmo CORDIC que permite simplificar los bloques de cálculo de las microrrotaciones. Finalmente, se presenta un sistema que utiliza únicamente dos restadores para compensar el escalado propio del algoritmo CORDIC.

Description

Procedimiento y arquitectura sin memoria para el cálculo de las rotaciones de la FFT.
Sector técnico
La invención que se describe se enmarca dentro del campo del procesado de señal, más en concreto en lo referente a la elaboración de algoritmos y el desarrollo de arquitecturas de circuito eficientes para llevar a cabo dichos
algoritmos.
Estado de la técnica
La transformada de Fourier es una de las operaciones fundamentales en el campo del procesado de señal, especialmente en análisis espectral. Para su aplicación en sistemas digitales se hace uso de la DFT (Discrete Fourier Transform), que permite realizar la transformada de Fourier sobre datos almacenados en un ordenador o muestreados mediante un conversor analógico-digital, y cuya fórmula es:
1
En la ecuación, el valor N indica el número de puntos sobre los que se calcula la DFT, x[n] son las muestras en el dominio del tiempo, k es una variable discreta que representa la frecuencia, y X[k] es la señal en el dominio de la frecuencia, que se define para los valores de k desde 0 a N - 1.
Con el objetivo de calcular la DFT de forma eficiente, el nombre FFT (Fast Fourier Transform) engloba un conjunto de algoritmos que reducen el número de operaciones requerido por la DFT. De todos ellos, el algoritmo de Cooley-Tukey [CT65] es el más utilizado. Éste se basa en descomponer la DFT en n = log_{r}N etapas de cálculo en cascada, donde r es el radix empleado en la descomposición. Por otra parte, la descomposición se puede realizar siguiendo distintos métodos. Los más comunes son el diezmado en tiempo (DIT) y el diezmado en frecuencia (DIF). De esta forma se consigue una reducción en el número de operaciones, que pasa de un orden O(N^{2}) en la DFT, a un orden O(Nlog_{r} N) en la FFT.
Cada una de las n etapas de la FFT se caracteriza por tener que calcular un conjunto de sumas, restas y rotaciones en el plano complejo. Las sumas y restas se realizan mediante elementos denominados mariposas, y las rotaciones complejas mediante rotadores.
Cada mariposa recibe r datos de entrada y ofrece r salidas que representan la FFT de r puntos de las entradas. Como la FFT de 2 puntos y la de 4 puntos se pueden realizar mediante rotaciones triviales (0°, 90°, 180° y 270º), lo más habitual es utilizar FFTs de radix 2 ó 4, ya que en otros casos es necesario incluir rotadores dentro de las mariposas para llevar a cabo las rotaciones no triviales que aparecen.
En cada etapa s de la FFT, s \in {1 . . . n}, se calculan N/r mariposas y N rotaciones. Sin embargo, en las arquitecturas de los circuitos de cálculo de la FFT, todas las mariposas se suelen calcular con un único circuito, aprovechando que los datos llegan de formas secuencial. Lo mismo ocurre con las rotaciones: un único rotador es suficiente para llevar a cabo todas las rotaciones de una etapa. De esta forma, se consigue un ahorro importante de componentes. Sin embargo, en el caso de las rotaciones es necesario conocer el ángulo de rotación (o algún dato relacionado con él) que hay que rotar cada una de las muestras que van llegando al rotador.
Existen dos métodos principales para la realización de las rotaciones de la FFT. El primero consiste en rotar el dato de entrada aplicando directamente la fórmula de una rotación, mediante el empleo de multiplicadores reales y sumadores. La otra opción, más utilizada por requerir en general menos recursos, es emplear el algoritmo CORDIC, propuesto por J. E. Volder [Vol59], y que se describe brevemente a continuación.
El algoritmo CORDIC se utiliza para calcular de forma eficiente operaciones matemáticas complicadas en sistemas digitales. Este algoritmo se basa en transformar estas operaciones en un conjunto de sumas y desplazamientos, que son fáciles de llevar a cabo en los circuitos digitales.
Si se utiliza para realizar rotaciones en el plano complejo, el algoritmo CORDIC descompone el ángulo de rotación, \theta, en una suma de ángulos, \alpha_{i}:
2
donde m y M son respectivamente los índices del primer y último ángulo considerado, \in es el error de la aproximación y
\alpha_{i} = \pmtg^{-1} (2^{-i})
Habitualmente m = 0 y, por lo tanto, el primer ángulo es \alpha_{0} = tg^{-1}(1) = 45°, lo que hace que el algoritmo sea válido para cualquier valor de \theta en el intervalo [-90º, 90°]. Cuando \theta se encuentra fuera de este intervalo se utilizan las rotaciones triviales de 180° y 90° para situarlo en él. De hecho, mediante estas rotaciones es posible dejar el ángulo restante de rotación, z, en el intervalo [-45°, 45°]. De acuerdo con esta idea, es posible prescindir de la rotación de 45° y considerar que la primera rotación del algoritmo CORDIC es para el caso m = 1, siendo \alpha_{1} = tg^{-1}(2^{-1})
\approx 26,5°.
La rotación del dato de entrada al rotador se lleva a cabo mediante una serie de etapas llamadas microrrotaciones, en cada una de las cuales se rota un ángulo a_{i} de acuerdo con las ecuaciones:
x_{i+1} = x_{i} - y_{i} \delta_{i} 2^{-i}
y_{i+i} = y_{i} + x_{i} \delta_{i} 2^{-i}
donde \delta_{i} indica el sentido de la microrrotación y se calcula de acuerdo con:
\delta_{i} = sign(z_{i})
z_{i+1} = z_{i} - \delta_{i} \cdot \alpha_{i}
siendo sign(\eta) = 1 si \eta \geq 0, y sign(\eta) = -1 si y \eta < 0. Como \delta_{i} \in {-1,1}, se realiza una rotación en cada una de las etapas, bien en sentido positivo o bien en sentido negativo. Ello da lugar a una ganancia constante en el rotador, que puede ser compensada, en caso de que sea necesario, simplemente multiplicando las muestras de salida por:
\vskip1.000000\baselineskip
3
\vskip1.000000\baselineskip
Para poder rotar adecuadamente cada uno de los datos de entrada al rotador se almacenan en una memoria los valores de los vectores de rotaciones; \delta, correspondientes a cada una de las rotaciones que debe realizar el rotador. Estos datos son leídos de la memoria secuencialmente de tal forma que cada dato de entrada al rotador sea rotado el ángulo de rotación correspondiente.
Cuando el número de rotaciones que realiza el rotador de una cierta etapa de la FFT es elevado, la memoria de rotaciones deberá almacenar una gran cantidad de datos, lo que repercute negativamente en el área y en la velocidad de la FFT. Este problema es análogo en el caso de emplear multiplicadores para calcular las rotaciones, puesto que deben ser almacenados los valores del seno y el coseno de los ángulos de rotación.
Ciertas investigaciones han conseguido reducir la memoria de rotaciones a log_{2}N [YCCO6], ó 0,5N [CP03]. Además, se han utilizado otros métodos de descomposición de la FFT (distintos al algoritmo de Cooley-Tukey) para reducir el número de rotaciones que hay que calcular, como ocurre en [ZH05], donde se emplea el método de descomposición en factores primos, el cual sólo es aplicable cuando el número de puntos de la FFT se puede representar como producto de factores primos entre sí.
Por el contrario, con el procedimiento y la arquitectura propuestos se consigue reemplazar las memorias de rotaciones de todas las etapas de la FFT por un sencillo circuito compuesto por un contador (único para toda la FFT), y unos pocos sumadores y puertas lógicas. Así, a partir del valor del contador se calculan las rotaciones de todas las etapas de la FFT aprovechando características comunes entre ellas. De esta forma, se consigue mejorar significativamente las prestaciones de la FFT, principalmente en cuanto a área. Además, la mejora es más significativa cuanto mayor sea el número de puntos de la FFT que se desea calcular, lo que hace que este procedimiento sea muy adecuado para el cálculo de FFTs de un elevado número de puntos.
Por otra parte, las rotaciones se calculan empleando una modificación del algoritmo CORDIC que permite simplificar los bloques de cálculo de las microrrotaciones respecto a otras opciones existentes [MGBS02, Hu92].
Descripción detallada de la invención
Esta invención presenta un procedimiento para el cálculo de las rotaciones de cualquier FFT descompuesta según el algoritmo Cooley-Tukey, y cuyo número de puntos, N, y radix, r, son ambos potencia de 2, con los siguientes
pasos:
\sqbullet
obtener las secuencias de ángulos de rotación de todas las etapas de la FFT,
\sqbullet
calcular las rotaciones correspondientes a cada una de las etapas de la FFT a partir de los ángulos de rotación generados,
donde a partir de un único contador se obtienen las secuencias de ángulos de rotación de todas las etapas de la FFT. Este procedimiento tiene la ventaja de que no es necesario recurrir a ningún dato previamente almacenado.
Para implementar el procedimiento se utiliza una arquitectura de circuito que comprende:
\sqbullet
un módulo de generación de ángulos que incluye un único contador (1) para toda la FFT, a partir del cual se obtienen los ángulos de rotación de todas las etapas de la FFT sin necesidad de recurrir a ningún dato almacenado previamente,
\sqbullet
un módulo de cálculo de las rotaciones para cada una de las etapas de la FFT. Como se verá posteriormente, las rotaciones de alguna de las etapas de la FFT pueden resultar triviales, en cuyo caso se puede prescindir del módulo de cálculo de las rotaciones de dicha etapa.
Como se explicó anteriormente, una FFT de N puntos puede ser dividida en n = log_{r}N etapas, donde r es el radix de la FFT. Asumiendo que tanto N como r son potencia de 2, la secuencia de ángulos (de longitud N) de cualquier etapa s de la FFT, s \in {1 ... n}, está formada por N/r^{s} secuencias iguales de longitud L = r^{s}.
La secuencia de ángulos depende del radix elegido en la descomposición de la FFT. Así, para radix 2, la secuencia de longitud L será:
4
y para radix 4,
5
Generalizando estas expresiones para cualquier valor de radix, la secuencia de ángulos se puede generar concatenando r subsecuencias:
0, p, 2p, ..., (r^{s-1} – 1)p
donde p = 0, 1, 2, ..., r - 1.
Para normalizar las secuencia de todas las etapas de la FFT al mínimo ángulo de rotación, \theta_{min}(rad) = 2\pi/N, los valores de las secuencias deben ser multiplicados por q = N/r^{s} o, lo que es lo mismo, desplazados log_{2}(q) bits:
6
La secuencia \theta_{s} contiene los ángulos de rotación, \theta, de la etapa s de la FFT, y cada ángulo de rotación \theta \in
[0, N - 1], siendo su equivalencia en radianes:
7
Desde el punto de vista digital, esta representación de \theta como un valor entre 0 y N - 1 resulta ventajosa por dos motivos. En primer lugar, el ángulo representado es exacto y el número de bits utilizado es mínimo; si el ángulo de rotación se representara en radianes siempre se cometería un error en la aproximación debido a que el número de bits es finito. Por otra parte, el valor N equivale a una vuelta de circunferencia completa, por lo que, como N es potencia de 2, multiplicar por 2\pi radianes se transforma en un desplazamiento de bits.
Considerando ahora que se dispone de un contador, para una etapa cualquiera, s, de la FFT, la generación de la secuencia de ángulos de rotación de dicha etapa, \theta_{s}, se realiza siguiendo los siguientes pasos:
\sqbullet
tomar los s \cdot log_{2}r bits menos significativos proporcionados por el contador,
\sqbullet
de los bits tomados, multiplicar los (s - 1) \cdot log_{2}r bits menos significativos por los log_{2}r más significativos, obteniendo así los valores de la secuencia a_{s}. Los bits más significativos se corresponden con el valor de p mientras que los menos significativos contarán de 0 a (r^{s-1} - 1).
\sqbullet
multiplicar el resultado por N/r_{s}, obteniendo así los valores de la secuencia \theta_{s}.
El método explicado sirve para generar tanto los ángulos de la descomposición DIT (Diezmado en tiempo) como los de la descomposición DIF (Diezmado en frecuencia), considerando que s = 1 es la etapa de entrada de la FFT en el caso de la descomposición DIT, y la etapa de salida en el caso DIF.
Para implementar la generación de ángulos se emplea el módulo de generación de ángulos representado en la figura 1. El módulo de generación de ángulos comprende, además del contador (1), los siguientes elementos:
\sqbullet
lógica combinacional (3), que opera sobre el valor del contador,
\sqbullet
un bloque acumulador (4) por cada etapa de la FFT, para el cálculo de las secuencia a_{s}.
Por otra parte, como se puede observar en la figura 2, cada bloque acumulador (4) comprende los siguientes elementos:
\sqbullet
un sumador (43), que permite ir actualizando los valores de la secuencia a_{s},
\sqbullet
un registro (45) que proporciona los valores de la secuencia a_{s},
\sqbullet
una puerta lógica (44) para el control del bloque acumulador.
El contador (1) es un contador binario que cuenta de 0 a N - 1 de forma periódica. Éste se considera dividido en s partes (2) de log_{2}r bits. Cada una de ellas contiene el valor p de una de las etapas, y se corresponde con la entrada (41) del bloque acumulador de dicha etapa. En concreto, el valor de p para una etapa s incluye los bits que van desde la posición (s - 1) \cdot log_{2}(r) + 1 a la s \cdot log_{2}r del contador, considerando que el bit menos significativo es el bit 1.
Según la estructura del bloque acumulador (4), el registro (45) se irá incrementando de acuerdo con el valor de p siempre que no se active la señal de control (42).
Por otra parte, los (s - 1) \cdot log_{2}r bits menos significativos del contador (1) realizan una cuenta cíclica desde 0 hasta (r^{s-1} - 1). Cuando la cuenta de estos bits vuelve a cero, se activa la señal de control (42) que hace que se ponga a cero el valor del registro (45), que va proporcionando los valores de la secuencia a_{s}.
Finalmente, los bloques de escalado (5) no incluyen ningún componente lógico. Ello se debe a que, al ser N y r potencias de 2, el factor de escalado q = N/r^{s} representa únicamente un desplazamiento fijo de bits, para lo cual sólo hay que ajustar el interconexionado de los bits con la etapa siguiente.
Así, la generación de las secuencias de ángulos de rotación \theta_{s} de todas las etapas de la FFT se lleva a cabo mediante un sencillo circuito que no requiere ningún tipo de memoria ni la realización de multiplicaciones. Además, sólo es necesario el empleo de un único contador para toda la FFT, a partir de cual se generan todas las secuencias de ángulos de rotación.
El siguiente paso del procedimiento descrito es el cálculo de las rotaciones correspondientes a cada una de las etapas de la FFT a partir de los ángulos de rotación generados. La forma de proceder es la misma para cada una de las etapas de la FFT, y se compone de los siguientes pasos:
\sqbullet
determinar si se deben realizar las rotaciones de 180° y 90º,
\sqbullet
calcular el vector de rotaciones, \delta,
\sqbullet
obtener el vector de rotaciones adaptado \delta',
\sqbullet
rotar el dato de entrada al rotador.
\newpage
En primer lugar, para cada ángulo de rotación \theta perteneciente a la secuencia \theta_{s} se determina si se deben realizar las rotaciones de 180° y 90° con el fin de situar el ángulo restante de rotación, z, en el intervalo de definición del algoritmo CORDIC. Nótese que como \theta(rad) = -2\pi\theta/N, las rotaciones deberán realizarse en sentido negativo.
El hecho de representar \theta como un valor entero, \theta \in [0, N - 1], siendo N potencia de 2, presenta la ventaja de que en la arquitectura del circuito resulta muy sencillo determinar las rotaciones de 180° y 90° que permiten situar el ángulo restante de rotación z en el intervalo [-45°, 45°]. Para ello únicamente hay que sumar al conjunto de los dos bits más significativos de \theta el siguiente bit más significativo. De esta forma, los dos bits resultantes de la operación indicarán respectivamente si se deben realizar las rotaciones de 180° y 90°. Además, z se obtiene directamente tomando todos los bits de \theta excepto los dos más significativos y considerando que el z está expresado en complemento a 2, y cambiado de signo respecto al ángulo en radianes.
A partir de z se determina el vector de rotaciones, \delta, de acuerdo con:
\delta_{i} = -sign(z_{i})
z_{i+1} = z_{i} + \delta_{i} \cdot \alpha_{i}
siendo sign(\eta) = 1 si \eta \geq 0, y sign(\eta) = -1 si \eta < 0. Este cálculo se realiza a partir de z_{0} = z en el caso de emplear la microrrotación de \alpha_{0} = 45° (m = 0); y a partir de z_{1} = z si se considera que la primera microrrotación es la de \alpha_{1} = tg^{-1}(2^{-1}) \approx 26,5°. El cambio de signo respecto al procedimiento habitual del CORDIC se debe únicamente a que, como se ha dicho anteriormente, la representación del ángulo en el intervalo [0, N - 1] tiene signo contrario a la representación del ángulo en radianes.
Las rotaciones de 180° se calculan fácilmente cambiando de signo las componentes real e imaginaria de los datos de entrada, y la de 90° con un cambio de signo e intercambiando dichas componentes.
Habitualmente, a partir de los valores de \delta, y una vez aplicadas las rotaciones de 180° y 90° sobre los datos de entrada al rotador, se procede a realizar las microrrotaciones de acuerdo con las ecuaciones:
x_{i+1} = x_{i} - y_{i}\delta_{i}2^{-i}
y_{i+1} = y_{i} + x_{i}\delta_{i}2^{-i}
Sin embargo, es posible modificar este procedimiento para reducir la complejidad del módulo de cálculo de las rotaciones. Con esta idea, se propone un paso en el que se obtiene el vector de rotaciones adaptado, \delta', a partir del vector de rotaciones, \delta, de la siguiente forma:
100
donde m es el índice correspondiente a la primera microrrotación y M el correspondiente a la última microrrotación.
Una vez obtenido el vector \delta', el cálculo de las microrrotaciones se realiza de la siguiente forma:
\vskip1.000000\baselineskip
8
\vskip1.000000\baselineskip
siendo a_{i} y b_{i} las entradas de la i-ésima etapa de microrrotación.
Las entradas a la primera etapa de microrrotación, a_{m} y b_{m}, valdrán:
101
siendo x_{IN} e y_{IN} respectivamente la parte real e imaginaria del dato sobre el que hay que realizar las microrrotaciones. Por otra parte, x_{OUT} e y_{OUT}, respectivamente la parte real e imaginaria del dato resultante de aplicar las microrrotaciones, valdrán:
\vskip1.000000\baselineskip
9
\vskip1.000000\baselineskip
El módulo de cálculo de las rotaciones de la FFT se representa en la figura 3 y se compone de los siguientes bloques:
\sqbullet
un generador del vector de rotaciones (6),
\sqbullet
un adaptador del vector de rotaciones (7),
\sqbullet
bloques de cálculo de las rotaciones de 180° y 90° (8),
\sqbullet
varios bloques de cálculo de las microrrotaciones (9).
El generador del vector de rotaciones (6) determina si hay que rotar 180° y/o 90° el dato de entrada al rotador y obtiene el vector de rotaciones, \delta, todo ello a partir del ángulo de rotación, \theta, que le llega del módulo de generación de ángulos.
A continuación, el adaptador del vector de rotaciones (7) calcula el vector de rotaciones adaptado, \delta', a partir del vector de rotaciones, \delta, de acuerdo con el procedimiento descrito. Desde el punto de vista digital, los valores de \delta_{i} y \delta'_{i}, se representan con un bit, que puede tomar el valor "0" ó "1", en lugar de los valores "-1" y "1" descritos en el procedimiento. Teniendo esto en cuenta, en la implementación de la arquitectura, el procedimiento se transforma en:
102
Los bloques de cálculo de las rotaciones de 180° y/o 90° (8) rotan el dato de entrada esos ángulos (en sentido negativo) en caso de que sea necesario, de acuerdo con el valor de \theta. La rotación de 180° se puede realizar cambiando de signo las componentes real e imaginaria del dato y la de 90° con un cambio de signo e intercambiando dichas componentes.
En la figura 4 se presenta el esquema del bloque de cálculo de las microrrotaciones (9). Las entradas (91) y (92) se corresponden respectivamente con los valores de a_{i} y b_{i} descritos en el procedimiento, mientras que el conmutador (93) está controlado por la señal \delta'_{i} (94). Después del conmutador, los datos son desplazados i posiciones (95). Como el valor es fijo para cada etapa de microrrotación, las señales están cableadas, lo que no constituye ningún elemento físico. Finalmente, el circuito se compone de un sumador (96) y de un restador (97).
Así, se consigue simplificar los bloques de cálculo de las microrrotaciones (9) siendo únicamente necesario un conmutador (93), un sumador (96), y un restador (97) en cada uno de ellos.
Como se dijo anteriormente, el dato rotado sale del circuito escalado por un factor constante y, por lo tanto, puede ser compensado. En el caso de m = 1 el factor de compensación será:
10
considerando que cos(tg^{-1}(2^{-i})) \approx 1, \foralli > M, que es una buena aproximación para M \geq 7. Así, teniendo en cuenta que:
K = 0.8588 \approx 0.8594 = 1 - 2^{-3} - 2^{-6}
la compensación del escalado se puede realizar exclusivamente empleando dos restadores.
Por lo tanto, en el caso de que el primer bloque de cálculo de las microrrotaciones sea el correspondiente a \alpha_{1} = tg^{-1}(2^{-1}), se puede añadir un módulo adicional de compensación del escalado que consiste en dos restadores.
Breve descripción de los dibujos
Figura 1: Esquema del módulo de generación de ángulos, que incluye un contador (1), lógica combinacional (3), bloques acumuladores (4) y bloques de escalado (5).
Figura 2: Esquema del bloque acumulador (4), que se compone de un sumador (43), un registro (45) y una puerta lógica (44).
Figura 3: Esquema del módulo de cálculo de las rotaciones, que incluye un generador del vector de rotaciones (6), un adaptador del vector de rotaciones (7), bloques de cálculo de las rotaciones de 180° y 90° (8) y bloques de cálculo de las microrrotaciones (9).
Figura 4: Esquema del bloque de cálculo de las microrrotaciones (9), que se compone de un conmutador (93), desplazadores (95), un sumador (96) y un restador (97).
Exposición de un modo de realización de la invención
A continuación se explica la invención para el caso en el que se calculen las rotaciones de una FFT de 8 puntos y radix 2. Como N = 8, el contador contará cíclicamente de 0 a 7, y se incrementará en cada ciclo de reloj. El número de etapas de la FFT considerada será n = log_{r}N = 3 y, por lo tanto, s \in {1, 2, 3}.
La siguiente tabla muestra la forma de obtener las secuencias de rotación \theta_{s} a partir de los valores que va tomando el contador.
\vskip1.000000\baselineskip
11
Las dos primeras columnas de la tabla indican el valor del contador en decimal y en binario respectivamente. Como estamos trabajando con radix 2, el valor de p_{1} se corresponde con el del bit menos significativo del contador, el de p_{2} con el siguiente, y el de p_{3} con el más significativo.
Para obtener la secuencia a_{3} se toma el valor de los dos bits menos significativos del contador y se multiplica por p_{3}; para obtener a_{2} se multiplica el bit menos significativo del contador por p_{2}; y a_{1} vale siempre cero, como debe ocurrir en todas las FFTs para s=1.
Por otra parte, \theta_{s} = q_{s} \cdot a_{s}, siendo q_{s} = N/r^{s}, por lo que q_{1} = 4, q_{2} = 2 y q_{3} = 1.
A partir de la tabla también se puede entender el funcionamiento de la arquitectura de circuito que lleva a cabo el procedimiento. Así, por ejemplo, la secuencia a_{3} empieza valiendo "0" y se incrementa con el valor de p_{3}. Cuando el contador llega a 4, como los dos bits menos significativos valen cero, la secuencia se resetea y a continuación se vuelve a incrementar con el valor de p_{3} hasta que el contador vuelve a 0, donde se resetea de nuevo la
secuencia.
Para entender el sistema de rotaciones tomaremos el caso en el que \theta = 3 = B' 011, que se corresponde con un ángulo en radianes:
\vskip1.000000\baselineskip
12
\vskip1.000000\baselineskip
Sumando a los dos bits más significativos de \theta, "01", el siguiente bit, "1", obtenemos el valor "10", por lo que habrá que realizar una rotación de 180°, que situará el ángulo restante en z = \pi/4.
\vskip1.000000\baselineskip
A partir de z se obtiene el vector de rotaciones que, en el caso de que m = 1 y M = 8 valdrá:
\delta = 1, 1, 1, -1, 1, -1, -1, 1
A continuación se calcula el vector de rotaciones adaptado de acuerdo con el procedimiento descrito:
\vskip1.000000\baselineskip
103
\vskip1.000000\baselineskip
dando como resultado:
\delta' = 1, -1, -1, 1, 1, 1, -1, 1, 1
\vskip1.000000\baselineskip
Considerando ahora que el dato de entrada al rotador es el número complejo 10+3j, se aplicará primero la rotación de 180°, con lo que las entradas a la primera etapa de microrrotación (para m = 1) serán:
\vskip1.000000\baselineskip
104
\newpage
Aplicando el procedimiento de cálculo de las microrrotaciones:
13
siendo \delta' el vector de rotaciones adaptado que se ha calculado, y M = 8, se obtienen los valores de salida:
105
Se puede comprobar fácilmente que el ángulo que se ha rotado el dato de entrada es:
14
Por otra parte, el módulo del dato de salida está escalado respecto al módulo del dato de entrada, y es posible compensarlo multiplicando la salida por K = 1- 2^{-3} - 2^{-6}. También es posible realizar la compensación del escalado a la entrada de la FFT o en cualquier punto intermedio de la FFT.
Para realizar la compensación se tomará el dato que hay que multiplicar por K, el mismo dato desplazado 3 bits y finalmente el dato desplazado 6 bits. A continuación se restarán del dato sin desplazar los valores desplazados. Así, como los desplazamientos de bits son fijos, únicamente hacen falta dos restadores para llevar a cabo la compensación del escalado.
Aplicación industrial
Debido a que la FFT es un algoritmo ampliamente utilizado en las tecnologías de la información y las comunicaciones, la invención presentada puede tener aplicación en numerosos sistemas de comunicaciones y de procesado de señal. En especial, la arquitectura propuesta resulta útil cuando se pretende construir FFTs en plataformas hardware, como pueden ser las FPGAs (Field Programmable Cate Array). Por otra parte, la invención aporta una gran ventaja respecto a otros diseños en aplicaciones donde es necesario calcular FFTs de un elevado número de
puntos.
Referencias
[CP03] Yun-Nan Chang and Keshab K. Parhi. An efficient pipelined FFT architecture. IEEE Transactions on Circuits and Systems II: Analog and Digital Signal Processing, 50:322-325, Jun 2003.
[CT65] J. W. Cooley and J. W Tukey. An algorithm for machine computation of complex fourier series. Math. Computation, 19:297-301, Apr. 1965.
[Hu92] Y. H. Hu. CORDIC-based VLSI Architectures for Digital Signal Processing. IEEE Signal Processing Magazine, 9, Jul 1992.
[MGBS02] K. Maharatna, E. Grass, S. Banerjee, and A. Sundar. CORDIC UNIT. Patente US 20060059215A1, 20.12. 2002.
[Vo159] J. E. Volder. The CORDIC trigonometric computing technique. IRE Trans. Electronic Computers, EC-8:330-334, Sep. 1959.
[YCC06] Cheng-Ying Yu, Sau-Gee Chen, and Jen-Chuan Chih. Efficient CORDIC Designs for Multi-Mode OFDM FFT. Proc. IEEE International Conference on Acoustics, Speech and Signal Processing, 3:1036-1039, May 2006.
[ZH05] Li Zou and Xiao Huang. 3780-point Discrete Fourier Transformation processor. Patente EP 1750206A1, 04.08. 2005.

Claims (8)

1. Procedimiento para el cálculo de las rotaciones de cualquier FFT descompuesta según el algoritmo Cooley-Tukey, y cuyo número de puntos, N, y radix, r, son ambos potencia de 2, con los siguientes pasos:
\sqbullet
obtener las secuencias de ángulos de rotación de cada una de las etapas de la FFT,
\sqbullet
calcular las rotaciones de cada una de las etapas de la FFT a partir de los ángulos de rotación generados,
caracterizado porque a partir de un único contador se obtienen las secuencias de ángulos de rotación de todas las etapas de la FFT, y para una etapa cualquiera, s, de la FFT, la generación de la secuencia de ángulos de rotación de dicha etapa, \theta_{s}, se realiza siguiendo los siguientes pasos:
\sqbullet
tomar los s \cdot log_{2}r bits menos significativos proporcionados por el contador,
\sqbullet
de los bits tomados, multiplicar los (s - 1) \cdot log_{2}r bits menos significativos por los log_{2}r más significativos, obteniendo así los valores de la secuencia a_{s},
\sqbullet
multiplicar el resultado por N/r^{s}, obteniendo así los valores de la secuencia \theta_{s}.
2. Procedimiento según la reivindicación 1, caracterizado porque para el cálculo de las rotaciones de cada una de las etapas de la FFT, se obtiene el vector de rotaciones adaptado, \delta', a partir del vector de rotaciones, \delta, de la siguiente forma:
106
donde m es el índice correspondiente a la primera microrrotación y M el correspondiente a la última microrrotación.
3. Procedimiento según las reivindicaciones 1 a 2, caracterizado porque para el cálculo de las rotaciones de cada una de las etapas de la FFT, el cálculo de las microrrotaciones se realiza de la siguiente forma:
15
16
siendo a_{i} y b_{i} las entradas de la i-esima etapa de microrrotación.
4. Arquitectura de circuito para implementar el procedimiento descrito en las reivindicaciones 1 a 3, caracterizada porque comprende:
\sqbullet
un módulo de generación de ángulos que incluye un único contador (1) para toda la FFT, a partir del cual se obtienen los ángulos de rotación de todas las etapas de la FFT sin necesidad de recurrir a ningún dato almacenado previamente;
\sqbullet
un módulo de cálculo de las rotaciones para cada una de las etapas de la FFT.
5. Arquitectura de circuito según la reivindicación 4, caracterizada porque el módulo de generación de ángulos comprende, además del contador (1), los siguientes elementos:
\sqbullet
lógica combinacional (3), que opera sobre el valor del contador,
\sqbullet
un bloque acumulador (4) por cada etapa de la FFT, para el cálculo de las secuencias a_{s}.
6. Arquitectura de circuito según las reivindicaciones 4 y 5, caracterizada porque, dentro del módulo de generación de ángulos, cada bloque acumulador (4) comprende los siguientes elementos:
\sqbullet
un sumador (43), que permite ir actualizando los valores de la secuencia a_{s},
\sqbullet
un registro (45) que proporciona los valores de la secuencia a_{s},
\sqbullet
una puerta lógica (44) para el control del bloque acumulador.
7. Arquitectura de circuito según las reivindicaciones 4 a 6, caracterizada porque el módulo de cálculo de las rotaciones de la FFT, comprende bloques de cálculo de las microrrotaciones (9) que consisten en un conmutador (93), un sumador (96), y un restador (97).
8. Arquitectura de circuito para el cálculo de las rotaciones de la FFT según las 5 reivindicaciones 4 a 7, caracterizada porque en el caso de que el primer bloque de cálculo de las microrrotaciones sea el correspondiente a \alpha_{1} = tg^{-1}(2^{-1}), se puede añadir un módulo adicional de compensación del escalado que consiste en dos restadores.
ES200700983A 2007-04-12 2007-04-12 Procedimiento y arquitectura sin memoria para el calculo de las rotaciones de la fft. Active ES2283236B2 (es)

Priority Applications (2)

Application Number Priority Date Filing Date Title
ES200700983A ES2283236B2 (es) 2007-04-12 2007-04-12 Procedimiento y arquitectura sin memoria para el calculo de las rotaciones de la fft.
PCT/ES2008/000220 WO2008125708A1 (es) 2007-04-12 2008-04-10 Procedimiento y arquitectura sin memoria para el cálculo de las rotaciones de la fft

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
ES200700983A ES2283236B2 (es) 2007-04-12 2007-04-12 Procedimiento y arquitectura sin memoria para el calculo de las rotaciones de la fft.

Publications (2)

Publication Number Publication Date
ES2283236A1 ES2283236A1 (es) 2007-10-16
ES2283236B2 true ES2283236B2 (es) 2008-03-16

Family

ID=38556505

Family Applications (1)

Application Number Title Priority Date Filing Date
ES200700983A Active ES2283236B2 (es) 2007-04-12 2007-04-12 Procedimiento y arquitectura sin memoria para el calculo de las rotaciones de la fft.

Country Status (2)

Country Link
ES (1) ES2283236B2 (es)
WO (1) WO2008125708A1 (es)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
SE539721C2 (en) * 2014-07-09 2017-11-07 Device and method for performing a Fourier transform on a three dimensional data set

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050216540A1 (en) * 2004-03-25 2005-09-29 Wen Kuei-Ann Novel CORDIC circuit

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
CHENG-YING YU; SAN-GEE CHEN; JEN-CHUAN CHIH. "Efficient CORDIC Designs for Multi-Mode OFDM FFT", Acoustics, Speech and Signal Processing, 2006. ICASSP 2006 Proceedings. 2006 IEEE International Conference on Volumen 3, 14-19 Mayo 2006 Páginas: III-III [en línea] [recuperado el 04.09.2007]. Recuperado de internet: <URL:http://ieeexplore.ieee.org/iel5/11024/34759/01660834. pdf?tp=&arnumber=1660834&isnumber=34759> *
DICK, C. "Computing the Discrete Fourier Transform on FPGA Based Systolic Arrays", Field-Programmable Gate Arrays, 1996. FPGA '96. Proceedings of the 1996 ACM Fourth International Symposium on 1996 Páginas: 129-135 [en línea] [recuperado el 04.09.2007]. Recuperado de internet: <URL:http://ieeexplore.ieee.org/iel5/9475/30061/01377297. pdf?tp=&arnumber=1377297&isnumber=30061> *
GROGINSKY, H.L.; WORKS, G.A. "{}A Pipeline Fast Fourier Transform", Computers, IEEE Transactions on Volumen C-19, Issue 11, Nov. 1970 Páginas: 1015-1019 [en línea] [recuperado el 04.09.2007]. Recuperado de internet: <URL:http://ieeexplore.ieee.org/iel5/12/35041/01671419. pdf?tp=&arnumber=1671419&isnumber=35041> *
SUNG, T.-Y. "Memory-efficient and high-speed split-radix FFT/ IFFT processor based on pipelined CORDIC rotations", Vision, Image and Signal Processing, IEE Proceedings-Volumen 153, Issue 4, Agosto 2006 Páginas: 405-410 [en línea] [recuperado el 04.09.2007]. Recuperado de internet: <URL:http://ieeexplore.ieee.org/iel5/2200/35271/01677109. pdf?tp=&arnumber=1677109&isnumber=35271> *

Also Published As

Publication number Publication date
WO2008125708A8 (es) 2008-12-31
WO2008125708A1 (es) 2008-10-23
ES2283236A1 (es) 2007-10-16

Similar Documents

Publication Publication Date Title
US11416638B2 (en) Configurable lattice cryptography processor for the quantum-secure internet of things and related techniques
US12476808B2 (en) Cryptographic processor device and data processing apparatus employing the same
US6081821A (en) Pipelined, high-precision fast fourier transform processor
Lakshmi et al. CORDIC architectures: A survey
KR0146334B1 (ko) Cordic 복소수 승산기
Li et al. MeNTT: A compact and efficient processing-in-memory number theoretic transform (NTT) accelerator
Maharatna et al. Virtually scaling-free adaptive CORDIC rotator
Mahdavi et al. Area–time–power efficient FFT architectures based on binary-signed-digit CORDIC
Garrido et al. Efficient memoryless CORDIC for FFT computation
ES2283236B2 (es) Procedimiento y arquitectura sin memoria para el calculo de las rotaciones de la fft.
Kulshreshtha et al. CORDIC-based high throughput sliding DFT architecture with reduced error-accumulation
Nguyen et al. High-speed ASIC implementation of tanh activation function based on the CORDIC algorithm
Takala et al. Butterfly unit supporting radix-4 and radix-2 FFT
Kaya et al. Optimized 4-parallel 1024-point MSC FFT
Bansal et al. Memory-efficient Radix-2 FFT processor using CORDIC algorithm
Malashri et al. Low power and memory efficient FFT architecture using modified CORDIC algorithm
Ananda Mohan Reverse Converters for the Moduli Set {2 n, 2 n-1-1, 2 n-1, 2 n+ 1-1}(n Even)
Wong et al. Hardware generation on trigonometric functions
Hazarika et al. Energy efficient VLSI architecture of real‐valued serial pipelined FFT
Baghaie et al. DHT algorithm based on encoding algebraic integers
Pitkänen et al. Low-power twiddle factor unit for FFT computation
Neji et al. Architecture and FPGA implementation of the CORDIC algorithm for fingerprints recognition systems
Rai et al. FPGA realization of scale-free CORDIC algorithm-based window functions
Kulshreshtha et al. Improved VLSI architecture for triangular windowed sliding DFT based on CORDIC algorithm
Jain et al. A new approach for high performance and efficient design of CORDIC processor

Legal Events

Date Code Title Description
EC2A Search report published

Date of ref document: 20071016

Kind code of ref document: A1

FG2A Definitive protection

Ref document number: 2283236B2

Country of ref document: ES