annotate mt_get_transmat_at.m @ 4:931e71c24aa3
Old mt_get_transmat_at is now mt_get_transmat_near;
new mt_get_transmat_at gets nearest transmat deterministically.
author |
samer |
date |
Sun, 05 Feb 2012 13:34:02 +0000 |
parents |
ffd7efa3e5c0 |
children |
80e9103b057f |
rev |
line source |
samer@4
|
1 % mt_get_transmat_at - Get transition matrix nearest given point in information space.
|
samer@0
|
2 %
|
samer@0
|
3 % mt_get_transmat_at ::
|
samer@0
|
4 % mt_system ~'Melody Triangle system structure',
|
samer@0
|
5 % natural ~'voice Id (1 or greater)',
|
samer@0
|
6 % K:natural ~'size of transition matrix',
|
samer@0
|
7 % real ~'X-coordinate',
|
samer@0
|
8 % real ~'Y-coordinate'
|
samer@0
|
9 % -> [[K,K]] ~'transition matrix',
|
samer@0
|
10 % [[1,3]] ~'information coordinates'.
|
samer@0
|
11 %
|
samer@0
|
12 % The selected transition matrix will be shown using mt_show_transmat,
|
samer@0
|
13
|
samer@3
|
14 function [T,P,I]=mt_get_transmat_at(Sys,Id,K,X,Y)
|
samer@3
|
15 logK=log(K);
|
samer@0
|
16 normpos = Sys.map([X;Y])';
|
samer@3
|
17 target = normpos*logK;
|
samer@0
|
18 tmats = Sys.transmats{K};
|
samer@0
|
19 info = Sys.info{K};
|
samer@0
|
20 L = size(info,1);
|
samer@0
|
21
|
samer@0
|
22 % distance from target
|
samer@0
|
23 d2 = sum((info(:,1:2) - repmat(target,L,1)).^2,2);
|
samer@4
|
24 [dummy,J]=min(d2);
|
samer@0
|
25 T = tmats(:,:,J);
|
samer@0
|
26 I = info(J,:);
|
samer@3
|
27 mt_show_transmat(Id,T,I);
|
samer@3
|
28 if nargin>1, P=Sys.revmap(I(1:2)'/logK); end
|
samer@0
|
29 end
|