[y,w]=nt_trial2mat(x,max_nsamples) - convert trial cell array to 3D matrix y: matrix (samples * channels * trials) w: weights (samples * 1 * trials) x: trial array (each trial is channels * samples) max_nsamples: max number of samples per trial In the case of variable-length trials, the weights can be used to indicate which parts of the array are valid data.
0001 function [y,w]=nt_trial2mat(x,max_nsamples) 0002 %[y,w]=nt_trial2mat(x,max_nsamples) - convert trial cell array to 3D matrix 0003 % 0004 % y: matrix (samples * channels * trials) 0005 % w: weights (samples * 1 * trials) 0006 % 0007 % x: trial array (each trial is channels * samples) 0008 % max_nsamples: max number of samples per trial 0009 % 0010 % In the case of variable-length trials, the weights can be used to indicate 0011 % which parts of the array are valid data. 0012 0013 if nargin<2; max_nsamples=[]; end 0014 0015 ntrials=numel(x); 0016 0017 % determine maximum trial size 0018 nsamples=0; 0019 for k=1:ntrials 0020 [m,n]=size(x{k}); 0021 nsamples=max(n,nsamples); 0022 end 0023 0024 % clip if too large 0025 if ~isempty(max_nsamples) 0026 nsamples=min(nsamples,max_nsamples); 0027 end 0028 0029 % load data into 3D matrix 0030 nchans=m; 0031 y=zeros(nsamples, nchans, ntrials); 0032 w=zeros(nsamples, 1, ntrials); 0033 for k=1:ntrials 0034 [m,n]=size(x{k}); 0035 if n>nsamples; 0036 % longer than max: clip 0037 x{k}=x{k}(:,1:nsamples); 0038 n=nsamples; 0039 end 0040 y(1:n,:,k)=x{k}'; 0041 w(1:n,1,k)=1; 0042 end 0043