rresamp_cccf

Rational rate resampler, implemented as a polyphase filterbank

Variants: rresamp_cccf, rresamp_crcf, rresamp_rrrf

Public Functions

rresamp_cccf rresamp_cccf_create(unsigned int _interp, unsigned int _decim, unsigned int _m, float complex * _h)
rresamp_cccf rresamp_cccf_create_kaiser(unsigned int _interp, unsigned int _decim, unsigned int _m, float _bw, float _as)
rresamp_cccf rresamp_cccf_create_prototype(int _type, unsigned int _interp, unsigned int _decim, unsigned int _m, float _beta)
rresamp_cccf rresamp_cccf_create_default(unsigned int _interp, unsigned int _decim)
rresamp_cccf rresamp_cccf_copy(rresamp_cccf _q)
void rresamp_cccf_destroy(rresamp_cccf _q)
void rresamp_cccf_print(rresamp_cccf _q)
void rresamp_cccf_reset(rresamp_cccf _q)
void rresamp_cccf_set_scale(rresamp_cccf _q, float complex _scale)
void rresamp_cccf_get_scale(rresamp_cccf _q, float complex * _scale)
unsigned int rresamp_cccf_get_delay(rresamp_cccf _q)
unsigned int rresamp_cccf_get_P(rresamp_cccf _q)
unsigned int rresamp_cccf_get_interp(rresamp_cccf _q)
unsigned int rresamp_cccf_get_Q(rresamp_cccf _q)
unsigned int rresamp_cccf_get_decim(rresamp_cccf _q)
unsigned int rresamp_cccf_get_block_len(rresamp_cccf _q)
float rresamp_cccf_get_rate(rresamp_cccf _q)
void rresamp_cccf_write(rresamp_cccf _q, float complex * _buf)
void rresamp_cccf_execute(rresamp_cccf _q, float complex * _x, float complex * _y)
void rresamp_cccf_execute_block(rresamp_cccf _q, float complex * _x, unsigned int _n, float complex * _y)

Interfaces

rresamp_cccf rresamp_cccf_create(unsigned int _interp, unsigned int _decim, unsigned int _m, float complex * _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_cccf rresamp_cccf_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_cccf rresamp_cccf_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_cccf rresamp_cccf_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_cccf rresamp_cccf_copy(rresamp_cccf _q)

Copy object including all internal objects and state

void rresamp_cccf_destroy(rresamp_cccf _q)

Destroy resampler object, freeing all internal memory

void rresamp_cccf_print(rresamp_cccf _q)

Print resampler object internals to stdout

void rresamp_cccf_reset(rresamp_cccf _q)

Reset resampler object internals

void rresamp_cccf_set_scale(rresamp_cccf _q, float complex _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_cccf_get_scale(rresamp_cccf _q, float complex * _scale)

Get output scaling for filter

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

unsigned int rresamp_cccf_get_delay(rresamp_cccf _q)

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

unsigned int rresamp_cccf_get_P(rresamp_cccf _q)

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

unsigned int rresamp_cccf_get_interp(rresamp_cccf _q)

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

unsigned int rresamp_cccf_get_Q(rresamp_cccf _q)

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

unsigned int rresamp_cccf_get_decim(rresamp_cccf _q)

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

unsigned int rresamp_cccf_get_block_len(rresamp_cccf _q)

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

float rresamp_cccf_get_rate(rresamp_cccf _q)

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

void rresamp_cccf_write(rresamp_cccf _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_cccf_execute(rresamp_cccf _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_cccf_execute_block(rresamp_cccf _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)