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