Mercurial > hg > camir-aes2014
diff toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirmean.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 diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirmean.m Tue Feb 10 15:05:51 2015 +0000 @@ -0,0 +1,111 @@ +function varargout = mirmean(f,varargin) +% m = mirmean(f) returns the mean along frames of the feature f +% +% f can be a structure array composed of features. In this case, +% m will be structured the same way. + +if isa(f,'mirstruct') + data = get(f,'Data'); + for fi = 1:length(data) + data{fi} = mirmean(data{fi}); + end + varargout = {set(f,'Data',data)}; +elseif isstruct(f) + fields = fieldnames(f); + for i = 1:length(fields) + field = fields{i}; + stat.(field) = mirmean(f.(field)); + end + varargout = {stat}; +else + specif.nochunk = 1; + varargout = mirfunction(@mirmean,f,varargin,nargout,specif,@init,@main); +end + + +function [x type] = init(x,option) +type = ''; + + +function m = main(f,option,postoption) +if iscell(f) + f = f{1}; +end +if isa(f,'mirhisto') + warning('WARNING IN MIRMEAN: histograms are not taken into consideration yet.') + m = struct; + return +end +fp = get(f,'FramePos'); +ti = get(f,'Title'); +if 0 %get(f,'Peaks') + if not(isempty(get(f,'PeakPrecisePos'))) + stat = addstat(struct,get(f,'PeakPrecisePos'),fp,'PeakPos'); + stat = addstat(stat,get(f,'PeakPreciseVal'),fp,'PeakMag'); + else + stat = addstat(struct,get(f,'PeakPosUnit'),fp,'PeakPos'); + stat = addstat(stat,get(f,'PeakVal'),fp,'PeakMag'); + end +else + d = get(f,'Data'); +end +l = length(d); +for i = 1:l + if iscell(d{i}) + if length(d{i}) > 1 + error('ERROR IN MIRMEAN: segmented data not accepted yet.'); + else + dd = d{i}{1}; + end + else + dd = d{i}; + end + %dd = uncell(dd); + if 0 %iscell(dd) + j = 0; + singul = 1; + ddd = []; + while j<length(dd) && singul + j = j+1; + if length(dd{j}) > 1 + singul = 0; + elseif length(dd{j}) == 1 + ddd(end+1) = dd{j}; + end + end + if singul + dd = ddd; + end + end + if iscell(dd) + m{i} = {zeros(1,length(dd))}; + for j = 1:length(dd) + m{i}{1}(j) = mean(dd{j}); + end + elseif size(dd,2) < 2 + nonan = find(not(isnan(dd))); + dn = dd(nonan); + m{i}{1} = mean(dn,2); + else + %diffp = fp{i}{1}(1,2:end) - fp{i}{1}(1,1:end-1); + %if round((diffp(2:end)-diffp(1:end-1))*1000) + % Not regular sampling (in mirattacktime for instance) + % framesampling = NaN; + %else + % framesampling = fp{i}{1}(1,2)-fp{i}{1}(1,1); + %end + dd = mean(dd,4); + m{i} = {NaN(size(dd,1),1,size(dd,3))}; + for k = 1:size(dd,1) + for l = 1:size(dd,3) + dk = dd(k,:,l); + nonan = find(not(isnan(dk))); + if not(isempty(nonan)) + dn = dk(nonan); + m{i}{1}(k,1,l) = mean(dn,2); + end + end + end + end +end +m = mirscalar(f,'Data',m,'Title',['Average of ',ti]); \ No newline at end of file