Hi fellow DSP enthusiasts,
I’m developing an open-source library for real-time audio sample rate conversion, and I’m looking for advice on how to best measure the quality of the resampler. The library is designed to be lightweight, easy to integrate (single header/source file), and fully dependency-free. I work at Unity Technologies (game engine), and we’re considering integrating the resampling algorithms from the library into the audio subsystem of our engine.
The library uses a mix of half-band, polyphase FIR filters for 2X up/downsampling, and banks of windowed sincs (Nuttall window) with cubic polynomial interpolation for fractional resampling. A notable feature is that it supports both push and pull workflows:
Key features include:
Request for help: I’m now at the stage where I need to fine-tune the filter parameters and decide on the kernel width for the sinc banks. To do this, I need a good method for evaluating the quality of the resampling algorithms.
I’ve found some useful metrics, including those mentioned in this DSP Stack Exchange post.
Here’s the list of the metrics:
I’m developing an open-source library for real-time audio sample rate conversion, and I’m looking for advice on how to best measure the quality of the resampler. The library is designed to be lightweight, easy to integrate (single header/source file), and fully dependency-free. I work at Unity Technologies (game engine), and we’re considering integrating the resampling algorithms from the library into the audio subsystem of our engine.
The library uses a mix of half-band, polyphase FIR filters for 2X up/downsampling, and banks of windowed sincs (Nuttall window) with cubic polynomial interpolation for fractional resampling. A notable feature is that it supports both push and pull workflows:
- Push mode: Converts incoming audio buffers and passes the resampled data to a consumer callback.
- Pull mode: Requests data from a producer callback, resamples it, and writes the converted data to a user-provided target buffer.
Key features include:
- Custom allocators (no internal malloc calls).
- Optional NEON and SSE optimizations.
- Multi-channel support.
- Sub-sample accurate latency reporting.
Request for help: I’m now at the stage where I need to fine-tune the filter parameters and decide on the kernel width for the sinc banks. To do this, I need a good method for evaluating the quality of the resampling algorithms.
I’ve found some useful metrics, including those mentioned in this DSP Stack Exchange post.
Here’s the list of the metrics:
- Passband amplitude distortion
- Passband phase distortion
- Passband width
- Stop band attenuation
- Transition bandwidth
- Harmonic distortion
- Intermodulation distortion
- Non-harmonic noise floor
- THD
Statistics: Posted by drbaloney — Sun Oct 13, 2024 11:09 pm — Replies 0 — Views 59