Author Topic: fpga: most area-efficient way to filter & decimate a signal?  (Read 1039 times)

0 Members and 1 Guest are viewing this topic.

Offline mrf184Topic starter

  • Contributor
  • Posts: 22
  • Country: cn
fpga: most area-efficient way to filter & decimate a signal?
« on: August 13, 2018, 05:48:49 pm »
I want to demodulate all the FM stations simultaneously using an FPGA and SDR. For this I need to implement around 10 receivers each tuned to a different frequency.

The baseband signal coming in will be 20MSPS I and Q and will include all the stations.
In each receiver, the baseband signal is multiplied by the complex sinusoid to shift the desired channel to 0Hz. This will already take up all the multipliers in the FPGA, so any filtering afterwards can not use hardware multipliers. After the multiplication I need to filter and decimate the signal to +/-80kHz bandwidth and sample rate around 400ksps.

Normally I would use the polyphase convolution for something like this, since the decimation factor is high (50), but to do so a hard multiplier is needed since we aren't multiplying by constants anymore (the whole point of polyphase fir is so that you don't need a multiplier for every coefficient, which means the multipliers now are dealing with dynamic coefficients read from a rom). There aren't enough hardware multipliers remaining so this is ruled out.

Cascading many direct form FIR filters (each filter decimates by 2) helps somewhat, but since a sharp rolloff is needed the final filter still has to be of fairly high order (~64), which would consume quite some area. The filter should be as small as possible so the maximum number of receivers can be put in the FPGA.

IIR filters also seem a good option, but I'm not sure if the nonlinear phase over frequency will cause noticeable distortion with FM?

There are 16 total multipliers in the FPGA, but the frequency shifter requires complex multiplications so will take 4 multipliers. The multiplier will have to be multiplexed between the 10 receivers (using shift registers), so the multiplier will be running at 200MHz. The 12 remaining multipliers can implement 6 complex-valued polyphase filters, not quite enough.
 

Offline hamster_nz

  • Super Contributor
  • ***
  • Posts: 2803
  • Country: nz
Re: fpga: most area-efficient way to filter & decimate a signal?
« Reply #1 on: August 13, 2018, 07:24:29 pm »
Run at 200MHz and reuse the resouces ten tiimes.

You may need to decimate and filter in two stages. Once using a short parallel filter, and then a second time using a serial filter,  now that there are more cycles per sample.
Gaze not into the abyss, lest you become recognized as an abyss domain expert, and they expect you keep gazing into the damn thing.
 

Online langwadt

  • Super Contributor
  • ***
  • Posts: 4422
  • Country: dk
 

Offline ataradov

  • Super Contributor
  • ***
  • Posts: 11248
  • Country: us
    • Personal site
Re: fpga: most area-efficient way to filter & decimate a signal?
« Reply #3 on: August 13, 2018, 08:09:38 pm »
CIC is definitely the way to go. With optional short pre-emphasis FIR filter.
Alex
 

Offline kony

  • Regular Contributor
  • *
  • Posts: 242
  • Country: cz
Re: fpga: most area-efficient way to filter & decimate a signal?
« Reply #4 on: August 14, 2018, 08:34:36 pm »
Yeah, CIC decimation filter. No MAC needed, just adders. Just be aware of the baseband aliasing.
 


Share me

Digg  Facebook  SlashDot  Delicious  Technorati  Twitter  Google  Yahoo
Smf