From: drowe67 Date: Wed, 2 Aug 2017 02:47:26 +0000 (+0000) Subject: experiments in hand designing vqs X-Git-Url: http://git.whiteaudio.com/gitweb/?a=commitdiff_plain;h=e96728639f43d76b0e391864b3a8cc362d810723;p=freetel-svn-tracking.git experiments in hand designing vqs git-svn-id: https://svn.code.sf.net/p/freetel/code@3342 01035d8c-6547-0410-b346-abe4f91aad63 --- diff --git a/codec2-dev/octave/handvq.m b/codec2-dev/octave/handvq.m new file mode 100644 index 00000000..89c436ed --- /dev/null +++ b/codec2-dev/octave/handvq.m @@ -0,0 +1,165 @@ +% handvq.m +% David Rowe 21 July 2017 + +1; + + +function vq = vqlow + prototype = [-4 12 23 24 18 12 8 5 2 0]; + vq = zeros(8,10); + + vq(1,:) = [-4 23 24 18 12 8 5 2 0 0]; + vq(2,:) = [-4 12 23 24 18 12 8 5 2 0]; + vq(3,:) = [-4 8 18 23 24 18 12 8 5 2]; + vq(4,:) = [-4 6 16 21 23 24 18 12 8 5]; + vq(5,:) = [-4 8 23 24 18 12 24 16 4 0]; + vq(6,:) = [-4 8 23 24 18 12 16 24 16 12]; + vq(7,:) = [-4 12 12 24 12 4 4 4 4 4]; + + figure(1); clf; plot(vq') +endfunction + + +% bunch of parabolic curves from traring data + +function p = para(np) + load ../build_linux/src/all_hpf150_b_log.txt + + % scale so MSE contribution is the same in VQ training + + x=std(b_log(:,2)); y=std(b_log(:,3)); + vec = [b_log(:,2)/x b_log(:,3)/y]; + [idx cent]=kmeans(vec, np); + cent1=[cent(:,1)*x cent(:,2)*y]; + + K = 10; k = 1:K; k2 = k.^2; + p = cent1*[k2; k]; +endfunction + + +% combine vqlow with a bunch of parabolic curves + +function vq = vqlow_para(np) + + % generate two sets of vectors + + vql = vqlow; + [nl tmp] = size(vql); + p = para(np); + + % now combine all combinations + + vq = []; + for i=1:nl + for j=1:np + v = vql(i,:) + p(j,:); + vq = [vq; v]; + end + end +endfunction + + +function vq = vqmid + vq = zeros(8,20); + hump = [12 18 12]; + entry = 1; + + % single hump + + for i=1:18 + vq(entry++,i:i+2) = hump; + end + + % dual hump + + for i=1:18 + for j=i+3:18 + vq(entry,i:i+2) = hump; + vq(entry++,j:j+2) = hump; + end + end + + figure(1); clf; mesh(vq) + +endfunction + + +function vq = vqmidhigh + vq = -6*ones(1,30); + hump = [12 18 12]; + entry = 1; + + % single hump + + for i=1:25 + vq(entry++,i:i+2) = hump; + end + + % dual hump + + for i=1:25 + for j=i+3:25 + vq(entry,i:i+2) = hump; + vq(entry++,j:j+2) = hump; + end + end + + % triple hump + + for i=1:25 + for j=i+5:25 + for k=j+5:25 + vq(entry,i:i+2) = hump; + vq(entry,j:j+2) = hump; + vq(entry++,k:k+2) = hump; + end + end + end + + printf("entries: %d\n", entry-1); + %figure(1); clf; mesh(vq) + +endfunction + + +function vq = vqfull + K = 20; + vq = zeros(1,K); + formant = [12 18 12]; + entry = 1; + + % flat for like background noise and stuff + + vq(entry++,:) = 0; + + % single formant, only really likely low down + + for i=1:10 + vq(entry++,i:i+2) = formant; + end + + % two formants + + for i=1:10 + for j=i+5:K + vq(entry,i:i+2) = formant; + vq(entry++,j:j+2) = formant; + end + end + + % three formants + + for i=1:10 + for j=i+5:K + for k=j+5:K + vq(entry,i:i+2) = formant; + vq(entry,j:j+2) = formant; + vq(entry++,k:k+2) = formant; + end + end + end + + printf("entries: %d\n", entry-1); + %figure(1); clf; mesh(vq) + +endfunction