Mercurial > hg > camir-aes2014
view toolboxes/MIRtoolbox1.3.2/MIRToolbox/uncell.m @ 0:e9a9cd732c1e tip
first hg version after svn
author | wolffd |
---|---|
date | Tue, 10 Feb 2015 15:05:51 +0000 |
parents | |
children |
line wrap: on
line source
function x = uncell(x,lvl) % lvl >= 0: The recursion level, starting from 0, when observing the % cell structures of cell structures of etc. of the input data x. % lvl = NaN: % lvl = -Inf: used in display of segmented mirscalar if nargin < 2 lvl = 0; end if iscell(x) if isempty(x) x = []; elseif length(x) == 1 x = uncell(x{1},lvl+1); else het = 0; % Flags different kinds of structures: % - structures with fixed column size but variable nb of columns (het = 1) % - structures with variable column size but fixed nb of columns (het = 2) % - structures with variable column size and variable nb of columns (het = NaN) l = length(x(:,:,1)); nf = size(x,3); z = cell(size(x)); for i1 = 1:size(x,1) for i2 = 1:size(x,2) for i3 = 1:size(x,3) z{i1,i2,i3} = uncell(x{i1,i2,i3},lvl+1); if i1 == 1 && i2 == 1 && i3 == 1 s = size(z{i1,i2,i3}); elseif not(isequal(s,size(z{i1,i2,i3}))) % A break in the homogeneity has been discovered. if lvl>0 if (het == 0 || het == 2) && (s(2) == size(z{i1,i2,i3},2)) het = 2; s = max(s,size(z{i1,i2,i3})); elseif (het == 0 || het == 1) && (s(1) == size(z{i1,i2,i3},1)) het = 1; s = max(s,size(z{i1,i2,i3})); else het = NaN; end else het = NaN; end end end end end if isnan(het) x = z; else if size(s)<3 s(3) = 1; end if (s(1)>1 || isnan(lvl)) || lvl == -Inf x = NaN([s(1) l*s(2) nf*s(3:end)]); for j = 1:nf for i = 1:l if size(z,1)>size(z,2) zij = z{i,1,j}; else zij = z{1,i,j}; end if size(zij,3) == 1 x(1:size(z{1,i,j},1),... (i-1)*s(2)+1:(i-1)*s(2)+size(z{1,i,j},2),... j,1:size(z{1,i,j},4)) = z{1,i,j}; elseif nf == 1 x(1:size(z{1,i,j},1),... (i-1)*s(2)+1:(i-1)*s(2)+size(z{1,i,j},2),... :,1:size(z{1,i,j},4)) = z{1,i,j}; end end end else x = NaN([l*s(1) s(2) nf*s(3:end)]); for j = 1:nf for i = 1:l if size(z,1)>size(z,2) zij = z{i,1,j}; else zij = z{1,i,j}; end if ischar(zij) && length(zij) == 1 && zij>='A' && zij <= 'G' %zi zij = zij-'A'; end x((i-1)*s(1)*size(zij,1)+1:(i-1)*s(1)*size(zij,1)+size(zij,1),... 1:size(zij,2),... j,... 1:size(zij,4)) = zij; end end end end end elseif ischar(x) switch x case 'C' x = 0; case 'C#' x = 1; case 'D' x = 2; case 'D#' x = 3; case 'E' x = 4; case 'F' x = 5; case 'F#' x = 6; case 'G' x = 7; case 'G#' x = 8; case 'A' x = 9; case 'A#' x = 10; case 'B' x = 11; end elseif 0 %scal if size(x,1)==1 && size(x,2)==1 && size(x,3)>1 x = shiftdim(x,2); else %y = zeros(size(x,2),size(x,1),size(x,3)); %y = zeros(size(x)); %for i = 1:size(x,3) % y(:,:,i) = x(:,:,i); %end %x = y; end elseif 0 %not(isnan(lvl)) && lvl>=0 %x = squeeze(x); if size(x,1) == 1 x = x(:); end elseif 0 %size(x,3) > 1 && size(x,1) == 1 x = reshape(x,size(x,2),size(x,3))'; end