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 PDFInfo
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/14—Fourier, Walsh or analogous domain transformations, e.g. Laplace, Hilbert, Karhunen-Loeve, transforms
- G06F17/141—Discrete Fourier transforms
- G06F17/142—Fast 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.
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.
algoritmos.
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:
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}:
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°.
\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
\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].
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:
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á:
y para radix
4,
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:
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:
[0, N - 1], siendo su equivalencia en radianes:
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:
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
\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:
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
\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:
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á:
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.
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).
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
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.
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
\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
\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
\newpage
Aplicando el procedimiento de cálculo de las
microrrotaciones:
siendo \delta' el vector de
rotaciones adaptado que se ha calculado, y M = 8, se obtienen
los valores de
salida:
Se puede comprobar fácilmente que el ángulo que
se ha rotado el dato de entrada es:
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.
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.
puntos.
[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:
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:
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.
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)
| 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)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US20050216540A1 (en) * | 2004-03-25 | 2005-09-29 | Wen Kuei-Ann | Novel CORDIC circuit |
-
2007
- 2007-04-12 ES ES200700983A patent/ES2283236B2/es active Active
-
2008
- 2008-04-10 WO PCT/ES2008/000220 patent/WO2008125708A1/es not_active Ceased
Non-Patent Citations (4)
| 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 |