I am guessing this is a commonly encountered problem, but I am lost on how to really solve it.

I have FIR filter coefficients that are used to match the frequency response of data sampled at 3 kHz. I have 12 coefficients, which I would like to implement as a filter for data being sampled at 48 kHz, but I understand, I can't directly do this.

So far, I've tried this (MATLAB):

  1. Find roots of the 12 order polynomial (which are the zeros).
  2. Find the magnitude and angle of the zeros.
  3. Scale the magnitude(m) and angle(phi) by a factor of 3 kHz / 48 kHz.
  4. Construct new zeros by multiplying m .* exp(phi);
  5. Find the polynomial whose roots are the new zeros using poly.
  6. Coefficients of the new polynomial are the new filter?

However, I am not sure how sound this logic really is, or if there's something wrong here entirely. I also think I'm losing a lot of information to resolution.

Any pointers on how to go about this would be really helpful!

  • 3
    $\begingroup$ you can interpolate the existing filter coefficients according to the new sampling rate. $\endgroup$ – Fat32 Feb 15 '19 at 21:32
  • $\begingroup$ Thanks! Just noticed the comment. I used the resample function in matlab to interpolate up by a factor of 16... and it seems to work and there's a lot of ripple, but the filter is there, and intact... Just wondering: does this affect the stability of the filter in any way? $\endgroup$ – Aditya TB Feb 16 '19 at 16:21
  • 1
    $\begingroup$ it won't affect the stability of FIR filters. $\endgroup$ – Fat32 Feb 16 '19 at 18:25
  • $\begingroup$ The ripple will depend to some degree on the interpolation method used. $\endgroup$ – hotpaw2 Feb 16 '19 at 19:28

Your Answer

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

Browse other questions tagged or ask your own question.