re-arranged col order to match other search functions
authordrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Thu, 10 Aug 2017 00:42:13 +0000 (00:42 +0000)
committerdrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Thu, 10 Aug 2017 00:42:13 +0000 (00:42 +0000)
git-svn-id: https://svn.code.sf.net/p/freetel/code@3350 01035d8c-6547-0410-b346-abe4f91aad63

codec2-dev/octave/vq_search_slope.m

index 9752678eafa1d934269c2c4f81ed6afee945532f..18aa99d0c5a88e985ee087770dbec2622266cb90 100644 (file)
@@ -1,24 +1,24 @@
 %----------------------------------------------------------------------
 % abs() search with a linear, ampl scaling, and slope term
 
-function [idx contrib errors test_ g mg sl] = vq_search_slope(vq, data)
+function [idx contrib errors b_log2] = vq_search_slope(vq, data)
   [nVec nCols] = size(vq);
   nRows = rows(data);
   
-  g = mg = sl = zeros(nRows, nVec);
   diff  = zeros(nVec, nCols);
   idx = errors = zeros(1, nRows);
   error = zeros(1, nVec);
   contrib = zeros(nRows, nCols);
-  test_ = zeros(nVec, nCols);
+  b_log = zeros(nVec, 3);
+  b_log2 = [];
 
   weights = ones(1,nCols);
 
   A = zeros(3,3,nVec);
   for i=1:nVec
-    A(:,:,i) = [sum(vq(i,:))      nCols        sum(1:nCols); ...
-                vq(i,:)*vq(i,:)'   sum(vq(i,:)) (1:nCols)*vq(i,:)'; ...
-                (1:nCols)*vq(i,:)' sum(1:nCols) (1:nCols)*(1:nCols)'];
+    A(:,:,i) = [ sum(vq(i,:))       sum(1:nCols)         nCols;        ...
+                 (1:nCols)*vq(i,:)' (1:nCols)*(1:nCols)' sum(1:nCols); ...
+                 vq(i,:)*vq(i,:)'   (1:nCols)*vq(i,:)'   sum(vq(i,:))  ];
   end
 
   for f=1:nRows
@@ -26,30 +26,29 @@ function [idx contrib errors test_ g mg sl] = vq_search_slope(vq, data)
     %target = 2*vq(1,:)+1;
 
     for i=1:nVec
-      c = [sum(target) target*vq(i,:)' target*(1:nCols)']';
+      c = [sum(target) target*(1:nCols)' target*vq(i,:)' ]';
       b = inv(A(:,:,i))*c;
 
-      %b(1) = quantise([0.25 0.5 0.75 1.0 1.25 1.5 1.75 2.0], b(1));
-      %b(3) = quantise([-1.0 -0.5 0.0 0.5 1.0], b(3));
-      %b(1) = quantise([0.8 1.2], b(1));
-      %b(3) = quantise([-0.2 0.2], b(3));
-      mg(f,i) = b(1); g(f,i) = b(2); sl(f,i) = b(3);
+      b(1) = max(0.5,b(1)); b(1) = min(1,b(1));
+      b_log(i,:) = b; 
       
-      diff(i,:) = target - (mg(f,i)*vq(i,:) + g(f,i) + sl(f,i)*(1:nCols));
-      diff(i,:) .* weights;
+      diff(i,:) = target - (b(1)*vq(i,:) + b(2)*(1:nCols) + b(3));
+      %diff(i,nCols-5:nCols) *= 0.25;
 
-      % abs in dB is MSE in linear
+      error(i) = diff(i,:) * diff(i,:)';
+      b_log(i,:) = b; 
 
-      error(i) = mean(abs(diff(i,:)));
-
-      %printf("f: %d i: %d mg: %f g: %f sl: %f error: %f\n", f, i, mg(f,i), g(f,i), sl(f,i), error(i));
+      %printf("f: %d i: %d mg: %f g: %f sl: %f error: %f\n", f, i, b(1), b(2), b(3), error(i));
     end
     
     [mn min_ind] = min(error);
     errors(f) = mn; 
     idx(f) = min_ind(1);
-   
-    contrib(f,:) = test_(f,:) = mg(f,min_ind)*vq(min_ind,:) + g(f,min_ind) + sl(f,min_ind)*(1:nCols);
+    b = b_log(min_ind,:);
+    b_log2(f,:) = b;
+    
+    printf("f: %d mg: %f sl: %f g: %f\n", f, b(1), b(2), b(3));
+    contrib(f,:) = test_(f,:) = 0.8*vq(min_ind,:) + b(2)*(1:nCols) + b(3);
   end
 
 endfunction