I'm writing code for a 3x polyphase interpolator using a total of 9 coefficients. This is organized as 3 parallel FIR branches with 3-taps each that are summed at the 3x sampling rate.

The problem I have is the impulse response looks correct (I get my 9 filter coefficients as output) but when I use a real signal that is a smooth Gaussian area near the peak has 'digital noise'. I have confirmed by debug printouts the code is calculating what I want it to. It seems the combination of the input signal & the coefficients really does generate a non-monotonic output.

as reference I used the info at this site: [polyphase filter faq][1]

What am I missing? How do I avoid this? My coefficients are: [4066 6261 8133 9391 9834 9391 8133 6261 4066]

The inputs sample rate is 100Mh and the output is 300Mh. I choose the filter coefficients to have a bandwidth < 50Mh.

debug output

Adding followup information. I looked at the step response and it oscillated every 3 output samples. The output to a step should be the sum of the coefficients in a branch. I noticed the 3 coefficients of the 3 branches did not all add to the same value. By deduction, I changed the coefficient 6261 to 5878. Now the coefficients are: coeff = [4066 5878 8133 9391 9834 9391 8133 5878 4066] and the response is much better.

See new plot: changed coefficient

Thanks, Brian

  • 1
    $\begingroup$ Welcome to DSP.SE! It certainly does look wrong. If the input is a Gaussian, then the output should be smooth. To me it looks like you're outputting the data in the wrong order (1,3,2) instead of (1,2,3). But if that were the case, your impulse response would also be wrong. $\endgroup$
    – Peter K.
    Sep 3 '15 at 15:53
  • $\begingroup$ Definitely looks better. I'd suggest putting your edit in as an answer, and selecting that as the answer (if you're happy that it is). $\endgroup$
    – Peter K.
    Sep 3 '15 at 19:51

At Peter K's suggestion I am submitting my solution as the answer. In the poly phase filter the 9 coefficients were all symmetric about the center but gave poor ripple performance. When arranged in the format of a poly-phase filter the 3 coefficients in the 3 branches did not add up to the same value for all three branches. By making a slight edit to the 1 coefficient at +/-3 positons from the center all the branches added up to the same value and the results are as shown.

To get better performance then that shown I need to increase the # of coefficients to N=15 (wanting to keep N a multiple of L=3 and odd).



Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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