f@2: function [features] = extract_features(experiment, N, options) f@2: f@2: switch(experiment) f@2: f@2: case 'mfcc_740ms' f@2: f@2: filters = filter_bank(N, options.filt1_opt); f@2: features = {@(x)(feval(@(x)(... f@2: [x;... f@2: circshift(x, [0 +1]); ... f@2: circshift(x, [0 -1])]),... f@2: format_scat(log_scat(... f@2: spec_freq_average(x, filters, options.sc1_opt)))))}; f@2: f@2: case {'time_scat_l1', 'time_scat_l2', 'time_scat_l3'} f@2: f@2: Wop = wavelet_factory_1d(N, options.filt1_opt, options.sc1_opt); f@2: features = {@(x)(format_scat(log_scat(... f@2: renorm_scat(scat(x, Wop)))))}; f@2: f@2: case {'time_freq_scat_l2', 'time_freq_scat_l2_adap_q1'} f@2: f@2: Wop1 = wavelet_factory_1d(N, options.filt1_opt, options.sc1_opt); f@2: fWop1 = wavelet_factory_1d(... f@2: 128, options.ffilt1_opt, options.fsc1_opt); f@2: f@2: scatt_fun1 = @(x)(log_scat(renorm_scat(scat(x, Wop1)))); f@2: fscatt_fun1 = @(x)(func_output(@scat_freq, 2, scatt_fun1(x), fWop1)); f@2: feature_fun1 = @(x)(format_scat(fscatt_fun1(x))); f@2: f@2: switch(experiment) f@2: f@2: case 'time_freq_scat_l2' f@2: f@2: features = {feature_fun1} f@2: f@2: case 'time_freq_scat_l2_adap_q1' f@2: f@2: Wop2 = wavelet_factory_1d(N, options.filt2_opt, options.sc2_opt); f@2: fWop2 = wavelet_factory_1d(... f@2: 32, options.ffilt2_opt, options.fsc2_opt); f@2: f@2: scatt_fun2 = @(x)(log_scat(renorm_scat(scat(x, Wop2)))); f@2: fscatt_fun2 = @(x)(func_output(@scat_freq, 2, scatt_fun2(x), fWop2)); f@2: feature_fun2 = @(x)(format_scat(fscatt_fun2(x))); f@2: f@2: features = {feature_fun1, feature_fun2}; f@2: f@2: end f@2: f@2: for k = 1:length(features) f@2: fprintf('testing feature #%d...', k); f@2: tic; f@2: sz = size(features{k}(randn(N, 1))); f@2: aa = toc; f@2: fprintf('Ok (%.2fs) (size [%d, %d])\n', aa, sz(1), sz(2)); f@2: end f@2: f@2: otherwise f@2: error(['Unknown experiment ', experiment, '. Aborting']); f@2: end f@2: f@2: end