experiments in hand designing vqs
authordrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Wed, 2 Aug 2017 02:47:26 +0000 (02:47 +0000)
committerdrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Wed, 2 Aug 2017 02:47:26 +0000 (02:47 +0000)
git-svn-id: https://svn.code.sf.net/p/freetel/code@3342 01035d8c-6547-0410-b346-abe4f91aad63

codec2-dev/octave/handvq.m [new file with mode: 0644]

diff --git a/codec2-dev/octave/handvq.m b/codec2-dev/octave/handvq.m
new file mode 100644 (file)
index 0000000..89c436e
--- /dev/null
@@ -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