Mercurial > hg > camir-aes2014
view toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirentropy.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 source
function varargout = mirentropy(x,varargin) % h = mirentropy(a) calculates the relative entropy of a. % (Cf. User's Manual.) % mirentropy(..., ?Center?) centers the input data before % transforming it into a probability distribution. center.key = 'Center'; center.type = 'Boolean'; center.default = 0; option.center = center; specif.option = option; varargout = mirfunction(@mirentropy,x,varargin,nargout,specif,@init,@main); function [x type] = init(x,option) if isamir(x,'miraudio') x = mirspectrum(x); end type = 'mirscalar'; function h = main(x,option,postoption) if iscell(x) x = x{1}; end m = get(x,'Data'); v = cell(1,length(m)); for h = 1:length(m) v{h} = cell(1,length(m{h})); for k = 1:length(m{h}) mk = m{h}{k}; mn = mk; if isa(x,'mirhisto') || isa(x,'mirscalar') mn = mn'; end if option.center mn = center(mn); end % Negative data is trimmed: mn(mn<0) = 0; % Data is normalized such that the sum is equal to 1. mn = mn./repmat(sum(mn)+repmat(1e-12,... [1 size(mn,2) size(mn,3) size(mn,4)]),... [size(mn,1) 1 1 1]); % Actual computation of entropy v{h}{k} = -sum(mn.*log(mn + 1e-12))./log(size(mn,1)); if isa(x,'mirhisto') || isa(x,'mirscalar') v{h}{k} = v{h}{k}'; end end end t = ['Entropy of ',get(x,'Title')]; h = mirscalar(x,'Data',v,'Title',t);