Fractional resampling

Hi,

having looked at the current codebase, I find two resamplers suitable
for interpolation rates close to 1: gr_fractional_interpolator and
gr_pfb_arb_resampler. I can see the latter is newer.
Here some questions:

  1. When would I use which one, or is gr_fractional_interpolator
    simply older? I can tell they use different approaches (MMSE vs.
    linear
    interpolation), but don’t really know what to do with this
    information :slight_smile:

  2. Concerning gr_fractional_interpolator: The first parameter, called
    phase_shift in the block definition and is later on referred to as
    ‘mu’, seems to be an initial fractional delay. For an infinite
    stream, why does this matter? It seems to be important, otherwise it
    would not be the first argument of the block constructor (or is this
    coincidence? If it’s pretty much irrelevant, why not make it second
    and then give it mu=0 as default value?)

  3. Concerning gr_pfb_arb_resampler (I hope I’ve understood the code
    correctly): This uses a PFB to get the sampling rate close to what we
    want, and then linearly interpolates. Isn’t this a bit inaccurate?
    I’m afraid I haven’t got Harris’ book right here, so I can’t check
    the reference, but perhaps someone who’s already used this resampler
    can share some experience?

Thanks a lot for any answers! They’ll be greatly appreciated.

Cheers,
MB

Karlsruhe Institute of Technology (KIT)
Communications Engineering Lab (CEL)

Dipl.-Ing. Martin B.
Research Associate

Kaiserstraße 12
Building 05.01
76131 Karlsruhe

Phone: +49 721 608-3790
Fax: +49 721 608-6071
www.cel.kit.edu

KIT – University of the State of Baden-Württemberg and
National Laboratory of the Helmholtz Association

On Fri, Oct 8, 2010 at 8:35 AM, Martin B. [email protected]
wrote:

information :slight_smile:
It’s largely that the fractional interpolator is older, at least for
the case you are talking about. For small (fractional, even) changes
in sample rate, this one worked fine, but it isn’t well-suited to
arbitrary rate changes. The PFB resampler allows pretty much any real
number as the resample rate, although I admit I haven’t tested an
upper bound.

  1. Concerning gr_fractional_interpolator: The first parameter, called
    phase_shift in the block definition and is later on referred to as
    ‘mu’, seems to be an initial fractional delay. For an infinite
    stream, why does this matter? It seems to be important, otherwise it
    would not be the first argument of the block constructor (or is this
    coincidence? If it’s pretty much irrelevant, why not make it second
    and then give it mu=0 as default value?)

I’m not sure who wrote this to begin with so I don’t know their take,
but I agree, it does seem like the less-important parameter. I know I
have used it, although I can’t remember where/why. Also, my guess is
that the use of it as mu in the code reflects the math behind the
approach.

  1. Concerning gr_pfb_arb_resampler (I hope I’ve understood the code
    correctly): This uses a PFB to get the sampling rate close to what we
    want, and then linearly interpolates. Isn’t this a bit inaccurate?
    I’m afraid I haven’t got Harris’ book right here, so I can’t check
    the reference, but perhaps someone who’s already used this resampler
    can share some experience?

Nope, it’s not inaccurate. You’re right that it would be if there
granulation weren’t so small. By defauly, the resampler uses 32
filters, but this is adjustable. However, when discussing this stuff
with fred harris, he told me he almost never uses any more than 32
himself. With this number, the quantization error is about as small as
you need; that is, it’s likely the noise in the system will dominate.

I’ve run experiments going to 64 and 128 filters for both this and the
PFB clock synchronizer (which in some ways is the same thing) and the
amount of increased fidelity is very small. Conversely, if you went
to, say, 16 filters, the signal starts to get noticeably worse.

So no, even though it’s doing linear interpolation, under the
conditions I mentioned, don’t think of it as being inaccurate.

Thanks a lot for any answers! They’ll be greatly appreciated.

Cheers,
MB

No problem.

Tom

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs