Wiki » History » Version 16
Chris Cannam, 2013-10-22 02:36 PM
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 | 12 | 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 (perhaps an elliptical filter?) with 8 coefficient pairs; |
12 | 1 | Chris Cannam | |
13 | 12 | Chris Cannam | * @decimate_b@: the "DecimatorB":http://code.soundsoftware.ac.uk/projects/qm-dsp/embedded/classDecimatorB.html class in the "qm-dsp":/projects/qm-dsp library, which uses a Butterworth IIR lowpass filter of order 6; |
14 | 12 | Chris Cannam | |
15 | 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; |
16 | 1 | Chris Cannam | |
17 | 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; |
18 | 1 | Chris Cannam | |
19 | 1 | Chris Cannam | * @zoh@: the sndfile-resample zero-order hold resampler, which just takes every Nth sample without any filtering, serving as a baseline. |
20 | 3 | Chris Cannam | |
21 | 3 | Chris Cannam | h2. Speed |
22 | 3 | Chris Cannam | |
23 | 15 | Chris Cannam | Input is 11520000 frames (two minutes at 96kHz sample rate). Listed kfps values correspond to 1000s of input frames. |
24 | 3 | Chris Cannam | |
25 | 16 | Chris Cannam | CPU is a Core 2 Quad Q9550 at 2.83GHz. 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 distro 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. |
26 | 1 | Chris Cannam | |
27 | 5 | Chris Cannam | The decimate implementation supports factors up to 8 only, so 16x, 32x and 64x are handled in two passes. |
28 | 13 | Chris Cannam | |
29 | 13 | Chris Cannam | All implementations use libsndfile for audio file I/O, so that should not be a factor in overall speed. |
30 | 14 | Chris Cannam | |
31 | 4 | Chris Cannam | h3. Implementations by decimation factor |
32 | 1 | Chris Cannam | |
33 | 14 | Chris Cannam | For 11520000 input frames. |
34 | 1 | Chris Cannam | |
35 | 14 | Chris Cannam | h4. Factor 02 |
36 | 1 | Chris Cannam | |
37 | 14 | Chris Cannam | |Kfps|Clock time|Implementation| |
38 | 14 | Chris Cannam | | 61604|0.187|zoh| |
39 | 14 | Chris Cannam | | 52602|0.219|decimate_b| |
40 | 14 | Chris Cannam | | 52363|0.220|decimate| |
41 | 14 | Chris Cannam | | 17668|0.652|resample_lq| |
42 | 14 | Chris Cannam | | 9365|1.230|resample_mq| |
43 | 14 | Chris Cannam | | 4768|2.416|resample_hq| |
44 | 14 | Chris Cannam | | 2176|5.294|src| |
45 | 1 | Chris Cannam | |
46 | 1 | Chris Cannam | |
47 | 14 | Chris Cannam | h4. Factor 04 |
48 | 1 | Chris Cannam | |
49 | 14 | Chris Cannam | |Kfps|Clock time|Implementation| |
50 | 14 | Chris Cannam | | 93658|0.123|zoh| |
51 | 14 | Chris Cannam | | 58181|0.198|decimate| |
52 | 14 | Chris Cannam | | 47213|0.244|decimate_b| |
53 | 14 | Chris Cannam | | 19896|0.579|resample_lq| |
54 | 14 | Chris Cannam | | 9982|1.154|resample_mq| |
55 | 14 | Chris Cannam | | 4965|2.320|resample_hq| |
56 | 14 | Chris Cannam | | 2292|5.026|src| |
57 | 1 | Chris Cannam | |
58 | 14 | Chris Cannam | |
59 | 14 | Chris Cannam | h4. Factor 08 |
60 | 14 | Chris Cannam | |
61 | 14 | Chris Cannam | |Kfps|Clock time|Implementation| |
62 | 14 | Chris Cannam | | 128000|0.090|zoh| |
63 | 14 | Chris Cannam | | 60952|0.189|decimate| |
64 | 14 | Chris Cannam | | 44651|0.258|decimate_b| |
65 | 14 | Chris Cannam | | 21215|0.543|resample_lq| |
66 | 14 | Chris Cannam | | 10331|1.115|resample_mq| |
67 | 14 | Chris Cannam | | 3480|3.310|resample_hq| |
68 | 14 | Chris Cannam | | 2361|4.879|src| |
69 | 14 | Chris Cannam | |
70 | 14 | Chris Cannam | |
71 | 1 | Chris Cannam | h4. Factor 16 |
72 | 1 | Chris Cannam | |
73 | 14 | Chris Cannam | |Kfps|Clock time|Implementation| |
74 | 14 | Chris Cannam | | 160000|0.072|zoh| |
75 | 14 | Chris Cannam | | 46080|0.250|decimate| |
76 | 14 | Chris Cannam | | 43636|0.264|decimate_b| |
77 | 14 | Chris Cannam | | 22068|0.522|resample_lq| |
78 | 14 | Chris Cannam | | 7700|1.496|resample_mq| |
79 | 14 | Chris Cannam | | 3529|3.264|resample_hq| |
80 | 14 | Chris Cannam | | 2119|5.435|src| |
81 | 1 | Chris Cannam | |
82 | 14 | Chris Cannam | |
83 | 1 | Chris Cannam | h4. Factor 32 |
84 | 1 | Chris Cannam | |
85 | 14 | Chris Cannam | |Kfps|Clock time|Implementation| |
86 | 14 | Chris Cannam | | 182857|0.063|zoh| |
87 | 14 | Chris Cannam | | 53333|0.216|decimate| |
88 | 14 | Chris Cannam | | 42825|0.269|decimate_b| |
89 | 14 | Chris Cannam | | 21021|0.548|resample_lq| |
90 | 14 | Chris Cannam | | 7379|1.561|resample_mq| |
91 | 14 | Chris Cannam | | 3443|3.345|resample_hq| |
92 | 14 | Chris Cannam | | 2179|5.286|src| |
93 | 4 | Chris Cannam | |
94 | 14 | Chris Cannam | |
95 | 4 | Chris Cannam | h4. Factor 64 |
96 | 4 | Chris Cannam | |
97 | 14 | Chris Cannam | |Kfps|Clock time|Implementation| |
98 | 14 | Chris Cannam | | 188852|0.061|zoh| |
99 | 14 | Chris Cannam | | 53581|0.215|decimate| |
100 | 14 | Chris Cannam | | 42666|0.270|decimate_b| |
101 | 14 | Chris Cannam | | 16202|0.711|resample_lq| |
102 | 14 | Chris Cannam | | 7417|1.553|resample_mq| |
103 | 14 | Chris Cannam | | 3489|3.301|resample_hq| |
104 | 14 | Chris Cannam | | 2423|4.753|src| |
105 | 12 | Chris Cannam | |
106 | 14 | Chris Cannam | |
107 | 12 | Chris Cannam | h3. Decimation factors by implementation |
108 | 12 | Chris Cannam | |
109 | 14 | Chris Cannam | For 11520000 input frames. |
110 | 14 | Chris Cannam | |
111 | 4 | Chris Cannam | h4. Implementation zoh |
112 | 4 | Chris Cannam | |
113 | 14 | Chris Cannam | |Kfps|Clock time|Factor| |
114 | 14 | Chris Cannam | | 188852|0.061|64| |
115 | 14 | Chris Cannam | | 182857|0.063|32| |
116 | 14 | Chris Cannam | | 160000|0.072|16| |
117 | 14 | Chris Cannam | | 128000|0.090|08| |
118 | 14 | Chris Cannam | | 93658|0.123|04| |
119 | 14 | Chris Cannam | | 61604|0.187|02| |
120 | 4 | Chris Cannam | |
121 | 14 | Chris Cannam | |
122 | 4 | Chris Cannam | h4. Implementation decimate |
123 | 4 | Chris Cannam | |
124 | 14 | Chris Cannam | |Kfps|Clock time|Factor| |
125 | 14 | Chris Cannam | | 60952|0.189|08| |
126 | 14 | Chris Cannam | | 58181|0.198|04| |
127 | 14 | Chris Cannam | | 53581|0.215|64| |
128 | 14 | Chris Cannam | | 53333|0.216|32| |
129 | 14 | Chris Cannam | | 52363|0.220|02| |
130 | 14 | Chris Cannam | | 46080|0.250|16| |
131 | 4 | Chris Cannam | |
132 | 14 | Chris Cannam | |
133 | 4 | Chris Cannam | h4. Implementation decimate_b |
134 | 4 | Chris Cannam | |
135 | 14 | Chris Cannam | |Kfps|Clock time|Factor| |
136 | 14 | Chris Cannam | | 52602|0.219|02| |
137 | 14 | Chris Cannam | | 47213|0.244|04| |
138 | 14 | Chris Cannam | | 44651|0.258|08| |
139 | 14 | Chris Cannam | | 43636|0.264|16| |
140 | 14 | Chris Cannam | | 42825|0.269|32| |
141 | 14 | Chris Cannam | | 42666|0.270|64| |
142 | 4 | Chris Cannam | |
143 | 14 | Chris Cannam | |
144 | 4 | Chris Cannam | h4. Implementation resample_hq |
145 | 4 | Chris Cannam | |
146 | 14 | Chris Cannam | |Kfps|Clock time|Factor| |
147 | 14 | Chris Cannam | | 4965|2.320|04| |
148 | 14 | Chris Cannam | | 4768|2.416|02| |
149 | 14 | Chris Cannam | | 3529|3.264|16| |
150 | 14 | Chris Cannam | | 3489|3.301|64| |
151 | 14 | Chris Cannam | | 3480|3.310|08| |
152 | 14 | Chris Cannam | | 3443|3.345|32| |
153 | 11 | Chris Cannam | |
154 | 14 | Chris Cannam | |
155 | 11 | Chris Cannam | h4. Implementation resample_mq |
156 | 11 | Chris Cannam | |
157 | 14 | Chris Cannam | |Kfps|Clock time|Factor| |
158 | 14 | Chris Cannam | | 10331|1.115|08| |
159 | 14 | Chris Cannam | | 9982|1.154|04| |
160 | 14 | Chris Cannam | | 9365|1.230|02| |
161 | 14 | Chris Cannam | | 7700|1.496|16| |
162 | 14 | Chris Cannam | | 7417|1.553|64| |
163 | 14 | Chris Cannam | | 7379|1.561|32| |
164 | 1 | Chris Cannam | |
165 | 14 | Chris Cannam | |
166 | 1 | Chris Cannam | h4. Implementation resample_lq |
167 | 1 | Chris Cannam | |
168 | 14 | Chris Cannam | |Kfps|Clock time|Factor| |
169 | 14 | Chris Cannam | | 22068|0.522|16| |
170 | 14 | Chris Cannam | | 21215|0.543|08| |
171 | 14 | Chris Cannam | | 21021|0.548|32| |
172 | 14 | Chris Cannam | | 19896|0.579|04| |
173 | 14 | Chris Cannam | | 17668|0.652|02| |
174 | 14 | Chris Cannam | | 16202|0.711|64| |
175 | 1 | Chris Cannam | |
176 | 14 | Chris Cannam | |
177 | 1 | Chris Cannam | h4. Implementation src |
178 | 1 | Chris Cannam | |
179 | 14 | Chris Cannam | |Kfps|Clock time|Factor| |
180 | 14 | Chris Cannam | | 2423|4.753|64| |
181 | 14 | Chris Cannam | | 2361|4.879|08| |
182 | 14 | Chris Cannam | | 2292|5.026|04| |
183 | 14 | Chris Cannam | | 2179|5.286|32| |
184 | 14 | Chris Cannam | | 2176|5.294|02| |
185 | 14 | Chris Cannam | | 2119|5.435|16| |
186 | 14 | Chris Cannam | |
187 | 14 | Chris Cannam | |
188 | 14 | Chris Cannam | |
189 | 14 | Chris Cannam | |
190 | 1 | Chris Cannam | |
191 | 1 | Chris Cannam | h3. Resampler filter lengths |
192 | 1 | Chris Cannam | |
193 | 1 | Chris Cannam | Filter lengths the qm-dsp Resamplers decided to use: |
194 | 1 | Chris Cannam | |
195 | 1 | Chris Cannam | |Factor|Length (hq)|Length (mq)|Length (lq)| |
196 | 1 | Chris Cannam | |2|643|291|119| |
197 | 1 | Chris Cannam | |4|1285|579|237| |
198 | 1 | Chris Cannam | |8|2567|1155|471| |
199 | 1 | Chris Cannam | |16|5131|2307|939| |
200 | 1 | Chris Cannam | |32|10261|4613|1877| |
201 | 1 | Chris Cannam | |64|20519|9223|3751| |