wolffd@0: function varargout = mirrms(x,varargin) wolffd@0: % e = mirrms(x) calculates the root mean square energy. wolffd@0: % Optional arguments: wolffd@0: % mirrms(...,'Frame') computes the temporal evolution of the energy. wolffd@0: % mirrms(...,'Root',0) does not apply the root operation to the mean wolffd@0: % square energy. wolffd@0: wolffd@0: normal.key = 'Normal'; wolffd@0: normal.type = 'Boolean'; wolffd@0: normal.default = 1; wolffd@0: option.normal = normal; wolffd@0: wolffd@0: root.key = 'Root'; wolffd@0: root.type = 'Boolean'; wolffd@0: root.default = 1; wolffd@0: option.root = root; wolffd@0: wolffd@0: specif.option = option; wolffd@0: wolffd@0: specif.defaultframelength = 0.05; wolffd@0: specif.defaultframehop = 0.5; wolffd@0: wolffd@0: specif.eachchunk = @eachchunk; wolffd@0: specif.combinechunk = @combinechunk; wolffd@0: specif.afterchunk = @afterchunk; wolffd@0: wolffd@0: varargout = mirfunction(@mirrms,x,varargin,nargout,specif,@init,@main); wolffd@0: wolffd@0: wolffd@0: function [x type] = init(x,option) wolffd@0: type = 'mirscalar'; wolffd@0: wolffd@0: wolffd@0: function e = main(x,option,postoption) wolffd@0: if iscell(x) wolffd@0: x = x{1}; wolffd@0: end wolffd@0: d = get(x,'Data'); wolffd@0: v = mircompute(@algo,d,option); wolffd@0: e = mirscalar(x,'Data',v,'Title','RMS energy'); wolffd@0: wolffd@0: wolffd@0: function e = algo(d,option) wolffd@0: nl = size(d,1); wolffd@0: nc = size(d,2); wolffd@0: nch = size(d,3); wolffd@0: e = zeros(1,nc,nch); wolffd@0: for i = 1:nch wolffd@0: for j = 1:nc wolffd@0: if option.root wolffd@0: e(1,j,i) = norm(d(:,j,i)); wolffd@0: else wolffd@0: e(1,j,i) = d(:,j,i)'*d(:,j,i); wolffd@0: end wolffd@0: end wolffd@0: end wolffd@0: if option.normal wolffd@0: e = e/sqrt(nl); wolffd@0: end wolffd@0: wolffd@0: wolffd@0: function [y orig] = eachchunk(orig,option,missing,postchunk) wolffd@0: option.normal = 0; wolffd@0: y = mirrms(orig,option); wolffd@0: wolffd@0: wolffd@0: function y = combinechunk(old,new) wolffd@0: do = get(old,'Data'); wolffd@0: do = do{1}{1}; wolffd@0: dn = get(new,'Data'); wolffd@0: dn = dn{1}{1}; wolffd@0: y = set(old,'ChunkData',sqrt(do^2+dn^2)); wolffd@0: wolffd@0: wolffd@0: function y = afterchunk(orig,length,postoption) wolffd@0: d = get(orig,'Data'); wolffd@0: v = mircompute(@afternorm,d,length); wolffd@0: y = set(orig,'Data',v); wolffd@0: wolffd@0: wolffd@0: function e = afternorm(d,length) wolffd@0: e = d/sqrt(length);