annotate examples/puredata/xtract/mfcc.pd @ 96:757e6f99dcd7

Dan Stowell: Removed strange "zeroing" part of xtract_mfcc() which was zeroing a load of elements despite the fact that they're ignored by the DCT process called next, and never used for anything. This was writing to an assumed large result array (same size as number of FFT bins) despite the fact that only a small number of MFCCs (typically less than 50) are required, therefore either wasting memory or writing to memory it shouldn't do!
author Dan Stowell <danstowell@gmail.com>
date Wed, 03 Oct 2007 13:43:16 +0000
parents 1222cd753029
children
rev   line source
jamie@62 1 #N canvas 737 25 578 583 10;
jamie@62 2 #N canvas 116 214 598 221 guts 0;
jamie@25 3 #X obj 318 37 loadbang;
jamie@25 4 #X obj 318 64 f \$0;
jamie@25 5 #N canvas 0 0 450 300 dacs 0;
jamie@25 6 #X obj 164 152 a_output~;
jamie@25 7 #X msg 251 100 0;
jamie@25 8 #X obj 249 59 r \$0-master-lvl-stereo;
jamie@25 9 #X obj 251 81 r \$0-master-lvl-mute;
jamie@25 10 #X obj 251 120 s \$0-master-lvl-stereo;
jamie@25 11 #X obj 174 110 inlet~;
jamie@25 12 #X connect 1 0 0 2;
jamie@25 13 #X connect 1 0 4 0;
jamie@25 14 #X connect 2 0 0 2;
jamie@25 15 #X connect 3 0 1 0;
jamie@25 16 #X connect 5 0 0 0;
jamie@25 17 #X connect 5 0 0 1;
jamie@25 18 #X restore 85 126 pd dacs;
jamie@25 19 #X obj 16 24 r \$0-fund;
jamie@25 20 #X msg 318 88 \; pd dsp 1 \; \$1-master-lvl-stereo 60 \; \$1-window-gen
jamie@25 21 bang \; \$1-mfcc xticks 0 5 5 \; \$1-mfcc yticks 0 50 1 \; \$1-mfcc
jamie@25 22 xlabel -120 0 5 10 15 20;
jamie@25 23 #N canvas 308 141 679 510 paf 0;
jamie@25 24 #X obj 331 95 / 10;
jamie@25 25 #X obj 331 120 pack 0 50;
jamie@25 26 #X obj 139 412 fexpr~ $x1 * $x2;
jamie@25 27 #X obj 241 188 cos~;
jamie@25 28 #X obj 241 166 expr~ ($v1 * 0.5) - 0.25;
jamie@25 29 #X obj 380 197 *~ 256;
jamie@25 30 #X obj 462 209 line~;
jamie@25 31 #X obj 462 189 pack 0 50;
jamie@25 32 #X obj 289 194 *~;
jamie@25 33 #X obj 282 216 +~ 256;
jamie@25 34 #X obj 118 328 cos~;
jamie@25 35 #X obj 118 305 *~;
jamie@25 36 #X obj 161 328 cos~;
jamie@25 37 #X obj 161 305 +~;
jamie@25 38 #X obj 154 358 -~;
jamie@25 39 #X obj 174 390 *~;
jamie@25 40 #X obj 136 390 +~;
jamie@25 41 #X obj 230 291 wrap~;
jamie@25 42 #X obj 199 291 -~;
jamie@25 43 #X obj 199 259 samphold~;
jamie@25 44 #X obj 331 142 line~;
jamie@25 45 #X obj 138 438 outlet~;
jamie@25 46 #X obj 462 167 inlet bandwidth;
jamie@25 47 #X obj 47 121 phasor~;
jamie@25 48 #X obj 48 100 line~;
jamie@25 49 #X msg 47 78 \$1 20;
jamie@25 50 #X obj 48 57 inlet fund;
jamie@25 51 #X obj 331 73 inlet cf;
jamie@25 52 #X obj 282 316 tabread4~ \$0-hann;
jamie@25 53 #X obj 466 426 table \$0-hann;
jamie@27 54 #N canvas 0 0 450 300 hann 0;
jamie@27 55 #X obj 136 98 samplerate~;
jamie@27 56 #X obj 139 166 phasor~;
jamie@27 57 #X msg 225 96 0;
jamie@27 58 #X obj 139 195 expr~ 0.5 - cos($v1 * 6.28) * 0.5;
jamie@27 59 #X obj 114 51 t b b b b;
jamie@27 60 #X obj 114 23 inlet;
jamie@27 61 #X obj 261 117 s \$0-hann;
jamie@27 62 #X obj 139 220 tabwrite~ \$0-hann;
jamie@27 63 #X msg 259 93 resize 512;
jamie@27 64 #X obj 136 120 /~ 512;
jamie@27 65 #X connect 0 0 9 0;
jamie@27 66 #X connect 1 0 3 0;
jamie@27 67 #X connect 2 0 1 1;
jamie@27 68 #X connect 3 0 7 0;
jamie@27 69 #X connect 4 0 7 0;
jamie@27 70 #X connect 4 1 2 0;
jamie@27 71 #X connect 4 2 0 0;
jamie@27 72 #X connect 4 3 8 0;
jamie@27 73 #X connect 5 0 4 0;
jamie@27 74 #X connect 8 0 6 0;
jamie@27 75 #X connect 9 0 1 0;
jamie@27 76 #X restore 466 390 pd hann;
jamie@27 77 #X obj 466 362 r \$0-window-gen;
jamie@25 78 #X connect 0 0 1 0;
jamie@25 79 #X connect 1 0 20 0;
jamie@25 80 #X connect 2 0 21 0;
jamie@25 81 #X connect 3 0 8 0;
jamie@25 82 #X connect 4 0 3 0;
jamie@25 83 #X connect 5 0 8 1;
jamie@25 84 #X connect 6 0 5 0;
jamie@25 85 #X connect 7 0 6 0;
jamie@25 86 #X connect 8 0 9 0;
jamie@25 87 #X connect 9 0 28 0;
jamie@25 88 #X connect 10 0 14 1;
jamie@25 89 #X connect 10 0 16 0;
jamie@25 90 #X connect 11 0 13 0;
jamie@25 91 #X connect 11 0 10 0;
jamie@25 92 #X connect 12 0 14 0;
jamie@25 93 #X connect 13 0 12 0;
jamie@25 94 #X connect 14 0 15 0;
jamie@25 95 #X connect 15 0 16 1;
jamie@25 96 #X connect 16 0 2 0;
jamie@25 97 #X connect 17 0 18 1;
jamie@25 98 #X connect 17 0 15 1;
jamie@25 99 #X connect 18 0 11 1;
jamie@25 100 #X connect 19 0 18 0;
jamie@25 101 #X connect 19 0 17 0;
jamie@25 102 #X connect 20 0 19 0;
jamie@25 103 #X connect 22 0 7 0;
jamie@25 104 #X connect 23 0 19 1;
jamie@25 105 #X connect 23 0 13 1;
jamie@25 106 #X connect 23 0 11 0;
jamie@25 107 #X connect 23 0 4 0;
jamie@25 108 #X connect 24 0 23 0;
jamie@25 109 #X connect 25 0 24 0;
jamie@25 110 #X connect 26 0 25 0;
jamie@25 111 #X connect 27 0 0 0;
jamie@25 112 #X connect 28 0 2 1;
jamie@27 113 #X connect 31 0 30 0;
jamie@25 114 #X restore 35 80 pd paf;
jamie@25 115 #X obj 85 25 r \$0-cf;
jamie@25 116 #X obj 140 23 r \$0-bw;
jamie@62 117 #X obj 145 127 r \$0-window-gen;
jamie@62 118 #X obj 145 148 a_hann 1024;
jamie@62 119 #N canvas 34 54 723 391 spectrum 0;
jamie@62 120 #X obj 194 153 *~;
jamie@62 121 #X obj 181 69 inlet~;
jamie@62 122 #X obj 252 68 inlet~;
jamie@62 123 #X obj 195 176 xtract~ spectrum;
jamie@62 124 #N canvas 0 0 450 300 mag_spectrum 0;
jamie@62 125 #X obj 260 64 block~ 512;
jamie@62 126 #N canvas 0 0 450 300 (subpatch) 0;
jamie@62 127 #X array mag_spectrum 512 float 3;
jamie@62 128 #A 0 0.0347679 0.0238386 0.0342933 0.0362505 0.0295941 0.0500627 0.0356107
jamie@62 129 0.0419818 0.0507073 0.0290984 0.0416723 0.0321575 0.0192698 0.0252058
jamie@62 130 0.0116167 0.00836482 0.00784646 0.00138145 0.00132721 0.000381971 0.000573959
jamie@62 131 0.000406984 0.000280216 0.000179901 0.000186049 0.000268997 0.000263714
jamie@62 132 0.000155282 0.000139129 0.000167519 0.000124361 0.000180699 0.000142076
jamie@62 133 0.000144225 0.000119736 0.000148186 0.000111046 0.000121504 0.000107089
jamie@62 134 0.000121003 9.47739e-05 0.000125579 0.000100434 0.000104701 9.41711e-05
jamie@62 135 0.000104671 8.29275e-05 9.69602e-05 8.842e-05 9.28634e-05 8.08756e-05
jamie@62 136 9.55736e-05 7.85888e-05 8.25423e-05 7.83809e-05 8.18489e-05 7.07095e-05
jamie@62 137 8.02309e-05 7.42804e-05 7.48963e-05 6.96933e-05 7.65881e-05 6.52446e-05
jamie@62 138 6.90523e-05 6.72559e-05 6.77385e-05 6.22041e-05 6.80202e-05 6.33565e-05
jamie@62 139 6.27514e-05 6.09007e-05 6.3778e-05 5.64576e-05 5.99506e-05 5.87628e-05
jamie@62 140 5.80413e-05 5.54242e-05 5.86565e-05 5.49603e-05 5.42429e-05 5.4014e-05
jamie@62 141 5.47262e-05 5.03136e-05 5.31452e-05 5.20179e-05 5.08749e-05 4.98008e-05
jamie@62 142 5.13611e-05 4.85163e-05 4.80735e-05 4.85478e-05 4.80833e-05 4.56452e-05
jamie@62 143 4.77271e-05 4.64662e-05 4.53934e-05 4.50956e-05 4.56013e-05 4.35624e-05
jamie@62 144 4.34772e-05 4.40007e-05 4.30346e-05 4.18994e-05 4.31475e-05 4.18919e-05
jamie@62 145 4.11025e-05 4.11284e-05 4.10175e-05 3.97421e-05 3.98145e-05 4.01797e-05
jamie@62 146 3.90583e-05 3.87068e-05 3.92256e-05 3.81535e-05 3.76564e-05 3.77768e-05
jamie@62 147 3.73499e-05 3.66974e-05 3.67557e-05 3.68833e-05 3.58508e-05 3.59041e-05
jamie@62 148 3.58715e-05 3.51094e-05 3.48463e-05 3.49077e-05 3.43984e-05 3.41789e-05
jamie@62 149 3.40861e-05 3.40455e-05 3.32054e-05 3.34367e-05 3.30168e-05 3.26526e-05
jamie@62 150 3.24827e-05 3.24396e-05 3.19881e-05 3.19942e-05 3.17211e-05 3.16122e-05
jamie@62 151 3.10021e-05 3.12408e-05 3.06344e-05 3.06429e-05 3.04321e-05 3.03029e-05
jamie@62 152 2.99668e-05 3.00742e-05 2.95874e-05 2.95749e-05 2.91166e-05 2.92872e-05
jamie@62 153 2.87315e-05 2.88123e-05 2.86934e-05 2.84017e-05 2.82494e-05 2.83481e-05
jamie@62 154 2.76694e-05 2.7905e-05 2.74856e-05 2.7595e-05 2.70659e-05 2.73785e-05
jamie@62 155 2.70175e-05 2.68042e-05 2.67559e-05 2.67275e-05 2.61115e-05 2.64444e-05
jamie@62 156 2.60253e-05 2.6143e-05 2.56633e-05 2.59967e-05 2.55765e-05 2.54011e-05
jamie@62 157 2.54205e-05 2.52767e-05 2.48309e-05 2.51035e-05 2.48111e-05 2.47337e-05
jamie@62 158 2.44776e-05 2.47857e-05 2.41466e-05 2.42557e-05 2.41419e-05 2.40363e-05
jamie@62 159 2.36974e-05 2.39439e-05 2.36521e-05 2.35678e-05 2.34062e-05 2.3597e-05
jamie@62 160 2.29854e-05 2.32039e-05 2.30333e-05 2.29341e-05 2.27001e-05 2.29057e-05
jamie@62 161 2.25917e-05 2.25413e-05 2.24169e-05 2.25144e-05 2.1993e-05 2.22539e-05
jamie@62 162 2.20491e-05 2.19648e-05 2.18146e-05 2.19472e-05 2.16342e-05 2.16211e-05
jamie@62 163 2.15227e-05 2.15229e-05 2.11552e-05 2.13981e-05 2.1145e-05 2.11307e-05
jamie@62 164 2.10028e-05 2.10558e-05 2.07771e-05 2.08104e-05 2.06922e-05 2.06572e-05
jamie@62 165 2.0421e-05 2.06044e-05 2.03378e-05 2.03852e-05 2.0236e-05 2.02428e-05
jamie@62 166 2.00298e-05 2.00682e-05 1.99341e-05 1.99055e-05 1.9766e-05 1.98595e-05
jamie@62 167 1.96149e-05 1.9708e-05 1.95175e-05 1.951e-05 1.93652e-05 1.93882e-05
jamie@62 168 1.9253e-05 1.92475e-05 1.91492e-05 1.91725e-05 1.89653e-05 1.90797e-05
jamie@62 169 1.88526e-05 1.88553e-05 1.87737e-05 1.87674e-05 1.86322e-05 1.86603e-05
jamie@62 170 1.85738e-05 1.8523e-05 1.84042e-05 1.84821e-05 1.82465e-05 1.82856e-05
jamie@62 171 1.82333e-05 1.81908e-05 1.80772e-05 1.81247e-05 1.80205e-05 1.79422e-05
jamie@62 172 1.78919e-05 1.79356e-05 1.76952e-05 1.77907e-05 1.77256e-05 1.76545e-05
jamie@62 173 1.75951e-05 1.76011e-05 1.75059e-05 1.74307e-05 1.74315e-05 1.73783e-05
jamie@62 174 1.72885e-05 1.72999e-05 1.72644e-05 1.71807e-05 1.71397e-05 1.71261e-05
jamie@62 175 1.70455e-05 1.6948e-05 1.70073e-05 1.6948e-05 1.6794e-05 1.69151e-05
jamie@62 176 1.68262e-05 1.6732e-05 1.67057e-05 1.67527e-05 1.65599e-05 1.65856e-05
jamie@62 177 1.65865e-05 1.65142e-05 1.64285e-05 1.65163e-05 1.63755e-05 1.63693e-05
jamie@62 178 1.63267e-05 1.62936e-05 1.62273e-05 1.6209e-05 1.62148e-05 1.61265e-05
jamie@62 179 1.61024e-05 1.61131e-05 1.60167e-05 1.60016e-05 1.59628e-05 1.59332e-05
jamie@62 180 1.58903e-05 1.58553e-05 1.58772e-05 1.57569e-05 1.57924e-05 1.57572e-05
jamie@62 181 1.56537e-05 1.56966e-05 1.56074e-05 1.56212e-05 1.55779e-05 1.5539e-05
jamie@62 182 1.55494e-05 1.5449e-05 1.5495e-05 1.54081e-05 1.53711e-05 1.53932e-05
jamie@62 183 1.52964e-05 1.53376e-05 1.52897e-05 1.52396e-05 1.52538e-05 1.51629e-05
jamie@62 184 1.52182e-05 1.50957e-05 1.51177e-05 1.51097e-05 1.50368e-05 1.50477e-05
jamie@62 185 1.50399e-05 1.49629e-05 1.49619e-05 1.4934e-05 1.49109e-05 1.48107e-05
jamie@62 186 1.49298e-05 1.48269e-05 1.47474e-05 1.48734e-05 1.47248e-05 1.47904e-05
jamie@62 187 1.46943e-05 1.47132e-05 1.46267e-05 1.47303e-05 1.44649e-05 1.46803e-05
jamie@62 188 1.45807e-05 1.45165e-05 1.45321e-05 1.45863e-05 1.44389e-05 1.44883e-05
jamie@62 189 1.45138e-05 1.43366e-05 1.45488e-05 1.42999e-05 1.43532e-05 1.43481e-05
jamie@62 190 1.44012e-05 1.40856e-05 1.4473e-05 1.42298e-05 1.42492e-05 1.42315e-05
jamie@62 191 1.43224e-05 1.40978e-05 1.42317e-05 1.41411e-05 1.41222e-05 1.41452e-05
jamie@62 192 1.40687e-05 1.4097e-05 1.40772e-05 1.40533e-05 1.4062e-05 1.39999e-05
jamie@62 193 1.40167e-05 1.39786e-05 1.39683e-05 1.39479e-05 1.39503e-05 1.39196e-05
jamie@62 194 1.39185e-05 1.3891e-05 1.38968e-05 1.38385e-05 1.38591e-05 1.38226e-05
jamie@62 195 1.3823e-05 1.37987e-05 1.38058e-05 1.37687e-05 1.37731e-05 1.37467e-05
jamie@62 196 1.3741e-05 1.37012e-05 1.37238e-05 1.36772e-05 1.36989e-05 1.36648e-05
jamie@62 197 1.36677e-05 1.36383e-05 1.36465e-05 1.36082e-05 1.36107e-05 1.35828e-05
jamie@62 198 1.36001e-05 1.35517e-05 1.35862e-05 1.35436e-05 1.3545e-05 1.35258e-05
jamie@62 199 1.35259e-05 1.34894e-05 1.35036e-05 1.34777e-05 1.34856e-05 1.34502e-05
jamie@62 200 1.34863e-05 1.34282e-05 1.34469e-05 1.34125e-05 1.34237e-05 1.34026e-05
jamie@62 201 1.33887e-05 1.34055e-05 1.33624e-05 1.33684e-05 1.34108e-05 1.32959e-05
jamie@62 202 1.33875e-05 1.32811e-05 1.33619e-05 1.33219e-05 1.3276e-05 1.33497e-05
jamie@62 203 1.32483e-05 1.33257e-05 1.3305e-05 1.32275e-05 1.33069e-05 1.32249e-05
jamie@62 204 1.32866e-05 1.32339e-05 1.32487e-05 1.3251e-05 1.32172e-05 1.32353e-05
jamie@62 205 1.323e-05 1.31875e-05 1.32223e-05 1.319e-05 1.32038e-05 1.31846e-05
jamie@62 206 1.31983e-05 1.31761e-05 1.31802e-05 1.31635e-05 1.31737e-05 1.31439e-05
jamie@62 207 1.31682e-05 1.31427e-05 1.31617e-05 1.31332e-05 1.31547e-05 1.3133e-05
jamie@62 208 1.31335e-05 1.31252e-05 1.31203e-05 1.31178e-05 1.313e-05 1.31048e-05
jamie@62 209 1.31309e-05 1.30961e-05 1.31287e-05 1.30943e-05 1.31076e-05 1.3093e-05
jamie@62 210 1.30996e-05 1.30943e-05 1.3103e-05 1.30871e-05 1.31077e-05 1.30727e-05
jamie@62 211 1.31072e-05 1.30737e-05 1.3094e-05 1.30748e-05 1.30877e-05 1.30874e-05
jamie@62 212 1.30868e-05 1.30789e-05 1.30949e-05 1.30709e-05 1.30856e-05;
jamie@62 213 #X coords 0 1 511 0 200 140 1;
jamie@62 214 #X restore 125 121 graph;
jamie@62 215 #X restore 358 92 pd mag_spectrum;
jamie@62 216 #X obj 195 211 tabsend~ mag_spectrum;
jamie@62 217 #X obj 357 64 block~ 1024;
jamie@62 218 #X obj 197 301 xtract~ mfcc;
jamie@62 219 #X obj 196 274 tabreceive~ mag_spectrum;
jamie@62 220 #X obj 197 333 tabsend~ \$0-mfcc;
jamie@62 221 #X connect 0 0 3 0;
jamie@62 222 #X connect 1 0 0 0;
jamie@62 223 #X connect 2 0 0 1;
jamie@62 224 #X connect 3 0 5 0;
jamie@62 225 #X connect 7 0 9 0;
jamie@62 226 #X connect 8 0 7 0;
jamie@62 227 #X restore 32 167 pd spectrum;
jamie@25 228 #X connect 0 0 1 0;
jamie@62 229 #X connect 1 0 4 0;
jamie@62 230 #X connect 3 0 5 0;
jamie@62 231 #X connect 5 0 2 0;
jamie@62 232 #X connect 5 0 10 0;
jamie@62 233 #X connect 6 0 5 1;
jamie@62 234 #X connect 7 0 5 2;
jamie@62 235 #X connect 8 0 9 0;
jamie@62 236 #X connect 9 0 10 1;
jamie@25 237 #X restore 516 -222 pd guts;
jamie@25 238 #X obj 6 -225 cnv 15 500 200 empty empty MFCC 20 12 0 14 -261681 -66577
jamie@25 239 0;
jamie@25 240 #X obj 184 -202 cnv 15 250 150 empty empty empty 20 12 0 14 -262131
jamie@25 241 -66577 0;
jamie@25 242 #X obj 465 -187 vsl 10 100 0 127 0 0 \$0-master-lvl-stereo \$0-master-lvl-stereo
jamie@62 243 out -4 -8 0 8 -262131 -1 -1 0 1;
jamie@25 244 #X obj 465 -77 bng 10 250 50 0 \$0-master-lvl-mute empty mute -6 16
jamie@25 245 0 8 -262131 -1 -1;
jamie@27 246 #X obj 32 -114 hsl 128 15 20 150 0 0 \$0-cf empty centre_frequency
jamie@62 247 -2 -6 0 8 -225271 -1 -1 700 1;
jamie@25 248 #X obj 33 -153 hsl 128 15 80 2000 0 0 \$0-fund empty fundamental -2
jamie@62 249 -6 0 8 -225271 -1 -1 200 1;
jamie@25 250 #X text 19 7 Notes:;
jamie@25 251 #X text 20 87 [xtract~ mfcc] outputs a series 20 Mel-Frequency Cepstral
jamie@25 252 Coefficients. When it is instantiated \, an initialisation function
jamie@25 253 creates a bank of 20 mel-spaced filters \, between 80Hz and 1800Hz
jamie@25 254 on a linear scale. All filters have the same gain;
jamie@25 255 #X text 23 255 With LibXtract it is possible to change the number of
jamie@25 256 Mel filters as well as the range of frequencies over which they operate
jamie@25 257 \, and the filter scaling (equal area/equal gain). With this PD example
jamie@25 258 \, sensible defaults have been chosen to improve usability;
jamie@62 259 #N canvas 0 0 450 300 (subpatch) 0;
jamie@62 260 #X array \$0-mfcc 20 float 1;
jamie@62 261 #A 0 -226.816 39.0179 27.0649 13.3895 3.18296 -4.35309 -6.98078 -6.73432
jamie@62 262 -4.09373 -1.24401 0.693745 0.961352 0.393719 -0.854615 -1.49734 -1.75847
jamie@62 263 -1.32051 -0.652124 0.00802549 0.234184;
jamie@62 264 #X coords 0 50 19 -500 200 100 1;
jamie@25 265 #X restore 212 -178 graph;
jamie@25 266 #X text 28 -188 PAF synthesiser;
jamie@27 267 #X obj 34 -71 hsl 128 15 1 10 0 0 \$0-bw empty formant_bandwidth -2
jamie@62 268 -6 0 8 -225271 -1 -1 600 1;
jamie@62 269 #X text 20 36 In this patch [xtract~ spectrum] is first used to extract
jamie@62 270 the magnitude spectrum from an audio signal in overlapping blocks of
jamie@62 271 1024 samples.;
jamie@62 272 #X text 23 165 Whilst DSP is running the input vector (magnitude spectrum)
jamie@62 273 is filtered by this filterbank \, and the total energy output from
jamie@62 274 each filter is appended to a new vector. This new vector (mel-filtered
jamie@62 275 spectrum) is then subjected to a fast cosine transform. The output
jamie@62 276 can be visualised in the graph labelled \$0-mfcc.;