Resampling

Sample rate conversion using a polyphase sinc resampler with Kaiser-windowed anti-aliasing filter.

pyminidsp.resample_output_len(input_len, in_rate, out_rate)[source]

Compute the number of output samples for a given resampling operation.

Compute the number of output samples for a given resampling operation. Use this to pre-allocate buffers when you need fine control over memory.

Parameters:
  • input_len (int) – Number of input samples.

  • in_rate (float) – Input sample rate in Hz.

  • out_rate (float) – Output sample rate in Hz.

Returns:

Number of output samples.

Return type:

int

pyminidsp.resample(signal, in_rate, out_rate, num_zero_crossings=13, kaiser_beta=5.0)[source]

Resample a signal using a polyphase sinc resampler with Kaiser-windowed anti-aliasing filter.

Parameters:
  • signal (ArrayLike) – Input signal.

  • in_rate (float) – Input sample rate in Hz.

  • out_rate (float) – Output sample rate in Hz.

  • num_zero_crossings (int) – Number of zero crossings in the sinc kernel (default 13).

  • kaiser_beta (float) – Kaiser window shape parameter (default 5.0).

Returns:

numpy array of resampled signal.

Return type:

ndarray[tuple[Any, …], dtype[float64]]

Resample a signal using a polyphase sinc resampler. Automatically computes the output buffer size and applies a Kaiser-windowed anti-aliasing filter to prevent aliasing during downsampling.

Parameters:
  • signal (ArrayLike) – Input signal.

  • in_rate (float) – Input sample rate in Hz.

  • out_rate (float) – Output sample rate in Hz.

  • num_zero_crossings (int) – Number of zero crossings in the sinc kernel (default 13).

  • kaiser_beta (float) – Kaiser window shape parameter (default 5.0).

Returns:

Resampled signal array.

Return type:

ndarray[tuple[Any, …], dtype[float64]]

# Upsample from 22050 Hz to 44100 Hz
signal = md.sine_wave(22050, freq=440.0, sample_rate=22050.0)
upsampled = md.resample(signal, in_rate=22050.0, out_rate=44100.0)
# len(upsampled) == 44100

# Downsample from 48000 Hz to 16000 Hz
signal = md.sine_wave(48000, freq=440.0, sample_rate=48000.0)
downsampled = md.resample(signal, in_rate=48000.0, out_rate=16000.0)