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
FFT on an FPGA
Started by ●August 17, 2006
Reply by ●August 17, 20062006-08-17
Reply by ●August 17, 20062006-08-17
"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
Reply by ●August 17, 20062006-08-17
>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!
Reply by ●August 17, 20062006-08-17
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.
Reply by ●August 17, 20062006-08-17
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
Reply by ●August 17, 20062006-08-17
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
Reply by ●August 17, 20062006-08-17
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
Reply by ●August 17, 20062006-08-17
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.
Reply by ●August 17, 20062006-08-17
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