Mercurial > hg > camir-aes2014
diff toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirrms.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/mirrms.m Tue Feb 10 15:05:51 2015 +0000 @@ -0,0 +1,82 @@ +function varargout = mirrms(x,varargin) +% e = mirrms(x) calculates the root mean square energy. +% Optional arguments: +% mirrms(...,'Frame') computes the temporal evolution of the energy. +% mirrms(...,'Root',0) does not apply the root operation to the mean +% square energy. + + normal.key = 'Normal'; + normal.type = 'Boolean'; + normal.default = 1; + option.normal = normal; + + root.key = 'Root'; + root.type = 'Boolean'; + root.default = 1; + option.root = root; + +specif.option = option; + +specif.defaultframelength = 0.05; +specif.defaultframehop = 0.5; + +specif.eachchunk = @eachchunk; +specif.combinechunk = @combinechunk; +specif.afterchunk = @afterchunk; + +varargout = mirfunction(@mirrms,x,varargin,nargout,specif,@init,@main); + + +function [x type] = init(x,option) +type = 'mirscalar'; + + +function e = main(x,option,postoption) +if iscell(x) + x = x{1}; +end +d = get(x,'Data'); +v = mircompute(@algo,d,option); +e = mirscalar(x,'Data',v,'Title','RMS energy'); + + +function e = algo(d,option) +nl = size(d,1); +nc = size(d,2); +nch = size(d,3); +e = zeros(1,nc,nch); +for i = 1:nch + for j = 1:nc + if option.root + e(1,j,i) = norm(d(:,j,i)); + else + e(1,j,i) = d(:,j,i)'*d(:,j,i); + end + end +end +if option.normal + e = e/sqrt(nl); +end + + +function [y orig] = eachchunk(orig,option,missing,postchunk) +option.normal = 0; +y = mirrms(orig,option); + + +function y = combinechunk(old,new) +do = get(old,'Data'); +do = do{1}{1}; +dn = get(new,'Data'); +dn = dn{1}{1}; +y = set(old,'ChunkData',sqrt(do^2+dn^2)); + + +function y = afterchunk(orig,length,postoption) +d = get(orig,'Data'); +v = mircompute(@afternorm,d,length); +y = set(orig,'Data',v); + + +function e = afternorm(d,length) +e = d/sqrt(length); \ No newline at end of file