miniDSP
A small C library for audio DSP
Loading...
Searching...
No Matches
minidsp_resample.c File Reference

Polyphase sinc resampler for offline sample rate conversion. More...

#include "minidsp.h"
#include "minidsp_internal.h"

Go to the source code of this file.

Macros

#define RESAMPLE_NUM_PHASES   512
 Number of sub-phases in the polyphase filter table.

Functions

unsigned MD_resample_output_len (unsigned input_len, double in_rate, double out_rate)
 Compute the output buffer size needed for resampling.
unsigned MD_resample (const double *input, unsigned input_len, double *output, unsigned max_output_len, double in_rate, double out_rate, unsigned num_zero_crossings, double kaiser_beta)
 Resample a signal from one sample rate to another using polyphase sinc interpolation.

Detailed Description

Polyphase sinc resampler for offline sample rate conversion.

Definition in file minidsp_resample.c.

Macro Definition Documentation

◆ RESAMPLE_NUM_PHASES

#define RESAMPLE_NUM_PHASES   512

Number of sub-phases in the polyphase filter table.

Definition at line 10 of file minidsp_resample.c.

Function Documentation

◆ MD_resample()

unsigned MD_resample ( const double * input,
unsigned input_len,
double * output,
unsigned max_output_len,
double in_rate,
double out_rate,
unsigned num_zero_crossings,
double kaiser_beta )

Resample a signal from one sample rate to another using polyphase sinc interpolation.

Uses a fixed table of 512 sub-phases with linear interpolation and a Kaiser-windowed sinc anti-aliasing filter. Anti-aliasing cutoff is automatically set to \(\min(\mathrm{in\_rate}, \mathrm{out\_rate})/2\).

Parameters
inputInput signal of length input_len.
input_lenNumber of input samples (must be > 0).
outputOutput buffer (caller-allocated). Use MD_resample_output_len() to size it.
max_output_lenCapacity of output buffer. Must be >= MD_resample_output_len(input_len, in_rate, out_rate).
in_rateInput sample rate in Hz (must be > 0).
out_rateOutput sample rate in Hz (must be > 0).
num_zero_crossingsNumber of sinc zero-crossings per side. Higher = better quality. Typical: 32.
kaiser_betaKaiser window shape parameter. Typical: 10.0 for ~100 dB stopband.
Returns
Number of samples written to output.
double in[44100], out[48000];
MD_sine_wave(in, 44100, 1.0, 440.0, 44100.0);
unsigned n = MD_resample(in, 44100, out, 48000,
44100.0, 48000.0, 32, 10.0);
void MD_sine_wave(double *output, unsigned N, double amplitude, double freq, double sample_rate)
Generate a sine wave.
unsigned MD_resample(const double *input, unsigned input_len, double *output, unsigned max_output_len, double in_rate, double out_rate, unsigned num_zero_crossings, double kaiser_beta)
Resample a signal from one sample rate to another using polyphase sinc interpolation.

Definition at line 21 of file minidsp_resample.c.

◆ MD_resample_output_len()

unsigned MD_resample_output_len ( unsigned input_len,
double in_rate,
double out_rate )

Compute the output buffer size needed for resampling.

Returns \(\lceil \mathrm{input\_len} \times \mathrm{out\_rate} / \mathrm{in\_rate} \rceil\).

Parameters
input_lenNumber of input samples (must be > 0).
in_rateInput sample rate in Hz (must be > 0).
out_rateOutput sample rate in Hz (must be > 0).
Returns
Required output buffer length.
unsigned n = MD_resample_output_len(44100, 44100.0, 48000.0); // 48000
unsigned MD_resample_output_len(unsigned input_len, double in_rate, double out_rate)
Compute the output buffer size needed for resampling.

Definition at line 12 of file minidsp_resample.c.