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