05-06-2012, 05:15 PM
FFT/IFFT Block Floating Point Scaling
![Adobe Acrobat PDF .pdf](https://studentbank.in/images/attachtypes/pdf.gif)
Introduction
The Altera® FFT MegaCore® function uses block-floating-point (BFP)
arithmetic internally to perform calculations. BFP architecture is a
trade-off between fixed-point and full floating-point architecture.
Unlike an FFT block that uses floating point arithmetic, a
block-floating-point FFT block does not provide an input for exponents.
Internally, a complex value integer pair is represented with a single scale
factor that is typically shared among other complex value integer pairs.
After each stage of the FFT, the largest output value is detected and the
intermediate result is scaled to improve the precision. The exponent
records the number of left or right shifts used to perform the scaling. As
a result, the output magnitude relative to the input level is:
Block Floating Point
After every pass through a radix-2 or radix-4 engine in the FFT core, the
addition and multiplication operations cause the data bits width to grow.
In other words, the total data bits width from the FFT operation grows
proportionally to the number of passes. The number of passes of the
FFT/IFFT computation depends on the logarithm of the number of
points. Table 1 on page 3 shows the possible exponents for corresponding
bit growth.
Implementing
Scaling
The scaling algorithm is implemented as follows:
1. Determine the length of the resulting full scale dynamic range
storage register. To get the length, add the width of the data to the
number of times the data is shifted (the MAX value shown in
Table 1). For example, for a 16-bit data, 256-point Quad Output
FFT/IFFT, MAX = –11 and MIN = –3. The MAX value indicates 11
shifts to the left, so the resulting full scaled data width is 16 + 11, or
27 bits.
2. Map the output data to the appropriate location within the
expanded dynamic range register based upon the exponent value.
To continue the above example, the 16-bit output data [15..0] from
the FFT/IFFT is mapped to [26..11] for an exponent of –11, to [25..10]
for an exponent of –10, to [24..9] for an exponent of –9, and so on.