« Previous -
Version 14/22
(diff) -
Next » -
Current version
Chris Cannam, 2013-10-22 02:34 PM
Summary of results¶
What we're looking at¶
Here we're only looking at causal methods, so no forward/backward filtering. The question in my head is really whether faster IIR filters are still so much faster as to be worth using in preference to linear-phase methods with better (?) theoretical quality. Of course that would always depend on the application, but it's interesting to compare.
We compared
decimate
: the Decimator implementation in the qm-dsp library, which uses an IIR lowpass filter (perhaps an elliptical filter?) with 8 coefficient pairs;
decimate_b
: the DecimatorB class in the qm-dsp library, which uses a Butterworth IIR lowpass filter of order 6;
resample_hq
, resample_mq
, resample_lq
: the Resampler implementation in the qm-dsp library, which uses a lengthy Kaiser-windowed sinc filter, at three different quality settings;
src
: the sndfile-resample program which uses libsamplerate, a well trusted resampler also using a Kaiser-windowed sinc implementation, at its default quality setting;
zoh
: the sndfile-resample zero-order hold resampler, which just takes every Nth sample without any filtering, serving as a baseline.
Speed¶
For 5292000 input frames on a Core i3-3229Y low-voltage CPU. (Frames-per-second values are for input frames.)
All code is 64-bit. The qm-dsp implementations (resample_* and decimate) were compiled with -O3 -ffast-math while the libsamplerate implementations (src and zoh) were standard Ubuntu packages, so probably -O2. This is likely to make a very significant difference, so these results are more useful for comparison among the qm-dsp implementations than between qm-dsp and libsamplerate.
The decimate implementation supports factors up to 8 only, so 16x, 32x and 64x are handled in two passes.
All implementations use libsndfile for audio file I/O, so that should not be a factor in overall speed.
These frames-per-second figures look terribly precise, but I imagine there's a good 10% margin of error (run to run or whatever).
Implementations by decimation factor¶
For 11520000 input frames.
Factor 02¶
Kfps |
Clock time |
Implementation |
61604 |
0.187 |
zoh |
52602 |
0.219 |
decimate_b |
52363 |
0.220 |
decimate |
17668 |
0.652 |
resample_lq |
9365 |
1.230 |
resample_mq |
4768 |
2.416 |
resample_hq |
2176 |
5.294 |
src |
Factor 04¶
Kfps |
Clock time |
Implementation |
93658 |
0.123 |
zoh |
58181 |
0.198 |
decimate |
47213 |
0.244 |
decimate_b |
19896 |
0.579 |
resample_lq |
9982 |
1.154 |
resample_mq |
4965 |
2.320 |
resample_hq |
2292 |
5.026 |
src |
Factor 08¶
Kfps |
Clock time |
Implementation |
128000 |
0.090 |
zoh |
60952 |
0.189 |
decimate |
44651 |
0.258 |
decimate_b |
21215 |
0.543 |
resample_lq |
10331 |
1.115 |
resample_mq |
3480 |
3.310 |
resample_hq |
2361 |
4.879 |
src |
Factor 16¶
Kfps |
Clock time |
Implementation |
160000 |
0.072 |
zoh |
46080 |
0.250 |
decimate |
43636 |
0.264 |
decimate_b |
22068 |
0.522 |
resample_lq |
7700 |
1.496 |
resample_mq |
3529 |
3.264 |
resample_hq |
2119 |
5.435 |
src |
Factor 32¶
Kfps |
Clock time |
Implementation |
182857 |
0.063 |
zoh |
53333 |
0.216 |
decimate |
42825 |
0.269 |
decimate_b |
21021 |
0.548 |
resample_lq |
7379 |
1.561 |
resample_mq |
3443 |
3.345 |
resample_hq |
2179 |
5.286 |
src |
Factor 64¶
Kfps |
Clock time |
Implementation |
188852 |
0.061 |
zoh |
53581 |
0.215 |
decimate |
42666 |
0.270 |
decimate_b |
16202 |
0.711 |
resample_lq |
7417 |
1.553 |
resample_mq |
3489 |
3.301 |
resample_hq |
2423 |
4.753 |
src |
Decimation factors by implementation¶
For 11520000 input frames.
Implementation zoh¶
Kfps |
Clock time |
Factor |
188852 |
0.061 |
64 |
182857 |
0.063 |
32 |
160000 |
0.072 |
16 |
128000 |
0.090 |
08 |
93658 |
0.123 |
04 |
61604 |
0.187 |
02 |
Implementation decimate¶
Kfps |
Clock time |
Factor |
60952 |
0.189 |
08 |
58181 |
0.198 |
04 |
53581 |
0.215 |
64 |
53333 |
0.216 |
32 |
52363 |
0.220 |
02 |
46080 |
0.250 |
16 |
Implementation decimate_b¶
Kfps |
Clock time |
Factor |
52602 |
0.219 |
02 |
47213 |
0.244 |
04 |
44651 |
0.258 |
08 |
43636 |
0.264 |
16 |
42825 |
0.269 |
32 |
42666 |
0.270 |
64 |
Implementation resample_hq¶
Kfps |
Clock time |
Factor |
4965 |
2.320 |
04 |
4768 |
2.416 |
02 |
3529 |
3.264 |
16 |
3489 |
3.301 |
64 |
3480 |
3.310 |
08 |
3443 |
3.345 |
32 |
Implementation resample_mq¶
Kfps |
Clock time |
Factor |
10331 |
1.115 |
08 |
9982 |
1.154 |
04 |
9365 |
1.230 |
02 |
7700 |
1.496 |
16 |
7417 |
1.553 |
64 |
7379 |
1.561 |
32 |
Implementation resample_lq¶
Kfps |
Clock time |
Factor |
22068 |
0.522 |
16 |
21215 |
0.543 |
08 |
21021 |
0.548 |
32 |
19896 |
0.579 |
04 |
17668 |
0.652 |
02 |
16202 |
0.711 |
64 |
Implementation src¶
Kfps |
Clock time |
Factor |
2423 |
4.753 |
64 |
2361 |
4.879 |
08 |
2292 |
5.026 |
04 |
2179 |
5.286 |
32 |
2176 |
5.294 |
02 |
2119 |
5.435 |
16 |
Resampler filter lengths¶
Filter lengths the qm-dsp Resamplers decided to use:
Factor |
Length (hq) |
Length (mq) |
Length (lq) |
2 |
643 |
291 |
119 |
4 |
1285 |
579 |
237 |
8 |
2567 |
1155 |
471 |
16 |
5131 |
2307 |
939 |
32 |
10261 |
4613 |
1877 |
64 |
20519 |
9223 |
3751 |
zoh-wave.png
55.8 KB, downloaded 74 times
Chris Cannam, 2013-10-22 04:31 PM
zoh-spec.png
991 KB, downloaded 91 times
Chris Cannam, 2013-10-22 04:32 PM
decimate-wave.png
59.9 KB, downloaded 69 times
Chris Cannam, 2013-10-22 04:32 PM
decimate-spec.png
1000 KB, downloaded 63 times
Chris Cannam, 2013-10-22 04:32 PM
decimate-b-wave.png
54.8 KB, downloaded 69 times
Chris Cannam, 2013-10-22 04:32 PM
decimate-b-spec.png
696 KB, downloaded 97 times
Chris Cannam, 2013-10-22 04:32 PM
resample-hq-wave.png
51.4 KB, downloaded 61 times
Chris Cannam, 2013-10-22 04:33 PM
resample-hq-spec.png
480 KB, downloaded 71 times
Chris Cannam, 2013-10-22 04:33 PM
resample-mq-wave.png
50.6 KB, downloaded 49 times
Chris Cannam, 2013-10-22 04:33 PM
resample-mq-spec.png
510 KB, downloaded 47 times
Chris Cannam, 2013-10-22 04:33 PM
resample-lq-wave.png
52 KB, downloaded 49 times
Chris Cannam, 2013-10-22 04:34 PM
resample-lq-spec.png
888 KB, downloaded 51 times
Chris Cannam, 2013-10-22 04:34 PM
src-wave.png
47.8 KB, downloaded 56 times
Chris Cannam, 2013-10-22 04:34 PM
src-spec.png
472 KB, downloaded 62 times
Chris Cannam, 2013-10-22 04:34 PM