7
$\begingroup$

I would like to know if there's a standard way to obtain the FIR coefficients for a sampling frequency $F'$ when the coefficients are for a sampling frequency $F$.

I would like to implement the filter described in ITU R BS.1770-3 (the oversampling FIR filter, page 18). The filter coefficients are given for a sampling frequency of 48 kHz.

What would be the way to derive the coefficients for another sampling frequency?

Edit december 28 2012

I wonder if there's a meaning in my request. The described filter is used on a 48 kHz sampling frequency audio signal that has been transformed into a 192 kHz sampling frequency signal by stuffing 3 zeros between each original sample. It is the second step of an oversampling method. The signal $[x_0, x_1, ..., x_n]$ is first transformed into $[x_0, 0,0,0, x_1, 0,0,0, ...,x_n,0,0,0]$. The filter I have mentioned is applied on this zero-stuffed signal.

If I understand correctly (which might not be the case), the cut-off frequency of this low pass filter can be expressed relative to the sampling frequency. Given this context, and the desired result which is a sort of evaluation of the reconstruction of the audio signal into the analog domain, wouldn't this relative to sampling frequency cut-off frequency be appropriate for any sampling frequency ?

Let's say the cut-off frequency of the filter is $\alpha \times F_s$ ($\alpha$ should be around 0.125 for a 22 kHz analog upper bandwith ?), wouln't this $\alpha$ value be the good one for others sampling frequencies ? If I have an original signal at 8 kHz sampling frequency, a four time oversample would lead to a 32 kHz sampling frequency, and I can suppose that the reconstructed analog signal would have an upper bandwith limit at approximately 4 kHz ?

End of Edit december 28 2012

$\endgroup$
4
  • $\begingroup$ Hum ... coefs are real, if that is the question ... $\endgroup$
    – audionuma
    Commented Dec 23, 2012 at 20:26
  • $\begingroup$ If $F/F^\prime$ is a rational number $p/q$ with both $p$ and $q$ small, something might be do-able. For arbitrary value of $F/F^\prime$, forget it: just design a new filter instead of trying to derive it from the old. $\endgroup$ Commented Dec 24, 2012 at 19:49
  • $\begingroup$ Resampling a filter is equivalent to resampling a signal, so this thread should be useful. dsp.stackexchange.com/questions/6226/… $\endgroup$
    – Jim Clay
    Commented Dec 25, 2012 at 2:25
  • $\begingroup$ Thanks for suggestions. The option of resampling the filter seems interesting. I'll have a look at it. $\endgroup$
    – audionuma
    Commented Dec 27, 2012 at 9:00

2 Answers 2

5
+150
$\begingroup$

There is no direct way of converting filter coefficients between two sample rates while maintaining the exact transfer function (at least where it's properly defined). Re-sampling the impulse response can be done but will often result in extra latency, a longer filter, and some change in the frequency response.

In this case, however, you can derive the original filter specification from the filter coefficients and than re-design the filter using the same specification at a different sample rate. By visual inspection we can find that the ITU filter is an equiripple filter with

  • pass band edge: 20 kHz
  • stop band edge: 28 kHz
  • pass band ripple: 0.1dB
  • stop band attenuation: 40 dB

Let's say you want that filter at 4*44.1kHz instead of 4*48kHz. In Matlab you would do the following:

%% match the filter at 44.1 kHz
fs = 4*44100;
d = fdesign.lowpass('Fp,Fst,Ap,Ast',20000,28000,0.1,40,fs);
hd = design(d,'equiripple');
% convert to polyphase
h4 = 4*reshape(hd.Numerator',4,12)';

and the coefficients would be

    0.0057292     0.001552   -0.0015723   -0.0049864
   -0.0056096   -0.0017098    0.0050592    0.0099256
    0.0080942   -0.0011323    -0.012505    -0.017267
   -0.0093558    0.0088501     0.025828     0.027239
    0.0063161    -0.028386    -0.054115    -0.045155
     0.011432      0.10497      0.20287      0.26531
      0.26531      0.20287      0.10497     0.011432
    -0.045155    -0.054115    -0.028386    0.0063161
     0.027239     0.025828    0.0088501   -0.0093558
    -0.017267    -0.012505   -0.0011323    0.0080942
    0.0099256    0.0050592   -0.0017098   -0.0056096
   -0.0049864   -0.0015723     0.001552    0.0057292

However, there are a bunch of potential problems:

  1. In this case we simply lucked out that the number of coefficients for the new sample rate was 48 as well. In other cases you may have to adjust the stop band frequency to dial in the desired number of coefficients.
  2. This particular filter specification has been derived from the original sample rate, i.e. pass band and stop band are symmetrically spaced around the Nyquist frequency of 24 kHz. That is intentional. If your sample rate is different, you need to understand WHY it is different and whether the original specification is still appropriate. In the case of 44.1 kHz you may consider placing pass and stop band symmetrically around 22.050 kHz and maybe also consider lowering the pass band and/or increasing the number of coefficients.
$\endgroup$
1
  • $\begingroup$ Thanks Hilmar. Your explaination is very clear and qualifies as the answer to me. $\endgroup$
    – audionuma
    Commented Dec 28, 2012 at 21:43
0
$\begingroup$

As a complement to @hilmar answer, one can look at the source code of libebur128, where there's an implementation in C language of the mentioned BS.1770 oversampling process (see the interp_create function) that includes adapting the filter to various sampling frequencies.

$\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.