I could only test the algorithm with my hardware and until now nobody else posted results of some tests. So there is not much empirical data. I assumed thatIs the results what you expected?
the results are much better than with results of your test with the analog signal.
Regarding your questions about the resampling algorithm: First I want to mention that I wasn't involved in the developement of the algorithm.
You are probably aware of that, but I want to mention it in case somebody skims the thread and gets that impression.
In the introduction of the document, the authors write:
"The algorithm effectively implements the “analog interpretation” of rate conversion, as discussed in [1], in which a certain lowpass-filter impulse response must be available as a continuous function. Continuity of the impulse response is simulated by linearly interpolating between samples of the impulse response stored in a table."
In section 3.3 they further desribe the “analog interpretation”. If you stick to this interpretation, then there is no L and M factor. A new sample can be computed at arbitrary times t
by shifting the sinc filter to t, computation of the interpolation weights by evaluating the sinc-function and computing the linear combination of the input samples.
If you want to interpret the algorithm in the "standard" way, I can tell you at least what L is: The table with the lowpass-filter contains a densely sampled version of the filter.
L is the factor by which the lowpass-filter is more densely sampled than the input signal.
The algorithm first interpolates by a factor L and new samples are computed at arbitrary positions by linear interpolation of the signal.
At the Teensy implementation a Kaiser-windowed sinc-filter is used as lowpass-filter and the limiting factor is the size of the table that stores the coefficients of the filter.
L depends on the length of the filter. So I can't tell you a single number, but give you an examples of N:
Currently the size of the table is 20*1024 + 1 samples (MAX_FILTER_SAMPLES in resampler.h / only one wing of the filter is stored).
The default resampling parameters are:
attenuation=100
minHalfFilterLength=20
maxHalfFilterLength=80
Let's say the input frequency is 48kHz.
The lowpass-filter is designed as described here:
https://tomroelandts.com/articles/how-to-create-a-configurable-filter-using-a-kaiser-window
Parameter b is chosen in order to prevent aliasing frequencies below 20kHz.
This results in a filter length of 77 ( 2*input.getHalfFilterLength() +1).
N=floor(20*1024/38)=538
Last edited: