Wiki » History » Version 11
Chris Cannam, 2013-10-22 08:16 AM
1 | 1 | Chris Cannam | h1. Summary of results |
---|---|---|---|
2 | 6 | Chris Cannam | |
3 | 6 | Chris Cannam | {{>toc}} |
4 | 1 | Chris Cannam | |
5 | 9 | Chris Cannam | h2. What we're looking at |
6 | 9 | Chris Cannam | |
7 | 9 | Chris Cannam | 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. |
8 | 9 | Chris Cannam | |
9 | 1 | Chris Cannam | We compared |
10 | 1 | Chris Cannam | |
11 | 10 | Chris Cannam | * @decimate@: the "Decimator":http://code.soundsoftware.ac.uk/projects/qm-dsp/embedded/classDecimator.html implementation in the "qm-dsp":/projects/qm-dsp library, which uses an IIR lowpass filter with 8 coefficient pairs; |
12 | 1 | Chris Cannam | |
13 | 2 | Chris Cannam | * @resample_hq@, @resample_mq@, @resample_lq@: the "Resampler":http://code.soundsoftware.ac.uk/projects/qm-dsp/embedded/classResampler.html implementation in the "qm-dsp":/projects/qm-dsp library, which uses a lengthy Kaiser-windowed sinc filter, at three different quality settings; |
14 | 1 | Chris Cannam | |
15 | 1 | Chris Cannam | * @src@: the sndfile-resample program which uses "libsamplerate":http://mega-nerd.com/SRC/, a well trusted resampler also using a Kaiser-windowed sinc implementation, at its default quality setting; |
16 | 1 | Chris Cannam | |
17 | 1 | Chris Cannam | * @zoh@: the sndfile-resample zero-order hold resampler, which just takes every Nth sample without any filtering, serving as a baseline. |
18 | 3 | Chris Cannam | |
19 | 3 | Chris Cannam | h2. Speed |
20 | 3 | Chris Cannam | |
21 | 4 | Chris Cannam | For 5292000 input frames on a Core i3-3229Y low-voltage CPU. (Frames-per-second values are for input frames.) |
22 | 3 | Chris Cannam | |
23 | 8 | Chris Cannam | 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. |
24 | 1 | Chris Cannam | |
25 | 5 | Chris Cannam | The decimate implementation supports factors up to 8 only, so 16x, 32x and 64x are handled in two passes. |
26 | 5 | Chris Cannam | |
27 | 4 | Chris Cannam | All implementations use libsndfile for audio file I/O, so that should not be a factor in overall speed. |
28 | 4 | Chris Cannam | |
29 | 4 | Chris Cannam | h3. Implementations by decimation factor |
30 | 4 | Chris Cannam | |
31 | 3 | Chris Cannam | h4. Factor 2 |
32 | 3 | Chris Cannam | |
33 | 3 | Chris Cannam | |Frames per second|Clock time|Implementation| |
34 | 3 | Chris Cannam | | 14225806|0.372|decimate| |
35 | 3 | Chris Cannam | | 8939189|0.592|zoh| |
36 | 3 | Chris Cannam | | 3732016|1.418|resample_lq| |
37 | 3 | Chris Cannam | | 1856842|2.850|resample_mq| |
38 | 1 | Chris Cannam | | 989158|5.350|resample_hq| |
39 | 3 | Chris Cannam | | 516141|10.253|src| |
40 | 4 | Chris Cannam | |
41 | 1 | Chris Cannam | h4. Factor 4 |
42 | 4 | Chris Cannam | |
43 | 4 | Chris Cannam | |Frames per second|Clock time|Implementation| |
44 | 4 | Chris Cannam | |17070967|0.310|zoh| |
45 | 4 | Chris Cannam | |14659279|0.361|decimate| |
46 | 4 | Chris Cannam | | 4285020|1.235|resample_lq| |
47 | 4 | Chris Cannam | | 2186776|2.420|resample_mq| |
48 | 4 | Chris Cannam | | 1056287|5.010|resample_hq| |
49 | 4 | Chris Cannam | | 610099|8.674|src| |
50 | 4 | Chris Cannam | |
51 | 1 | Chris Cannam | h4. Factor 8 |
52 | 4 | Chris Cannam | |
53 | 4 | Chris Cannam | |Frames per second|Clock time|Implementation| |
54 | 4 | Chris Cannam | |26328358|0.201|zoh| |
55 | 4 | Chris Cannam | |13926315|0.380|decimate| |
56 | 4 | Chris Cannam | | 4895467|1.081|resample_lq| |
57 | 4 | Chris Cannam | | 2470588|2.142|resample_mq| |
58 | 4 | Chris Cannam | | 1166409|4.537|resample_hq| |
59 | 4 | Chris Cannam | | 614919|8.606|src| |
60 | 4 | Chris Cannam | |
61 | 1 | Chris Cannam | h4. Factor 16 |
62 | 4 | Chris Cannam | |
63 | 4 | Chris Cannam | |Frames per second|Clock time|Implementation| |
64 | 4 | Chris Cannam | |33493670|0.158|zoh| |
65 | 4 | Chris Cannam | |12721153|0.416|decimate| |
66 | 4 | Chris Cannam | | 5093358|1.039|resample_lq| |
67 | 4 | Chris Cannam | | 2515209|2.104|resample_mq| |
68 | 4 | Chris Cannam | | 1182041|4.477|resample_hq| |
69 | 4 | Chris Cannam | | 668857|7.912|src| |
70 | 4 | Chris Cannam | |
71 | 1 | Chris Cannam | h4. Factor 32 |
72 | 4 | Chris Cannam | |
73 | 4 | Chris Cannam | |Frames per second|Clock time|Implementation| |
74 | 4 | Chris Cannam | |41669291|0.127|zoh| |
75 | 4 | Chris Cannam | |14498630|0.365|decimate| |
76 | 4 | Chris Cannam | | 5318592|0.995|resample_lq| |
77 | 4 | Chris Cannam | | 2312937|2.288|resample_mq| |
78 | 4 | Chris Cannam | | 1148936|4.606|resample_hq| |
79 | 4 | Chris Cannam | | 670467|7.893|src| |
80 | 4 | Chris Cannam | |
81 | 1 | Chris Cannam | h4. Factor 64 |
82 | 4 | Chris Cannam | |
83 | 4 | Chris Cannam | |Frames per second|Clock time|Implementation| |
84 | 4 | Chris Cannam | |42000000|0.126|zoh| |
85 | 4 | Chris Cannam | |13397468|0.395|decimate| |
86 | 4 | Chris Cannam | | 5040000|1.050|resample_lq| |
87 | 4 | Chris Cannam | | 2365668|2.237|resample_mq| |
88 | 4 | Chris Cannam | | 1232704|4.293|resample_hq| |
89 | 1 | Chris Cannam | | 636057|8.320|src| |
90 | 5 | Chris Cannam | |
91 | 5 | Chris Cannam | h3. Decimation factors by implementation |
92 | 4 | Chris Cannam | |
93 | 4 | Chris Cannam | h4. Implementation zoh |
94 | 4 | Chris Cannam | |
95 | 4 | Chris Cannam | |Frames per second|Clock time|Factor| |
96 | 4 | Chris Cannam | |42000000|0.126|factor 64| |
97 | 4 | Chris Cannam | |41669291|0.127|factor 32| |
98 | 4 | Chris Cannam | |33493670|0.158|factor 16| |
99 | 4 | Chris Cannam | |26328358|0.201|factor 8| |
100 | 4 | Chris Cannam | |17070967|0.310|factor 4| |
101 | 4 | Chris Cannam | | 8939189|0.592|factor 2| |
102 | 4 | Chris Cannam | |
103 | 4 | Chris Cannam | h4. Implementation decimate |
104 | 4 | Chris Cannam | |
105 | 4 | Chris Cannam | |Frames per second|Clock time|Factor| |
106 | 4 | Chris Cannam | |14659279|0.361|factor 4| |
107 | 4 | Chris Cannam | |14498630|0.365|factor 32| |
108 | 4 | Chris Cannam | |14225806|0.372|factor 2| |
109 | 4 | Chris Cannam | |13926315|0.380|factor 8| |
110 | 4 | Chris Cannam | |13397468|0.395|factor 64| |
111 | 4 | Chris Cannam | |12721153|0.416|factor 16| |
112 | 4 | Chris Cannam | |
113 | 4 | Chris Cannam | h4. Implementation resample_hq |
114 | 4 | Chris Cannam | |
115 | 4 | Chris Cannam | |Frames per second|Clock time|Factor| |
116 | 4 | Chris Cannam | | 1232704|4.293|factor 64| |
117 | 4 | Chris Cannam | | 1182041|4.477|factor 16| |
118 | 4 | Chris Cannam | | 1166409|4.537|factor 8| |
119 | 4 | Chris Cannam | | 1148936|4.606|factor 32| |
120 | 4 | Chris Cannam | | 1056287|5.010|factor 4| |
121 | 4 | Chris Cannam | | 989158|5.350|factor 2| |
122 | 4 | Chris Cannam | |
123 | 4 | Chris Cannam | h4. Implementation resample_mq |
124 | 4 | Chris Cannam | |
125 | 4 | Chris Cannam | |Frames per second|Clock time|Factor| |
126 | 4 | Chris Cannam | | 2515209|2.104|factor 16| |
127 | 4 | Chris Cannam | | 2470588|2.142|factor 8| |
128 | 4 | Chris Cannam | | 2365668|2.237|factor 64| |
129 | 4 | Chris Cannam | | 2312937|2.288|factor 32| |
130 | 4 | Chris Cannam | | 2186776|2.420|factor 4| |
131 | 4 | Chris Cannam | | 1856842|2.850|factor 2| |
132 | 4 | Chris Cannam | |
133 | 4 | Chris Cannam | h4. Implementation resample_lq |
134 | 4 | Chris Cannam | |
135 | 4 | Chris Cannam | |Frames per second|Clock time|Factor| |
136 | 4 | Chris Cannam | | 5318592|0.995|factor 32| |
137 | 4 | Chris Cannam | | 5093358|1.039|factor 16| |
138 | 4 | Chris Cannam | | 5040000|1.050|factor 64| |
139 | 4 | Chris Cannam | | 4895467|1.081|factor 8| |
140 | 4 | Chris Cannam | | 4285020|1.235|factor 4| |
141 | 4 | Chris Cannam | | 3732016|1.418|factor 2| |
142 | 4 | Chris Cannam | |
143 | 4 | Chris Cannam | h4. Implementation src |
144 | 4 | Chris Cannam | |
145 | 4 | Chris Cannam | |Frames per second|Clock time|Factor| |
146 | 4 | Chris Cannam | | 670467|7.893|factor 32| |
147 | 4 | Chris Cannam | | 668857|7.912|factor 16| |
148 | 4 | Chris Cannam | | 636057|8.320|factor 64| |
149 | 4 | Chris Cannam | | 614919|8.606|factor 8| |
150 | 4 | Chris Cannam | | 610099|8.674|factor 4| |
151 | 4 | Chris Cannam | | 516141|10.253|factor 2| |
152 | 11 | Chris Cannam | |
153 | 11 | Chris Cannam | h3. Resampler filter lengths |
154 | 11 | Chris Cannam | |
155 | 11 | Chris Cannam | Filter lengths the qm-dsp Resamplers decided to use: |
156 | 11 | Chris Cannam | |
157 | 11 | Chris Cannam | |Factor|Length (hq)|Length (mq)|Length (lq)| |
158 | 11 | Chris Cannam | |2|643|291|119| |
159 | 11 | Chris Cannam | |4|1285|579|237| |
160 | 11 | Chris Cannam | |8|2567|1155|471| |
161 | 11 | Chris Cannam | |16|5131|2307|939| |
162 | 11 | Chris Cannam | |32|10261|4613|1877| |
163 | 11 | Chris Cannam | |64|20519|9223|3751| |