rresamp_crcf

Rational rate resampler, implemented as a polyphase filterbank

Variants: rresamp_cccf, rresamp_crcf, rresamp_rrrf

Public Functions

rresamp_crcf rresamp_crcf_create(unsigned int _interp, unsigned int _decim, unsigned int _m, float * _h)
rresamp_crcf rresamp_crcf_create_kaiser(unsigned int _interp, unsigned int _decim, unsigned int _m, float _bw, float _as)
rresamp_crcf rresamp_crcf_create_prototype(int _type, unsigned int _interp, unsigned int _decim, unsigned int _m, float _beta)
rresamp_crcf rresamp_crcf_create_default(unsigned int _interp, unsigned int _decim)
rresamp_crcf rresamp_crcf_copy(rresamp_crcf _q)
void rresamp_crcf_destroy(rresamp_crcf _q)
void rresamp_crcf_print(rresamp_crcf _q)
void rresamp_crcf_reset(rresamp_crcf _q)
void rresamp_crcf_set_scale(rresamp_crcf _q, float _scale)
void rresamp_crcf_get_scale(rresamp_crcf _q, float * _scale)
unsigned int rresamp_crcf_get_delay(rresamp_crcf _q)
unsigned int rresamp_crcf_get_P(rresamp_crcf _q)
unsigned int rresamp_crcf_get_interp(rresamp_crcf _q)
unsigned int rresamp_crcf_get_Q(rresamp_crcf _q)
unsigned int rresamp_crcf_get_decim(rresamp_crcf _q)
unsigned int rresamp_crcf_get_block_len(rresamp_crcf _q)
float rresamp_crcf_get_rate(rresamp_crcf _q)
void rresamp_crcf_write(rresamp_crcf _q, float complex * _buf)
void rresamp_crcf_execute(rresamp_crcf _q, float complex * _x, float complex * _y)
void rresamp_crcf_execute_block(rresamp_crcf _q, float complex * _x, unsigned int _n, float complex * _y)

Interfaces

rresamp_crcf rresamp_crcf_create(unsigned int _interp, unsigned int _decim, unsigned int _m, float * _h)

Create rational-rate resampler object from external coeffcients to resample at an exact rate \(P/Q\) = interp/decim. Note that to preserve the input filter coefficients, the greatest common divisor (gcd) is not removed internally from interp and decim when this method is called.

  • _interp : interpolation factor, 0 < _interp
  • _decim : decimation factor, 0 < _decim
  • _m : filter semi-length (delay), 0 < _m
  • _h : filter coefficients, shape: (2*_interp*_m, 1)

rresamp_crcf rresamp_crcf_create_kaiser(unsigned int _interp, unsigned int _decim, unsigned int _m, float _bw, float _as)

Create rational-rate resampler object from filter prototype to resample at an exact rate \(P/Q\) = interp/decim. Note that because the filter coefficients are computed internally here, the greatest common divisor (gcd) from _interp and _decim is internally removed to improve speed.

  • _interp : interpolation factor, 0 < _interp
  • _decim : decimation factor, 0 < _decim
  • _m : filter semi-length (delay), 0 < _m
  • _bw : filter bandwidth relative to sample rate, 0 < _bw <= 0.5
  • _as : filter stop-band attenuation [dB], 0 < _as

rresamp_crcf rresamp_crcf_create_prototype(int _type, unsigned int _interp, unsigned int _decim, unsigned int _m, float _beta)

Create rational-rate resampler object from filter prototype to resample at an exact rate \(P/Q\) = interp/decim. Note that because the filter coefficients are computed internally here, the greatest common divisor (gcd) from _interp and _decim is internally removed to improve speed.

  • _type :
  • _interp :
  • _decim :
  • _m :
  • _beta :

rresamp_crcf rresamp_crcf_create_default(unsigned int _interp, unsigned int _decim)

Create rational resampler object with a specified resampling rate of exactly interp/decim with default parameters. This is a simplified method to provide a basic resampler with a baseline set of parameters abstracting away some of the complexities with the filterbank design. The default parameters are m = 12 (filter semi-length), bw = 0.5 (filter bandwidth), and as = 60 dB (filter stop-band attenuation)

  • _interp : interpolation factor, 0 < _interp
  • _decim : decimation factor, 0 < _decim

rresamp_crcf rresamp_crcf_copy(rresamp_crcf _q)

Copy object including all internal objects and state

void rresamp_crcf_destroy(rresamp_crcf _q)

Destroy resampler object, freeing all internal memory

void rresamp_crcf_print(rresamp_crcf _q)

Print resampler object internals to stdout

void rresamp_crcf_reset(rresamp_crcf _q)

Reset resampler object internals

void rresamp_crcf_set_scale(rresamp_crcf _q, float _scale)

Set output scaling for filter, default: \( 2 w \sqrt{P/Q} \)

  • _q : resampler object
  • _scale : scaling factor to apply to each output sample

void rresamp_crcf_get_scale(rresamp_crcf _q, float * _scale)

Get output scaling for filter

  • _q : resampler object
  • _scale : scaling factor to apply to each output sample

unsigned int rresamp_crcf_get_delay(rresamp_crcf _q)

Get resampler delay (filter semi-length \(m\))

unsigned int rresamp_crcf_get_P(rresamp_crcf _q)

Get original interpolation factor when object was created, before removing greatest common divisor

unsigned int rresamp_crcf_get_interp(rresamp_crcf _q)

Get internal interpolation factor of resampler, \(P\), after removing greatest common divisor

unsigned int rresamp_crcf_get_Q(rresamp_crcf _q)

Get original decimation factor \(Q\) when object was created before removing greatest common divisor

unsigned int rresamp_crcf_get_decim(rresamp_crcf _q)

Get internal decimation factor of resampler, \(Q\), after removing greatest common divisor

unsigned int rresamp_crcf_get_block_len(rresamp_crcf _q)

Get block length (e.g. greatest common divisor) between original interpolation rate \(P\) and decimation rate \(Q\) values

float rresamp_crcf_get_rate(rresamp_crcf _q)

Get rate of resampler, \(r = P/Q\) = interp/decim

void rresamp_crcf_write(rresamp_crcf _q, float complex * _buf)

Write \(Q\) input samples (after removing greatest common divisor) into buffer, but do not compute output. This effectively updates the internal state of the resampler.

  • _q : resamp object
  • _buf : input sample array, shape: (decim, 1)

void rresamp_crcf_execute(rresamp_crcf _q, float complex * _x, float complex * _y)

Execute rational-rate resampler on a block of input samples and store the resulting samples in the output array. Note that the size of the input and output buffers correspond to the values of the interpolation and decimation rates (\(P\) and \(Q\), respectively) passed when the object was created, even if they share a common divisor. Internally the rational resampler reduces \(P\) and \(Q\) by their greatest commmon denominator to reduce processing; however sometimes it is convenient to create the object based on expected output/input block sizes. This expectation is preserved. So if an object is created with an interpolation rate \(P=80\) and a decimation rate \(Q=72\), the object will internally set \(P=10\) and \(Q=9\) (with a g.c.d of 8); however when "execute" is called the resampler will still expect an input buffer of 72 and an output buffer of 80.

  • _q : resamp object
  • _x : input sample array, shape: (decim, 1)
  • _y : output sample array, shape: (interp, 1)

void rresamp_crcf_execute_block(rresamp_crcf _q, float complex * _x, unsigned int _n, float complex * _y)

Execute on a block of samples

  • _q : resamp object
  • _x : input sample array, shape: (decim*n, 1)
  • _n : block size
  • _y : output sample array, shape: (interp*n, 1)