From e020389d3ccb31785d5a08e29fc71d9664d54445 Mon Sep 17 00:00:00 2001 From: drowe67 Date: Thu, 10 Aug 2017 00:42:13 +0000 Subject: [PATCH] re-arranged col order to match other search functions git-svn-id: https://svn.code.sf.net/p/freetel/code@3350 01035d8c-6547-0410-b346-abe4f91aad63 --- codec2-dev/octave/vq_search_slope.m | 39 ++++++++++++++--------------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/codec2-dev/octave/vq_search_slope.m b/codec2-dev/octave/vq_search_slope.m index 9752678e..18aa99d0 100644 --- a/codec2-dev/octave/vq_search_slope.m +++ b/codec2-dev/octave/vq_search_slope.m @@ -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 -- 2.25.1