2
$\begingroup$

I' trying to implement a QPSK modulation/demodulation.

At one point I have to decimate my signal by 4 for an easier implementation. I've read everywhere that the best way to do it is to use a CIC filter followed by a decimator. So I've read some more and I decided to use the following:

  • CIC Filter Length: 2
  • CIC Filter Order: 5
  • CIC Filter Decimator: 2
  • CIC Filter Stages: 2

So basically what I do is:

  1. Filter the signal with a FIR filter and coefficients [1 5 10 10 5 1].
  2. Downsample by 2.
  3. Filter the signal with a FIR filter and coefficients [1 5 10 10 5 1].
  4. Downsample by 2.

My question is:

What is the benefits of a CIC Decimator compared to directly downsampling by 4 and thus disregarding 3 samples out of 4?

I simulated this in order to find what the difference in performance was. As you can see in the two figures below the CIC filter seems to have a strong degrading impact on the BER which makes me wonder why it is used.

QPSK Bit Error Rate with Downsampler QPSK Bit Error Rate with CIC Decimator

$\endgroup$

1 Answer 1

3
$\begingroup$

If you are only decimating by four, then a CIC filter is not the way to go. CIC filters have two advantages and one big disadvantage. The advantages are that they don't require any multipliers, just (large) adders, and they can efficiently decimate by really large factors. The no-multipliers advantage was a big deal years ago when multipliers were expensive and not always available, but they are cheap now. And since you are only decimating by a factor of 4, the ability to decimate by large factors does not help you either.

The one big disadvantage of CIC filters is that their frequency response is not flat in the pass-band, so designers usually put a FIR filter after the CIC filter whose primary purpose is to compensate for the CIC filter's non-flatness.

My advice would be to continue decimating with one or two FIR filters, though I would recommend using a better filter than [1 5 10 10 5 1]. Try using Matlab's fdatool or Matlab/Octave's "fir1" command to design a better filter.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.