Forums

FFT on an FPGA

Started by Raymond August 17, 2006
Hi there.

I am thinking about to use a Xilinx FPGA to take FFT on some data.

Xilinx provide a free FFT core that I most likely can use.

I need a windowing function (Like hamming) for that/a FFT function.
I have at the moment no idea of how to handle floatingpoints numbers in
an FPGA, further I have no ideas for any workarounds.

Does anyone have some Ideas/Solutions to that?

Raymond

Let's take a step back here... do you really need floating point?

"Raymond" <raybakk@yahoo.no> wrote in message
news:1155820374.552982.238560@i3g2000cwc.googlegroups.com...
> > Does anyone have some Ideas/Solutions to that?
Use fixed point. The core you mentioned is probably fixed point anyway. /Mikhail
>Hi there. > >I am thinking about to use a Xilinx FPGA to take FFT on some data. > >Xilinx provide a free FFT core that I most likely can use. > >I need a windowing function (Like hamming) for that/a FFT function. >I have at the moment no idea of how to handle floatingpoints numbers in >an FPGA, further I have no ideas for any workarounds. > >Does anyone have some Ideas/Solutions to that? > >Raymond > >
I suspect that the Xilinx core is fixed-point, and handles the data growth that happens during a FFT in some manner described in its documentation. If it doesn't, then don't use it. You could use a number representation such as Q1.15 that handles numbers in the range -1.0 to +1.0, and do scaling at each pass of the FFT. True floating-point on a FPGA is difficult. Cheers!
Raymond wrote:

> Hi there. > > I am thinking about to use a Xilinx FPGA to take FFT on some data. > > Xilinx provide a free FFT core that I most likely can use. > > I need a windowing function (Like hamming) for that/a FFT function. > I have at the moment no idea of how to handle floatingpoints numbers in > an FPGA, further I have no ideas for any workarounds. > > Does anyone have some Ideas/Solutions to that? > > Raymond >
The first thing you need to address is whether or not you really need floating point. Floating point requires quite a bit more complexity for dynamically managing the scaling. Unless your data has a very wide dynamic range, you may find that a fixed point implementation is suitable. If you really need floating point, there is floating point FFT IP out there, but not for free as far as I know. I've got, for example, a floating point FFT core for Virtex 4 that does IEEE single precision FFT sizes from 32 to 4096 points at 400MS/sec continuous. Three engines fit in a V4SX55 for a composite throughput of over 1GS/sec.
On Thu, 17 Aug 2006 11:04:44 -0500, "RCIngham"
<robert.ingham@smiths-aerospace.com> wrote:

>I suspect that the Xilinx core is fixed-point, and handles the data growth >that happens during a FFT in some manner described in its documentation. If >it doesn't, then don't use it.
It's fixed-point (vfft32 is, anyway). It does bit growth, but you have to handle the extra bits yourself.
>You could use a number representation such as Q1.15 that handles numbers >in the range -1.0 to +1.0, and do scaling at each pass of the FFT.
This is actually no better than an integer representation - if you start with Q1.15, then you have to extend to Q1.18, or whatever, after the first pass, and so on. Fixed-point FFTs are pretty useless. If you've got a small dynamic range in the input, then you'll have a large dynamic range in the output. Coding a floating-point adder and multiplier is probably a lot easier than understanding the limitations of a fixed-point FFT and using it effectively. Evan
The FFT core is not floatingpoint as far as I know.

I can input real data strait from an AD converter (witch is fixpoint in
nature). My problem is acually that I need a windowing function on top
of that. I think the windowing function multiply the data from an AD
converter with a variable that vary from 0 (in the beginning of the
datastream) to 1 (in the middle of it) to 0 again in the end, and that
ends up with a floatingpoint number.

Raymond

Raymond skrev:
> The FFT core is not floatingpoint as far as I know.
OBS I MENT FIXPOINT SORRY
> > I can input real data strait from an AD converter (witch is fixpoint in > nature). My problem is acually that I need a windowing function on top > of that. I think the windowing function multiply the data from an AD > converter with a variable that vary from 0 (in the beginning of the > datastream) to 1 (in the middle of it) to 0 again in the end, and that > ends up with a floatingpoint number. > > Raymond
Raymond wrote:
> The FFT core is not floatingpoint as far as I know. > > I can input real data strait from an AD converter (witch is fixpoint in > nature). My problem is acually that I need a windowing function on top > of that. I think the windowing function multiply the data from an AD > converter with a variable that vary from 0 (in the beginning of the > datastream) to 1 (in the middle of it) to 0 again in the end, and that > ends up with a floatingpoint number.
So you need a fixed-point windowing fucntion.
Raymond,
In what you are describing, it looks like you are actually doing a FIR
filter in the frequency domain.
So my question, why not using this FIR filter? It it far less complex
than a FFT, and the result will be the same. Even if it is a complex
window, you can use the Remez Exchange algo to work it out.

Regards,

Luc

On 17 Aug 2006 11:15:59 -0700, "Raymond" <raybakk@yahoo.no> wrote:

> >Raymond skrev: >> The FFT core is not floatingpoint as far as I know. >OBS I MENT FIXPOINT SORRY > >> >> I can input real data strait from an AD converter (witch is fixpoint in >> nature). My problem is acually that I need a windowing function on top >> of that. I think the windowing function multiply the data from an AD >> converter with a variable that vary from 0 (in the beginning of the >> datastream) to 1 (in the middle of it) to 0 again in the end, and that >> ends up with a floatingpoint number. >> >> Raymond